自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 蓝牙协议栈的学习(二)

蓝牙协议基础学习

2025-12-03 11:39:04 567

原创 蓝牙协议栈的学习(一)

蓝牙协议栈基础学习

2025-12-01 20:56:36 939

原创 操作系统-内存寻址

阶段转换单位机制谁参与段 → 线性地址段寄存器 + 段基址分段机制(Segmentation)CPU段部件线性地址 → 物理地址页表 + TLB分页机制(Paging) / MMUMMU最终访问物理内存。段内偏移 → 虚拟地址(线性地址) → 物理地址但在现代 CPU(如 x86-64、ARMv8)中,分段已被简化,虚拟地址 → 物理地址在现代操作系统中,程序中打印出的地址(例如通过 printf(“%p”))是 虚拟地址(Virtual Address),

2025-10-22 21:55:03 653

原创 线程池(一)

设计成多线程,cpu执行一个线程的时间片到了,会发生线程切换,需要保存线程上下文信息,将下一执行线程的上下文信息加载到cpu寄存器中。因为IO密集型程序需要大量的IO阻塞等待,设计成单线程,当一个IO阻塞了,线程需要在阻塞队列中等待IO资源就绪,因为是单线程只有一个线程,在等待过程中cpu一直处于空闲状态,所以cpu的利用率不高。线程过多导致线程上下文切换,执行下一个线程时需要将现在的线程的上下文保存到线程的对应的struct stack_task中,才能将要执行的线程的上下文加载到cpu寄存器中。

2024-11-27 00:04:55 1079

原创 git使用(三)

需要git pull将远程仓库中的新提交拉取到本地和本地的代码合并,合并后的代码不能git push,代码有冲突,合并后每段代码都有commitID,commitID就是标识冲突,需要将commitID删去,将冲突解决,将两端代码合并或者注释其中一个保留一个,再git pull就可以提交到远程仓库中了。如何将远程仓库中的更改还原,可以使用git reset --hard命令将本地仓库中的更改还原,再使用git push -f 命令将本地仓库的更改提交到远程仓库,就完成了远程仓库的还原。

2024-11-25 22:29:26 647

原创 数据库连接池(三)

当连接队列为空,且已经创建了的连接数量不超过maxSize,才能进行生产新的连接,若不满足两个条件,只能阻塞等待条件满足,才进行生产,使用互斥锁保证访问连接队列的线程安全,使用条件变量empty_进行等待生产条件满足,每生产一个连接使用条件变量notEmpty_与消费线程通信,通知消费线程队列中已有连接,可以准备获取锁,对连接进行消费。1.使用智能指针返回连接指针,智能指针出作用域,调用析构函数,应该是将连接归还到连接队列中,而不是将连接指针delete掉,将已申请的连接重复利用,减小性能消耗。

2024-11-25 11:42:42 486

原创 git使用(二)

git status查看工作区的状态,发现工作区有更改没有提交到暂存区,git add .将工作区所有更改提交到暂存区,git commit -m 将暂存区的更改提交到本地仓库,git push origin main将本地仓库的main分支上的更改提交到远程仓库的main分支上,git log查看项目的提交日志,发现项目更新成功。项目开发中项目负责人会在github上创建一个远程仓库,我们需要使用git clone将远程仓库的代码拉到本地仓库中,会在本地仓库设置远程仓库的引用名称。

2024-11-23 23:38:36 1123

原创 数据库连接池(二)

线程池中封装了的成员变量有:想要访问数据库服务器的ip地址,用于数据库访问的端口号,用于连接认证的用户名和用户名密码,想要访问的数据库名称,用于初始化空闲连接队列的初始连接量,限制连接数量的最大连接量,当前创建了的连接数量,连接的最大空闲时间,连接的超时时间,用于等待空闲连接池不为空的条件变量,用于等待连接池是空的条件变量,用于保证线程互斥的互斥锁以及存储空闲连接的队列。实现成员函数,包括实现连接的初始化,连接的析构销毁,建立与数据库的连接,通过SQL语句对数据库更新和查询的函数。

2024-11-23 00:27:26 598

原创 git使用(一)

代码写到一定阶段后,可以通过网络将本地仓库的代码提交到Git 服务器上,对远程代码仓库做更新,从而实现共享和协作。代码写了好久不小心删了,可以使用git防止,每写一部分代码通过git将代码放到的远程的代码托管平台(github,gitee)。集中式版本控制系统以SVN为例,在SVN服务器上维护所有的代码版本,客户端通过网络访问SVN服务器,对在SVN服务器上的远程代码仓库对代码版本进行操作管理。修改代码,修改失败,想回到以前的代码,可以在修改前可以使用git将代码放到代码托管平台上,保存修改前的代码。

2024-11-21 23:41:20 1597

原创 数据库连接池(一)

为了减少访问数据库对磁盘IO的次数,提高数据库的访问瓶颈,在数据库服务器与服务器的中间加一层缓存数据库,使用缓冲数据库对热点数据做存储,缓冲数据库存储在内存中,对于热点数据直接在缓存数据库中查询,减少对数据库服务器的访问。redis就是最典型的缓存数据库。为了提高连接的复用率,减少连接创建、连接销毁和连接认证操作,可以在数据库与服务器的中间加连接池。(关系型数据库存放的是二维表)(缓存数据库存放的是key:value键值对)流行的连接池:阿里的druid、c3p0、apache、dbcp。

2024-11-20 15:40:38 814

原创 TCP协议(四)

当数据报文丢失,对方的确认应答报文中的确认序号表示已接收到的最后一个数据报文的序号+1,当连续收到三个确认报文的确认序号都是一样,根据确认序号,发送方就知道哪个数据报文丢失了,会启动重传机制,重传丢失的数据报文。当遇到网络拥塞时,会启动慢启动机制,客户端会发送1个探测报文去探测网络的拥塞情况,一个报文没问题,再发送2个报文,没问题,再发4个报文,拥塞窗口成指数增长,到达阈值(ssthresh)时,不在指数增长,变为线性增长,到一定大小滑动窗口的大小不再取决于拥塞窗口的大小,而是取决于确认报文的窗口大小。

2024-11-19 00:11:03 1262

原创 TCP协议(三)

第一次握手。由客户端向服务端发送请求连接的报文,客户端的连接状态变为SYN_SENT,当服务端收到请求报文,服务端连接进入SYN_RCVD状态(半连接状态),这就是这一次握手。第二次握手。服务端向客户端发送确认请求报文,报文类型为SYN和ACK,既是对客户端请求连接报文的确认,也是向客户端发送连接请求报文,所以报文类型为SYN+ACK,当客户端收到服务端发来的确认请求报文,客户端的连接状态就变为ESTABLISHED,客户端就认为自己和服务端建立了连接,这就是第二次握手。第三次握手。

2024-11-18 00:22:28 802

原创 TCP协议(二)

tcp三次握手不一定会成功,如果第三次握手的报文丢失,没有收到报文的一方不认为建立了连接,但是另一方不知道,认为双方都建立连接,会发送数据报文给连接不正常的一方,当连接不正常的一方收到数据报文,发现没有建立连接,不会处理数据报文,会发送一个标志位RST位为1的报文给发送方,让发送方重新进行三次握手建立连接。发送方给接收方发送报文,接受方收到数据报文,发送数据报文的确认报文,但是确认应答报文在网络中丢失或者阻塞了,发送方经过一段特定时间没有收到确认应答报文,会认为发送的数据报文丢失,会再次发送数据报文。

2024-11-17 00:39:31 1587

原创 TCP协议(一)

传输层将TCP报文的报头和有效载荷分离,提取报头中的目的端口号,从哈希表中找到端口号对应进程PCB,根据PCB找到文件描述符表,通过文件描述符找到对应的struct file中的缓冲区,将传输层的有效载荷拷贝进文件描述符对应的文件缓冲区,应用层就可以通过文件描述符对有效载荷进行读写了。但是双方通信最后一条消息,是没有应答的,有应答就不是最后最新的一条消息,所以无法判断最后一条消息被对方收到,所以不存在绝对的应答。TCP协议的报头的标准长度默认为20byte,报头的标准长度就是除去选项部分的长度。

2024-11-16 00:27:07 742

原创 UDP协议

源端口:发送方进程bind的端口目的端口:接受方进程bind的端口udp的长度:包括报头和有效载荷 最大为216(65535byte) 这就要求应用层将超过udp最大长度的数据,进行分割,分割为小于等于最大长度的数据校验和:就是对udp报文做检测,检测报文传输过程是否出错,若出错将udp报文丢弃。

2024-11-15 12:43:09 716

原创 五种IO模型

检测文件描述符的读写事件就绪状态是由操作系统内核完成的,有文件描述符的读写事件就绪,操作系统内核向用户进程发送SIGIO信号,通知用户进程进行数据的读写。2.非阻塞式IO:非阻塞式IO就是轮询的检测读写事件的就绪状态,当读写事件未就绪,进程向下执行一些简单的任务,再对读写事件的状态进行检测,若读写事件就绪了,进行对应的IO操作。阻塞式IO、非阻塞式IO、信号驱动式IO的IO效率一样的,因为都是对单个文件描述符进行IO操作,只是非阻塞式IO和信号驱动式IO,进程可以做其他任务,而阻塞式IO进程只做IO。

2024-11-14 00:06:17 673

原创 多路转接之select

表示timeout->tv_sec时间内没有文件描述符的资源准备就绪,就一直阻塞等待,直到等待时间超过timeout->tv_sec才返回。在timeout->tv_sec时间内有文件描述符资源准备就绪了,select就返回,timeout是一个输入输出型参数,返回后timeout中就是阻塞剩余的时间。timeout=nullptr表示阻塞等待,有文件描述符的事件就绪才返回结果。timeout={0,0}表示非阻塞等待,select立刻返回结果,。

2024-11-13 00:03:16 975

原创 多路转接之poll

用户想要内核监视哪个文件描述符的哪个事件,只需要定义struct pollfd结构体,将将文件描述符和事件传给结构体中的fd和events,再将结构体加入fds数组中,让poll监视数组中的文件描述符事件。内核通过数组中struct pollfd结构,告诉用户哪个文件描述符的哪个事件就绪,在结构体中的fd和revents代表,文件描述符fd的revnents事件就绪。维护一个struct pollfd结构体的数组,存储需要监视的文件描述符的事件。ret=0,poll超时等待,没有文件描述符的事件就绪。

2024-11-12 00:07:31 473

原创 多路转接之epoll

2024-11-11 09:06:35 1575

原创 多路转接之Reactor

多路转接之Reactor

2024-11-10 00:24:42 950

原创 nginx内存池代码

nginx内存池代码

2024-07-14 21:57:30 196

原创 装饰器模式 适配器模式 观察者模式

【代码】装饰器模式 适配器模式 观察者模式。

2024-02-26 21:43:25 224

原创 抽象模式 代理模式

【代码】抽象模式 代理模式。

2024-02-20 00:45:35 211

原创 C++11容器emplace方法原理剖析 单例模式 简单工厂 工厂方法 线程安全的懒汉单例模式

【代码】C++11容器emplace方法原理剖析 单例模式 简单工厂 工厂方法 线程安全的懒汉单例模式。

2024-02-19 02:37:24 296

原创 右值引用 多线程 线程间互斥 mutex互斥锁 lock_guard和unique_lock 线程间同步通信-生产者-消费者模型 基于CAS操作的atomic原子类型

【代码】右值引用 多线程 线程间互斥 mutex互斥锁 lock_guard和unique_lock 线程间同步通信-生产者-消费者模型 基于CAS操作的atomic原子类型。

2024-02-18 01:20:14 145

原创 bind和function实现线程池 lambda表达式

【代码】bind和function实现线程池 lambda表达式。

2024-02-16 01:10:02 188

原创 bind绑定器和function函数对象

【代码】bind绑定器和function函数对象。

2024-02-14 23:21:05 143

原创 智能指针 多线程线程安全问题 删除器

【代码】智能指针 多线程线程安全问题 删除器。

2024-02-13 13:07:49 164

原创 右值引用 move移动语义 类型完美转发forward

【代码】右值引用 move移动语义 类型完美转发forward。

2024-02-06 00:58:45 157

原创 泛型算法 对象优化

【代码】泛型算法 对象优化。

2024-02-03 23:17:53 144

原创 无序关联容器 有序关联容器 容器适配器 函数对象(仿函数)

【代码】无序关联容器 有序关联容器 容器适配器 函数对象(仿函数)

2024-02-02 23:35:22 132

原创 C++四种类型转换 虚基类 虚继承 菱形继承 向量容器vector 双端队列容器deque 链表容器list

【代码】C++四种类型转换 虚基类 虚继承 菱形继承 向量容器vector 双端队列容器deque 链表容器list。

2024-02-01 22:15:52 209

原创 动态绑定 抽象类

【代码】动态绑定 抽象类。

2024-02-01 16:28:09 183

原创 继承 派生类构造过程 虚函数 隐藏 覆盖(重写) 虚析构函数

【代码】继承 派生类构造过程 虚函数 隐藏 覆盖(重写) 虚析构函数。

2024-01-30 01:17:57 181

原创 空间适配器allocator 理解new delete operator new operator delete 迭代器iterator失效 new delete重载实现对象池

【代码】空间适配器allocator 理解new delete operator new operator delete 迭代器iterator失效 new delete重载实现对象池。

2024-01-29 00:24:37 139

原创 实现复数类CComplex 字符串String类及vector中的空间配置器allocator和迭代器iterator

【代码】实现复数类CComplex 字符串String类及vector中的空间配置器allocator和迭代器iterator。

2024-01-27 01:26:33 318 2

原创 类模板实现C++STL中的vector 及容器空间配置器allocator

【代码】类模板实现C++STL中的vector 及容器空间配置器allocator。

2024-01-25 23:42:19 202

原创 类模板实现顺序栈 循环队列 以及函数模板相关知识点

【代码】类模板实现顺序栈 循环队列 以及函数模板相关知识点。

2024-01-25 00:20:32 360

原创 面向对象编程OOP实现顺序栈 字符串 循环队列 及面向对象知识点

【代码】面向对象编程OOP实现顺序栈 字符串 循环队列 及面向对象知识点。

2024-01-23 19:28:53 389

原创 二叉树链式结构实现

前序遍历:根---左子树---右子树中序遍历:左子树---根---右子树后序遍历:左子树---右子树---根层序遍历:每一层依次遍历。

2023-11-08 13:15:08 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除