
获得徽章 1
- #青训营笔记创作活动#
2.9 day10
消息发送有 3 种模式,即发后即忘、同步和异步。对于发后即忘 的模式,不管消息有没有被成功写入,生产者都不会收到通知,那么即使消息写入失败也无从 得知,因此发后即忘的模式不适合高可靠性要求的场景。如果要提升可靠性,那么生产者可以 采用同步或异步的模式,在出现异常情况时可以及时获得通知,以便可以做相应的补救措施, 比如选择重试发送(可能会引起消息重复)。展开评论点赞 - #青训营笔记创作活动#
1.24 day9
HTTPS握手的过程中会先通过非对称机密去交换各种信息,其中就包括3个随机数,再通过这三个随机数去生成对称机密的会话秘钥,后续使用这个会话秘钥去进行对称加密通信。如果能获得这三个随机数就能解密HTTPS的加密数据包。
三个随机数,分别是客户端随机数(client random),服务端随机数(server random)以及pre_master_key。前两个,是明文,第三个是被服务器公钥加密过的,在客户端侧需要通过SSLKEYLOGFILE去导出。展开评论点赞 - #青训营笔记创作活动#
1.23 day8
很多时候,大家虽然号称自己用了UDP,但实际上都很忌惮它的丢包问题,所以大部分情况下都会在UDP的基础上做各种不同程度的应用层可靠性保证。比如王者农药用的KCP,以及最近很火的QUIC(HTTP3.0),其实都在UDP的基础上做了重传逻辑,实现了一套类似TCP那样的可靠性机制。
但对于UDP,其本身并不会分段,如果数据过大,到了IP层,就会进行分片。此时发生丢包的话,再次重传,就会重传整个大数据包。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。展开评论点赞 - #青训营笔记创作活动#
1.20 day7
摘抄:
1.计数器:
优点:固定时间段计数,实现简单,适用不太精准的场景;
缺点:对边界没有很好处理,导致限流不能精准控制。
2.滑动窗口:
优点:将固定时间段分块,时间比“计数器”复杂,适用于稍微精准的场景;
缺点:实现稍微复杂,还是不能彻底解决“计数器”存在的边界问题。
3.漏桶:
优点:可以很好的控制消费频率;
缺点:实现稍微复杂,单位时间内,不能多消费,感觉不太灵活。
4.令牌桶:
优点:可以解决“漏桶”不能灵活消费的问题,又能避免过渡消费,强烈推荐;
缺点:实现稍微复杂,其它缺点没有想到。
5.Redis + Lua 分布式限流:
优点:支持分布式限流,有效保护下游依赖的服务资源;
缺点:依赖 Redis,对边界没有很好处理,导致限流不能精准控制。展开评论点赞 - #青训营笔记创作活动#
1.19 day6
TCP协议本身是全双工的,但我们最常用的HTTP1.1,虽然是基于TCP的协议,但它是半双工的,对于大部分需要服务器主动推送数据到客户端的场景,都不太友好,因此我们需要使用支持全双工的websocket协议。
#HTTP协议设计之初,考虑的是看看网页文本的场景,能做到客户端发起请求再由服务器响应,就够了,根本就没考虑网页游戏这种,客户端和服务器之间都要互相主动发大量数据的场景。展开评论点赞 - #青训营笔记创作活动#
1.17 day5
1. 刚插上网线,电脑怎么知道自己的IP是什么?
答案:通过DHCP,在联网之后可以自动获取到本机需要的IP地址,子网掩码还有路由器地址
2. 我们可以发现DHCP是应用层的协议,基于传输层UDP协议进行数据传输。其中第二阶段中的DHCP Offer里会返回给我们需要的IP、子网掩码、路由器地址以及DNS服务器地址。
3. 得到DHCP ACK之后立马就能使用这个IP了吗?
不 在得到DHCP ACK之后,机子不会立刻就用这个IP。
而是会先发三条ARP消息。但这三条ARP协议,比较特殊,它们叫无偿ARP(Gratuitous ARP),特点是它会把IP和mac地址都填好了,而且填的还是自己的IP和mac地址。电脑插上网线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。
总结:
DHCP分为四个阶段,分别是 Discover,Offer, Request和ACK。如果曾经连过这个网,机器会记录你上次使用的IP,再次连接时优先使用原来的那个IP,因此只需要经历第三第四阶段。得到DHCP ACK之后立马就能使用这个IP了吗?不在得到DHCP ACK之后,机子不会立刻就用这个IP。
DHCP是应用层协议,考虑到需要支持广播功能,底层使用的是UDP协议,而不是TCP协议。
DHCP分配下来的IP是有可能跟某台手动配置的IP地址重复的。
DHCP得到IP之后还会发3次无偿ARP通告,在确认没有冲突后开始使用这个IP。展开评论点赞 - #青训营笔记创作活动#
1.16 day4
最左匹配的优秀理解
例如你这个联合索引是state/city/zipCode
那么state就是第一关 city是第二关, zipCode就是第三关
你必须匹配了第一关,才能匹配第二关,匹配了第一关和第二关,才能匹配第三关
也就是说当我们进行索引匹配的时候 可以匹配到1 12 123三种情况的索引 我们应避免3 23这种情况 以避免索引失效展开评论点赞 - #青训营笔记创作活动#
1.15 day3
连接层:主要是指数据库连接池,会负责处理所有客户端接入的工作。
服务层:主要包含SQL接口、解析器、优化器以及缓存缓冲区四块区域。
存储引擎层:这里是指MySQL支持的各大存储引擎,如InnoDB、MyISAM等。
文件系统层:涵盖了所有的日志,以及数据、索引文件,位于系统硬盘上。从上往下看,依次会分为网络连接层、系统服务层、存储引擎层、以及文件系统层,往往编写SQL后,都会遵守着MySQL的这个架构往下走。展开评论点赞 - #青训营笔记创作活动#
1.13 day2
除了在系统扛压或者接口处理速度提升等性能优化方案 缓存还可以用在哪些场景上,可以解决我们哪方面的痛点?
1. 降低自身CPU消耗
2. 减少对外IO交互
3. 提升用户个性化体验
缓存与持久化存储的一个很大的不同点就是缓存的定位应该是一种辅助角色,是一种锦上添花般的存在。展开评论点赞 - #青训营笔记创作活动#
01.12 day1
主键为bigint时 619369个叶子结点
主键为int时 986049个叶子结点
所以能存多少条数据很大一部分决定于一个叶子节点能存储几条数据 回答给面试官的时候要从这个角度考虑展开评论点赞