自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL空间配置器

STL源码剖析一书的读书笔记

2024-03-08 09:00:00 874

原创 Git学习笔记(流程图+示例)

学习git时的笔记

2024-03-05 09:39:03 1629

原创 Glibc之malloc实现原理

详细了解这部分知识,再看下面的内容会很舒服。

2023-12-10 16:37:10 850

原创 MySQL联合查询、最左匹配、范围查询导致失效

小林coding中的实验结论不一致- 注意!在小林coding中说到,关于范围查询对联合索引的影响对于 >=、

2023-12-06 22:34:47 242

原创 内存管理之虚拟内存

本篇遵循内存管理->地址空间->虚拟内存的顺序描述了内存管理、地址空间与虚拟内存见的递进关系,介绍了我对于虚拟内存的理解。

2023-09-21 16:40:35 170

原创 文件系统之程序是怎么打开文件进行操作的

*本篇文章自顶向下,从文件系统的上层出发讲到磁盘,帮助理解程序是如何打开文件并进行后序的读写操作的,读到后面,前面的一些疑惑就得到解决*

2023-09-21 15:23:06 155

原创 IP协议分片&&重组问题

IP数据报分片的主要目的是为了防止IP数据报文长度超过下一跳链路(最大传输单元)。

2023-08-28 22:35:40 1620

原创 两阶段提交

在Mysql中,redo log 和 binlog 都属于事务提交后持久到磁盘中。但是由于这两个操作不是同时进行的,也不是一个线程操作的,可能由于MySQL的宕机导致某个log持久化了而某个没有完成持久化。

2024-03-05 14:53:27 810

原创 学习时 红黑树旋转图 分析思路

2024-02-02 23:15:21 123

原创 菜鸟的日记

目标1:2024年1月15开始目标2:待定。

2024-01-19 17:07:03 368

原创 tcpdump出现permission denied

tcpdump权限错误解决办法

2023-12-30 14:56:06 816

原创 MySQL cAPI踩下的坑

MySQL中,如果查询之后没有释放结果集,会导致MySQL无法进行下一步操作使用mysql_errno获取错误码:2014。

2023-11-30 22:25:15 175

原创 MySQL C代码连接

用来生成MySQL对象,返回值为MySQL*,MySQL*是MySQL对象的指针。MySQL在mysql.h中是一个结构体。

2023-11-30 14:19:06 59

原创 MySQL错误之ONLY_FULL_GROUP_BY

所以,实际上该报错是由于在SQL查询语句中有group by,而这个包含group by的SQL查询写的并不规范导致的,这个ONLY_FULL_GROUP_BY模式开启之后检查就会很严格,如果select列表中包含非聚合列或者包含不在group by后面的列的时候,又开启了该模式,就会报错。

2023-11-23 23:15:51 268

原创 docker更改存储目录原因及方案

将/var/lib/docker挂载到一个大的磁盘,这种一般我们能控制挂载目录,像腾讯云这种云厂商在。安装之前挂载一个大的磁盘,然后创建一个软链接到/var/lib/docker,这样就自动安装到我们空。二、软件和系统一般不要混用目录,最好使用自己的目录,防止因为软件的频繁读写导致系统崩溃。一、是占用磁盘大,不可控大小的软件最好将数据目录放到一个新的磁盘上。安装K8s的节点的时候提供了挂载选项,可以直接挂载这个目录过去。安装docker后,修改docker的配置文件。

2023-11-10 11:21:41 776

原创 IP协议报文结构

所以,尽管最小长度固定是20字节,IP头部中还是有必要包含一个 LENGTH 字段,来动态指示当前报头的长度,这对解析报文和扩展协议都非常重要。虽然最小长度是20字节,但IP头部中的可选字段使得其长度可以变化,最大可达60字节。IP报头有固定的格式,共包含了10个标准字段,加上可选字段,最大长度为60字节。IP头部有一个4位的"报头长度"字段,单位为4字节,它指明了当前报头包含的4字节段数量。IP报头的最小长度确实是20字节。例如,如果报头长度值为5,则报头的大小是 5 * 4 = 20字节。

2023-08-24 21:38:06 318

原创 三次握手四次挥手之全连接&&半连接队列

不管是半连接队列还是全连接队列,都有最大长度限制,超过限制时,内核会直接丢弃,或返回 RST 包(在TCP通信中,RST包用于终止连接或者中断双方之间的通信。服务器listen socket收到客户端SYN请求后,放入这个队列等待连接建立。,并向客户端响应 SYN+ACK,此时服务端处于SYN_RCYD状态。方法只是为了从全连接队列中拿出一条连接,本身跟三次握手几乎毫无关系。接着客户端会返回 ACK,服务端收到第三次握手的 ACK 后,时,内核会自动创建一个半连接队列和全连接队列。每一个socket执行。

2023-08-24 20:33:21 254

原创 三次握手&&四次挥手

首先我们要清楚,建立连接意味着OS需要把这些已经建立好的连接管理起来。要管理!就要先描述,在组织!OS内为了管理连接就要创建数据结构所以说,创建维护连接是有成本的!!!即 内存+CPU2次为什么不可以2次握手—SYN洪水,非常容易收到攻击,大量的SYN请求,导致服务器OS只要收到SYN就开始维护链接,导致内存和CPU的高负荷。- 如果仅 SYN - SYN/ACK,那就不能判断服务器到客户端的SYN/ACK是否丢失,从而导致服务器处于一直处于ESTABLISHED状态,但客户端没有成功建立连接。

2023-08-23 22:19:30 214

原创 TCP可靠性机制

TCP帮助确保数据的准确传递。为了做到这一点,其使用了一些特殊的标记和信息,其中包括序号、确认号和ACK字段。其中,它将每个字节的数据都进行了编号. 即为序列号.:就像给书中的每一页都编了号码一样,TCP也给要发送的数据包编上号码,这个号码叫做序号。这个序号表示该数据包在整个数据包的位置(tcp是面向字节流的,当数据包过大时会被拆分成多个数据包进行发送)。这样,接收方就知道哪些数据包已经接收,哪些还没有。:当接收方收到一个数据包后,它会回应一个特殊的包,其中包含一个确认号。

2023-08-22 22:12:43 615

原创 TCP性能机制

发送方如果长时间没有收到ACK应答,则会触发超时重传机制,重新发送数据包。但如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小,发送方一次只能发少量数据,效率较低。

2023-08-22 22:09:13 438

原创 TCP滑动窗口

在计算机网络中,数据通常被分成小块(也叫数据段)在网络中传输(为什么会被分成小块,请了解拥塞窗口和流量控制)。这些小块可能会在传输的过程中遇到延迟、丢失或乱序等问题。为了保证数据的正确传输,我们需要一种方法来管理数据的发送和接收。而滑动窗口就像是一个虚拟的窗口,用来控制发送方和接收方之间的数据交换。当发送方把数据段发送给接收方时,发送窗口会向前滑动,表示发送方可以继续发送更多的数据。接收方会根据自己的接收窗口的大小,告诉发送方它可以接收多少数据。

2023-08-22 22:07:06 227

原创 TCP协议报文结构

TCP(传输控制协议)是一种面向连接的、可靠的、全双工的传输协议。它使用头部(Header)和数据(Data)来组织数据包,确保数据的可靠传输和按序传递。

2023-08-20 21:06:57 845

原创 get&post请求方法区别

POST请求相对较安全,因为请求参数不会被暴露在URL中,比较私密,但仍可以被捕捉。POST请求将请求参数放在请求的消息体中进行传输,请求消息体通常是一个表单,其中包含了多个键值对,例如表单提交、文件上传等。GET请求的请求参数长度受限于URL的长度限制,在不同的浏览器和服务器上有不同的限制,一般在2KB~8KB之间。POST请求的请求参数长度没有明确的限制,但是受服务器和客户端的限制,一般在2MB左右,可以传输更大量的数据。GET请求将请求参数附加在URL后面,以问号(?

2023-08-20 20:14:47 63

原创 HTTPS

HTTPS 属于应用层协议,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

2023-08-19 20:50:59 339

原创 会话保持之Cookie&&Session

当你在浏览网页、登录社交媒体、购物网站,甚至使用各种在线服务时,你可能会遇到一个名为 “cookie” 的东西。那么,为什么需要这个 “cookie” ,什么是"cookie"?用简单的话来解释,“cookie” 就像是网站和你之间的一张小便条,它记录了一些信息,以便在你后续的访问中提供更好的体验。想象一下你在购物网站上购物的情景。当你把商品添加到购物车时,网站需要知道哪些商品是属于你的,以及你的购物车里有什么。这就是 “cookie” 的用处之一。

2023-08-18 21:16:06 206

原创 HTTP的并发连接限制和连接线程池

大量的客户端连接到服务器,会导致服务器端需要大量的维护连接资源,同时需要处理客户端的请求,这是如何高效的执行任务成了一个关键的问题,所以,的出现就是为了解决。

2023-08-18 20:48:46 1051

原创 HTTP连接管理

HTTP初始时1.0版本在浏览器每一次向服务器请求完资源都会立即断开TCP连接,如果想要请求多个资源,就必须建立多个连接,这就导致了服务端和客户端维护连接的开销。例如:一个网页中包含文字资源也包括视频资源也包括音频资源,曾经的http必须为每一个资源都建立一个连接来获取资源,这种连接方式叫做非持久连接。

2023-08-18 20:35:17 758

原创 URL的结构与作用

URL就像是互联网上资源的地址,就像你家的地址告诉别人你住在哪里一样。通过URL,我们能够找到并访问网络上的网页、图片、视频等各种东西。当我们在浏览器中输入一个网址,其实就是在告诉浏览器去哪里找需要的东西。URL还能让我们在网页上点击链接,跳转到其他页面或资源,就像点击地图上的标记去不同的地方一样。另外,开发者也可以用URL来让程序之间交换信息,比如通过URL来获取数据。所以,URL就是告诉电脑在哪里找到需要的东西的一种方法。等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.

2023-08-17 08:09:03 69

原创 TCP粘包问题

TCP是面向字节流的协议,不像UDP是面向数据报的,一个数据报就代表一份数据,不会被分割,TCP在受到对端TCP接收缓冲区大小的约束和MTU的影响,需要分割报文。所以,当用户消息通过 TCP 协议传输时,消息可能会被操作系统分组成多个的 TCP 报文进行传输。这时,接收方的程序如果不知道发送方发送的消息的长度,也就是不知道消息的边界时,是无法读出一个有效的用户消息的,因为用户消息被拆分成多个 TCP 报文后,并不能像 UDP 那样,一个 UDP 报文就能代表一个完整的用户消息。

2023-08-16 21:16:59 61

原创 HTTP协议请求响应模型

HTTP 是一个应用层协议,专门用来在两台主机之间传输文字、图片、音频、视频等的约定和规范。

2023-08-16 20:36:51 225

原创 UDP协议

UDP是一种传输层协议,用于在计算机网络中通过网络传输数据。与TCP不同,UDP是面向数据报的协议,是一种无连接的协议,即不需要在数据传输之前建立连接。

2023-08-15 20:18:00 63

原创 C++可变参数模板

在C++中,我们可以使用可变参数模板函数来实现接受可变个数参数的函数。

2023-08-10 17:53:20 107 1

原创 C风格可变参数函数

环境:Ubuntu gcc11.3.0。

2023-08-10 17:52:28 70 1

原创 可变参数宏函数

要定义可变参数宏函数,可以使用#define指令和特殊的宏定义语法。LOG:宏函数的名称。...:省略号表示可变数量的参数。macro_body:宏函数的具体代码。

2023-08-10 17:51:40 179 1

原创 模板在g++和vs下的区别

在linux云服务器上使用g++,想要使用万能引用去给类内的成员函数作为形参。但发生如下错误:但使用vs2019来编译这段代码却没有问题,能够正确执行。

2023-07-16 15:11:28 93 1

原创 char* 和 string 作为返回值谁可能出现的错误

string作为c++中标准库的一员,返回string时,会生成一个临时对象并进行深拷贝,拷贝内容使string内部管理的内存有效,避免了问题的产生。返回char*只是生成的临时对象只是拷贝了指向那块儿空间的地址,这毫无意义。我们返回该地址指针,打印它的值毫无意义,它的值可能已经被覆盖,这就是野指针中的一种情况。这就是char*与string在返回时的一个非常关键的差异 - string的深拷贝机制可以避免内存无效访问问题。为了修改上面的错误,我们可以将char* 改为const char*类型。

2023-04-29 17:03:39 182

原创 四大排序算法

直接插入排序最坏的情况下:逆序的情况就是最坏的情况,这意味着每一次进行单趟排序,tmp都要循环至最前面进行交换,时间复杂度时O(N²)。最好的情况:有序或者接近有序。这意味着单趟排序时每一个tmp代表的值要进行的循环只有1次或者接近1次,时间复杂度为O(N)。我们一般默认最坏的情况是时间复杂度,所以是O(N²)。希尔排序希尔排序的时间复杂度以我的能力实在没法儿求,需要高深的数学知识很强的数理能力。因为gap的取值有很多种方法,也没有一个公认的时间复杂度。直接选择排序。

2022-12-20 20:41:52 153

原创 简单二叉树

堆是由完全二叉树构成的数据存储结构。堆可以分为大堆和小堆。这就决定了堆中某个节点的值总是大于或小于其父节点的值。这里我们看下堆的分类:其最明显的原因就是堆是由完全二叉树构成,根据上图完全二叉树的两种分类,我们可以看到,如果利用数组来构建完全二叉树是不会浪费空间的,同时数组的尾删很方便,只需对数组的长度修改就可以实现删除和插入,这也就是我们采用数组来建堆而非链式结构的原因了。根据完全二叉树的结构性质和数组的存储结构性质可以得出:将根节点放在0下标处,其余节点按左右次序依次存放,观察存储结构可以得出以下公式:

2022-12-03 14:36:15 266

原创 函数重载的背后

函数重载是函数的一种特殊情况,c++允许在同意作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或类型或顺序)必须不同,以此作为标准确定构成函数重载。常用来处理实现功能类似而数据类型不同的问题。

2022-11-06 14:27:40 119

原创 浮点型的大小比较

浮点型不能用==来比较数据是否相等,因为浮点型数据在存储时会损失精度,可能大于原值也可能小于。在下图中我们可以看到,编译器打印在屏幕上的的值和我们期望得到的值并不相等,数据可能变大,也可能变小。这与浮点型在内存中的存取方式有关。

2022-10-23 07:53:33 2016

空空如也

空空如也

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

TA关注的人

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