- 博客(105)
- 收藏
- 关注
原创 rcore day2
当处理器需要访问文件中的数据时,可通过操作系统把它们装入内存。这里的进程上下文是指程序在运行中的各种物理/虚拟资源(寄存器、可访问的内存区域、打开的文件、信号等)的内容,特别是与程序执行相关的具体内容:内存中的代码和数据,栈、堆、当前执行的指令位置(程序计数器的内容)、当前执行时刻的各个通用寄存器中的值等。当程序运行在操作系统中的时候,从程序的视角来看,它会产生一种“幻觉”:即该程序是整个计算机系统中当前运行的唯一的程序,能够独占使用处理器、内存和外设,而且程序中的代码和数据是系统内存中唯一的对象。
2025-04-04 13:53:53
267
原创 2025春rcore 4.3
然后就是开始在云服务器上配置qemu等rcore的实验环境。奈何受制于带宽 + linux命令不熟,折腾许久。速通了第一阶段,就是一个rustlings。
2025-04-03 12:21:10
97
原创 Java算法队列和栈经常用到的ArrayDeque
主要是记录一下add,push,poll这三个常用api,因为这三个就是栈和队列一念之差的关键1.add(E e)truejava。
2025-03-23 23:22:48
235
原创 mysql的MGR
在单主模式下,MGR会自动为复制组选一个master处理写请求,如果复制组内超一半的节点都与master失联了,则认为master宕机,会重新选举master。另外,官方更推荐单主模式,因为多主模式下,每个节点可以同时处理写请求,容易发生事务冲突,导致频繁的事务回滚。MGR的每个写请求都涉及复制组内大多节点的通信,所以写性能不及异步的主从复制和半同步复制,数据一致性更强。灵活性高:MGR支持单主|多主模式,单主下会自动选举master,多主下每个节点都可以同时处理写请求。
2025-03-10 21:19:09
233
原创 mysql的MHA
MHA + 半同步复制,可以进一步大幅减少数据的丢失,因为半同步模式下,正好有一个slave与master的数据一致,就可以直接拿来作为新master。的改进,帮助MySQL主从模式达到真正意义的高可用,MHA在MySQL高可用领域已经是一套相当成熟的方案。MHA由 MHA Manager 和 MHA Node组成。MHA是对主从模式在。
2025-03-10 21:18:28
464
原创 mysql主从
master在commit前,会等待至少一个slave成功接收binlog并写入relay log(slave会发ACK响应),master再去commit。实际的主从模式中,不只是maste -> slave复制数据,也有slave -> slave复制数据,避免master的复制风暴。如果master事务commit成功后,但还没来得及完成主从复制就宕机了,这样slave就会丢失数据。slave在master宕机时能够代替master的前提条件是,slave和master的数据一致。
2025-03-10 21:17:56
159
原创 xxxxx
6. Redis的字符串是怎么去实现的?String如何保证的二进制安全?13. 进程和线程有什么区别?释放锁的时候会怎样,如何保证原子性?10.团队中所担任的职责?3. 可串行化隔离级别在Mysql中是如何实现的?怎么想到使用Redis做收件箱的?7.Mysql如何解决慢查询?14. DDD的好处有哪些?12. 什么是 同步,异步,阻塞,非阻塞。这个消息可靠性保证与MQ有什么区别?9.并行开发多个任务时,如何安排?10. 跨域问题是什么?8.Mysql中的乐观锁与悲观锁。8. Redssion如何续租?
2025-03-05 15:21:54
1416
原创 day1 第二次入门rust
String是自动被借用的,使用.to_owned() 或者 String::from() 去获取一个owned copy of string slice。&代表我们去借用这个数据,意味着我们就不能去用完删除了,用完就还回去。存相同类型的东西,可以添加push,删除pop,遍历for in。Rust 中,函数体最后一个表达式的结果会自动作为返回值,创建的变量默认是不可变化的,加上mut关键字才能改变。每种情况都要考虑,且结尾用的是逗号,因为是表达式。loop是无限循环的,while是条件循环。
2025-03-04 17:16:38
426
原创 一次连接,可能会多次创建socket???
因为原先创建的socket是拿来监听的,如果不去创建新socket。注意第三次握手时,服务端这里创建了新socket。为什么需要创建新socket?:专属客服,负责与客户一对一交互。:前台,只负责接受新客户。
2025-03-02 23:42:20
195
原创 三次握手内部实现原理
Linux操作系统流行一句话,“一切皆文件”,这里的文件不是说文件系统,磁盘里的某个文件,而是struct flie。type:套接字类型,如 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)addr:指向 struct sockaddr 类型的指针,包含要绑定的地址信息。addr:指向 struct sockaddr 类型的指针,接收客户端的地址信息。addr:指向 struct sockaddr 类型的指针,包含服务器的地址信息。返回值:成功返回新的套接字描述符,失败返回 -1。
2025-03-02 23:29:43
464
原创 事务性质ACID
原子指的是 :事务中的操作全部成功or全部失败(这一坨操作就是最小单位,不可分割)事务开始前和结束后,数据都是满足约束规则。事务是InnoDB引擎实现的。事务提交后,数据持久化到磁盘。并发事务之间不会互相影响,
2025-02-27 23:10:45
300
原创 TCP重传机制
重复确认是指接收方向发送方发送的重复ACK,表明它仍在等待某个特定的数据包,并且可能还包含SACK信息,通过SACK告诉对方自己收到了重复的数据,发送方可以判断网络问题所在。SACK是一种TCP选项,通过在TCP头部添加SACK字段,使接收方能够告诉发送方哪些数据已经成功接收,哪些数据丢失。当发送方收到三个相同的ACK(即ACK=2),它会认为包2丢失,立即进行重传。这种重传是为了避免等待超时,从而提高传输效率。初次设定的超时时间内没有收到对方的响应,就重发该数据,每次超时时间是上次的两倍。
2025-02-24 09:06:14
270
原创 TCP初始化序列号为什么要不一样
要求连接双方维护最近一次收到的数据包的时间戳(Recent TSval),每收到一个新数据包都会读取数据包中的时间戳值跟 Recent TSval 值做比较,如果发现收到的数据包中时间戳不是递增的,则表示该数据包是过期的,就会直接丢弃这个数据包。为了解决这个问题,就需要TCP时间戳,tcp_timestamps默认开启,开启后,TCP头部就会使用时间戳,便于精确计算RTT并防止序列号回绕。这样的算法会让初始化序列号以增长的方式生成,即使这样,当序列号快速回绕,仍然有可能出现问题。
2025-02-23 21:14:34
304
原创 TCP半连接、长连接
服务端收到客户端发起的 SYN 请求后,内核会把该连接存储到半连接队列,服务端收到第三次握手的 ACK 后,内核会把连接从半连接队列移除,然后创建新的完全的连接,并将其添加到 accept 队列,虽然都叫队列,但其实全连接队列(icsk_accept_queue)是个链表(accpet方便取出),而半连接队列(syn_table)是个哈希表(第三次握手来了方便找到是哪个socket)不管是半连接队列还是全连接队列,都有最大长度限制,超过限制时,内核会直接丢弃,或返回 RST 包。两个队列存在的目的是为了。
2025-02-23 20:42:53
364
原创 TCP fast open
TCP Fast Open:为了解决传统 TCP 握手中的延迟问题,通过允许在首次 SYN 握手阶段携带应用数据,从而减少 1 个 RTT 的延迟。传统 TCP 三次握手需 1.5 RTT才能传输应用数据,导致 HTTP 请求延迟较高。内核参数:/proc/sys/net/ipv4/tcp_fastopen。复用 Cookie 快速恢复会话,减少 1 个 RTT。
2025-02-22 14:54:59
497
原创 TCP四次挥手
每次请求的连接关闭都会进入 TIME_WAIT,导致系统资源的快速消耗,特别是在高并发情况下。长连接在一定时间内没有活动,服务端可能会主动关闭连接,此时也会进入 TIME_WAIT 状态。的情况下,那么第二(ACK)和第三次挥手(FIN)就会合并传输,这样就出现了三次挥手,所以。,所以服务端的 ACK 和 FIN 一般都会分开发送,因此是需要四次挥手。服务端收到客户端的 FIN 报文后,发送 ACK 报文,但客户端未收到。当许多长连接达到请求上限并关闭时,会导致大量的 TIME_WAIT。
2025-02-22 14:52:12
556
原创 TCP三次握手
是不可能的,因为TCP要双方建立连接,所以肯定至少要一问一答来保证双方是正常能通讯的,不然就变UDP了。一开始,客户端和服务端都处于 CLOSE 状态。先是服务端主动监听某个端口,处于 LISTEN 状态。所以此时大体有2种情况:新的SYN先到(一切正常)、旧的SYN先到(就需要RST)服务器发送 SYN-ACK 报文,但客户端未收到。如果在收到RST之前收到新的SYN,也就是。客户端发送 SYN 报文,但服务器未收到。客户端发送 ACK 报文,但服务器未收到。然后,三次都已经能建立稳定连接了,所以。
2025-02-22 14:43:46
1061
原创 TCP...
序列号(Seq):在建立连接时由计算机生成的随机数作为其初始值。网络层是不可靠的,它不保证网络包的按序交付以及数据完整性。确认应答号(Ack):指下一次「期望」收到的数据的序列号。发送方的窗口大小,告诉对方自己缓冲区还能接收多少数据。首先网络模型拆分这么多层,是分层思想的成果。发送端填充,接收端检验TCP报文是否有损坏。二者是TCP保证消息可靠传输的一种手段。传输层专门负责数据的传输可靠。
2025-02-22 14:29:34
353
原创 HTTPS(下)
主要讲加密算法RSA,ECDHETLS的握手涉及四次通信,根据不同的密钥交换算法,TLS 握手流程也会不一样的,现在常用的密钥交换算法有两种:RSA 算法和 ECDHE 算法正常情况下,需要先TCP三次握手后进行TLS四次握手「TCP Fast Open + TLSv1.3 + 第二次以后的通信」情况下,TLS 和 TCP 的握手过程是可以同时进行的;且会话复用可以做到0-RTT。
2025-02-22 14:09:10
868
原创 HTTPS(上)
CA本身也有证书来表明自己的身份,这个验证又交给上一级来验证,然后又再有上一级验证······于是CA们形成了一根分级链条,链条根部就是操作系统/浏览器预置的顶级CA证书,相当于自动信任了他们。,得到第一份信息摘要,再通过同样的Hash算法对原始信息进行运算,得到第二份信息摘要,通过比较两份信息摘要,就知道这个数字证书可不可靠(因为是用CA公钥解密的)服务器使用哈希算法(如 SHA-256)对其公钥和其他身份信息进行处理,生成一个信息摘要。对称加密:使用相同的秘钥加密和解密数据,加解密速度快,但不安全。
2025-02-19 09:39:25
487
原创 为什么有 HTTP 还需要 WebSocket?为什么不直接使用 TCP ?
在 TCP 连接建立后,浏览器会发送 HTTP 请求,其中包含请求升级到 WebSocket 的特殊头部,如果服务器支持 WebSocket 并同意升级协议,握手完成后,连接从 HTTP 切换为 WebSocket ,双方就可以通过全双工方式自由传输数据。TCP 协议本身支持全双工通信,允许双方在同一时间内主动发送和接收数据。然而,HTTP/1.1 在。
2025-02-19 09:32:39
154
原创 有HTTP了为什么还要RPC?
但在B/S架构上,需要由浏览器调用各家公司的服务器,这时候就需要一个统一的标准协议,方便调用,就出现了HTTP。在C/S架构上,客户端软件大多调用自己家服务端的接口,这时候就可以用RPC。首先出现的是RPC,再出现的HTTP。
2025-02-19 09:25:20
338
原创 HTTP3.0 和 HTTP2.0区别
连接迁移:TCP中通过四元组确定一条唯一的TCP连接,当网络从4G切换到WIFI时,IP地址发生变化,就需要重新建立连接,而QUIC通过连接ID标记通讯的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致 IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本,没有丝毫卡顿感,达到了连接迁移的功能。这意味着 QUIC 在最佳情况下不需要任何的额外往返时间就可以建立新连接。
2025-02-18 16:44:29
307
原创 HTTP2.0 和 HTTP1.1 的区别
HTTP/2.0 还支持Header压缩,使用了专门为Header压缩而设计的 HPACK 算法(在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了),减少了网络开销。服务器推送:HTTP/2.0 支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了客户端的请求次数。多路复用:HTTP/2.0 在一个连接里,客户端和浏览器都可以同时发送多个请求和响应,而不用按照顺序一一对应,这样。
2025-02-18 16:43:38
175
原创 HTTP1.1和1.0的区别
带宽:HTTP/1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了;HTTP/1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,返回码 206(Partial Content)管道:支持管道网络传输,发送请求可以一下发很多个,但接收响应,必须按照发送顺序来接收,如果某个请求被阻塞,后续请求都会被阻塞,就出现了。的请求,服务器收到请求后,会查看Host头的信息,判断该请求是针对哪个域名的,然后返回相应的网站内容)是最常用的HTTP版本。
2025-02-18 16:41:22
684
原创 HTTP.
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,如http升级为websocket,会提示1xx。3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是。5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于。HTTP主要讲一下状态码和缓存机制。发送的报文有误,服务器无法处理。HTTP缓存:有两种实现方式。2xx 类状态码表示服务器。4xx 类状态码表示。
2025-02-18 16:36:12
530
原创 DNS, domain name system
用户浏览器 -> 本地缓存 -> DNS解析器 -> 根DNS服务器 -> 顶级DNS服务器 -> 权威DNS服务器 -> 返回IP地址。- 根DNS服务器不直接提供IP地址,而是返回对应的顶级域(TLD)服务器的地址,例如 `.com` 或 `.org`- DNS解析器接收到根DNS服务器的响应后,接着向TLD服务器发送请求,询问该域名的权威DNS服务器。- TLD服务器返回该域名的权威DNS服务器地址(例如,负责 `example.com` 的服务器)- 权威DNS服务器返回域名对应的IP地址。
2025-02-18 16:30:44
481
原创 输入网址到网页显示,发生了什么?
服务器层层拆包,先看目标MAC地址是否是自己的,不是的话则丢弃此包,再检验目标IP地址是否符合,根据IP中的协议项,知道这是个TCP协议的包,如果是双方的第一个包的话,就进行TCP三次握手,先建立连接,然后再进行数据通信。IP生成完毕后还需要在IP头部添加MAC头部,添加发送方和接收方的MAC地址,接收方的MAC地址是通过ARP协议获取的,ARP存在缓存,这时候的接收方的MAC并不是www.baidu.com的MAC,而是子网网关的MAC,然后由子网网关再发送给他的网关,MAC是不断变化的。
2025-02-17 23:57:11
720
原创 SnowFlake雪花算法
雪花算法很适合拿来生成订单id,因为其具有时间维度(时间戳),具有自增性。也因为其具有时间自增性,也比UUID更适合拿来做分库分表时的分布式id。雪花算法生成的id格式:64位(时间戳、机器号、序列号)
2025-02-17 01:57:29
213
原创 灵茶山13
103. 二叉树的锯齿形层序遍历 https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/solution/bfs-wei-shi-yao-yao-yong-dui-lie-yi-ge-s-xlv3/117. 填充每个节点的下一个右侧节点指针 II https://leetcode.cn/problems/populating-next-right-pointers-in-each-node-ii/
2025-02-12 19:07:48
382
原创 灵茶山12
236. 二叉树的最近公共祖先 https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/solutions/2023872/fen-lei-tao-lun-luan-ru-ma-yi-ge-shi-pin-2r95/1123. 最深叶节点的最近公共祖先 https://leetcode.cn/problems/lowest-common-ancestor-of-deepest-leaves/
2025-02-12 19:07:15
174
原创 灵茶11,12题
98. 验证二叉搜索树 https://leetcode.cn/problems/validate-binary-search-tree/solution/qian-xu-zhong-xu-hou-xu-san-chong-fang-f-yxvh/2476. 二叉搜索树最近节点查询 https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/
2025-01-18 14:13:37
347
原创 灵茶山08,7题
237. 删除链表中的节点 - 力扣(LeetCode)19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)83. 删除排序链表中的重复元素 - 力扣(LeetCode)82. 删除排序链表中的重复元素 II - 力扣(LeetCode)203. 移除链表元素 - 力扣(LeetCode)3217. 从链表中移除在数组中存在的节点 - 力扣(LeetCode)2487. 从链表中移除节点 - 力扣(LeetCode)
2025-01-08 21:21:06
110
原创 灵茶山07, 6题
876. 链表的中间结点 - 力扣(LeetCode)141. 环形链表 - 力扣(LeetCode)142. 环形链表 II - 力扣(LeetCode)143. 重排链表 - 力扣(LeetCode)234. 回文链表 - 力扣(LeetCode)https://leetcode.cn/problems/maximum-twin-sum-of-a-linked-list/description/
2025-01-08 21:17:41
85
原创 灵茶山06,6题
206. 反转链表 - 力扣(LeetCode)92. 反转链表 II - 力扣(LeetCode)25. K 个一组翻转链表 - 力扣(LeetCode)24. 两两交换链表中的节点 - 力扣(LeetCode)445. 两数相加 II - 力扣(LeetCode)2816. 翻倍以链表形式表示的数字 - 力扣(LeetCode)
2025-01-07 15:54:33
94
原创 灵茶山05,5题
162. 寻找峰值 - 力扣(LeetCode)153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)33. 搜索旋转排序数组 - 力扣(LeetCode)1901. 寻找峰值 II - 力扣(LeetCode)154. 寻找旋转排序数组中的最小值 II - 力扣(LeetCode)
2025-01-07 15:52:09
111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人