![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
读书笔记
文章平均质量分 85
风中的默默
1998年过去了,我们很怀念它
展开
-
MySQL双主双从实现方式
避免单一主服务器宕机,集群写入能力缺失从 1 复制 主1 ,从 2 复制 主 2主 1 复制 主 2,主 2 复制主 1也就是 主 1 和主 2 互为主从。主1主2互为主从,是为了以下情景,主1挂了,主2自动升级为主数据库,当主1恢复后,主1则变成次主数据库。图示四台服务器,每台服务器上安装了mysql8数据库举例说明1、在主1创建了一个mydb2数据库,从1自动“复制”主1生成数据库,2、因为主2也是主1 的从数据库,所以主2也“复制”主1生成数据库,原创 2024-07-18 17:39:50 · 16 阅读 · 0 评论 -
redis的主从模式、哨兵模式、集群模式
之前写的是。原创 2024-07-18 17:37:05 · 64 阅读 · 0 评论 -
Redis集群cluster数据分片机制
Redis Cluster 是 Redis 的。原创 2024-07-18 17:33:46 · 561 阅读 · 0 评论 -
Designing Data-Intensive Applications数据密集型应用系统设计-读书笔记
对于一个应用系统,如果“数据”是其成败决定性因素,包括数据的规模 、 数据的复杂度或者数据产生与变化的速率等,我们就可以称为“数据密集型应用系统”;知其然,知其所以然当出现意外情况如硬件、软件故障、人为失误等,系统应可以继续正常运转:虽然性能可能有所降低,但确保功能正确。随着规模的增长 ,例如数据量 、流量或复杂性,系统应以合理的方式来匹配这种增长。随着时间的推移,许多新的人员参与到系统开发和运维, 以维护现有功能或适配新场景等,系统都应高效运转。原创 2024-07-18 17:29:14 · 395 阅读 · 0 评论 -
MySQL Server运维常用SQL命令
select client_net_address '客户端IP',local_net_address '服务器的IP',* from sys.dm_exec_connections。select client_net_address '客户端IP',local_net_address '服务器的IP',* from sys.dm_exec_connections。logical_reads:逻辑读,衡量语句的执行开销。[blocking_session_id] AS '正在阻塞其他会话的会话ID',原创 2024-07-17 17:59:26 · 648 阅读 · 0 评论 -
安全入门、网络安全入门基础知识
个人计算机是指一种大小、价格和性能适用于个人使用的多用途计算机。它能够处理文档、浏览网页、运行软件应用程序、玩游戏以及进行多媒体娱乐等多种功能。原创 2024-07-17 17:56:41 · 103 阅读 · 0 评论 -
linux从入门到精通、linux常用命令
Linux 是一个基于 UNIX 的开源操作系统内核,由芬兰程序员 Linus Torvalds 在 1991 年创建。开源性:Linux 源代码对所有人开放,用户可以自由地查看、修改和分发。多用户和多任务:支持多用户同时登录,能够同时运行多个进程。稳定性和安全性:Linux 内核经过全球开发者的长期测试和优化,具有高度的稳定性和安全性。原创 2024-07-17 17:55:33 · 834 阅读 · 0 评论 -
一看就懂的贪心算法
我们先看一个例子假设有一个可以容纳100kg物品的背包,背包可以装各种物品,我们有以下五种豆子,每种豆子的重量和总价值各不相同。为了让背包中所装物品的总价值最大,我们如何选择在背包中装哪些豆子?每种豆子又应该装多少?我们可以这样想,我们只需要计算出每种豆子的单价,按照价格由高到低依次来装豆子,先按单价最高的豆子装,装不满的话,再装价格相对较低的豆子,直到装满为止。:针对一组数据,事先定义了限制值和期望值,希望从中选择几个数据,在满足限制的情况下,期望值最大。原创 2024-07-17 17:33:06 · 405 阅读 · 0 评论 -
Redis-布隆过滤器(Bloom Filter)详解
布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,是一种非常节省空间的概率数据结构,运行速度快,占用内存小,但是有一定的误判率且无法删除元素。它实际上是一个很长的二进制向量和一系列随机映射函数组成,主要用于判断一个元素是否在一个集合中。通常我们都会遇到判断一个元素是否在某个集合中的业务场景,这个时候我们可能都是采用HashMap的Put方法。原创 2024-07-17 17:30:06 · 179 阅读 · 0 评论 -
Redis 深度历险:核心原理与应用实践 - 读书笔记
不过你也不必过于担心,因为 Redis 对 HyperLogLog 的存储进行了优化,在计数比较小时,它的存储空间采用稀疏矩阵存储,空间占用很小,仅仅在计数慢慢变大、稀疏矩阵占用空间渐渐超过了阎值时,才会一次性转变成稠密矩阵,才会占用 12KB的空间。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改,每个页面的大小只有 4KB。用户看到错误对话框后,会先阅读对话框的内容,再点击重试,这样就可以起到人工延时的效果。原创 2024-07-17 17:18:59 · 574 阅读 · 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 · 999 阅读 · 0 评论 -
TCP重传、滑动窗口、流量控制、拥塞控制机制
比如A给B发了1、2、3、4、5个报文,B收到1后应答2表示希望收到2,但是2丢失了,后面B收到3、4、5时都返回2,A收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2。当网络中的流量过多时,可能会导致数据包丢失和延迟增加,拥塞控制的目的是避免这种情况的发生。在 TCP 头部「选项」字段里加一个 SACK数据,它可以将已收到的数据的信息发送给「发送方」,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。原创 2024-07-15 10:43:57 · 536 阅读 · 0 评论 -
MySQL执行流程、行记录格式、数据日志、数据库三大范式
MySQL 中磁盘和内存交互的基本单位是页,一个页的大小一般是 16KB,也就是 16384字节,而一个 varchar 类型的列最多可以存储 65532字节,一些大对象如 TEXT、BLOB 可能存储更多的数据,这时一个页可能就存不了一条记录。如果查询的语句没有命中查询缓存中,那么就要往下继续执行,等执行完后,查询的结果就会被存入查询缓存中。在每个事务的执行过程中,都记录下回滚时需要的信息到一个日志里,那么在事务执行中途发生了 MySQL 崩溃后,我们可以通过这个日志回滚到事务之前的数据。原创 2024-07-15 10:40:11 · 1274 阅读 · 0 评论 -
MySQL事务、隔离级别、脏读/不可重复读/幻读与解决方法
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。针对快照读(普通 select 语句),是通过 MVCC多版本并发控制来解决了幻读的,因为在可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据保持一致,以此避免幻读问题。不可重复读是由于另一个事务对数据的更改所造成的,而幻读是由于另一个事务插入或删除引起的。原创 2024-07-15 10:32:59 · 467 阅读 · 0 评论 -
RPC实现、RPC与HTTP区别
打个比方:有两台服务器A、B,一个应用在A服务器上部署,其需要调用B服务器上的应用,但是由于不在一个一个服务器(内存空间),不能直接调用,因此需要通过网络来传输调用的语义和数据。目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。RPC常用于分布式系统中,例如云计算、微服务架构、分布式数据库、消息队列等,它可以让不同的服务之间进行远程调用,从而实现分布式系统的协作。请求头以一个空行结束。原创 2024-07-15 10:28:46 · 933 阅读 · 0 评论 -
java多线程详解(并发,并行,同步)
基本认为一个线程上下文切换的事件时最佳的一个时间,同时JVM还针对当前CPU的负荷情况做了较多的优化,如果平均负载小于CPUs则一直自旋,如果有超过(CPUs/2)个线程正在自旋,则后来线程直接阻塞,如果正在自旋的线程发现Owner发生了变化则延迟自旋时间(自旋计数)或进入阻塞,如果CPU处于节电模式则停止自旋,自旋时间的最坏情况时CPU的存储延迟(CPU A存储了一个数据,到CPU B得知这个数据直接的时间差),自旋时会适当放弃线程优先级之间的差异。在某个线程被显示地关闭之前,池中的线程将一直存在。原创 2024-07-15 10:24:10 · 998 阅读 · 0 评论 -
IP地址计算、子网掩码、子网划分
IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照CP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。包括主机地址和网络地址两部分。如11000000 10101000 00000001 00000110(192.168.1.6)子网掩码子网掩码(subnet masking)的功能是告知主机或路由设备,地址的哪一部分是网络号,包括子网的网络号部分,哪一部分是主机号部分。原创 2024-07-15 10:20:41 · 747 阅读 · 0 评论 -
缓存穿透、雪崩与击穿
缓存穿透、雪崩、击穿1、缓存穿透强调都没有数据+并发访问布隆过滤器缓存NULL值2、缓存雪崩强调批量Key过期+并发访问3、缓存击穿强调单个Key过期+并发访问互斥锁逻辑过期分布式并发控制1、缓存穿透缓存穿透是指数据库和缓存都没有的数据,这样缓存永远不会生效,大量的请求有可能导致数据库宕机。强调都没有数据+并发访问一般处理缓存穿透有布隆过滤器 和 缓存null值 两种方式。布隆过滤器布隆过滤器是使用一个初始全部是0的位数组,插入元素时先哈希一下,把哈希计算出的多个值的对应位置设为1,然后下次再有原创 2024-06-26 11:27:19 · 556 阅读 · 0 评论 -
《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》
隔离性Isolation:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。MySQLInnoDB引擎的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。简而言之,第一范式就是无重复的列。原创 2024-06-26 11:12:53 · 723 阅读 · 0 评论 -
《操作系统导论 - 第一版》
因为进程在执行write操作的时候,实际上是将数据写到了内核的 page cache里,page cache是文件系统中用于缓存文件数据的缓冲,由多个 page 构成,那么即使进程崩溃了,文件数据还是保留在内核的 page cache。所以如果有一种编码,能把世界上所有的符号都包括起来,每个符号都有一个独一无二的编码,那么乱码问题就会消失,那这就是Unicode字符集的由来,Unicode 就相当于一张表,表里维护了字符和编号之间的联系。而对换区空间只占磁盘的一小部分空间,被换出的进程数据就存放在对换区。原创 2024-06-26 11:08:18 · 817 阅读 · 0 评论 -
《计算机网络自顶向下方法-第八版》
比如A给B发了1、2、3、4、5个报文,B收到1后应答2表示希望收到2,但是2丢失了,后面B收到3、4、5时都返回2,A收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2。如果一直无脑的发数据给对方,但对方处理不过来,导致网络流量的无端的浪费。在 TCP 头部「选项」字段里加一个 SACK数据,它可以将已收到的数据的信息发送给「发送方」,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。D 类常被用于多播。原创 2024-06-26 11:02:04 · 476 阅读 · 0 评论 -
《软件测试精要第二版》
现在app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。web 项目 ,一般都是基于浏览器的b/s架构,所以测试的重点在于功能点的正常和响应时间的效率方向,浏览器的兼容则是一般是选择不同的浏览器内核进行测试。系统庞大时,测试开销会非常大。原创 2024-06-26 10:56:30 · 489 阅读 · 0 评论 -
《C++ Primer Plus第五版》
连续分段空间,由一段一段的连续空间构成的,用一小块连续的内存空间map作为主控(不是STL的map容器),里面的每一个元素都是一个指针,指向另一段连续性内存空间,称作缓冲区,默认使用 512 字节大小。假设我们定义一个双向链表,把链表上节点都定义成shared_ptr智能指针,当其中两个节点互相引用的时候,就会出现循环引用的现象。堆是我们通过new关键字来动态申请的内存空间,堆上分配的内存需要我们手动管理,堆是不连续的内存区域,以链表的形式分配的,如果我们没有正确释放堆上的内存可能会出现内存泄漏。原创 2024-06-26 10:50:11 · 978 阅读 · 0 评论 -
《Java核心技术》
所以所谓反射,归根结底就是拿到了这个类的class对象,然后通过这个class对象来获取类内部的详细信息。在 Java 早期版本中,synchronized 属于 重量级锁,因为它是依赖于底层的操作系统的互斥锁来实现的,如果要挂起和唤醒线程,都需要操作系统帮忙完成,那这就有一个从用户态转换到内核态的系统调用开销,效率比较低。synchronized 是 Java 中的一个关键字,翻译成中文是同步的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。原创 2024-06-26 10:45:05 · 689 阅读 · 0 评论 -
【redis设计原理】
Redis 是一种基于内存的数据库,它对数据的读写操作都是在内存中完成,所以它的读写速度非常快,常用于缓存,消息队列这些场景。Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)等等,并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务 、持久化、过期删除机制等等。原创 2023-08-20 11:35:09 · 9478 阅读 · 0 评论 -
【C++】(一)基础语法
实际上每个元素在放的时候都是有一个偏移量的,第一个元素的偏移量是0,其他元素的偏移量是对齐数的整数倍(所谓对齐数是当前这个元素大小和当前编译器默认对齐数,它们两个之间的最小值),而且存放元素完成之后,还需要看一下当前总的存储单元是不是这些元素中最大对齐数的整数倍,如果不是的话需要补成整数倍,也就是后面会空几个位置。我们都知道在内存中放数据之后CPU会来读取,但是CPU从内存中读取数据的时候并不是一个字节一个字节来读,而是一块一块来读的,这个块的大小叫做内存的读取粒度。那这就是结构体的内存对齐。原创 2023-06-01 17:10:19 · 7433 阅读 · 0 评论 -
【C++】(二)函数、类、模板
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类, 新的类能吸收已有类的数据属性和行为,并能扩展新的能力。继承缺点:耦合度高,因为继承了父类的东西,所以想分开就很难了,藕断必定丝连。增减的代码维护难度,尤其是多重继承和兄弟关系继承,毕竟家族历史长派生类中包含并且可以使用它从基类继承而来的成员,为了使用这些成员,派生类必须知道他们是什么。所以必须定义而非声明。模板是c++的一种特性,它可以让类或者函数在对应不同的类型的时候正常工作,而不用为每一种类型分别写一份代码。原创 2023-07-02 17:26:04 · 9524 阅读 · 0 评论 -
【C++】(三)STL
STL(Standard Template Library),即标准模板库。它是94年被正式纳入C++标准,是 C++ 标准库的重要组成部分。它不仅仅是一个可复用的组件库,而且是一个包含了许多常用的数据结构和算法的软件框架。STL的第一个比较重要的特点是数据结构和算法的分离。STL构成STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。首先vector的扩容原理是申请新空间,拷贝元素,释放旧空间。原创 2023-07-02 17:27:26 · 9528 阅读 · 0 评论 -
【C++】(四)内存状态
实际上每个元素在放的时候都是有一个偏移量的,第一个元素的偏移量是0,其他元素的偏移量是对齐数的整数倍(那么所谓这个对齐数,指的是当前元素大小和当前编译器默认对齐数,它们两个之间的最小值),偏移了之后就开始放元素,当元素都放完之后,还需要看一下当前总的存储单元是不是这些元素中最大对齐数的整数倍,如果不是的话需要补成整数倍,也就是后面会空几个位置。我们都知道在内存中放数据之后CPU会来读取,但是CPU从内存中读取数据的时候并不是一个字节一个字节来读,而是以块儿的形式来读的,这个块儿的大小是内存的读取粒度。原创 2023-07-02 17:34:42 · 7092 阅读 · 0 评论 -
【C++】(五)11新特性
所以在刚才的例子里,我们可以用weak_ptr声明链表节点的pre和next两个指针,那么节点在指向前一个或后一个节点后并且不会改变shared_ptr的引用计数,当node1计数为0时,node1指向的空间就会被销毁掉。auto是C++11新增的一个关键字,auto也叫类型说明符,它可以让编译器替我们去分析表达式所属的类型,它仅仅是一个占位符,在编译期间它会进行类型推导,然后被真正的类型所替代。我们需要一个指针对象,需要一个引用计数的指针设定对象的值,并将引用计数计为1,需要一个构造函数。原创 2023-07-02 17:42:37 · 292 阅读 · 0 评论 -
【操作系统】读书笔记
线程又叫轻量级进程,它从属于进程,是程序的实际执行者,一个进程可以包含多个线程,它是CPU调度的最小单位。首先我们都知道,现代的计算机软件都是基于操作系统来运行的,操作系统封装了计算机底层的硬件资源,比如磁盘、键盘、显示器等等,那当我们的应用程序想要访问使用这些计算机资源的时候,就需要调用操作系统提供的服务。如果有的员工在上班时临时空闲,比如等待机器启动什么的,现在没有事情,那么可以让这名工人利用这个时间去做其它的事情,也如果一个线程等待某些条件,可以充分利用这个时间去做其它事情,那这就是协程。原创 2023-07-03 14:59:42 · 9517 阅读 · 0 评论 -
【MySQL】阅读笔记
我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是 B+ 树索引。之所以要逆序,是因为记录头信息中指向下一个记录的指针,指向的是下一条记录的「记录头信息」和「真实数据」之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。但其实对于更新比较频繁的表,查询缓存的命中率很低的,因为只要一个表有更新操作,那么这个表的查询缓存就会被清空。原创 2023-08-08 14:56:49 · 7112 阅读 · 0 评论 -
【计算机网络】笔记
它的主要功能是在数据链路层提供的数据帧传送功能上,控制数据链路层和传输层之间的信息转发,然后建立、维护网络的连接,把数据从源端经过若干个中间节点安全传送到目的端,从而向传输层提供最基本的端到端的数据传输服务。传输层主要起承上启下的作用,它向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。表示层是OSI模型的第六层,它的主要功能是充当应用程序和网络之间的翻译角色,它要处理用户信息的表示问题,如数据的编码、数据格式转换、加密解密等问题。原创 2023-07-22 11:20:43 · 9655 阅读 · 0 评论 -
cmu15-445课程笔记
总结起来,cmake …用于配置并生成构建文件,而 make 用于实际执行构建,根据构建文件中的规则进行编译和链接。cmake:将 CMakeLists.txt 文件中的配置指令解析为适用于所选构建系统的构建文件。接下来我们可以在本机的编译器编写我们的代码。然后在服务器上编译和运行我们的代码。make: 在生成了构建文件后,编译项目的源代码并生成最终的可执行文件。1、下载安装Clion,安装C++编译环境。2、服务器装依赖包,安装Cmake。Clion远程连接服务器。原创 2023-08-23 19:22:46 · 12846 阅读 · 0 评论 -
网络是怎样连接的
除此之外,互联网里还有一个根域,它里面保存着com、jp等DNS服务器的信息,互联网里所有DNS服务器里都保存着根域服务器的信息。当我们的浏览器调用DNS解析器时,解析器生成一条[告诉我www.baidu.com的IP地址]这种消息,因为解析器不具备使用网络收发数据的功能,所以它会把这条信息委托给操作系统的协议栈来执行,协议栈是操作系统内部的网络控制软件,协议栈就会通过网卡把消息发送给最近的DNS服务器,DNS服务器的IP地址已经是提前设置好的,不用再去查询了,DNS服务器查到之后就会返回具体的IP地址。原创 2023-07-22 17:30:36 · 7136 阅读 · 0 评论 -
《计算机是怎样跑起来的》
如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经"懂"了。带着问题阅读正文的内容。原创 2023-05-30 16:27:48 · 13916 阅读 · 0 评论