- 博客(50)
- 收藏
- 关注
原创 【MySQL】MySQL库的操作
最简单的创建数据库的语法创建数据库,相当于在/var/lib/mysql 路径下创建一个目录:表示如果数据库不存在就创建,:表示数据库使用的字符集:表示数据库使用的校验集不声明数据库使用的字符集和校验集的时候,默认使用的是utf-8utf8_bin。
2026-04-17 17:36:29
189
原创 【计算机网络】多路转接之epoll
在网络中,多路转接的方法有selectpoll以及epoll,在小型项目中常用的是select,在大型项目中常用的是epollepoll是改进了select和poll的缺点的一种多路转接的模式。
2026-03-27 21:20:49
407
原创 【计算机网络】高级IO模型与多路转接select、poll
IO就是input和output,将外设中的数据获取到内存以及将内存中的数据刷新到外设。但是IO的效率是很慢的,当我们scanf的时候,如果不在键盘上输入数据,那么执行流就会一直阻塞在scanf上,等待用户输入,当用户从键盘输入数据之后,会将用户输入的数据,拷贝到内存。上述可以看出,其实,真正导致IO效率低的原因是等待,拷贝的速度还是较为可观的。所以想要提高IO的效率,就是要减少等待的时间,提高单位时间内拷贝的数量下面介绍五种高级IO的模型。
2026-03-23 12:49:30
457
原创 【计算机网络】数据链路层原理
在网络传输中,应用层解决的是将报文序列化交给传输层,从传输层读取的报文再转化成格式化数据的问题;传输层解决的是控制报文怎样发以及丢包之后如何处理的问题;网络层解决的是长距离网络传输路径选择的问题,数据链路层解决的是,数据在两个设备之间如何传输的问题。
2026-03-21 17:50:30
400
原创 【计算机网络】IP网络层原理
传输层有UDP和TCP两大常用协议,UDP只关注数据的收发,而不关注对方主机是否收到了发送的消息;TCP较UDP来讲,是关注数据是否被接收方收到的。而计算机常用的TCP/IP协议是传输层和网络层协议的组合,IP协议是提供数据跨网络传输的能力,解决了路由选择的问题,TCP是可靠的,可以保证历史报文可以100%被对方收到,所以TCP/IP协议的核心功能:把数据100%可靠的从本机跨网络交付给接收端。
2026-03-20 15:22:18
550
1
原创 【计算机网络】传输层TCP协议原理
Linux的文件系统,文件有有对应的内核缓冲区,当向文件中写数据的时候,是先将数据写到内核缓冲区里,然后OS再将数据从内核缓冲区刷新到磁盘上。TCP也有自己的发送缓冲区,向网络中发数据的时候,是先调用write将数据写到对应的发送缓冲区,然后OS再将发送缓冲区中的数据刷新到外设即网卡,TCP协议在系统角度就是更复杂的外设刷新策略。
2026-03-13 18:10:17
419
原创 【计算机网络】Http协议原理
HTTP协议的请求报头是请求方法+URI+HTTP版本,以及一些Key: Value的数据+正文,这些属性之间用空格作为分隔符进行序列化HTTP协议的响应报头是HTTP版本+状态码+状态码描述,以及一些Key: Value的数据+正文,这些属性之间用空格作为分隔符进行序列化当收到请求或响应报文的时候,就可以根据这些字符反序列化,根据特殊字符换行符,将有效载荷和报头进行分离,根据报文中的属性保证可以读到完整的报文。这样就实现了协议:实现序列和反序列化以及保证可以读到完整报文的需求。
2026-03-04 15:46:11
474
原创 【计算机网络】协议与序列化和反序列化
先前我们学习的内容都停留在传输层,但是我们写的程序都是为了解决实际问题,满足我们日常需求的网络程序都是在网络层的。
2026-03-01 23:53:21
76
原创 【计算机网络】Socket编程
在计算机网络中,IP地址标识主机在全网的唯一性。我们使用网络的目的是将数据交给主机吗?不是,我们使用网络传输数据,数据是交给用户使用的,用户如何使用数据呢?比如,我们使用微信聊天,是通过微信这个拿到好友发给我们的消息。通过进程,用户就可以在网络中把数据拿到,也就是进程是用户在系统中的代表,只要把数据交给对应的进程,用户就可以访问到数据。所以。所以数据传输到主机不是目的,而是手段。数据被主机的网卡接收,然后再交给主机内对应的进程,才是目的。
2026-02-24 15:08:39
715
原创 【计算机网络】网络基础以及网络传输流程
计算机是人类使用的工具,人和人之间是需要协作的,这也就注定了计算机之间是需要协作的。没有网络之前,不同的人使用计算机解决问题需要通过软盘等方式拷贝数据,进行数据的处理。但是距离增大,处理问题的效率就降低了,这时候计算机网络就应运而生。网络的诞生是从局部到整体的,先有局域网络,随着时间的推移,技术的发展,局域网发展成了广域网。
2026-02-06 18:03:48
607
原创 【Linux系统】日志和线程池
计算机中的日志是记录系统和软件运行中发生事件的文件,主要作用是监控运行状态、记录异常信息,帮助快速定位问题并支持程序员进行问题修复。它是系统维护、故障排查和安全管理的重要工具。
2026-02-03 22:43:01
554
原创 【Linux系统】生产者消费者模型
信号量是一个计数器,本质是对资源的预定机制。在多线程场景下,对于资源的使用有两种情况:将资源作为一个整体使用(基于阻塞队列的生产者消费者模型,将缓冲区看成是一块独立的空间,只要有线程访问其他线程就不能访问)将资源划分为小块使用(将缓冲区的每一块资源独立使用)P操作,申请资源,信号量–V操作,释放资源,信号量++信号量的大小为1,执行P操作后,自减为0,其余线程无法访问,执行V操作后,自增为1,其他线程又可以抢占,因此使用二元信号量相当于给资源加了一把互斥锁。
2026-02-03 17:06:37
823
原创 【Linux系统】线程同步与互斥
而且这样对于程序的效率会降低,对于其他拿不到锁的线程也不公平,想要解决这个问题,就不能让某一个线程一直占据锁,应该让这个线程执行完代码后进入队列等待二次申请锁,也就是让线程按照一定的顺序访问资源!加锁之后,在执行临界区资源的时候,是允许线程切换的,但是锁的申请过程是互斥的,也就是说只有当前线程持有锁,其他线程没有锁,当线程被切换走的时候,其他线程没有锁进入不了临界区,也就只能在等待队列中等待该线程执行完临界区代码后释放锁,然后展开申请锁的竞争,重新申请锁进入临界区。但是为什么会出现票数为负的情况?
2026-01-31 22:50:54
738
原创 【Linux系统】线程控制
验证线程是可以被创建出来的,以及在Linux中线程是用轻量级进程模拟实现的创建了一个新线程,新线程执行threadrun函数,主线程继续向下执行新线程执行的threadrun的起始地址就是新线程的入口地址,main函数的地址就是主线程的入口地址,两个线程执行各自的代码!对于线程执行不同代码的代码块划分,根本不用我们划分,编译器已经为我们划分好了!
2026-01-27 21:44:10
696
原创 【Linux系统】线程概念
在谈线程之前,首先回顾一下进程,在Linux操作系统中,CPU要执行多个加载到内存中的程序,但这些程序并不能杂乱无章的加载到内存中,而CPU又没有办法管理这些加载到内存中的应用程序,所以作为软硬件管理者的操作系统就提出了进程的概念,用OS内部的进程来管理加载到内存中的应用程序。进程 = 内核数据结构 + 程序的代码和数据(执行流),也是执行流。在虚拟地址空间中,[0,3GB]是用户空间,通过页表可以映射到进程在物理内存中的地址,进而去执行指令;
2026-01-23 21:49:57
643
原创 【Linux系统】进程信号的捕捉以及内核态和用户态
信号捕捉的过程要做四次身份的切换,当进程要进行系统调用或者收到某些指令要切换)执行完系统调用(其他处理)离开内核前,会检查是否接收到需要处理的信号,如果有就去执行信号处理动作。如果是默认处理动作或者忽处理,就在内核中执行信号的处理动作后返回进程中进入内核的位置继续向下执行;如果是自定义捕捉动作,就会进行身份切换去执行自定义捕捉动作,当自定义捕捉动作执行结束后,OS又会使用某种系统调用再次进入内核,然后清理该信号的执行栈,恢复主程序的上下文,再,返回到进入内核的位置继续向下执行。
2026-01-21 13:53:06
620
原创 【Linux系统】Linux进程信号产生和保存
在生活中存在着很多信号,比如红绿灯信号、上课铃声以及电话铃声等等,这些信号会告诉我们接下来的动作。在生活中,信号会中断我们人正在做的事情,是事件的异步通知机制。
2026-01-19 20:26:45
719
原创 【C++笔记】红黑树
各位读者朋友们大家好!上期我们讲了二叉搜索树之一——AVL树,这一期我们继续讲解另一种二叉搜索树——红黑树。红黑树是⼀棵二叉搜索树,他的每个节点增加一个存储位来表示节点的颜色,可以是红色或者黑色。通过对任何一条从根到叶子的路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因而是接近平衡的。综合红黑树的规则来看,理论上全黑最短路径和一黑一红节点的最长路径并不是在每棵红黑树都存在的。假设任意一条从根到NULL节点的路径长度为x,那么bh(black height) <= h <= 2
2025-01-17 12:18:07
1075
原创 【C++笔记】map和set的使用
set的文档set的声明如下,T就是set的底层关键字的类型set默认要求T支持小于比较,如果不支持或者想按自己的需求实现可以自己实现仿函数传给第二个模板参数。set的底层存储数据是从空间配置器申请的,如果需要可以自己实现内存池,传给第三个参数。一般情况下我们不需要传第二个和第三个模板参数。set的底层是用红黑树实现,增删查的时间复杂度是O(logN),迭代器遍历走的是二叉搜索树的中序,所以是有序的。map的参考文档。
2024-12-09 16:33:42
1015
原创 【C++笔记】继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要i的手段,它允许我们在保持原有类特性的基础上进行扩展,增加方法(成员函数)和属性(成员变量),这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复用,继承是类设计层次的复用。
2024-11-29 14:53:01
836
原创 【C++笔记】模板进阶
【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误这期就讲完了模板的进阶内容,希望对大家有所帮助,欢迎大家批评指正!
2024-11-25 11:17:00
924
原创 【C++笔记】stack、queue以及仿函数
stack的文档queue的文档优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。优先队列类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。
2024-11-23 17:30:54
922
原创 【C++笔记】vector使用详解及模拟实现
vector的文档使用STL的三个境界:能用、明理、能扩展,下面学习vector,我们也按照这个境界去学习。vector是可以改变大小的数组序列容器,也就是数据结构的顺序表。构造函数声明接口说明vector()重点无参构造构造并初始化n个val重点拷贝构造使用迭代器进行初始化构造无参构造构造并初始化n个val迭代器区间构造。
2024-11-15 17:04:54
1007
原创 【C++笔记】string类的模拟实现
各位读者朋友们大家好!上期我们讲解了string类的基础用法,这期我们来模拟实现一下string类。一. string类的构造函数1. 1 无参构造通过初始化列表,将_str初始化为空指针, _size和 _capacity初始化为0。但是这样写是有bug的,在我们访问string的时候会对空指针解引用,正确的是2.2 带参构造如果我们通过初始化列表对string初始化,我们需要先对_str初始化,但是开空间又需要用到_size,就很麻烦,而且这些成员变量不是必须在初始化列表初始化的(引用
2024-11-06 12:03:17
1107
原创 【C++笔记】string类使用详解
各位读者朋友们大家好!上期我们讲完了C++的模板初阶,这一期我们开启STL的学习。STL是C++的数据结构和算法库,是我们学习C++的很重要的一部分内容,在以后的工作中也很重要。现在我们开始讲解。C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但这些库函数与字符串是分开的,不太符合OOP(面向对象编程,Object-Oriented Programming是一种广泛使用的编程范式,它基于“对象”的概念来设计和实现软件。)的思想,而且底层空间需要用户自
2024-11-02 15:11:00
975
原创 【C++笔记】模板初阶
声明和定义分离要重新定义模板参数,而且定义和声明不能放到两个文件中。希望通过这些内容,能够为大家在学习和使用模板的过程中提供有价值的启示和帮助。模板作为C++中强大的特性之一,其初阶知识的掌握对于后续深入学习和应用至关重要。非常期待大家能够从中受益,并在实际编程中灵活运用。同时,也诚挚地欢迎大家提出宝贵的批评和建议,您的反馈将是我不断进步的动力。
2024-10-26 23:21:36
794
原创 【C++笔记】内存管理
int val;这样就写好了一个链表。在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc和free不会调用。new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对对象的构造delete的原理1. 在空间上执行析构函数,完成对象中的资源清理工作2. 调用operator delete函数释放对象的空间new T[N]的原理。
2024-10-26 12:10:42
962
原创 【C++笔记】类和对象(下)
各位读者朋友大家好,上期我们讲了类和对象中篇的内容,这期我们开启类和对象部分的收尾,这部分的难度不低,希望我们能打败他!1. 之前我们在讲构造函数的时候,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表,初始化列表的使用方式是以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号里的初始值或表达式。当然我们也可以在花括号内继续使用赋值。2. 每个成员变量在初始化列表中只能出现一次,语法上理解初始化列表可以认为是每个成员变量定义初始化的地方。
2024-10-24 22:17:22
1038
原创 【C++笔记】类和对象(中)
各位读者朋友们大家好,上期我们讲完了C++的类和对象上的内容,这期我们开启类和对象中篇的讲解。默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解一下即可。其次就是C++11以后还会增加两个默认成员函数,移动构造和移动赋值,这个我们后面再讲解。默认成员函数很重要,也比较复杂,我们要从两个方面去学习:构造函数是特殊的成员函数,需要注意的是,构
2024-10-20 22:14:46
981
原创 【C++笔记】类和对象(上)
class是定义类的关键字,Stack是类的名字,{}内是类的主体,要注意类定义结束时花括号后面分号不能省略。类主体中的内容称为类的成员:类中的变量称为类的属性或成员变量(这里的成员变量只是声明,没有开空间类中的函数称为类的方法或成员函数。为了区别成员变量,一般习惯上成员变量会加上一个特殊的标识,如成员变量的前面或后面加_或者以m开头,但C++中这个并不是强制的,只是惯例。
2024-10-13 17:36:42
1201
原创 【C++笔记】引用、inline关键字和nullptr
引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟新的内存空间,它和它引用的变量共用一块内存空间。就像现实生活中的外号或者网名一样。引用的形式类型& 引用别名 = 引用对象int main()int a = 0;int& b = a;int& c = b;int& d = c;int m = 1;d = m;return 0;
2024-10-12 10:54:56
1289
原创 【C++笔记】C++基础语法
各位读者朋友们大家好!今天我们正式进入C++的学习。C++这门语言是由本贾尼博士在上世纪八十年代开创的至今仍在使用的计算机主流编程语言。C++的学习难度较大,我们坚持不懈,在不久的将来将它狠狠拿下。定义命名空间,需要用到namespace这一关键字,后面加命名空间的名字,这个名字自己随便取,然后跟一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量、函数、结构体等。namespace本质上是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名的变量,所以上面的rand就不存在冲突了。
2024-10-04 18:28:52
1047
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅