- 博客(63)
- 收藏
- 关注
原创 [ MySQL] — 事务管理
其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低,往往需要在两者之间找一个平衡点;不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了;幻读的重点在于新增:同样的条件,第1次和第2次读出来的记录数不一样;上面的例子可以看出,事务也有长短事务这样的概念。事务间互相影响,指的是事务在并行执行的时候,即都没有commit的时候,影响会比较大。
2023-09-19 17:04:41
398
1
原创 [ MySQL ] — 如何理解索引以及索引的操作
并不是所有的存储引擎的索引都是采用B+树,还有哈希索引等方式。只能说主流的存储引擎是采用B+树作为索引的数据结构。
2023-08-22 16:03:19
888
原创 高级 IO
Input,Output,不就是IO嘛,站在体系结构的角度,把数据从外设搬到内存就是Input,把数据从内存拷贝到外设就是Output。你说的没错,但是理解的还不够深刻,只有理解了什么是IO,才有可能理解什么是高效的IO?当我们在网络中发送数据时,用write来发送,用read来读取。但是有没有发现一个问题,之前说过在应用层调用 write,并不是直接将数据发送到网络中,而是将数据从应用层拷贝到传输层中的发送缓冲区中,所以write的本质是拷贝;
2023-07-30 16:19:53
1405
原创 Linux网络基础 — 数据链路层
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。域名使用 . 连接,com:一级域名,表示这是一个企业域名。同级的还有 "net"(网络提供商),"org"(非盈利组织) 等。baidu:二级域名,表示公司名。www:只是一种习惯用法,之前人们在使用域名时,往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式,来表示主机支持的协议。
2023-07-22 09:26:02
1220
2
原创 HTTPS协议原理
HTTP协议内容都是按照文本方式明文传输的。这就导致在传输过程中会出现⼀些被窃取、被篡改的情况,为了避免此种情况经常出现,所以就有了HTTPS。HTTPS也是⼀个应用层协议。是在HTTP协议的基础上引⼊了⼀个加密层。
2023-06-08 21:06:57
1468
原创 Linux网络基础 — 应用层
因为用户查看新的网页是常规操作,如果发生网页跳转,新的页面也就无法识别用户了,但是为了让用户一次登陆,多次访问不受限制,有一个会话保持功能,是浏览器实现的,也就是它会将我们输入的账号密码保存起来,往后我们只要访问同一个网站,浏览器会自动推送历史保留信息。说白了http就是一个文件传输的协议,它能从服务器上拿到对应的 “资源”,像日常上网中,你看到的图片、视频、文字、音频等这些都属于对应的资源,一切你在网络中看到的都是资源,我们把这些资源看作是资源文件,它存储在服务器的磁盘上。这个"结构化的数据"是什么呢?
2023-06-06 20:50:35
946
1
原创 Linux— 网络编程套接字
我们知道IP地址可以标识主机唯一性,但是每一台主机上的客户或服务进程的唯一性用什么来标识呢?为了更好的标识一台主机上服务进程的唯一性,采用标识服务器进程,客户端进程的唯一性。端口号(port)是传输层协议的内容.端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
2023-05-29 21:07:27
2065
原创 Linux—网络基础 (上)
计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息, 就需要约定好双方的数据格式。计算机生产厂商有很多;计算机操作系统也有很多;计算机网络硬件设备, 还是有很多;如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 此时就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议;
2023-05-15 20:36:21
1200
1
原创 Linux — 线程池及多线程结尾
线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。
2023-05-06 11:47:38
558
原创 C++ 的类型转换
标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符: static_cast、reinterpret_cast、const_cast、dynamic_cast 。
2023-05-05 19:52:36
651
原创 Linux — 多线程的互斥与同步,信号量
条件变量是pthread库提供的一个数据类型,每当有线程访问临界资源时,申请互斥锁不成功,如果没有条件变量就会被阻塞挂起,有条件变量的话,就会通过一个接口将线程的PCB链接到条件变量里的队列中进行等待,上一个线程访问完临界资源后,它再想继续访问临界资源,对不起,要去条件队列里等待,此时会调用接口唤醒条件队列中的第一个线程,让他进行访问。可是呢,我们无法在加锁之前就得知此次访问是否满足条件,这样的话就会造成不管满不满足条件,都要先加锁,然后检测,满足就挂起,这样线程啥也没干,转了一圈,还浪费时间。
2023-05-01 11:34:47
1767
原创 C++进阶 — 特殊类设计
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。比如迭代器模式,配接器(适配器)模式,单例模式,工厂模式,观察者模式等。这些都是设计模式。
2023-04-02 11:24:39
799
2
原创 C++11 — 【智能指针】
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。
2023-03-31 12:05:26
521
原创 C++进阶 — 【异常】(了解)
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了这里模拟一下项目中抛异常,定义一个异常的基类,派生类中去重写基类中抛出异常的函数what,哪个模块出问题,哪个模块就抛异常,最终在main函数执行流中用基类引用捕获异常,用多态的方式输出异常。// 服务器开发中通常使用的异常继承体系public:, _id(id)
2023-03-29 11:48:03
474
1
原创 C++进阶 — 【C++11】
在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03。
2023-03-28 20:12:11
777
原创 Linux — 【进程信号】
目录一、信号的概念那么生活中的信号有哪些呢? 如何把上面的概念迁徙到进程中呢? signal函数二、 信号的产生 1. 通过终端按键产生信号 2. 调用系统函数向进程发信号 kill函数 raise函数 abort函数 3. 硬件异常产生的信号 4. 软件条件产生信号alarm函数进程退出时的核心转储问题三、信号的保存 1. 信号其他相关常见概念 2. 信号在内核中的表示 3. sigset_t 四、信号的递达信号捕捉流程信号集操作函数sigprocmask函数sigpending函数siga
2023-03-23 09:51:40
673
2
原创 Linux — 进程间通信
通信就是一个人通过某种方式向另一个人传输信息,那么什么是进程间通信?进程间通信就是一个进程向另一个进程传输信息。大家都知道进程是具有独立性的,那进程之间要通信,这个成本一定不低,为什么呢?因为进程的很多设计都是按照独立性展开的。那么进程间通信的目的是什么?
2023-03-16 11:42:53
441
原创 C++进阶 — 【哈希】
unordered_map是存储键值对的关联式容器,其允许通过key快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
2023-03-11 20:26:12
410
原创 C++初阶 — list的使用及mini版的模拟实现
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高 效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。
2023-03-07 11:00:06
487
原创 基于匿名管道的进程池
创建一个任务表,创建若干个子进程,他们依次和父进程建立通信信道,建立好管道关系后,父进程随机选择一个任务,再让随机一个子进程从管道中读取该任务并执行,完成要执行的轮次后,父进程关闭在管道中的所有写端,子进程而后被操作系统发送异常信号,所有子进程被终止,父进程再依次回收所有子进程。
2023-03-05 12:04:38
115
原创 Linux—基础IO
库本质就是.o文件的集合,那么什么是.o文件呢?.o又是怎么得来的呢?我们带着问题继续往下看,首先 .o 文件是一个可重定位目标二进制文件。上图是一个程序实现的过程,通常我们要运行这样一个可执行文件,需要函数的声明和定义,以及一个main函数。那么如果我们想把这个可执行程序给别人使用,但是又不想让他看到我们的源文件,怎么办呢?
2023-02-28 09:09:31
659
2
原创 C++进阶—【红黑树】
这里为什么节点的颜色默认是红色的?因为节点如果默认是黑色,那么只要新增节点就一定会破坏红黑树的第四个条件(每个路径上的黑色节点相同),而节点默认是红色,则有概率插入到正确的位置,即使出现连续的红色节点,我们也可以通过调整节点的颜色来使红黑树恢复正常。
2023-02-22 20:45:40
594
1
原创 C++进阶—【AVL树】
二叉搜索树虽可以缩短查找的效率,但。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962,即可降低树的高度,从而减少平均搜索长度。一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:。3.AVL树就是在二叉搜索树的基础上引入了平衡因子,因此AVL树也可以看成是二叉搜索树。那么AVL树的插入过程可以分为两步:1.2.4. AVL树的旋转如果在一棵原本是平衡的AVL树中插入一个新节点,可能造成不平衡,此时必须调整树的结构, 使之平衡化。
2023-02-14 09:19:56
127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人