首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏CSDN搜“看,未来”

    温故Linux后端编程(五):SOCKET网络编程

    define INET6_ADDRSTRLEN 46 //如果len太小,不足以容纳表达式结果,那么返回一个空指针,并置为errno - sockaddr 数据结构 struct sockaddr :很多网络编程函数的出现早于 ---- 网络套接字函数 基于流套接字的网络编程流程: //头文件 #include<sys/type.h> #include<sys/socket.h> - socket函数 //socket 补充2: 以太网中建议使用PF_INET这个域。 该操作将sock->sk->sk_sndbuf设置为val * 2,之所以要乘以2,是防止大数据量的发送,突然导致缓冲区溢出。 该操作将sock->sk->sk_rcvbuf设置为val * 2。 SO_KEEPALIVE,套接字保活。

    1.3K20发布于 2021-09-18
  • 来自专栏CSDN搜“看,未来”

    温故Linux后端编程(二):进程

    关于 操作系统 领域进程的概念:操作系统(2)进程 ---- 进程原语 fork #include <unistd.h> pid_t fork(void); 功能:子进程复制父进程中的0~3g空间和PCB (1)复制父进程的系统环境(放心,只要是你开的进程,肯定有父进程) (2)在内核中建立进程结构 (3)将结构插入到进程列表,便于维护 (4)分配资源给该进程 (5)复制父进程的内存映射消息 (6)管理文件描述符和链接点 argv[]); int execvp(const char *file,char *const argv,); exec函数族装入并运行程序path/file,并将参数arg0(arg1, arg2, 创建子进程并调用函数execv *execv中希望接收一个以NULL结尾的字符串数组的指针 */ if( fork() == 0 ) { // in child printf("2- 父进程没有及时回收,子进程成为僵尸进程 孤儿进程:父进程退出,而子进程没有退出,子进程成为孤儿进程 init进程:1号进程,负责收留孤儿进程,成为他们的父进程 有几种方式终止进程: (1)main返回 (2

    1K20发布于 2021-09-18
  • 来自专栏CSDN搜“看,未来”

    温故Linux后端编程(三):线程

    对于UNIX系统,IEEE POSIX 1003.1标准定义了一个C语言多线程编程接口。依附于该标准的实现被称为POSIX theads 或 Pthreads。 线程间资源共享情况 ⑴共享资源 1、文件描述符表 2、每种信号的处理方式 3、当前工作目录 4、用户ID和组ID 5、内存地址空间 ⑵非共享资源 1、线程id 2、处理器现场和栈指针 3、独立的栈空间 = pthread_create(&tid1,NULL,run,NULL); err2 = pthread_create(&tid2,NULL,run,NULL); if(err1==0 && = pthread_create(&tid1,NULL,run,NULL); err2 = pthread_create(&tid2,NULL,run,NULL); if(err1==0 && err2 存在多个线程是按照其队列入队顺序唤醒其中一个 int pthread_cond_broadcast(pthread_cond_t * cptr); //广播,唤醒所哟与等待线程 条件变量与互斥锁 在服务器编程中常用的线程池

    92320发布于 2021-09-18
  • 来自专栏全栈程序员必看

    Web后端开发入门(2

    配置到服务列表中,使之随系统的启动而启动 1.添加服务 使用cmd工具,并进入Tomcat根/bin目录–>执行 service install命令–>刷新Windows服务列表 2. www.taiyuan.org” appBase=”E:\app” unpackWARs=”true” autoDeploy=”true”> <Context docBase=”e:\app\app2″ Host name=”www.lanqiao.org” appBase=”E:” unpackWARs=”true” autoDeploy=”true”> <Context docBase=”e:\app2″ u %t "%r" %s %b” /> </Host> </Engine> </Service> <Service name=”Catalina2″ ″ /> <Connector port=”8010″ protocol=”AJP/1.3″ redirectPort=”8443″ /> <Engine name=”Catalina2

    85030编辑于 2022-06-28
  • 来自专栏小闫笔记

    Python后端技术栈(五)--网络编程

    我们需要在服务端给用户生成一个标识,然后每次让客户端带过去给后端。 这就是我们通常识别用户会话的一个思路。 1.5.3网络编程 1.5.3.1 TCP socket 编程原理 我们需要从下列问题入手: 1.如何使用 socket 模块 2.如何建立 TCP socket 客户端和服务端 3.客户端和服务端之间的通信 上面的图片就是 TCP 的 socket 编程流程图。 1.5.4.1五种 IO 模型 Unix 网络编程中提到了5种网络模型 1.Blocking IO(阻塞的 IO) 2.Nonblocking IO(非阻塞的 IO) 3.IO multiplexing 它底层基于 Linux 多路复用,可以通过协程或者回调实现异步编程,不过生态不完善,响应的异步框架比如 ORM 不完善。

    96130发布于 2019-07-18
  • 来自专栏CSDN搜“看,未来”

    温故Linux后端编程(一):文件IO

    在Linux系统中有三个已经被分配的文件描述符,分别是: 0 STDIN_FILENO 标准输入流 1 STDOUT_FILENO 标准输出流 2 STDERR_FILENO 标准错误流 这三个文件描述符和它们各自的功能是绑死的

    91220发布于 2021-09-18
  • 来自专栏AVAJ

    面试java后端面经_2

    1 自我介绍(介绍一下帅气的自己哦) 2 对象深浅复制(浅复制:对象内引用的对象不会复制,深复制会把引用对象复制。 解决穿透:1布隆过滤或压缩filter提前拦截2数据库找不到也将空对象进行缓存。 一次请求响应服务器能实现处理新的请求,即使旧的请求还未被响应,这样就可以将多个命令发送到服务器,而不用等待回复,最后在一个步骤中读取该信息) 11 TCP三次握手四次挥手 12 四次挥手中为什么TIME_WAIT状态还需要等2MSL 后才能返回到CLOSED状态 (2点:1可靠的实现TCP全双工链接的终止:大概就是说最后一次发的ACK不一定会被对方接收到,这段等待时间对方可能重发FIN。 2允许老的重复的分节在网络中消逝:简单说就是俩个IP的端口建立连接后释放,又马上建立连接,这样后面建立的连接就成了前面连接的化身,等待2MSL是为了防止这种情况出现) 13 top命令参数详情(top

    57410发布于 2019-08-20
  • 来自专栏DevOps

    后端分离及部署2

    一般来说,要实现前后端分离,前端就需要开启一个本地的服务器来运行自己的前端代码,以此来模拟真实的线上环境,并且,也是为了更好的开发。 这样,前端就可以无忧无虑的开发了 2. 由于前后端分离后,前端和后台同时开发时,就可能遇到前端已经开发好一个页面了,可是却等待后台API接口的情况。 API接口,设计出了一套API文档,然后我们就可以通过API文档,利用mock(http://mockjs.com)来返回一些假数据,这样就可以模拟发送API到接受响应的整一个过程,因此前端也不需要依赖于后端开发了

    36910编辑于 2024-03-29
  • 来自专栏nummy

    socket编程2】TCP编程

    大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。 下面是一个客户端的例子:

    94410发布于 2018-08-27
  • 来自专栏叽叽西

    阿里Java编程规约【十】 前后端规约

    2)路径:每一个 API 需对应一个路径,表示 API 具体的请求地址:  a)代表一种资源,只能为名词,推荐使用复数,不能为动词,请求方法已经表达动作意义。   2. 【强制】前后端数据列表相关的接口返回,如果为空,则返回空数组[]或空集合{}。 说明:此条约定有利于数据层面上的协作更加高效,减少前端很多琐碎的 null 判断。 3. 2)401 Unauthorized:请求要求身份验证,常见对于需要登录而用户未登录的情况。 扩展说明,在 Long 取值范围内,任何 2 的指数次的整数都是绝对不会存在精度损失的,所以说精度损失是一个概率问题。 说明:nginx 默认限制是 1MB,tomcat 默认限制为 2MB,当确实有业务需要传较大内容时,可以调大服务器端的限制。 9.

    1.2K20编辑于 2022-05-17
  • 来自专栏wuter

    JavaWeb后端入门2—连接池

    1.3 连接池的原理 2. C3P0连接池 3.1 概述 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。 参考文档:http://t.wuter.cn/c3p0/ 3.2 使用方法1:手动设置参数 首先引入c3p0-0.9.1.2.jar package com.itheima.datasource.demo2; 提取出JDBCUtils2.java 不需要之前的注册驱动和获得链接了,直接创建C3P0连接池,给出获得链接的方法。 java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import com.mchange.v2.

    28810编辑于 2025-04-03
  • 来自专栏changxin7

    2.并发编程编程

    multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。   )2、帮我们处理好锁问题。 q.full()) #满了 print(q.get()) print(q.get()) print(q.get()) print(q.empty()) #空了 View Code 生产者消费者模型 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题 ,conn2只能用于发送。 = time.time() - s2 # # print('t1>>',t1) #结果:0.5146853923797607s 进程池的效率高 # print('t2>>',t2

    1.5K20发布于 2019-08-20
  • 来自专栏码农编程进阶笔记

    浅析2025年后端编程发展趋势

    2025年后端编程热门技术 随着技术的不断发展,2025年的后端编程可能会有多种热门技术。云原生技术将持续火热,云原生应用强调将应用程序完全构建和部署在云环境中,充分利用云计算的优势。 2025年后端编程必备技能 掌握后端编程语言 首先,掌握一门或多门后端编程语言是至关重要的。 Python:语法简洁易懂,拥有丰富的第三方库,适合快速开发和数据科学领域。 2025年后端编程主流语言 Python Python在2025年有望继续保持其在后端编程中的重要地位。 Go语言的这些特性使得它在构建云原生架构的后端应用时具有天然的优势。 2025年后端编程就业方向 企业级应用开发 企业级应用开发是后端编程的一个重要就业方向。 例如在AWS中,开发人员需要构建弹性计算云(EC2)、简单存储服务(S3)等核心云服务的后端逻辑,确保这些服务能够高效地为用户提供计算、存储等资源。

    3.1K11编辑于 2024-11-29
  • 来自专栏CSDN搜“看,未来”

    温故Linux后端编程(四):膜拜《TCPIP 卷一》

    I2. 处理客户请求。 I3. 发送响应给发送请求的客户。 I4. 返回I1步。 重复型服务器主要的问题发生在 I2状态。在这个时候,它不能为其他客户机提供服务。 2) 服务器发回包含服务器的初始序号的 SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。 为了使用这个特性,编程接口必须为应用程序提供一种方式来说明“我已经完成了数据传送,因此发送一个文件结束( FIN)给另一端,但我还想接收另一端发来的数据,直到它给我发来文件结束(FIN)”。 这种2MSL等待的另一个结果是这个 TCP连接在2MSL等待期间,定义这个连接的插口(客户的IP地址和端口号,服务器的 IP地址和端口号)不能再被使用。这个连接只能在 2MSL结束后才能再被使用。 它将让调用者对处于2MSL等待的本地端口进行赋值,但我们将看到TCP原则上仍将避免使用仍处于2MSL连接中的端口。 在连接处于2MSL等待时,任何迟到的报文段将被丢弃。

    92910发布于 2021-09-18
  • 来自专栏Frost's Blog

    Flask前后端分离实践:Todo App(2)

    在前后端分离的架构里,我们是怎么验证用户,保持会话的呢? 那么使用前后端分离以后,所有对后端的请求都是以Ajax的方式发送,上面的方法依然有效!区别仅仅在于,我们将请求改成JSON格式之后,后端是从request.get_json()中获取的。 前端那边,axios发请求时自动会带上cookie,所以后端这边依然可以通过flask_login.current_user拿到当前用户。 Html <template> <form action="/auth/login" method="post"> <h2>Login</h2> <div class="form-group <em>后端</em>的验证,通过响应内容传回错误。 验证错误通过Vue-flash-message显示到页面上。 login和register的视图函数仅处理POST请求。

    1.6K10发布于 2019-11-30
  • 来自专栏404

    koa2 + mongoose + graphql 构建后端服务

    Koa2:https://koa.bootcss.com/ Apollo:https://www.apollographql.com/ Mongoose:https://mongoosejs.com/ 之前使用koa2 + mongoose构建了一套restful api,现在改用graphql。

    35320编辑于 2022-04-25
  • 来自专栏窗户

    shell编程字库裁剪(2)——编程过程

      之所以想用shell实现,是因为shell是UNIX/LINUX的工作语言,可以实现很强大的功能,所以借此话题顺带讲一下shell编程的思路。 就嵌入的编程语言来说,awk/sed/bc这些算是shell“本家”的,而python/perl这些,不太像是shell本家的。    其中,(2)、(3)两个数组用结构体的方式合为一个数组,C语言的可读性更强一些。   那么,和其他的编程一样,我们先确定这个程序的框架: #! key2 = (unsigned short)chinese_font[mid].GBH<<8; key2 |= (unsigned key2 = (unsigned short)chinese_font[mid].GBH<<8; key2 |= (unsigned

    1.1K100发布于 2018-02-07
  • 来自专栏Golang语言社区

    实效go编程--2

    除了矩阵变换这类需要明确维度的情况外,Go中的大部分数组编程都是通过切片来完成的。 切片保存了对底层数组的引用,若你将某个切片赋予另一个切片,它们会引用同一个数组。 以下简单的例子 x := []int{1,2,3} x = append(x, 4, 5, 6) fmt.Println(x) 将打印 [1 2 3 4 5 6]。 fmt.Sprintf("%.2fEB", b/EB) case b >= PB: return fmt.Sprintf("%.2fPB", b/PB) case b >= TB: return fmt.Sprintf("%.2fTB", b/TB) case b >= GB: return fmt.Sprintf("%.2fGB fmt.Sprintf("%.2fKB", b/KB) } return fmt.Sprintf("%.2fB", b) } 表达式 YB 会打印出 1.00YB,而 ByteSize

    1.1K70发布于 2018-03-26
  • 来自专栏懒人的运维备忘录

    Shell 编程2)- 变量

    2.变量的引用方式 $str 或 ${str},如echo "the var is ${str}" str='Hello,world!' echo '$#:'$# echo '$@:'$@ echo '$*:'$* echo '$0:'$0 echo '$1:'$1 echo '$2:'$2 echo '$3:'$3 echo '$4:' /var.sh $1:a $2:b $3:c $4:d 轮替变量 使用shift [N]可以指定参数轮替,每执行一次 shift N,就踢掉 N 个参数,默认 N=1。 例如在脚本中: echo $1 #输出第一个参数值 shift 2 #踢掉前两个参数,$1的值变成第三个参数的值 shfit #再踢掉一个参数,$1的值变成第四个参数的值 echo $1 #输出第四个参数的值 2.脚本配置文件 配置文件中的变量值可以在脚本中被使用。

    1.1K00发布于 2019-01-25
  • 来自专栏码猴小明

    多任务编程 - 2

    2、线程的概念 线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度,也就是说线程是cpu调度的基本单位,每个进程至少有一个线程,而这个线程就是我们常说的主线程。 ---- 多线程的使用 1、导入线程模块 # 导入线程模块 import threading 2、线程类Thread参数说明 Thread([group[,target[,name[,args[,kwargs 2、互斥锁的使用 threading模块中定义了Lock变量,这个变量本质上是一个函数,通过调用这个函数可以获取一把互斥锁。 进程和线程都是完成多任务的一种方式 多进程要比多线程消耗的资源多,但是多进程开发比单进程开发稳定性要强,某个进程挂掉不会影响其他的进程 多进程可以使用CPU的多核运行,多线程可以共享全局变量 如果前面还不太了解的朋友可以看看《多任务编程 - 1》哦 多任务编程 - 1 END

    57420编辑于 2022-01-20
领券