- 博客(52)
- 收藏
- 关注
原创 Linux:理解HTTPS
数字指纹(又称数据摘要),其基本原理是利用单向散列函数(Hash 函数)对原始信息进行运算,生成一串固定长度的二进制或十六进制字符串。数字指纹并不是一种加密机制,核心作用是判断数据在传输或存储过程中是否被篡改。(常见摘要算法:MD5、SHA1、SHA256、SHA512 等。这类算法的本质是把无限长度的原始数据映射成固定长度的摘要值,因此理论上存在 “碰撞” 可能性(即两个不同的原始信息,计算出的摘要值完全相同),但不同算法的碰撞概率差异较大,如 SHA256 的碰撞概率远低于 MD5。
2025-12-11 22:35:23
971
原创 JsonCpp库
是⼀种数据交换格式,它采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。库主要借助三个类以及其对应的少量成员函数完成序列化及反序列化。格式数据的序列化和反序列化,它实现了将多个数据对象组织成。的数据类型包括对象,数组,字符串,数字等。格式字符串解析得到多个数据对象的功能。例如: 我们想表⽰⼀个同学的学⽣信息。数字:包括整形和浮点型,直接使⽤。字符串:使⽤常规双引号 ""对象:使⽤花括号 {}数组:使⽤中括号 []括起来的表⽰⼀个字符串。括起来的表⽰⼀个对象。括起来的表⽰⼀个数组。
2025-11-20 00:06:56
194
原创 MySQL:表的约束
表的约束:表中一定要有各种约束,通过约束,让我们未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段,倒逼程序员,插入正确的数据。反过来,站在 mysql 的视角,凡是插入进来的数据,都是符合数据约束的约束的最终目标:保证数据的完整性和可预期性。
2025-11-13 14:12:30
314
原创 MySQL:数据库基础
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。数据库服务器、数据库和表的关系如下:一个DB目录就是一个数据库。是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如。存储数据用文件就可以了,为什么还要弄个数据库。数据定义语言,用来维护存储数据的。数据库,它能更有效的管理数据。
2025-11-09 19:40:33
367
原创 Linux:多路转接
如果服务端写的代码是阻塞式的read, 并且⼀次只 read 1k 数据的话(read不能保证⼀次就把所有的数据都读出来, 参考 man ⼿册的说明, 可能被信号打断), 剩下的9k数据就会待在缓冲区中.理解select模型的关键在于理解fd_set,为说明⽅便,取fd_set⻓度为1字节,fd_set中的每⼀bit可以对应⼀个⽂件描述符fd。所以, 为了解决上述问题(阻塞read不⼀定能⼀下把完整的请求读完), 于是就可以使⽤⾮阻塞轮轮询的⽅式来读缓冲区, 保证⼀定能把完整的请求都读出来.
2025-11-08 23:52:18
822
原创 Linux:五种IO模型与非阻塞IO
⽽是在调⽤发出后,被调⽤者通过状态、通知来通知调⽤者,或通过回调函数处理这个调⽤.所谓同步,就是在发出⼀个调⽤时,在没有得到结果之前,该调⽤就不返回. 但是⼀旦调⽤返回,就得到返回值了;任何IO过程中, 都包含两个步骤. 第⼀是等待, 第⼆是拷贝. ⽽且在实际的应用场景中, 等待消耗的。阻塞IO: 在内核将数据准备好之前, 系统调⽤会⼀直等待. 所有的套接字, 默认都是阻塞⽅式.阻塞调⽤是指调⽤结果返回之前,当前线程会被挂起. 调⽤线程只有在得到结果之后才会返回.
2025-11-04 13:47:13
611
原创 Linux:数据链路层
目标MAC地址(6字节) | 源MAC地址(6字节) | 帧类型(2字节) | 数据载荷(46 - 1500字节) | CRC校验码(4字节) |1.源地址和目的地址(MAC地址)定义:确为网卡的物理地址 / 硬件地址,长度48位(6字节),网卡出厂时固化。MAC地址用来识别数据链路层中相连的节点;长度为48位, 及6个字节.一般用16进制数字加上冒号的形式来表示(例如: 08 : 00 : 27 : 03 : fb : 19)
2025-10-24 09:29:06
924
1
原创 Linux:网络层
IP协议IP协议基本概念主机: 配有IP地址, 也要进行路由控制的设备;路由器: 即配有IP地址, 又能进行路由控制;节点: 主机和路由器的统称;协议头格式ip报头版本 字段占 4 位,它指明了 IP 协议的版本号。对于 IPv4,这个值固定为 4。4 位 头部长度 字段。它表示 IP 头部的长度单位是 32 位字(即 4 字节)。因为 4 位能表示的最大数字是 15,所以 IP 头部的最大长度是 15 × 4 = 60 字节。
2025-10-17 09:11:25
735
1
原创 Linux:传输层协议
传输层传输层负责数据能够从发送端传输接收端端口号端口号(Port)标识了⼀个主机上进⾏通信的不同的应⽤程序;在TCP/IP协议中, ⽤ "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样⼀个五元组来标识⼀个通信(可以通过netstat -n查看);端⼝号范围划分0 - 1023: 知名端⼝号, HTTP, FTP, SSH等这些⼴为使⽤的应⽤层协议, 他们的端⼝号都是固定的.
2025-10-14 16:28:26
791
原创 Linux:应用层协议HTTP
Body: 空⾏后⾯的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有⼀个 Content-Length属性来标识Body的⻓度;HTTP协议是⼀个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。这个Location选项是⼀个标准的HTTP响应头部,⽤于告诉浏览器应该将请求重定向到哪个新的URL地址。当客户端和服务器都不明确指定关闭连接 时,连接将保持打开状态,以便后续的请求和响应可以复⽤同⼀个连接。:与302类似,但更严格。
2025-10-12 12:42:06
681
原创 Linux:网络基础
计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表⽰ 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双⽅的数据格式.所以,完善的协议,需要更多更细致的规定,并让参与的⼈都要遵守。在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃定向下将数据交付给下层协议,最后由底层发送,然后由对⽅主机的底层来进⾏接受,在⾃底向上进⾏向上交付,下⾯是⼀张⽰意图。TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求。
2025-09-30 13:52:56
504
原创 Linux:进程信号理解
技术应⽤⻆度的信号样例•⽤⼾输⼊命令,在Shell下启动⼀个前台进程•⽤⼾按下 Ctrl+C,这个键盘输⼊产⽣⼀个硬件中断,被OS获取,解释成信号,发送给⽬标前台进程•前台进程因为收到信号,进⽽引起进程退出。
2025-09-05 22:44:52
1157
原创 Linux:简单理解进程概念
操作系统(Operator System)1.冯诺依曼体系结构我们常⻅的计算机,如笔记本。我们不常⻅的计算机,如服务器,⼤部分都遵守冯诺依曼体系。截⾄⽬前,我们所认识的计算机,都是由⼀个个的硬件组件组成输⼊单元:包括键盘, ⿏标,扫描仪, 写板等中央处理器(CPU):含有运算器和控制器等输出单元:显⽰器,打印机等这⾥的存储器指的是内存不考虑缓存情况,这⾥的CPU能且只能对内存进⾏读写,不能访问外设(输⼊或输出设备)外设(输⼊或输出设备)要输⼊或者输出数据,也只能写⼊内存或者从内存中读取。
2025-04-18 21:10:48
927
原创 探索C++11:解锁现代编程(3)
1.包装器1.包装器是 C++ 标准库中的一个模板类,位于头文件中。它用于封装可调用对象,包括普通函数、Lambda 表达式、函数对象、成员函数等。提供了极大的灵活性,使得你可以将不同类型的可调用对象统一管理。
2025-04-04 18:33:53
1151
原创 红黑树:数据结构中的平衡艺术
红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。1.1红黑树的规则1. 每个结点不是红⾊就是⿊⾊2. 根结点是⿊⾊的3. 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。4. 对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点。
2025-03-05 18:46:40
1122
原创 AVL树:自平衡的二叉搜索树
AVL树是一种特殊的二叉搜索树,其中每个节点的左子树和右子树的高度差(称为平衡因子)最多为1。如果任何时候这个条件被违反,将会通过一系列的旋转操作来重新平衡树。
2024-12-04 23:36:51
860
原创 探索二叉树:二叉搜索树的实践
1.二叉搜索树的概念1.二叉搜索树的概念⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值它的左右⼦树也分别为⼆叉搜索树2.⼆叉搜索树的性能分析。
2024-11-15 00:04:23
1186
原创 二叉树:基础、操作与应用
1.1树的概念与结构树是⼀种⾮线性的数据结构,它是由nn>=0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。有⼀个特殊的结点,称为根结点,根结点没有前驱结点。除根结点外,其余结点被分成M(M>0)个互不相交的集合T1T2……Tm,其中每⼀个集合⼜是⼀棵结构与树类似的⼦树。每棵⼦树的根结点有且只有⼀个前驱,可以有0个或多个后继。因此,树是递归定义的。1.2树相关术语。
2024-11-14 19:44:39
1314
原创 多态:面向对象编程的精髓
1.多态的概念多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。编译时多态(静态多态)主要就是我们前⾯讲的函数重载和函数模板,他们传不同类型的参数就可以调⽤不同的函数,通过参数不同达到多种形态,之所以叫编译时多态,是因为他们实参传给形参的参数匹配是在编译时完成的,我们把编译时⼀般归为静态,运⾏时归为动态。编译时多态(Compile-time Polymorphism),也称为静态多态性,是指在编译时就能确定多态行为的多态性。
2024-11-13 00:09:12
1436
原创 继承——面向对象编程的基石
以下是一些关于基类和派生类的基本概念:1.基类(父类)基类是被继承的类,它提供了一些属性和方法,这些可以被子类继承。2.派生类(子类)派生类是从基类继承而来的类,它可以添加新的属性和方法,也可以重写基类的方法。派生方式派生类可以以三种方式从基类派生:1.public继承:这是默认的派生方式。
2024-11-06 18:43:33
1290
原创 priority_queue的介绍和使用
默认情况下, priority_queue 使用 std::less 作为比较函数,这意味着它是一个最大堆。如果需要一个最小堆,可以传递一个自定义的比较函数,如 std::greater。priority_queue 是 C++ STL 中一个强大的工具,它允许以堆的方式管理元素的优先级。通过使用仿函数,我们可以灵活地定义元素的优先级顺序,无论是最大堆还是最小堆。这种灵活性使得 priority_queue 在解决各种算法问题时非常有用,特别是在需要根据优先级处理元素的场景中。
2024-10-30 10:55:21
1074
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅