自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高级IO--多路转接

后set变为0001,0000(第5位置为1) *(3)若再加入fd=2,fd=1,则set变为0001,0011 *(4)执行 select(6,&set,0,0,0)阻塞等待 *(5)若fd=1,fd=2上都发生可读事件,则select返回,此时set变为 0000,0011。(2)二是select返回后会把以前加入的但并无事件发生的fd清空,则每次开始select前都要重新从array取得fd逐一加入(FD_ZERO最先),扫描array的同时取得fd最大值maxfd,用于select的第一个参数.

2024-04-27 12:39:44 888

原创 网络协议栈--数据链路层

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.www.qq.com域名使用 “.”来连接。1、com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.2、qq:二级域名, 公司名.3、www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议。1、数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据。

2024-04-04 21:12:07 1254

原创 网络协议栈--网络层--IP协议

2、路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;但是目前IPv6还没有普及;4、每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,最外层的运营商路由器, WAN口IP就是一个公网IP了.

2024-03-25 01:31:51 1341 1

原创 网络协议栈--传输层--UDP/TCP协议

TCP全称为 “传输控制协议(Transmission Control Protocol”). 人如其名, 要对数据的传输进行一个详细的控制;

2024-03-24 19:55:56 1225

原创 网络协议栈--应用层--HTTPS协议

加密就是把明⽂(要传输的信息)进行⼀系列变换,⽣成密⽂的过程。解密就是把密⽂再进⾏⼀系列变换,还原成明⽂的过程。在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥(正确发⾳yue四声,不过⼤家平时都读作yao四声)。83版,有⼈要谋反⼲掉慈禧太后.恭亲王奕䜣给慈禧递的折⼦,折子内容只是扯⼀扯家常,套上⼀张挖了洞的纸就能看到真实要表达的意思。明⽂:“当⼼肃顺,端华,戴恒”(这⼏个⼈都是当时的权⾂,后来被慈禧⼀锅端)。

2024-03-04 01:26:13 942

原创 网络协议栈--应用层--HTTP协议

此处我们使用 8081 端口号启动了HTTP服务器. 虽然HTTP服务器一般使用80端口,但这只是一个通用的习惯. 并不是说HTTP服务器就不能使用其他的端口号.使用Edge测试我们的服务器时, 可以看到服务器打出的请求中还有一个。最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)(2)请求报头(Header): 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;

2024-03-04 01:24:23 507

原创 Boost搜索引擎项目

数据清洗(去标签)的本质就是把实现下载下来的数据源,把数据源中的标签去除,保留网页中真正的有效数据。详细实现见以下代码及注释:二、根据去标签之后的干净的数据构建正排和倒排索引:index.hpp正排索引是根据id找到对应的文档的一种索引形式。倒排索引是根据关键字找到对应的文档id的一种索引形式。例如:我们的搜索引擎都是通过关键字搜索内容的,所以我们平时使用搜索引擎搜索东西的时候,服务器后台都是先通过关键字查找自己的倒排索引,得到对应的doc_id,再通过doc_id查正排索引,获取到文档的内容,

2024-02-18 17:24:58 966

原创 网络版本计算器

以上就是关于网络版本计算器的全部实现过程了,你学会了吗?

2024-02-05 23:26:48 738

原创 简单的TcpServer(英译中)

实现一个简单的英译汉的功能。下面介绍程序中用到的socket API,这些函数都在sys/socket.h中。socket()打开一个网络通讯端口,如果成功的话,就像open()一样返回一个文件描述符;应用程序可以像读写文件一样用read/write在网络上收发数据;如果socket()调用出错则返回-1;对于IPv4, family参数指定为AF_INET;对于TCP协议,type参数指定为SOCK_STREAM, 表示面向流的传输协议;protocol参数的就不做介绍了,指定为0即可。服务

2024-02-05 21:37:33 1528

原创 简单的Udp服务器

【代码】简单的Udp服务器。

2024-02-05 21:33:14 879

原创 网络编程套接字

其实这两者是没有什么直接的关系的,只不过都是它们都是用来表示进程的唯一性的而已。2、IPv4、IPv6地址类型分别定义为常数AF_INET、AF_INET6. 这样,只要取得某种sockaddr结构体的首地址,不需要知道具体是哪种类型的sockaddr结构体,就可以根据地址类型字段确定结构体中的内容.我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分. 那么如何定义网络数据流的地址呢?

2024-02-05 21:32:13 921

原创 网络基础(一)

负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

2024-01-31 23:48:39 879

原创 Linux多线程:线程池(单例),读写锁

相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。如果感觉到有所帮助的话,那就点点小心心,点点关注呗,后期还会持续更新Linux系统编程的相关知识哦,我们下期见!若不等则失败,失败则重试,一般是一个自旋的过程,即不断重试。悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁,写锁,行锁等),当其他线程想要访问数据时,被阻塞挂起。注意:写独占,读共享,读写同时来的时候,读锁优先级高,但是读者后来的话,可以是在他前面的写者优先级高的。

2023-12-23 22:01:49 923

原创 Linux多线程:POSIX信号量,基于信号量的环形队列实现生产者消费者模型

以上就是基于信号量的环形队列实现的生产者消费者模型啦,你学会了吗?如果感觉到有所帮助的话,那就点点小心心,点点关注呗,后期还会持续更新Linux系统编程的相关知识哦,我们下期见!POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。上一个生产者-消费者的例子是基于queue的,其空间可以动态分配,现在基于固定大小的环形队列重写这个程序。但是我们现在有信号量这个计数器,就很简单的进行多线程间的同步过程。信号量的本质就是一把计数器。(POSIX信号量)。

2023-12-23 21:52:08 521

原创 基于阻塞队列下的生产者消费者模型(多线程)

生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。其与普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞,直到队列中被放入了元素;当队列满时,往队列里存放元素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进程操作时会被阻塞)2、支持并发(效率高)

2023-12-23 21:42:22 491

原创 Linux多线程

1、在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”。2、一切进程至少都有一个执行线程。3、线程在进程内部运行,本质是在进程地址空间内运行。4、在Linux系统中,在CPU看来,看到的PCB都要比传统的进程更加轻量化。5、透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。

2023-12-23 21:33:52 860

原创 进程的信号

每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中有定 义 #define SIGINT 2编号34以上的是实时信号,本文不讨论实时信号。这些信号各自在什么条件下产生,默认的处理动作是什么,在signal(7)中都有详细说明: man 7 signal上面所说的所有信号产生,最终都要有OS来进行执行,为什么?因为OS是进程的管理者。信号的处理是否是立即处理的?不一定,在合适的时候处理。信号如果不是被立即处理,那么信号是否需要暂时被进程记录下来?需要。

2023-12-01 14:51:33 989 1

原创 进程间通信(管道/消息队列/共享内存/信号量)

数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”。

2023-11-22 14:32:18 1049

原创 动态库和静态库

在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接(dynamic linking)一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。如:libc.so -> c库,去掉前缀lib,去掉后缀.so.a。

2023-11-13 13:48:10 144

原创 基础IO+文件系统(从软件到硬件再到软件)

pathname: 要打开或创建的目标文件flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写返回值:成功:新打开的文件描述符失败:-1。

2023-11-09 12:05:14 214 2

原创 Linux进程控制

(2)我们要通过进程等待,获取子进程的退出情况。就在子进程的PCB内核数据结构中保存着,所以在父进程wait等待子进程之前,子进程的PCB是需要一直维护着的,子进程的代码和数据那些可以先释放,但是PCB一定要等父进程wait/waitpid之后再释放,因为父进程需要知道子进程的退出信息。当我们收到退出信号,即退出信号不为0时,说明我们的进程是异常终止的,此时的退出信号对应着进程异常退出的原因,注意,进程异常退出时,因为代码都没有跑完,所以进程的退出码就没有意义了,只有在进程正常退出的时候退出码才有意义。

2023-10-31 01:13:03 122

原创 牛客题霸 -- HJ43 迷宫问题

牛客题霸 -- HJ43 迷宫问题

2023-10-29 17:14:42 170

原创 牛客题霸 -- HJ52 计算字符串的编辑距离

牛客题霸 -- HJ52 计算字符串的编辑距离

2023-10-27 18:46:01 156

原创 进程地址空间

(4)、bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率!4、没关系的,因为在合适的时候,只要能够交换active指针和expired指针的内容,就相当于有具有了一批新的活动进程!3、可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。我们发现,父子进程,输出地址是一致的,但是变量内容不一样!2、过期队列上放置的进程,都是时间片耗尽的进程。

2023-10-22 10:06:40 213

原创 牛客网 -- WY28 跳石板

牛客网 -- WY28 跳石板

2023-10-18 18:15:37 97

原创 C++ IO流

使用cin进行标准输入,即数据通过键盘输入到程序中,同时C++标准库还提供了cerr用来进行标准错误的输出,以及clog进行日志的输出,从上图可以看出,cout、cerr、clog是ostream类的三个不同的对象,因此这三个对象现在基本没有区别,只是应用场景不。2.可以使用这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。

2023-10-18 01:41:06 206

原创 C/C++类型转换

缺陷:转换的可视性比较差,所有的转换形式都是以一种相同形式书写,难以跟踪错误的转换。强制类型转换关闭或挂起了正常的类型检查,每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同的方法达到同一目的,如果非强制类型转换不可,则应限制强制转换值的作用。static_cast用于非多态类型的转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关的类型进行转换。

2023-10-17 15:13:51 103

原创 特殊类的设计

如果单例对象构造十分耗时或者占用很多资源,比如加载插件, 初始化网络连接,读取文件等等操作时,并且有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。以上就是常见的特殊类的设计,你学会了吗?今天的分享就到这里啦,如果你感觉到有所收获,那么就点点小心心点点关注呗,后期还会持续更新C++的相关知识哦,我们下期见!信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。

2023-10-16 00:07:54 324

原创 C++11智能指针

C++中的智能指针是一种特殊类型的指针,它能够自动管理动态分配的内存资源,从而简化内存管理的过程并减少内存泄漏的风险。智能指针通过在对象上使用引用计数技术来跟踪资源的使用情况,并在不再需要该资源时自动释放它。这种自动化的内存管理可以帮助开发人员避免手动释放内存的繁琐工作,并减少因忘记释放内存而导致的错误。什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对。

2023-10-15 11:15:31 744

原创 力扣 -- 1035. 不相交的线

力扣 -- 1035. 不相交的线

2023-10-11 15:46:33 96

原创 力扣 -- 1143. 最长公共子序列

力扣 -- 1143. 最长公共子序列

2023-10-11 14:27:04 177

原创 力扣 -- 1312. 让字符串成为回文串的最少插入次数

力扣 -- 1312. 让字符串成为回文串的最少插入次数

2023-10-11 13:26:43 213 1

原创 C++11(下)

例如现在有一个string类,这是一个深拷贝的类,我们实现了析构,拷贝构造,赋值,但是没写移动构造和移动赋值。所以说,如果是深拷贝的类,即我们要自己实现析构,同时要实现拷贝构造,赋值重载函数时,我们就要自己实现移动构造和移动赋值,如果我们没有实现析构,拷贝构造,赋值中的任意一个,说明我们写的类是浅拷贝的类,这时编译器才会自动给我们生成移动构造和移动赋值,默认生成的移动构造对于内置成员完成值拷贝、浅拷贝,对于自定义类型会看它有没有实现移动构造,有实现就调用移动构造,没有实现就调用拷贝构造。

2023-10-09 23:34:42 1003

原创 力扣 -- 516. 最长回文子序列

力扣 -- 516. 最长回文子序列

2023-10-07 23:22:41 228

原创 力扣 -- 132. 分割回文串 II

力扣 -- 132. 分割回文串 II

2023-10-07 09:40:53 180 1

原创 力扣 -- 1745. 分割回文串 IV

力扣 -- 1745. 分割回文串 IV

2023-10-07 00:27:27 175

原创 力扣 -- 5. 最长回文子串

力扣 -- 5. 最长回文子串

2023-10-06 23:57:41 167

原创 力扣 -- 647. 回文子串

力扣 -- 647. 回文子串

2023-10-06 23:23:53 170

原创 力扣 -- 446. 等差数列划分 II - 子序列

力扣 -- 446. 等差数列划分 II - 子序列

2023-10-06 19:59:24 171

原创 力扣 -- 1027. 最长等差数列

力扣 -- 1027. 最长等差数列

2023-10-05 17:05:01 223

C语言思维导图xmind

C语言思维导图xmind

2023-02-12

空空如也

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

TA关注的人

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