自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【在Linux世界中追寻伟大的One Piece】进程间通信

管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个"管道"。

2024-09-26 19:14:55 641 25

原创 【在Linux世界中追寻伟大的One Piece】验证TCP

成功调用该函数后,Winsock库的状态会被初始化,应用程序就可以使用Winsock提供的一系列套接字服务,如地址家族识别、地址转换、名字查询和连接控制等。在调用WSAStartup函数后,如果应用程序完成了对请求的Socket库的使用,应调用WSACleanup函数来解除与Socket库的绑定并释放所占用的系统资源。这样,编译器就能够识别并理解Winsock2中定义的数据类型和函数,从而能够正确地编译和链接网络相关的代码。接受客户端的连接请求,并返回一个新的套接字描述符,用于与客户端进行通信。

2024-09-22 23:40:55 1639 79

原创 【在Linux世界中追寻伟大的One Piece】IP分片和组装的具体过程

16位标识(id):唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为0,其他是1。类似于一个结束标记。13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移。其实就是在表示当前分片在原报文中处在哪个位置。

2024-09-21 23:54:32 1098 61

原创 【在Linux世界中追寻伟大的One Piece】进程间关系与守护进程

会话其实和进程组息息相关,会话可以看成是一个或多个进程组的集合, 一个会话可以包含多个进程组。每一个会话也有一个会话ID(SID)。通常我们都是使用管道将几个进程编成一个进程组。# &表示将进程组放在后台执行# 用管道和 sleep 组成一个进程组放在后台运行# 查看 ps 命令打出来的列描述信息# 过滤 sleep 相关的进程信息# a 选项表示不仅列当前⽤户的进程,也列出所有其他⽤户的进程# x 选项表示不仅列有控制终端的进程,也列出所有⽆控制终端的进程。

2024-09-18 17:48:23 1487 80

原创 【在Linux世界中追寻伟大的One Piece】网络命令|验证UDP

Ping命令是一种网络诊断工具,它使用ICMP(Internet Control Message Protocol,互联网控制消息协议)来检测网络连接。当您执行ping命令时,它会向指定的主机发送一系列的ICMP回显请求(echo request)消息,并等待接收ICMP回显响应(echo reply)消息。通过分析这些响应,您可以判断目标主机是否可达以及网络的响应时间等信息。

2024-09-15 20:02:28 1784 77

原创 【在Linux世界中追寻伟大的One Piece】五种IO模型和阻塞IO

高级IO涉及到文件的IO操作,它包括多种技术,如非阻塞IO、记录锁、IO多路转接、异步IO和存储映射等。这些技术通常依赖于文件描述符(fd)和fcntl函数的支持,用于提高文件IO操作的效率和灵活性。

2024-09-12 21:29:10 1551 79

原创 【在Linux世界中追寻伟大的One Piece】NAT|代理服务|内网穿透你会吗?

NAT(网络地址转换)技术的背景主要是为了解决IPv4地址空间的有限性问题。随着互联网的快速发展和用户数量的激增,IPv4地址资源变得越来越紧张。为了在有限的公网IP地址资源下连接更多的设备,NAT技术应运而生。NAT技术允许私有网络内部使用非路由的私有IP地址,并在连接到互联网时使用少量的路由的公网IP地址。这样,多个设备可以共享一个或几个公网IP地址,有效减少了对公网IP地址的需求。

2024-09-09 22:30:55 1882 71

原创 【在Linux世界中追寻伟大的One Piece】数据链路层

数据链路层是OSI模型的第二层,它负责在相邻节点之间的物理链路上实现可靠的数据传输。数据链路层的主要功能包括帧同步、差错检测和纠正、流量控制以及链路管理。它通过将网络层传递的数据包封装成帧,并添加必要的控制信息(如源地址和目标地址)来实现这些功能。数据链路层还负责在物理层提供的服务基础上向网络层提供服务,确保数据能够可靠地从一个网络实体传输到另一个网络实体。

2024-09-06 00:03:24 2176 86

原创 【在Linux世界中追寻伟大的One Piece】网络层

网络层是计算机网络中的一个重要层次,它负责在多个网络之间传输数据包,并通过路由选择算法为分组通过通信子网选择最适当的路径。网络层的核心协议是IP(Internet Protocol),它提供了一种不可靠的端到端数据包传输服务,依赖于IP地址来实现数据的寻址和转发。网络层还包括其他协议,如ICMP(Internet Control Message Protocol)用于传递控制信息,以及IGMP(Internet Group Management Protocol)用于管理多播组成员。

2024-09-02 19:40:49 1478 84

原创 【在Linux世界中追寻伟大的One Piece】传输层协议TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它是互联网协议套件中的核心协议之一,由IETF的RFC 793定义。TCP提供了一种全双工通信方式,确保数据的顺序性、完整性和可靠性。TCP通过三次握手建立连接,并在数据传输过程中使用序列号、确认应答、重传机制、流量控制和拥塞控制等技术来维护通信的可靠性。在TCP连接的生命周期中,还包括数据传送和连接终止两个阶段。

2024-08-31 22:06:42 1518 63

原创 【在Linux世界中追寻伟大的One Piece】传输层协议UDP

传输层是计算机网络OSI模型中的第四层,它负责在网络中的两个节点之间提供端到端的数据传输服务。传输层的主要任务包括分段与重组、端口标识、连接控制(面向连接的TCP和无连接的UDP)、流量控制和差错检测与处理等,以确保数据的可靠、有序和高效传输。

2024-08-28 18:21:03 2388 73

原创 【在Linux世界中追寻伟大的One Piece】应用层协议HTTP

虽然我们说,应用层协议是我们程序猿自己定的。但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。就是其中之一。在互联网世界中,是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如HTML文档)。HTTP协议是客户端与服务器之间通信的基础。客户端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是一个的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

2024-08-25 19:37:10 2532 72

原创 【在Linux世界中追寻伟大的One Piece】IO基础

打开文件的方式:rr+wTruncate(缩短) file to zero length or create text file for writing.w+aa+pathname: 要打开或创建的目标文件flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个。

2024-08-23 19:16:36 1227 66

原创 【在Linux世界中追寻伟大的One Piece】网络基础概念

计算机网络是由多台计算机或设备通过通信线路连接起来的系统,它们可以通过数据链路进行通信和资源共享。计算机网络的基本功能包括资源共享、信息传输、分布式处理和远程通信等。资源共享允许网络中的用户访问其他计算机上的硬件资源、软件资源和数据资源,而信息传输则是网络的核心功能,使得用户可以发送和接收各种形式的信息。

2024-08-21 19:59:08 927 52

原创 【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(三)

JavaScript是一种广泛使用的、基于原型的、多范式的、解释执行的高级编程语言,主要在浏览器环境中运行,用于增强网页的动态功能和交互性。自1995年由Netscape公司的Brendan Eich设计以来,JavaScript已经成为了Web开发的标准语言之一,并且随着Node.js的出现,它也逐渐被用于服务器端编程。

2024-08-18 17:47:58 2196 71

原创 【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(二)

JavaScript是一种广泛使用的、基于原型的、多范式的、解释执行的高级编程语言,主要在浏览器环境中运行,用于增强网页的动态功能和交互性。自1995年由Netscape公司的Brendan Eich设计以来,JavaScript已经成为了Web开发的标准语言之一,并且随着Node.js的出现,它也逐渐被用于服务器端编程。

2024-08-15 18:36:30 2604 68

原创 【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(一)

JavaScript是一种广泛使用的、基于原型的、多范式的、解释执行的高级编程语言,主要在浏览器环境中运行,用于增强网页的动态功能和交互性。自1995年由Netscape公司的Brendan Eich设计以来,JavaScript已经成为了Web开发的标准语言之一,并且随着Node.js的出现,它也逐渐被用于服务器端编程。

2024-08-13 20:42:00 2138 65

原创 【海贼王航海日志:前端技术探索】CSS你了解多少?(三)

层叠样式表(Cascading Style Sheets)。CSS能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果。能够做到页面的样式和结构分离。

2024-08-11 20:01:57 2517 56

原创 【海贼王航海日志:前端技术探索】CSS你了解多少?(二)

层叠样式表(Cascading Style Sheets)。CSS能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果。能够做到页面的样式和结构分离。

2024-08-08 18:57:14 1442 66

原创 【海贼王航海日志:前端技术探索】CSS你了解多少?(一)

层叠样式表(Cascading Style Sheets)。CSS能够对网页中元素位置的排版进行像素级精确控制,实现美化页面的效果。能够做到页面的样式和结构分离。

2024-08-05 15:49:22 1468 68

原创 【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)

HTML(超文本标记语言——HyperText Markup Language)是构成 Web 世界的一砖一瓦。它定义了网页内容的含义和结构。除 HTML 以外的其他技术则通常用来描述一个网页的表现与展示效果(如 CSS),或功能与行为(如 JavaScript)。“超文本”(hypertext)是指连接单个网站内或多个网站间的网页的链接。链接是网络的一个基本方面。只要将内容上传到互联网,并将其与他人创建的页面相链接,你就成为了万维网的积极参与者。

2024-08-02 00:29:42 1025 70

原创 【海贼王航海日志:前端技术探索】HTML你学会了吗?(一)

HTML,全称为HyperText Markup Language,即超文本标记语言,是一种用于创建网页的标准标记语言。HTML允许用户在网页中加入各种元素,如文本、图像、链接、表格、列表、视频等,从而构建出结构化的文档。

2024-07-29 20:39:57 4689 63

原创 【在Linux世界中追寻伟大的One Piece】Linux进程控制

在Linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。返回值:子进程中返回0,父进程返回子进程id,出错返回-1。进程调用fork,当控制转移到内核中的fork代码后,内核做:分配新的内存块和内核数据结构给子进程。将父进程部分数据结构内容拷贝至子进程。添加子进程到系统进程列表当中。fork返回,开始调度器调度。当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。

2024-07-28 02:48:15 1195 53

原创 【在Linux世界中追寻伟大的One Piece】Linux进程概念

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。截至目前,我们所认识的计算机,都是一个个的硬件组件组成输入单元:包括键盘、鼠标、扫描仪、写板等;中央处理器(CPU):含有运算器和控制器等;输出单元:显示器、打印机等。关于冯诺依曼,必须强调的几点:这里存储器指的是内存;不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备);外设(输入或输出设备)要输入或输出数据,也只能写入内存或从内存中读取;所有设备都只能直接和内存打交道。

2024-07-25 00:24:58 2873 61

原创 【C++航海王:追寻罗杰的编程之路】关于空间配置器你知道多少?

空间配置器,顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的,在默默地工作。虽然在常规使用STL时,可能用不到它,但站在学习研究的角度,学习它的实现原理对我们有很大的帮助。

2024-07-21 18:45:37 1700 54

原创 【C++航海王:追寻罗杰的编程之路】C++的IO流

在C语言中,如果想要将一个整型变量的数据转化为字符串格式,该如何去做呢?使用itoa()函数。使用sprintf()函数。但是两个函数在转化时,都得需要先给出保存结果的空间,那空间又需要给多大呢?这个就不太好界定了,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题。在程序中如果想要使用stringstream,必须要包含头文件。

2024-07-18 14:44:18 1069 52

原创 【C++航海王:追寻罗杰的编程之路】智能指针

什么是内存泄漏:内存泄漏是指因为疏忽或者错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放// 2.异常安全问题Func();// 这里Func函数抛异常导致 delete[] p3未执行,p3没被释放.

2024-07-16 16:37:03 1524 52

原创 【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器

给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。遍历,时间复杂度O(N)。排序(O(NlogN)),利用二分查找:logN。位图解决:数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。

2024-07-14 20:19:13 1710 51

原创 【C++航海王:追寻罗杰的编程之路】一篇文章带你认识哈希

unordered_map文档说明unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于唯一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部unordered_map没有对按照任何特定的顺序排序,为了能在常数范围内找到key所对应的value,unordered_map将相同的哈希值的键值对放在相同的桶中。

2024-07-12 16:58:21 1746 52

原创 【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

红黑树,是一种二叉搜索树,但在每个节点上增加了一个存储位表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。

2024-07-10 15:57:27 1312 48

原创 【在Linux世界中追寻伟大的One Piece】HTTPS协议原理

加密就是把明文(需要传输的信息)进行一系列变换,最后生成密文。解密就是把密文再进行一系列变换,最终还原成明文。在这个加密和解密的过程中,往往需要一个或者多个中间数据,辅助进行这个过程,这样的数据就称为密钥(正确发音应该是yue四声,不过平时都读作yao四声)。比如古时的"藏头诗":我花蓝江水悠悠,爱晚亭上枫叶愁。秋月溶溶照佛寺,香烟袅袅绕经楼。这首诗是许多人熟知的明代画家、书法家、诗人唐寅的作品。单从字面上来看,这是一首描写风景名物的诗作。

2024-07-07 19:17:04 2193 51

原创 【海贼王的数据航海】ST表——RMQ问题

ST表(Sparse Table,稀疏表),主要应用倍增思想,是一种用于解决可重复贡献问题的数据结构。它通过预处理给定数组,创建一个二维表格,使得任何区间的最小/最大值查询都可以在常数时间内完成。ST表特别适合于静态数据:当数列不经常改变时,它是最有效的。可以实现O(nlogn)预处理、O(1)查询。主要用于解决RMQ问题。可重复贡献问题是指在某些特定的数学运算中,当运算的性质满足一定条件时,即使是在包含重复部分的区间内进行询问,所得到的结果仍然是相同的问题。这种问题的特点是,它们可以。

2024-07-06 17:20:02 764 27

原创 【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——AVL树

二叉搜索树虽然可以缩短查找的效率,但如果数据有序或者接近有序的二叉搜索树将退化成单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新节点后,如果能保证每个节点的左右子树的高度差的绝对值不超过1(需要对树中的节点进行调整),即可降低树的高度,从而减少平均搜索的长度。

2024-07-05 18:29:57 1586 37

原创 【C++航海王:追寻罗杰的编程之路】set|map|multiset|multimap简单介绍

set的文档介绍翻译:set是按照一定次序存储元素的容器。在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。

2024-05-31 15:07:37 1093 105

原创 【C++航海王:追寻罗杰的编程之路】一篇文章带你了解二叉搜索树

对有n个节点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是节点在二叉搜索树的深度的函数,即节点越深,比较次数越多。,通过英文可以快速找到与其对应的中文,英文单词与其对应的中文就构成一种键值对。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。,统计成功后,给定单词就可以快速找到其出现的次数,最多查找高度次,走到空,还没找到,这个值不存在。

2024-05-14 15:43:20 852 95

原创 【C++航海王:追寻罗杰的编程之路】特殊类的设计方式你知道哪些?

为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

2024-05-04 16:15:23 1269 100

原创 【C++航海王:追寻罗杰的编程之路】多态你了解多少?

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。在虚函数的后面写上 = 0,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。

2024-05-01 18:34:59 1370 61

原创 【C++航海王:追寻罗杰的编程之路】C++11(四)

在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含头文件。C++11中线程类函数名功能thread()构造一个线程对象,没有关联任何线程函数,即没有启动任何线程构造一个线程对象,并关联线程函数fn, args1, args2, ……为线程函数的参数。

2024-04-28 16:22:03 1869 70

原创 【C++航海王:追寻罗杰的编程之路】C++11(三)

默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。默认生成的移动构造函数,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动构造,如果实现了就调用移动构造,没有实现就调用拷贝构造。(printarg(arg2),0), (printarg(arg3),0), etc... ),最终会创建一个元素值都为0的数组int arr[sizeof...(Args)]。

2024-04-25 19:13:06 1210 72

原创 【C++航海王:追寻罗杰的编程之路】C++11(二)

那么什么是左值?什么是左值引用呢?那么什么是右值?什么是右值引用呢?

2024-04-22 18:37:52 2599 77

KZZI_RGB_Keyboard_Setup_V2.0 20221004.exe

KZZI_RGB_Keyboard_Setup_V2.0 20221004.exe

2022-11-27

空空如也

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

TA关注的人

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