
读书笔记
文章平均质量分 93
风中的默默
1998年过去了,我们很怀念它
展开
-
SQL执行流程、SQL执行计划、SQL优化
返回两个表中的匹配行。返回左表中的所有记录以及右表中的匹配记录。返回右表中的所有记录以及左表中的匹配记录。返回左侧或右侧表中有匹配的所有记录。原创 2024-07-19 17:34:15 · 726 阅读 · 0 评论 -
《DDIA-数据密集型应用系统设计》
对于一个应用系统,如果“数据”是其成败决定性因素,包括数据的规模 、 数据的复杂度或者数据产生与变化的速率等,我们就可以称为“数据密集型应用系统”;知其然,知其所以然当出现意外情况如硬件、软件故障、人为失误等,系统应可以继续正常运转:虽然性能可能有所降低,但确保功能正确。随着规模的增长 ,例如数据量 、流量或复杂性,系统应以合理的方式来匹配这种增长。随着时间的推移,许多新的人员参与到系统开发和运维, 以维护现有功能或适配新场景等,系统都应高效运转。原创 2024-07-18 17:29:14 · 952 阅读 · 0 评论 -
读书笔记 - 《Redis 深度历险:核心原理与应用实践》
不过你也不必过于担心,因为 Redis 对 HyperLogLog 的存储进行了优化,在计数比较小时,它的存储空间采用稀疏矩阵存储,空间占用很小,仅仅在计数慢慢变大、稀疏矩阵占用空间渐渐超过了阎值时,才会一次性转变成稠密矩阵,才会占用 12KB的空间。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改,每个页面的大小只有 4KB。用户看到错误对话框后,会先阅读对话框的内容,再点击重试,这样就可以起到人工延时的效果。原创 2024-07-17 17:18:59 · 1399 阅读 · 0 评论 -
IO多路复用技术、select、poll、epoll联系与区别
epoll 是 Linux 内核提供的一种高效的 I/O 多路复用技术,用于监控大量文件描述符(file descriptors)的 I/O 事件。epoll是Linux下的一种高效的I/O多路复用技术。epoll_ctl:用于添加(EPOLL_CTL_ADD)、修改(EPOLL_CTL_MOD)或删除(EPOLL_CTL_DEL)感兴趣的文件描述符。异步的:epoll 允许应用程序先注册对特定的 I/O 事件,当这些事件发生之后操作系统会自动通知应用程序,这是异步 I/O 的一个关键特征。原创 2024-07-15 10:48:03 · 1086 阅读 · 0 评论 -
读书笔记 - 《深入浅出MySQL(第3版)》
隔离性Isolation:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。MySQLInnoDB引擎的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。简而言之,第一范式就是无重复的列。原创 2024-06-26 11:12:53 · 1669 阅读 · 0 评论 -
读书笔记《C++ Primer Plus第五版》
连续分段空间,由一段一段的连续空间构成的,用一小块连续的内存空间map作为主控(不是STL的map容器),里面的每一个元素都是一个指针,指向另一段连续性内存空间,称作缓冲区,默认使用 512 字节大小。假设我们定义一个双向链表,把链表上节点都定义成shared_ptr智能指针,当其中两个节点互相引用的时候,就会出现循环引用的现象。堆是我们通过new关键字来动态申请的内存空间,堆上分配的内存需要我们手动管理,堆是不连续的内存区域,以链表的形式分配的,如果我们没有正确释放堆上的内存可能会出现内存泄漏。原创 2024-06-26 10:50:11 · 1082 阅读 · 0 评论 -
《redis设计原理/redis设计与实现》
Redis 是一种基于内存的数据库,它对数据的读写操作都是在内存中完成,所以它的读写速度非常快,常用于缓存,消息队列这些场景。Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)等等,并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务 、持久化、过期删除机制等等。原创 2023-08-20 11:35:09 · 10840 阅读 · 0 评论 -
【C++】(一)基础语法
实际上每个元素在放的时候都是有一个偏移量的,第一个元素的偏移量是0,其他元素的偏移量是对齐数的整数倍(所谓对齐数是当前这个元素大小和当前编译器默认对齐数,它们两个之间的最小值),而且存放元素完成之后,还需要看一下当前总的存储单元是不是这些元素中最大对齐数的整数倍,如果不是的话需要补成整数倍,也就是后面会空几个位置。我们都知道在内存中放数据之后CPU会来读取,但是CPU从内存中读取数据的时候并不是一个字节一个字节来读,而是一块一块来读的,这个块的大小叫做内存的读取粒度。那这就是结构体的内存对齐。原创 2023-06-01 17:10:19 · 8696 阅读 · 0 评论 -
【C++】(二)函数、类、模板
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类, 新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承缺点:耦合度高,因为继承了父类的东西,所以想分开就很难了,藕断必定丝连。增减的代码维护难度,尤其是多重继承和兄弟关系继承,毕竟家族历史长派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类必须知道他们是什么。所以必须定义而非声明。模板是c++的一种特性,它可以让类或者函数在对应不同的类型的时候正常工作,而不用为每一种类型分别写一份代码。原创 2023-07-02 17:26:04 · 10785 阅读 · 0 评论 -
【C++】(三)STL
STL(Standard Template Library),即标准模板库。它是94年被正式纳入C++标准,是 C++ 标准库的重要组成部分。它不仅仅是一个可复用的组件库,而且是一个包含了许多常用的数据结构和算法的软件框架。STL的第一个比较重要的特点是数据结构和算法的分离。STL构成STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。首先vector的扩容原理是申请新空间,拷贝元素,释放旧空间。原创 2023-07-02 17:27:26 · 10749 阅读 · 0 评论 -
【C++】(四)内存状态
实际上每个元素在放的时候都是有一个偏移量的,第一个元素的偏移量是0,其他元素的偏移量是对齐数的整数倍(那么所谓这个对齐数,指的是当前元素大小和当前编译器默认对齐数,它们两个之间的最小值),偏移了之后就开始放元素,当元素都放完之后,还需要看一下当前总的存储单元是不是这些元素中最大对齐数的整数倍,如果不是的话需要补成整数倍,也就是后面会空几个位置。我们都知道在内存中放数据之后CPU会来读取,但是CPU从内存中读取数据的时候并不是一个字节一个字节来读,而是以块儿的形式来读的,这个块儿的大小是内存的读取粒度。原创 2023-07-02 17:34:42 · 8314 阅读 · 0 评论 -
【C++】(五)11新特性
所以在刚才的例子里,我们可以用weak_ptr声明链表节点的pre和next两个指针,那么节点在指向前一个或后一个节点后并且不会改变shared_ptr的引用计数,当node1计数为0时,node1指向的空间就会被销毁掉。auto是C++11新增的一个关键字,auto也叫类型说明符,它可以让编译器替我们去分析表达式所属的类型,它仅仅是一个占位符,在编译期间它会进行类型推导,然后被真正的类型所替代。我们需要一个指针对象,需要一个引用计数的指针设定对象的值,并将引用计数计为1,需要一个构造函数。原创 2023-07-02 17:42:37 · 338 阅读 · 0 评论 -
【操作系统】读书笔记
线程又叫轻量级进程,它从属于进程,是程序的实际执行者,一个进程可以包含多个线程,它是CPU调度的最小单位。首先我们都知道,现代的计算机软件都是基于操作系统来运行的,操作系统封装了计算机底层的硬件资源,比如磁盘、键盘、显示器等等,那当我们的应用程序想要访问使用这些计算机资源的时候,就需要调用操作系统提供的服务。如果有的员工在上班时临时空闲,比如等待机器启动什么的,现在没有事情,那么可以让这名工人利用这个时间去做其它的事情,也如果一个线程等待某些条件,可以充分利用这个时间去做其它事情,那这就是协程。原创 2023-07-03 14:59:42 · 10769 阅读 · 0 评论 -
【MySQL】阅读笔记
我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。之所以要逆序,是因为记录头信息中指向下一个记录的指针,指向的是下一条记录的「记录头信息」和「真实数据」之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。但其实对于更新比较频繁的表,查询缓存的命中率很低的,因为只要一个表有更新操作,那么这个表的查询缓存就会被清空。原创 2023-08-08 14:56:49 · 8423 阅读 · 0 评论 -
【计算机网络】笔记
它的主要功能是在数据链路层提供的数据帧传送功能上,控制数据链路层和传输层之间的信息转发,然后建立、维护网络的连接,把数据从源端经过若干个中间节点安全传送到目的端,从而向传输层提供最基本的端到端的数据传输服务。传输层主要起承上启下的作用,它向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。表示层是OSI模型的第六层,它的主要功能是充当应用程序和网络之间的翻译角色,它要处理用户信息的表示问题,如数据的编码、数据格式转换、加密解密等问题。原创 2023-07-22 11:20:43 · 10993 阅读 · 0 评论 -
cmu15-445课程笔记
总结起来,cmake …用于配置并生成构建文件,而 make 用于实际执行构建,根据构建文件中的规则进行编译和链接。cmake:将 CMakeLists.txt 文件中的配置指令解析为适用于所选构建系统的构建文件。接下来我们可以在本机的编译器编写我们的代码。然后在服务器上编译和运行我们的代码。make: 在生成了构建文件后,编译项目的源代码并生成最终的可执行文件。1、下载安装Clion,安装C++编译环境。2、服务器装依赖包,安装Cmake。Clion远程连接服务器。原创 2023-08-23 19:22:46 · 14838 阅读 · 0 评论 -
网络是怎样连接的
除此之外,互联网里还有一个根域,它里面保存着com、jp等DNS服务器的信息,互联网里所有DNS服务器里都保存着根域服务器的信息。当我们的浏览器调用DNS解析器时,解析器生成一条[告诉我www.baidu.com的IP地址]这种消息,因为解析器不具备使用网络收发数据的功能,所以它会把这条信息委托给操作系统的协议栈来执行,协议栈是操作系统内部的网络控制软件,协议栈就会通过网卡把消息发送给最近的DNS服务器,DNS服务器的IP地址已经是提前设置好的,不用再去查询了,DNS服务器查到之后就会返回具体的IP地址。原创 2023-07-22 17:30:36 · 8354 阅读 · 0 评论 -
《计算机是怎样跑起来的》
如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经"懂"了。带着问题阅读正文的内容。原创 2023-05-30 16:27:48 · 15872 阅读 · 0 评论