自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 《DDIA-数据密集型应用系统设计》

对于一个应用系统,如果“数据”是其成败决定性因素,包括数据的规模 、 数据的复杂度或者数据产生与变化的速率等,我们就可以称为“数据密集型应用系统”;知其然,知其所以然当出现意外情况如硬件、软件故障、人为失误等,系统应可以继续正常运转:虽然性能可能有所降低,但确保功能正确。随着规模的增长 ,例如数据量 、流量或复杂性,系统应以合理的方式来匹配这种增长。随着时间的推移,许多新的人员参与到系统开发和运维, 以维护现有功能或适配新场景等,系统都应高效运转。

2024-07-18 17:29:14 561

原创 读书笔记 - 《Redis 深度历险:核心原理与应用实践》

不过你也不必过于担心,因为 Redis 对 HyperLogLog 的存储进行了优化,在计数比较小时,它的存储空间采用稀疏矩阵存储,空间占用很小,仅仅在计数慢慢变大、稀疏矩阵占用空间渐渐超过了阎值时,才会一次性转变成稠密矩阵,才会占用 12KB的空间。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改,每个页面的大小只有 4KB。用户看到错误对话框后,会先阅读对话框的内容,再点击重试,这样就可以起到人工延时的效果。

2024-07-17 17:18:59 1134

原创 读书笔记 - 《深入浅出MySQL(第3版)》

隔离性Isolation:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。MySQLInnoDB引擎的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。简而言之,第一范式就是无重复的列。

2024-06-26 11:12:53 728

原创 读书笔记 - 《操作系统导论 - 第一版》

因为进程在执行write操作的时候,实际上是将数据写到了内核的 page cache里,page cache是文件系统中用于缓存文件数据的缓冲,由多个 page 构成,那么即使进程崩溃了,文件数据还是保留在内核的 page cache。所以如果有一种编码,能把世界上所有的符号都包括起来,每个符号都有一个独一无二的编码,那么乱码问题就会消失,那这就是Unicode字符集的由来,Unicode 就相当于一张表,表里维护了字符和编号之间的联系。而对换区空间只占磁盘的一小部分空间,被换出的进程数据就存放在对换区。

2024-06-26 11:08:18 822

原创 读书笔记 - 《计算机网络自顶向下方法-第八版》

比如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 482

原创 读书笔记 - 《软件测试精要第二版》

现在app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。web 项目 ,一般都是基于浏览器的b/s架构,所以测试的重点在于功能点的正常和响应时间的效率方向,浏览器的兼容则是一般是选择不同的浏览器内核进行测试。系统庞大时,测试开销会非常大。

2024-06-26 10:56:30 496

原创 读书笔记《C++ Primer Plus第五版》

连续分段空间,由一段一段的连续空间构成的,用一小块连续的内存空间map作为主控(不是STL的map容器),里面的每一个元素都是一个指针,指向另一段连续性内存空间,称作缓冲区,默认使用 512 字节大小。假设我们定义一个双向链表,把链表上节点都定义成shared_ptr智能指针,当其中两个节点互相引用的时候,就会出现循环引用的现象。堆是我们通过new关键字来动态申请的内存空间,堆上分配的内存需要我们手动管理,堆是不连续的内存区域,以链表的形式分配的,如果我们没有正确释放堆上的内存可能会出现内存泄漏。

2024-06-26 10:50:11 983

原创 读书笔记 - 《Java核心技术》

所以所谓反射,归根结底就是拿到了这个类的class对象,然后通过这个class对象来获取类内部的详细信息。在 Java 早期版本中,synchronized 属于 重量级锁,因为它是依赖于底层的操作系统的互斥锁来实现的,如果要挂起和唤醒线程,都需要操作系统帮忙完成,那这就有一个从用户态转换到内核态的系统调用开销,效率比较低。synchronized 是 Java 中的一个关键字,翻译成中文是同步的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。

2024-06-26 10:45:05 693

原创 多级缓存、OpenResty缓存、Redis分布式缓存、进程缓存

布隆过滤器其实采用的是哈希思想来解决这个问题,通过一个庞大的二进制数组,走哈希思想去判断当前这个要查询的这个数据是否存在,如果布隆过滤器判断存在,则放行,这个请求会去访问redis,哪怕此时redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,假设布隆过滤器判断这个数据不存在,则直接返回。可以看到【缓存命中0,错过1,最大缓存数10,已缓存数1】,这个错过1就是我们刚发的这个请求,请求来了但是进程缓存里没有这个key,只能往下去数据库查询。

2024-01-04 21:36:56 8123

原创 《计算机是怎样跑起来的》

如果仅仅把技术当作一个黑盒,只把时间花在学习其表面上,而并没有探索到其本质,就绝不应该认为自己已经"懂"了。带着问题阅读正文的内容。

2023-05-30 16:27:48 13929

原创 MySQL运算符

位运算是二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制。MYSQL支持的位运算符如下运算符作用示例两个都是1,计算后才是1,否则计算后为0两个里面有一个是1,就是1,否则计算后为0两个位不同才是1,相同是0如果这个数这一位是1,变成0,反之变成1SELECT ~A>>按位右移,例如(二进制)1100 >> 1 为 110

2024-07-19 17:49:34 867

原创 VSCode 配置 C++ 环境(Windows)

在 Windows 上,可以安装 MinGW 或者 Visual Studio;的代码编辑器,拥有丰富的插件生态系统,支持多种语言开发。在本文中,作者将介绍如何在 VSCode 中配置 C++ 环境,以便于开发和调试 C++ 代码。的代码编辑器,拥有丰富的插件生态系统,支持多种语言开发。在本文中,作者将介绍如何在 VSCode 中配置 C++ 环境,以便于开发和调试 C++ 代码。,具有许多特性,使其成为编写 C++ 代码的的理想选择。,具有许多特性,使其成为编写 C++ 代码的的理想选择。

2024-07-19 17:38:59 587

原创 虚拟机安装ubuntu、服务器安装Ubuntu

1 走进Linux的世界1.1 主流的Linux操作系统有哪些?1.2 如何快速的安装一个Linux系统呢?1.2.1 安装Vmware Workstation161.2.2 激活Vmware Workstation161.2.3 安装Linux系统2 总结。

2024-07-19 17:36:11 703

原创 SQL执行流程、SQL执行计划、SQL优化

返回两个表中的匹配行。返回左表中的所有记录以及右表中的匹配记录。返回右表中的所有记录以及左表中的匹配记录。返回左侧或右侧表中有匹配的所有记录。

2024-07-19 17:34:15 464

原创 Redis集群cluster数据分片机制

Redis Cluster 是 Redis 的。

2024-07-18 17:33:46 974

原创 linux常用命令

Linux 是一个基于 UNIX 的开源操作系统内核,由芬兰程序员 Linus Torvalds 在 1991 年创建。开源性:Linux 源代码对所有人开放,用户可以自由地查看、修改和分发。多用户和多任务:支持多用户同时登录,能够同时运行多个进程。稳定性和安全性:Linux 内核经过全球开发者的长期测试和优化,具有高度的稳定性和安全性。

2024-07-17 17:55:33 899

原创 [计算机网络] VPN技术

虚拟专用网络(VPN)技术利用互联网服务提供商ISP)和网络服务提供商(NSP)的网络基础设备,在公用网络中建立专用的数据通信通道。VPN的主要优点包括节约成本和提供安全保障。​ VPN可以节约成本​ 为安全提供保障。

2024-07-17 17:51:35 4255

原创 【B树、B-树、B+、B*树】

B-tree即B树,B是Balanced,平衡的意思,因为B树的原英文名称为B-tree,国内很多人将其译为B-tree,所以B树就是B-树。磁盘管理系统中的目录管理,以及数据库系统中的索引组织多数都采用B树这种数据结构。树中每个结点至多有m棵子树;若根结点不是叶子结点,则至少有两棵子树;除根之外的所有非终端结点至少有[m/2](向上取整)棵子树;

2024-07-17 17:47:11 576

原创 SQL-正则表达式

正则表达式的用法非常灵活,可以根据具体的需求来选择合适的字符、特殊字符、量词、分组等来构建匹配规则。同时,正则表达式还支持一些高级的特性,如贪婪模式、非贪婪模式、修饰符等,可以进一步扩展正则表达式的功能。不同的数据库系统(如MySQL、PostgreSQL、Oracle等)支持的正则表达式语法可能略有不同,但大多数都遵循基本的正则表达式规则。正则表达式的详细用法还有很多,可以根据具体的需求来选择合适的正则表达式和相应的函数来进行操作。LIKE:用于简单的模式匹配,类似于正则表达式中的部分功能。

2024-07-17 17:45:50 850

原创 Java常用排序算法

这些排序算法都有各自的优缺点,应根据具体情况选择适合的算法。

2024-07-17 17:37:59 516

原创 贪心算法理解

我们先看一个例子假设有一个可以容纳100kg物品的背包,背包可以装各种物品,我们有以下五种豆子,每种豆子的重量和总价值各不相同。为了让背包中所装物品的总价值最大,我们如何选择在背包中装哪些豆子?每种豆子又应该装多少?我们可以这样想,我们只需要计算出每种豆子的单价,按照价格由高到低依次来装豆子,先按单价最高的豆子装,装不满的话,再装价格相对较低的豆子,直到装满为止。:针对一组数据,事先定义了限制值和期望值,希望从中选择几个数据,在满足限制的情况下,期望值最大。

2024-07-17 17:33:06 768

原创 Redis-布隆过滤器(Bloom Filter)详解

布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,是一种非常节省空间的概率数据结构,运行速度快,占用内存小,但是有一定的误判率且无法删除元素。它实际上是一个很长的二进制向量和一系列随机映射函数组成,主要用于判断一个元素是否在一个集合中。通常我们都会遇到判断一个元素是否在某个集合中的业务场景,这个时候我们可能都是采用HashMap的Put方法。

2024-07-17 17:30:06 463

原创 TCP、UDP、TCP与UDP的区别及联系

TCP协议的这些特性使其成为现代网络通信中不可或缺的一部分,特别是在需要可靠数据传输的应用场景中,如Web浏览(HTTP)、文件传输(FTP)、邮件传输(SMTP)等。然而,TCP的这些特性也带来了一定的开销,因此在某些对实时性要求较高的应用中,可能会选择使用UDP(用户数据报协议)作为替代。TCP报文段包括源端口号、目的端口号、序列号、确认号、数据偏移、控制位(如SYN、ACK、FIN等)、窗口大小、校验和、选项和填充以及数据载荷。UDP提供了一个可选的校验和字段,用于检测数据报在传输过程中的错误。

2024-07-15 10:55:00 1072

原创 TCP网络模型

主机 A 中数据被传递给传输层,传输层将数据分割成合适的数据段,带上序号和校验信息等TCP头,形成传输层的数据报。TCP/IP模型与OSI模型的主要区别在于TCP/IP模型将OSI的会话层、表示层和应用层的功能合并为应用层,同时将OSI的数据链路层和物理层合并为链路层。在某些文献中,网络接口层可能被用来指代物理层和数据链路层的结合,即负责实际的网络硬件接口。在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

2024-07-15 10:51:56 926

原创 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 1010

原创 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 544

原创 MySQL执行流程、行记录格式、数据日志、数据库三大范式

MySQL 中磁盘和内存交互的基本单位是页,一个页的大小一般是 16KB,也就是 16384字节,而一个 varchar 类型的列最多可以存储 65532字节,一些大对象如 TEXT、BLOB 可能存储更多的数据,这时一个页可能就存不了一条记录。如果查询的语句没有命中查询缓存中,那么就要往下继续执行,等执行完后,查询的结果就会被存入查询缓存中。在每个事务的执行过程中,都记录下回滚时需要的信息到一个日志里,那么在事务执行中途发生了 MySQL 崩溃后,我们可以通过这个日志回滚到事务之前的数据。

2024-07-15 10:40:11 1284

原创 MySQL数据库索引、B+树索引、索引失效情况

WHERE 子句中,如果 OR 前的条件列是索引列,而 OR 后的条件列不是索引列,那么索引会失效。因为索引保存的是索引字段的原始值,而不是 id + 1 表达式计算后的值,所以这样查询无法走索引。主键索引的 B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;每一层父节点的索引值都会出现在下层子节点的索引值中,因此在叶子节点中,包括了所有的索引值信息。索引并不是万能的,对于小表或写密集型的应用,索引可能不会带来太大的性能提升,甚至可能降低性能。

2024-07-15 10:37:00 550

原创 MySQL事务、隔离级别、脏读/不可重复读/幻读与解决方法

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。针对快照读(普通 select 语句),是通过 MVCC多版本并发控制来解决了幻读的,因为在可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据保持一致,以此避免幻读问题。不可重复读是由于另一个事务对数据的更改所造成的,而幻读是由于另一个事务插入或删除引起的。

2024-07-15 10:32:59 484

原创 RPC实现、RPC与HTTP区别

打个比方:有两台服务器A、B,一个应用在A服务器上部署,其需要调用B服务器上的应用,但是由于不在一个一个服务器(内存空间),不能直接调用,因此需要通过网络来传输调用的语义和数据。目前流行的开源 RPC 框架还是比较多的,有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。RPC常用于分布式系统中,例如云计算、微服务架构、分布式数据库、消息队列等,它可以让不同的服务之间进行远程调用,从而实现分布式系统的协作。请求头以一个空行结束。

2024-07-15 10:28:46 939

原创 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 859

原创 缓存穿透、雪崩与击穿

缓存穿透、雪崩、击穿1、缓存穿透强调都没有数据+并发访问布隆过滤器缓存NULL值2、缓存雪崩强调批量Key过期+并发访问3、缓存击穿强调单个Key过期+并发访问互斥锁逻辑过期分布式并发控制1、缓存穿透缓存穿透是指数据库和缓存都没有的数据,这样缓存永远不会生效,大量的请求有可能导致数据库宕机。强调都没有数据+并发访问一般处理缓存穿透有布隆过滤器 和 缓存null值 两种方式。布隆过滤器布隆过滤器是使用一个初始全部是0的位数组,插入元素时先哈希一下,把哈希计算出的多个值的对应位置设为1,然后下次再有

2024-06-26 11:27:19 562

原创 Redis 数据类型和各自的使用场景

常见的有五种数据类型:String字符串,List列表,Hash哈希,Set集合、Zset有序集合。

2024-06-26 11:16:01 673 1

原创 华为实习项目probe-env

发现没有外网,先确定是NAT模式。

2024-06-11 16:39:30 231

原创 Redis大key问题

比如用String类型的Key存放大体积二进制文件型数据用List数据结构保存热点新闻的评论列表,因为评论数爆发增长导致存放的元素多,value过大。用redis-cli加上–bigkeys参数,可以找到某个实例的大key。要解决Big Key问题,无非就是减小key对应的value值的大小。

2024-05-09 20:50:14 246

原创 内存泄漏检测

代码量比较少的情况,可以自己写malloc和free函数,然后用宏定义来替换,自己的malloc和free函数里就分别记录每次分配和释放内存时内存大小和位置记录。模仿shared_ptr维护一个引用数,在程序结束时如果引用计数表不为空,则打印出存在内存泄漏的相关信息。如果有内存泄漏的话,它就会提示堆溢出问题什么的,会定位到文件里的具体行数。,显示有内存泄漏错误,定位到具体行数。生成test可执行文件后直接。安装valgrind后,使用。

2024-04-02 23:55:08 198

原创 HTTPS、对称/非对称加密、SSL/TLS

HTTPS并不是一个单独的协议,是在 TCP 和 HTTP 之间加入了 SSL/TLS 安全协议,使得报文能够加密传输,SSL是TLS的前身,现在使用的大多都是TLS。

2024-04-02 22:20:10 7630

原创 TopK问题解决方案

在BFPTR算法中,仅仅是改变了快速排序Partion中的pivot值的选取,在快速排序中,我们始终选择第一个元素或者最后一个元素作为pivot。而在BFPTR算法中,每次选择五分中位数的中位数作为pivot,这样做的目的就是使得划分比较合理,从而避免了最坏情况的发生。:维护K个元素的最大堆,每次和堆顶元素比较,然后堆化,时间复杂度为O(nlogK),时间复杂度比方案1好,毕竟K一般是远远小于n的。(2)将比这个数大的数全部放到它的右边,把小于或者等于它的数全部放到它的左边。一趟快速排序的过程如下。

2024-04-01 23:00:37 7231

原创 【项目】web服务器

socket 套接字:所谓 socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,一个套接字就是网络上进程通信的一端,是应用程序通过网络协议进行通信的接口。socket 可以看成是两个网络应用程序进行通信时,各自通信连接中逻辑上的端点,是网络环境中进程间通信的一套 API。大端字节序是指一个整数的最高位字节存储在内存的低地址处,低位字节存储在内存的高地址处;小端字节序则是指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处。

2023-10-02 18:37:44 203

原创 cmu15-445课程笔记

总结起来,cmake …用于配置并生成构建文件,而 make 用于实际执行构建,根据构建文件中的规则进行编译和链接。cmake:将 CMakeLists.txt 文件中的配置指令解析为适用于所选构建系统的构建文件。接下来我们可以在本机的编译器编写我们的代码。然后在服务器上编译和运行我们的代码。make: 在生成了构建文件后,编译项目的源代码并生成最终的可执行文件。1、下载安装Clion,安装C++编译环境。2、服务器装依赖包,安装Cmake。Clion远程连接服务器。

2023-08-23 19:22:46 12858

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除