自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《设计模式巩固学习》

昨天面试完字节后发现自己的《设计模式》学习不到位好的软件设计注重的是复用,而变化是复用的天敌。

2023-10-15 01:57:16 446

原创 《C++高并发服务器》

第3章、Linux多线程开发(点此进入)

2023-03-02 22:31:34 682

原创 算法用处总结

算法

2022-11-26 16:19:09 425

原创 GDB调试命令大全

使用singal命令,可以产生一个信号量给被调试的程序。如:中断信号Ctrl+C。这非常方便于程序的调试,可以在程序运行的任意位置设置断点,并在该断点用GDB产生一个信号量,这种精确地在某处产生信号非常有利程序的调试。single命令和shell的kill命令不同,系统的kill命令发信号给被调试程序时,是由GDB截获的,而single命令所发出一信号则是直接发给被调试程序的。UNIX的系统信号量通常从1到15。所以取值也在这个范围。

2024-02-06 21:25:09 3143

原创 对象创造模式

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型,紧耦合关系(new)会导致软件的脆弱。模式通过面向对象的手法,将所要创建的具体对象工作延迟到子类,从而实现一种扩展(而非更改)的策略,较好地解决了这种紧耦合关系。模式解决“单个对象"的需求变化。缺点在于要求创建方法/参数相同。

2023-10-23 23:28:37 275

原创 单一职责模式

动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码&减少子类个数)。通过采用组合而非继承的手法,Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的“灵活性差”和“多子类衍生问题Decorator类在接口上表现为is-a Component的继承关系,即Decorator类继承了Component类所具有的接口。

2023-10-18 00:09:47 328

原创 组件协作模式

定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Mthod 使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法某些特定步骤。模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是的典型应用。在具体实现方面,被。

2023-10-15 01:51:25 365

原创 重新认识面向对象

点、直线和矩形的类public:int x;int y;int height;MainForm类private:public:void run();// 画直线i ++ )drawLine(red,// 画矩形i ++ )drawRect(red,不难发现我们如果需要增加一个画圆形的方法就要修改MainForm。

2023-10-15 00:32:42 253

原创 《Linux高并发服务器笔记——第六章、自我补充》

功能:为 MYSQL 结构体分配内存参数: - mysql:一个 MYSQL 结构体,中间有很多字段。

2023-05-07 00:29:30 386 1

原创 5.6和5.7、项目整体流程代码实现,解析http请求报文

代码地址。

2023-04-24 22:21:00 516

原创 1.17、标准C库IO函数和Linux系统系统IO函数对比

CLinuxIO调用于被调用的关系。

2023-04-22 22:06:36 208

原创 1.13|1.14|1.15|1.6、GDB调试

输入这两条命令,第一条用于生成调式代码,第二条运行调试代码test.c需要与被调试的代码test在同一个目录下list默认显示main函数。

2023-04-22 22:03:20 786

原创 1.10和1.11和1.12、Makefile

在终端输入然后写入以下代码然后执行以下代码,在终端输入一个make即可。

2023-04-22 21:58:29 716

原创 1.9、静态库和动态库的对比

1.9、静态库和动态库的对比1.9、静态库和动态库的对比1.9、静态库和动态库的对比

2023-04-22 21:55:44 126

原创 1.8、解决动态库加载失败问题

【代码】1.8、解决动态库加载失败问题。

2023-04-22 21:52:09 2164

原创 1.6和1.7、1.6、动态库的制作和使用(错误处理)

【代码】1.6和1.7、1.6、动态库的制作和使用(错误处理)

2023-04-22 21:49:42 147

原创 1.4和1.5、静态库的制作(静态库的使用)

将add.c div.c mult.c sub.c打包生成我们的静态库,头文件head.h不需要。

2023-04-22 21:43:55 173

原创 1.2和1.3、GCC

gcc test . c - o test - DDEBUG //或者 gcc test . c - o test - D DEBUG。

2023-04-22 21:40:23 803

原创 5.5、线程池同步机制类封装及线程池实现

代码地址。

2023-04-22 21:27:37 739

原创 5.4、服务器编程基本框架和两种高效的事件处理模式

可读可写事件放入请求队列,交给工作线程处理。除此之外,主线程不做任何其他实质性的工作。读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。那么从工作线程的角度来看,它们就直接获得了数据读写的结果,接下来要做的只是对读写的结果进行逻辑处理。,有的话就立即将该事件通知工作线程(逻辑单元),将。来处理(进行读、写),工作线程仅仅负责业务逻。,读写完成之后,主线程向工作线程通知这一”

2023-04-22 09:28:16 410

原创 5.3、web服务器简介HTTP协议

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求 - 响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会和互联网工程任务组进行协调,最终发布了一系列的RFC,其中最著名的是1999年。

2023-04-21 20:38:48 640

原创 5.2、Unix/Linux上的五种IO模型

5.2、Unix/Linux上的五种IO模型1.阻塞blocking2.非阻塞non-blocking(NIO)3.IO复用(IO_multiplexing)4.信号驱动(signal-driven)5.异步(asynchronous)①异步函数介绍1.阻塞blocking调用者调用了某个函数,等待这个函数返回,期间什么也不做,不停的去检查这个函数有没有返回,必须等这个函数返回才能进行下一步动作。2.非阻塞non-blocking(NIO)非阻塞等待,每隔一段时间就去检测IO事件是否就绪。

2023-04-21 19:17:49 992

原创 5.1、阻塞/非阻塞、同步/异步(网络IO)

本项目中,使用单例模式创建日志系统,对服务器运行状态、错误信息和访问数据进行记录,该系统可以实现按天分类,超行分类功能,可以根据实际情况分别使用同步和异步写入两种方式。其中异步写入方式,将生产者-消费者模型封装为阻塞队列,创建一个写线程,工作线程将要写的内容push进队列,写线程从队列中取出内容,写入日志文件。日志系统大致可以分成两部分,其一是单例模式与阻塞队列的定义,其二是日志类的定义与使用。当队列为空时,从队列中获取元素的线程将会被挂起;当队列是满时,往队列里添加元素的线程将会挂起。

2023-04-21 18:42:43 938

原创 《C++高并发服务器笔记——第五章项目实战与总结》

《C++高并发服务器笔记——第五章》

2023-04-21 10:27:14 1225 2

原创 4.35、本地套接字

本地的进程间通信有关系的进程间的通信没有关系的进程间的通信本地套接字实现流程和网络套接字类似,一般呢采用TCP的通信流程。ip地址的类型(我们应该使用。

2023-04-20 22:27:47 203

原创 4.34、组播(多播)

单播地址标识单个IP接口,广播地址标识某个子网的所有IP接口,多播地址标识一组IP接口。单播和广播是寻址方案的两个极端(要么单个要么全部),多播则意在两者之间提供一种折中方案。多播数据报只应该由对它感兴趣的接口接收,也就是说由运行相应多播会话应用系统的主机上的接口接收。另外,广播一般局限于局域网内使用,而多播则既可以用于局域网,也可以跨广域网使用。a: 组播既可以用于局域网,也可以用于广域网b: 客户端需要加入多播组,才能接收到多播的数据。

2023-04-20 20:14:31 873

原创 4.33、广播

向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的IP地址,这个IP中子网内主机标志部分的二进制全部为1,也就是ip地址的最后一位为。a: 只能在局域网中使用。b: 客户端需要绑定服务器广播使用的端口,才可以接收到广播消息。需要设置允许广播的属性。

2023-04-20 09:39:45 132

原创 4.32、UDP通信实现

参数: - sockfd : 通信的fd - buf : 要发送的数据 - len : 发送数据的长度 - flags : 0 - dest_addr : 通信的另外一端的地址信息 - addrlen : 地址的内存大小 - 返回值: - - 1 :失败,出现错误 - > 0 :实际发送的字节数。

2023-04-19 22:41:15 136

原创 4.31、epoll的两种工作模式

的读缓冲区,读缓冲区有数据 - >假设委托内核检测读事件 -> 检测。的读缓冲区,读缓冲区有数据 - >假设委托内核检测读事件 -> 检测。检测到了会给用户通知。检测到了会给用户通知。

2023-04-19 20:37:28 651

原创 4.29和4.30、epoll的API介绍和代码编写

include <sys/epoll.h> // 创建一个新的epoll实例。在内核中创建了一个数据,这个数据中有两个比较重要的数据,一个是需要检测 // 的文件描述符的信息(红黑树),还有一个是就绪列表,存放检测到数据发送改变的文件描述符信息(双向链表)。- 参数:size : 目前没有意义了。随便写一个数,必须大于 0 - 返回值: - 1 : 失败 > 0 : 文件描述符,操作epoll实例的 typedef union epoll_data {void * ptr;int fd;

2023-04-19 16:01:19 129

原创 4.28、poll API介绍及代码编写

int fd;/* 委托内核检测的文件描述符 */ short events;/* 委托内核检测文件描述符的什么事件 */ short revents;/* 文件描述符实际发生的事件 */ };

2023-04-19 10:59:32 214

原创 4.26和4.27、selectAPI介绍(4.27、select代码)

首先要构造一个关于文件描述符的列表,将要监听的文件描述符添加到该列表中。调用一个系统函数,监听该列表中的文件描述符,直到这些描述符中的一个或者多个进行I/O操作时,该函数才返回。a:这个函数是阻塞b:函数对文件描述符的检测的操作是由内核完成的在返回时,它会告诉进程有多少(哪些)描述符要进行I/O操作。

2023-04-18 20:43:33 643

原创 4.25、IO多路复用简介

4.25、IO多路复用简介 1. I/O多路复用(I/O多路转接)①阻塞等待(BIO模型)②非阻塞,忙轮询(NIO模型)③IO多路转接技术(select/poll)④IO多路转接技术(epoll)1. I/O多路复用(I/O多路转接)I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现 I/O 多路复用的系统调用主要有 select、poll 和 epoll。①阻塞等待(BIO模型)进程堵塞,只能一个一个进行,并且是只有当客户端传达数据时才可以继续。多进程和

2023-04-18 19:04:21 996

原创 4.24、半关闭、端口复用

UNIX网络编程卷1:套接字联网API(第3版) 等文件(提取码:q99x)

2023-04-18 14:36:27 702

原创 4.23、TCP状态转换(为什么四次挥手)

被动关闭方也不会重传),而是因为被动关闭方重传了它的 FIN。事实上,被动关闭方总是。连接主动关闭方接收到被动关闭方发送的。方处于半连接状态(半开关),此时。后,连接的主动关闭方必须处于。连接的主动关闭方在它发送的。丢失的情况下重新发送最终的。并不是因为被动关闭方重传了。状态并持续 2MSL 时间。主动关闭方重新发送的最终。状态),并没有立即发送。直到它收到一个最终的。(它们并不消耗序列号,

2023-04-18 12:10:51 731

原创 4.22、多线程实现并发服务器

【代码】4.22、多线程实现并发服务器。

2023-04-18 11:32:25 165

原创 4.20和4.21、多进程实现并发服务器

通信服务器处理并发的任务,使用多线程或者多进程来解决。

2023-04-17 21:38:45 100

原创 4.19、TCP四次挥手

为什么断开连接不用三次挥手?与状态转换有关(他说之后介绍,学会了我回来改)连接的时候,采用三次握手建立的的连接是双向的,在断开的时候需要双向断开。客户端和服务器端都可以主动发起断开连接,谁先调用。四次挥手发生在断开连接的时候,在程序中当调用了。

2023-04-17 17:35:26 105

原创 4.18、TCP滑动窗口

滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。

2023-04-17 16:48:32 788

原创 4.17、TCP三次握手

【代码】4.17、TCP三次握手。

2023-04-16 11:52:03 201

空空如也

空空如也

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

TA关注的人

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