获得徽章 2
- #青训营笔记创作活动#
2月02日 day13
本文介绍了计算机网络的设计(为什么这样设计):
计算机网络传输的本质是0和1,因此计算机的网络传输在物理电路中传输可以使用高低电平代替:
1. 最开始的电路交换,类似于电话网络,需要每台设备直接互联才可以进行
2. 报文交换:为了解决电路交换问题,引入了转发的概念,如果A和C没用互联,B连接了A和C,那么可以通过B转发A发送给C的数据;同时因为;为了解决通信双方同时占用线路的问题,引入了存储的概念,将发送数据以报文为单位分组转发
3. 分组转发:将报文细分为分组,可以保证报文的并行转发
为了解决互联问题, 引入了网络设备,包括集线器、交换机和路由器,对应不同网络层
最终,网络由节点和链路组成,节点包括计算机和一系列网络设备,链路则是连接不同节点的物理链路展开评论点赞 - #青训营笔记创作活动#
1月25日 day12
本篇文章介绍了MySQL的整个架构:
0. 其它客户端:如Java、go等编程语言、mysql-cli和一些数据库可视化工具等
1. 网络连接层:负责管理客户端与数据库的连接,每个连接会单独建立一个线程
2. 系统服务层:包括SQL接口、解析器、优化器和缓存/缓冲,这里需要注意高版本(8.0+)移除了查询缓存,只保留了写缓存
3. 存储引擎层:与磁盘交互的单独抽象出来的一层, 便于扩展
4. 文件系统层:最终存储在系统磁盘上的文件,包括日志模块和数据模块展开评论点赞 - #青训营笔记创作活动#
1月24日 day11
本篇文章讲解了HTTPS的建立过程:
1. HTTPS基于TCP协议,因此首先三次握手
2. TLS四次握手,包括Client Hello,Server Hello,(Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message),(Change Cipher Spec, Encrypted Handshake Message)
这里一共包括三个随机数,只需要获取这三个随机数即可解密https,其中的server random和client random都是已知的,关键在于pre_master_key,有两种方式获取:
1. 从客户端下手:可以尝试基于SSLKEYLOGFILE方式
2. 从服务端下手:想办法获取证书私钥展开评论点赞 - #青训营笔记创作活动#
1月21日 day10
本篇文章主要介绍了在编码中的45个编码规范,这里面关于以下几个是我之前没有注意到的:
1. try catch内部抽象为一个方法,因为我编写的大部分代码,try catch内部逻辑都不多,所以这时不一定非得抽象为一个方法
2. 慎用异步,我在编写代码中一般只有日志存储使用了异步线程
3. 集合使用应当指明初始化大小
4. 远程接口调用设置超时时间
5. 谨慎方法内部调用动态代理的方法,关于用于方法内的动态代码方法,如果一定需要使用这个时候需要在内部初始化一个类
6. 不循环调用数据库和用业务代码代替多表join
7. 考虑线程安全问题,在这里举得例子,也是我自己使用的错误方法,这里我后面需要注意展开评论点赞 - 1月18日 day9
本篇文章介绍了TCP传输过程中为了其特点(面向连接、可靠、基于字节流)的相关机制:
1. 重传机制:通过seq和ack确定
2. 流量控制:本质上通过滑动窗口实现的
3. 滑动窗口:可以理解为接收方和发送方各有一层队列用于存储真实接受/发送的数据
4. 拥塞控制:尝试提高发包速度到某个限度,直到丢包
5. 分段机制:通过传输层的MSS和IP层的MTU实现
6. 乱序重排:TCP包是分段发送的,通过seq确定顺序
那么什么时候UDP比TCP慢呢,显然,由于UDP没有分段的概念,一旦在应用层基于UDP实现重传机制,如果此时发送数据量大,那么其速度就会比TCP慢
#青训营笔记创作活动#展开评论点赞 - #青训营笔记创作活动#
1月14日 day8
本篇文章讲的很细节,包括Kafka的整体架构(Producer、Broker和Consumer),在Broker中Topic、Partition概念、Consumer组与Topic的关系、Kafka的物理存储(partition对应一个文件夹,topic对应多个文件,.log、.index等)、Kafka的多副本
然后讲解Kafka的消息格式演变过程及对应的含义,该部分主要适合后续有需要再细究;
最后是关于kafka的一些应用实战展开评论点赞 - #青训营笔记创作活动#
1月13日 day7
本篇文章主要讲解了http协议和websocket协议的区别、websocket协议的建立过程、websocket的格式以及websocket的应用场景
http协议是半双工通信,通常是客户端发送请求,服务端响应请求,因此针对一些常见如验证码登录等通常采用轮询或长轮询的方式解决;
但是有些特殊情况如网页游戏需要服务端主动发送数据给客户端,此时就需要websocket协议;
websocket协议的建立过程如下,共包括两步:
1. 首先使用http协议说明需要使用websocket协议,包括三个http请求头,分别是Connection: Upgrate, Upgrate: websocket, Set-Websocket-key: xxx,用于告诉服务端,需要进行协议升级,且升级为websocket协议,同时设置相应的key
2. 如果服务端支持升级为websocket,则返回状态码为101(仍然是HTTP协议),表示升级为websocket,同时返回一个新的key放到响应头Sec-WebSocket-Accept中
接着即可进行websocket通信
websocket的消息格式和其它的类似,包括消息头和消息体,其中消息头包括一些控制信息,同时指明数据长度,接着就是数据展开评论点赞 - #青训营笔记创作活动#
1月12日 day6
刚开始被标题吸引,里面主要讲的使用英文的方法我感觉更多是偏向于使用“搜索引擎”而非学英语本身,感觉只有最后三个标题讲了“使用英文”的一些技巧。
这里我给出一些自己平时在使用英文的一些心得:
1. 第一点也是最最重要的一点,慢慢习惯看不认识的单词,不要一遇到不认识的单词就跳过扫过然后查字典,一定一定要把这个单词也认真拼写一遍,学会音标尝试发音,大家学了这么多年英语,且看的都是专业领域的内容,大部分情况下是完全能够通过上下文猜测理解不认识单词的含义的;
2. 看英文文档,记住是为了理解背后的含义,而不是“翻译”整个文档,重在理解文档,只需要理解意思即可,简单来说,可以连蒙带猜;
基本上,我认为明白以上两点,在阅读英文文档上就基本上差不多了,多练多看,会慢慢发现,之后阅读文档已经基本上不需要再用翻译软件了。展开评论点赞 - #青训营笔记创作活动#
1月11日 day5
主要讲解了MySQL的索引失效的情况,MySQL索引只跟FROM、WHERE语句有关,具体而言,索引建立基于B+树,存储索引列对应的值,具体而言,以下几种情况会存在索引失效:
1. 使用%语句时,左侧有%,如LIKE '%test';
2. 建立联合索引时,不符合最左匹配,其中需要注意如果有abc三列建立索引,ab、ac都不会索引失效,且如果查询WHERE子句顺序为ba,MySQL会优化调整查询顺序;
3. 查询WHERE子句中修改了索引列的值,如对a建立索引,WHERE子句为length(a)或a-1等表达式;
4. OR关键字两侧只有某一个建立索引;
其他情况:
1. ORDER BY倾向于全表扫描,从而避免回表操作;
2. IN和NOT IN中的数据量过大
补充:
在MySQL5.6后,新增了索引下推特性,可以减少回表数据,从而提升性能展开评论点赞 - #青训营笔记创作活动#
1月10日 day4
本篇文章主要讲解了电脑获取IP地址的方式——DHCP
如果是第一次使用DHCP,它的过程包括四个流量包,分别是Discover、Offer、Request、ACK,且最终得到的IP地址有租期(一定时间未使用释放);
如果是第二次连接,由于本机有了MAC和IP的对应关系缓存,因此只会发送第三四阶段的流量包;
为了保证DHCP分配的IP重复问题(两种情况导致重复,手工配置和DHCP服务器分配重复,多台DHCP服务器配置的IP池有重叠),在完成DHCP获取IP后,本机会发送三次ARP请求,其中包括本机IP地址和MAC地址,用于向局域网内其它机器构建本机IP和MAC的映射;
由于使用UDP传输层协议(因为需要广播,没发建立连接,所以只能UDP不能TCP),第一阶段Discover需要广播,第二阶段会根据本机的实现情况选择单播还是广播(通过Broadcast flag判断)展开评论点赞