- 博客(105)
- 收藏
- 关注
原创 学习笔记——GDB调试器
感谢B站up主 xiaobing1016 的学习视频:基于VSCode和CMake实现C/C++开发 | Linux篇_哔哩哔哩_bilibili
2023-12-13 10:33:41
438
原创 MYSQL各种日志
感谢B站up主的视频分享黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括_哔哩哔哩_bilibili
2023-12-10 13:59:51
477
原创 MYSQL存储
是根据需要定义在局部生效的变量,访问之前,需要DECLARE声明。可以作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN...END块。是用户根据需要自己定义变量,用户变量不用提前声明,在用的时候直接用“@变量名”使用就可以。2.mysql服务重新启动之后,所设置的全局参数会失效,要想不失效,可以在/etc/my.cnf中配置。1.如果没有指定的SESSION/GLOBAL,默认是SESSION,会话变量。用户自定义的变量无需对其进行声明或初始化,只不过获取到的值为NULL。
2023-11-29 10:05:45
626
原创 SQLY优化
如果一次性需要插入大批量数据,使用Insert语句插入性能较低,此时可以使用MYSQL数据库提供的load指令进行插入。插入数据时,尽量选择顺序插入,选择使用auto_increment自增主键。尽量不要使用UUID做主键或者是其他自然主键,如身份证号。主键顺序插入,主键顺序插入性能高于乱序插入。满足业务需求的情况下,尽量降低主键的长度。业务操作时,尽量避免对主键的修改。
2023-11-23 21:42:49
971
1
原创 MYSQL索引使用注意事项
最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将部分失效(后面的索引字段失效)。using where, using index:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据。联合索引中,出现范围查询(>,
2023-11-22 15:24:06
515
原创 服务器编程基本框架
要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元),将 socket 可读可写事件放入请求队列,交给工作线程处理。工作线程处理完客户请求后,调用 aio_write 函数向内核注册 socket 上的写完成事件,并告诉内核用户写缓冲区的位置,以及写操作完成时如何通知应用程序。4. 睡眠在请求队列上的某个工作线程被唤醒,它从 socket 读取数据,并处理客户请求,然后往 epoll内核事件表中注册该 socket 上的写就绪事件。
2023-10-11 10:34:15
101
原创 Web服务器概述及http协议
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求 - 响应协议,它通常运行在TCP 之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以 ASCII 形式给出;而消息内容则具有一个类似 MIME 的格式。HTTP是万维网的数据通信的基础。HTTP 是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。
2023-10-10 21:23:24
380
原创 阻塞和非阻塞,同步和异步
一个典型的网络IO接口调用,分为两个阶段,分别是“数据就绪” 和 “数据读写”,数据就绪阶段分为阻塞和非阻塞,表现得结果就是,阻塞当前线程或是直接返回。同步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),数据的读写都是由请求方A自己来完成的(不管是阻塞还是非阻塞);异步表示A向B请求调用一个网络IO接口时(或者调用某个业务逻辑API接口时),向B传入请求的事件以及事件发生时通知的方式,A就可以。
2023-10-10 20:39:07
124
原创 UDP通信
向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广。多播数据报只应该由对它感兴趣的接口接收,也就是说由运行相应多播会话应用系统的主机上。另外,广播一般局限于局域网内使用,而多播则既可以用于局域网,也可以跨广域网。播消息都包含一个特殊的IP地址,这个IP中子网内主机标志部分的二进制全部为1。单播地址标识单个 IP 接口,广播地址标识某个子网的所有 IP 接口,b.客户端需要绑定服务器广播使用的端口,才可以接收到广播消息。本地套接字的作用:本地的进程间通信。
2023-10-09 17:19:22
106
原创 I/O多路复用(I/O多路转接)
I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现 I/O 多路复用的系统调用主要有 select、poll 和 epoll。主旨思想:1. 首先要构造一个关于文件描述符的列表,将要监听的文件描述符添加到该列表中。2. 调用一个系统函数,监听该列表中的文件描述符,直到这些描述符中的一个或者多个进行I/O操作时,该函数才返回。a.这个函数是阻塞b.函数对文件描述符的检测的操作是由内核完成的。
2023-10-09 13:49:31
86
原创 TCP状态转换
当 TCP 链接中 A 向 B 发送 FIN 请求关闭,另一端 B 回应 ACK 之后(A 端进入FIN_WAIT_2状态),并没有立即发送 FIN 给 A,A 方处于半连接状态(半开关),此时 A 可以接收 B 发送的数据,但是 A 已经不能再向 B 发送数据。主动关闭方重新发送的最终 ACK 并不是因为被动关闭方重传了 ACK(它们并不消耗序列号,被动关闭方也不会重传),而是因为被动关闭方重传了它的 FIN。这样就能够让 TCP 连接的主动关闭方在它发送的 ACK 丢失的情况下重新发送最终的 ACK。
2023-10-08 16:35:17
418
原创 TCP通信并发
3.子进程:完成通信,接受一个客户端连接,就创建一个子进程用于通信。2.父进程负责等待并接受客户端的连接。的任务,使用多线程或者多进程来解决。1. 一个父进程,多个子进程。要实现TCP通信服务器处理。
2023-10-08 15:41:31
121
原创 TCP四次挥手
因为在TCP连接的时候,采用三次握手建立的的连接是双向的,在断开的时候需要双向断开。主动发起断开连接,谁先调用close()谁就是发起。会使用TCP协议进行四次挥手。的时候,在程序中当调用了。
2023-10-07 21:46:50
126
原创 TCP滑动窗口
9. 第14次,服务器回复ACK 8194, a:同意断开连接的请求 b:告诉客户端已经接受到方才发的2k的数据c:滑动窗口2k。5. 第10次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了2k,窗口大小是2k。6. 第11次,服务器告诉客户端:发送的6k数据以及接收到,存储在缓冲区中,缓冲区数据已经处理了4k,窗口大小是4k。2. 服务器接收连接情况,告诉客户端服务器的窗口大小是6144,一次发送的最大数据量是1024。7. 第12次,客户端给服务器发送了1k的数据。
2023-10-07 21:37:41
178
原创 TCP三次握手
所谓的连接,其实是客户端和服务端的内存里保存的一份关于对方的信息,如IP地址、端口号等。2.客户端回复收到了服务器端的数据:ack=服务端的序号 + 数据长度 + SYN/FIN(按一个字节算)2.服务器会回发一个确认序号: ack=客户端的序号 + 数据长度 + SYN/FIN(按一个字节算)采用四次挥手来关闭一个连接。三次握手发生在客户端连接的时候,当调用connect(),底层会通过TCP协议进行三次握手。2.生成一个随机的32位的序号seq=J , 这个序号后边是可以携带数据(数据的大小)
2023-10-07 21:25:14
340
原创 线程的概述
功能:和一个已经终止的线程进行连接,回收子线程的资源,这个函数是阻塞函数,调用一次只能回收一个子线程,一般在主线程中使用。-start_routine:函数指针,这个函数是子线程需要处理的逻辑代码。-thread:传出参数,线程创建成功后,子线程的ID被写到该变量。-attr:设置线程的属性,一般使用默认值NULL。-retval:接收子线程退出时的返回值。-arg:给第三个参数使用,传参。-thread:线程ID。功能:创建一个子线程。
2023-10-05 10:45:32
150
原创 linux共享内存
shmflg:对共享内存的操作 SHM_RDONLY(必须要有读权限),读写指定0, SHM_EXEC(可执行权限) ...共享内存:进程退出,共享内存还在,标记删除(所有的关联的进程数为0),或者关机。-shmaddr:申请的共享内存的起始地址,指定NULL,内核指定。内存映射区的数据,由于磁盘文件中的数据还在,所以内存映射区 数据还在。功能:创建一个新的共享内存段,或者获取一个既有的共享内存段的标识。-buf:要设置或者获取的共享内存的属性信息。-进程突然退出,共享内存还存在,而内存映射区消失。
2023-09-28 16:17:17
153
原创 信号相关的函数
函数指针是实现回调的手段,函数实现之后,将函数名放到函数指针的位置就可以了。-功能:设置定时器。函数调用,开始倒计时,当倒计时为0的时候,函数会给当前的进程发送一个信号:SIGALARM。- 回调函数 : 这个函数是内核调用,程序员只负责写,捕捉到信号后如何去处理信号。- 需要程序员实现,提前准备好的,函数的类型根据实际需求,看函数指针的定义。-ITIMER_VIRTUAL:用户时间,时间到达,发送SIGVTALRM。-SIGALARM:默认终止当前的进程,每一个进程都有且只有唯一的一个定时器。
2023-09-27 15:59:05
126
原创 内存映射的注意事项
1.如果对mmap的返回值(ptr)做++操作(ptr++),munmap是否能够成功?可以,但是不建议2.如果open时O_RDONLY,mmap时prot参数指定PROT READPROT WRITE会怎样?错误,返回MAP_FAILED open()函数中的权限建议和prot参数的权限保持一致3.如果文件偏移量为1000会怎样?必须是1024的整数倍,返回MAP_FAILED4.mmap什么情况下会调用失败?-第一个参数length = 0。
2023-09-24 16:52:28
105
原创 内存的映射
PRIVATE:不同步,内存映射区的数据变了,对原来的文件不会修改,会重新创建一个新的文件。-fd:文件描述符,通过open得到 注意:文件的大小不能为0 open指定的权限不能喝prot参数有冲突。-通过唯一的父进程,先创建内存映射区,有了内存映射区以后,创建子进程,父子进程共享创建的内存映射区。-MAP_SHARED:映射区的数据会自动和磁盘文件进行同步,进程间通信,必须要设置这个选项。-length:要映射的数据的长度,这个值不能为0.建议使用文件的长度。-addr:要释放的内存的首地址。
2023-09-23 20:28:10
89
原创 有名管道及其应用
mode:文件的权限,和open的mode是一样的,是一个八进制的数。管道写端被全部关闭,read返回0,(相当于读到文件末尾)1.一个为只读而打开一个管道的进程会阻塞,直到另外一个进程为只写打开管道。2.一个为只写而打开一个管道的进程会阻塞,直到另外一个进程为只读打开管道。管道没有满,write将数据写入,并返回实际写入的字节数。管道读端被全部关闭,进程异常终止(收到一个SIGPIPE信号)管道中有数据,read返回实际读到的字节数。管道已经满了,write会阻塞。-pathname:管道名称的路径。
2023-09-23 19:24:32
164
原创 管道的读写特点和管道设置为非阻塞
2.如果有指向管道写端的文件描述符没有关闭(管道的写端引用计数大于0),而持有管道写端的进程也没有往管道中写数据,这个时候有进程从管道中读取数据,4.如果有指向管道读端的文件描述符没有关闭(管道的读端引用计数大于0),而持有管道读端的进程也没有从管道中读数据,这时有进程往管道中写数据,1.所有的指向管道写端的文件描述符都关闭了(管道写端引用计数为0),有进程从管道的读端读数据,那么管道中剩余的数据被读取以后,那么管道中剩余的数据被读取后,再次read会阻塞,直到管道中有数据可以读了才读取数据并返回;
2023-09-22 19:30:00
194
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人