MySQL003 | 数据传输协议

一、基本数据类型 MySQL协议定义了2大类,7小类的数据类型,它们详细介绍如下: 1.1 数字类型 1.1.1 定长数字类型(FixLenInt) MySQL报文中整型值分别有1、2、3、4、6、8字节长度。存储使用小端存储的方式,比如 2字节 02 00,表示数字 2 而不是 512。 1.1.2 变长数字类型(LenEncInt) ………

阅读全文

Go随笔 | 汇编指令

Go的编译器先将源代码编译成Plan9风格的汇编指令,之后再通过汇编器和链接器生成不同平台的可执行程序。再深入研究源代码执行表现时,经常需要观察汇编指令,了解基本的Plan9汇编语法不可或缺。 CPU寄存器 32位x86架构的CPU有8个32位的通用寄存器(EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI),在汇编语言中可以 ………

阅读全文

OS002 | 计算机系统内存管理

CPU如何访问内存 CPU访问内存示意图 进程虚拟地址到物理地址转换示意图 根据逻辑地址A和页面大小D,得到页号P=floor(A/D),页内偏移量W=A%D。 判断越界,如果P≥M则越界,即页号比最大页号M还大就有问题了。 页表项的地址=起始地址F + 页号P × 页面大小D (这个是内存中的页表的物理地址)或者=F+A-W 物理地址E ………

阅读全文

HTTP3简介

世界变化真快,转眼就到了HTTP3的时代。HTTP协议发展的时间轴是这样的: TCP的问题 TCP存在队头拥塞 QUIC QUIC(Quick UDP Internet Connections)是一种通用、安全、多路复用的传输层新型网络协议。它的目的是替代TCP(目前是互联网上用于数据传输的主流协议)。2012年,QUIC协议由当时还在谷 ………

阅读全文

Go随笔 | Copy && Append

很多时候我们需要对数据进行复制,在申请新的内存空间之后,我们可以用copy、append、for来复制拷贝。性能如何呢? 拷贝测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 ………

阅读全文

Ascii对照表

Ascii编码 Base64编码 标准Base64的码表如下: 为了适应网络传输,有些地方将 +/ 字符 替换成 -_ 字符(现实中还存在许多为适应不同场景,自定义各种可见字符来代替+/)。 填充 base64编码时将ascii字符串每3个一组编码成4个base64字符,当最后的ascii字符不足3个时,可以填充特定位(0值)来促成编码, ………

阅读全文

Go随笔 | string数组检索

前面已经分析过在少量键值对检索的场景下,map的性能不如字符串数组直接检索。当时我们是用字符串数组循环遍历的方式做的测试。而实际上这种方式还有优化的空间。下面我们就来分析下字符串数组如何检索。 字符串== 看下面字符串比较的性能基准测试: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ………

阅读全文

Go杂谈 | Protobuf、MsgPack等常见协议

JSON以其清晰明快横行,但网络大批量传输数据,序列化反序列化的场景下,和Protobuf这种数据传输协议相比,性能却不尽人意。为了解决JSON编解码性能差的问题,MsgPack给了我们新的选择。 JSON协议 菜鸟教程:https://www.runoob.com/json/json-syntax.html JSON 的两种结构: 1、 ………

阅读全文