it-boy
latest
Contents:
操作系统
硬件结构
局部性原理
图灵机的工作方式
冯诺依曼模型
内存
中央处理器
总线
输入、输出设备
线路位宽与CPU位宽
程序执行的基本过程
a = 1 + 2 执行具体过程
指令
基础
指令的类型
指令的执行速度
流水线
指令乱序执行
如何让程序跑的更快?
处理单位
存储器
存储器的层次结构
寄存器
CPU Cache
内存
SSD/HDD 硬盘
存储器的层次关系
CPU-Cache 细节
计算 Tag 位数的步骤
DMA中内存的数据结构
缓存行的数据结构
直接Cache映射
如何写出让 CPU 跑得更快的代码?
如何提升多核 CPU 的缓存命中率?
CPU缓存一致性
缓存命中与未命中
写直达
写回
缓存一致性问题
总线嗅探
MESI 协议
CPU执行任务的过程
Cache 伪共享
避免伪共享的方法
CPU 如何选择线程的
调度类
完全公平调度
CPU 运行队列
调整优先级
中断
软中断
系统里有哪些软中断
数字表示
基础概念
负数的表示
十进制小数与二进制的转换
计算机是怎么存小数的?
0.1 + 0.2 == 0.3 ?
举例计算
小数转二机制
二机制转小数
总结
正向计算小数的二进制表示
逆向从二进制推算小数
float和double的取值范围
Linux 内核 vs Windows 内核
内核
内核的主要作用
Linux 的设计
MultiTask
SMP
ELF
ELF Header
Monolithic Kernel
Windows 设计
内存管理
早期内存分配
分段
分页
虚拟内存
内存分段
内存分页
多级页表
TLB(Translation Lookaside Buffer)
段页式内存管理
Linux 内存布局
malloc分配内存
malloc 是如何分配内存的?
free 释放内存,会归还给操作系统吗?
为什么不全部使用 mmap 来分配内存
既然brk那么牛逼,为什么不全部使用brk来分配
free()函数只传入一个内存地址,为什么能知道要释放多大的内存?
内存满了,会发生什么?
内存分配的过程是怎样的?
哪些内存可以被回收?
回收内存带来的性能影响
内存回收优化
调整文件页和匿名页的回收倾向
尽早触发 kswapd 内核线程异步回收内存
NUMA 架构下的内存回收策略
如何保护一个进程不被 OOM 杀掉呢?
在 4GB 物理内存的机器上,申请 8G 内存会怎么样?
操作系统虚拟内存大小
32 位系统的场景
64 位系统的场景
Swap 机制的作用
预读失效和缓存污染
Linux和MySQL的缓存
Linux 操作系统的缓存
MySQL的缓存
传统LRU是如何管理内存数据的?
预读失效
预读机制
预读失效问题
预读失效原因
预读失效避免
缓存污染
缓存污染定义
避免缓存污染
总结
Linux 虚拟内存管理
虚拟内存地址概念
为什么要使用虚拟地址访问内存
进程虚拟内存空间
内存映射段(mmap)
Linux进程虚拟内存空间
32位机器上进程虚拟内存空间分布
64位机器上进程虚拟内存空间分布
进程虚拟内存空间的管理
描述符
task_struct结构
内核如何划分用户态和内核态虚拟内存空间
内核如何布局进程虚拟内存空间
内核如何管理虚拟内存区域
定义虚拟内存区域的访问权限和行为规范
关联内存映射中的映射关系
匿名映射与文件映射
针对虚拟内存区域的相关操作
虚拟内存区域在内核中是如何被组织的
程序编译后的二进制文件如何映射到虚拟内存空间中
内核虚拟内存空间
32 位体系内核虚拟内存空间布局
直接映射区
ZONE_HIGHMEM 高端内存
vmalloc 动态映射区
永久映射区
固定映射区
临时映射区
32位体系结构下 Linux 虚拟内存空间整体布局
64 位体系内核虚拟内存空间布局
64位体系结构下 Linux 虚拟内存空间整体布局
到底什么是物理内存地址
DRAM芯片的访问
CPU如何读写主存
CPU 从内存读取数据过程
如何根据物理内存地址从主存中读取数据
CPU 向内存写入数据过程
Linux物理内存管理
从CPU角度看物理内存模型
FLATMEM 平坦内存模型
DISCONTIGMEM 非连续内存模型
SPARSEMEM 稀疏内存模型
物理内存热插拔
从 CPU 角度看物理内存架构
一致性内存访问 UMA 架构
非一致性内存访问 NUMA 架构
NUMA 的内存分配策略
NUMA 的使用简介
查看 NUMA 相关信息
绑定 NUMA 节点
内核如何管理 NUMA 节点
内核如何统一组织 NUMA 节点
NUMA 节点描述符 pglist_data 结构
NUMA 节点物理内存区域的划分
NUMA 节点中的内存规整与回收
NUMA 节点的状态 node_states
内核如何管理 NUMA 节点中的物理内存区域
物理内存区域中的预留内存
物理内存区域中的水位线
水位线的计算
min_free_kbytes 的计算逻辑
setup_per_zone_wmarks 计算水位线
watermark_scale_factor 调整水位线的间距
物理内存区域中的冷热页
内核如何描述物理内存页
匿名页的反向映射
进程管理
进程
概念
状态
控制结构
控制
上下文切换
线程
基本概念
比较
上下文切换
实现
调度
调度时机
调度原则
调度算法
进程之间的通信
管道
消息队列
共享内存
信号量
信号
Socket
多线程冲突
竞争与协作
互斥的概念
同步的概念
互斥与同步的实现和使用
锁
信号量
生产者-消费者问题
经典同步问题
哲学家就餐问题
读者-写者问题
死锁
死锁的概念
互斥条件
持有并等待条件
不可剥夺条件
环路等待条件
模拟死锁问题的产生
利用工具排查死锁问题
避免死锁问题的发生
悲观锁和乐观锁
互斥锁与自旋锁
读写锁
乐观锁与悲观锁
一个进程最多可以创建多少个线程
线程崩溃了,进程也会崩溃吗
线程崩溃,进程一定会崩溃吗
进程是如何崩溃的-信号机制简介
为什么线程崩溃不会导致 JVM 进程崩溃
openJDK 源码解析
文件系统
文件系统的基本组成
虚拟文件系统
文件的使用
文件的存储
连续空间存放方式
非连续空间存放方式
Unix 文件的实现方式
设备管理
设备控制器
I/O控制方式
设备驱动程序
通用块层
存储系统I/O软件分层
网络系统
零拷贝
DMA 技术
传统的文件传输
优化文件传输
零拷贝
mmap + write
sendfile
零拷贝技术实际应用
PageCache
大文件传输
I/O 多路复用
Socket 模型
如何服务更多的用户
多进程模型
多线程模型
I/O 多路复用
select/poll
epoll
边缘触发和水平触发
Reactor 和 Proactor
硬件架构
并行硬件架构
数据库架构设计的三种模式
MPP模式
网络
基础概念
网关
网卡
交换机
路由器
防火墙
负载均衡器
脑图思考
HTTP脑图
TCP脑图
IP脑图
网络设计
集线器
交换机
路由器
路由寻址
总结
网络协议
ARP 与 RARP 协议
DNS 域名解析
DHCP
NAT 网络地址转换
ICMP 协议
IGMP 因特网组管理协议
OSI协议
TCP/IP协议
HTTP协议
HTTPS协议
网络性能指标
查看网络配置
查看协议栈信息
网络吞吐率&PPS
带宽
连通性和延时
网页访问过程
网页访问及显示
杂项
测试服务器的某个端口是否通畅
证书生成及验证
常见的加密算法
摘要算法
对称加密算法
非对称加密算法
证书的构成
证书的生成及解析
证书结构解析(asn1parse结果解析)
SSL/TLS协议基本流程
总结
证书签发及验证
双向认证
网络抓包
tcpdump
基本用法
常用选项与过滤
抓包实例
WireShark
语法结构
常用过滤
抓包实践
wireshark抓包界面
http应用抓包
TCP三次握手
TCP窗口大小机制
TCP Payload
HTTP请求
HTTP响应
TCP四次挥手
HTTP与HTTPS
HTTP
HTTPS
HTTP的演变
HTTP/1.1 相比 HTTP/1.0 性能上的改进:
HTTP/2 做了什么优化
HTTP/3 做了哪些优化
优化
HTTP/1.1 如何优化
HTTP与RPC
HTTP和RPC区别
总结
服务器主动发消息给客户端
使用 HTTP 不断轮询
长轮询
WebSocket
总结
IP知识
基本概念
IP地址
ip地址的分类
CIDR
公有ip地址和私有ip地址
ip地址与路由控制
ip分片和重组
JWT原理及验证
1.简介
2.跨域认证
3.JWT原理
4.JWT的数据结构
4.1 Header
4.2 Payload
4.3 Signature
4.4 Base64和Base64URL
5 JWT 的使用方式
6 JWT 的几个特点
7 程序验证
Linux收发网络包
linux收发数据包
发送数据包
接收数据包
ASGI/WSGI
OSI网络模型
应用层
传输层
网络层
网络接口层
数据包流转
TCP
定义
协议构成
存在必要性
与UDP区别
UDP协议
对比
连接
序列号与确认应答号
TCP分段
为什么需要三次握手
防止历史连接
同步双方初始序列号
避免资源浪费
半连接和全半连接
四次挥手
Q&A
数据库
Linux
内核参数调优
工具
查看所有系统变量
优化性能调查
uptime
dmesg | tail
vmstat
mpstat -P ALL 1
pidstat 1
iostat -xz 1
free -m
sar -n DEV 1
sar -n TCP,ETCP 1
top
内核参数
网络相关内核参数
内核参数调整
时区时间设置
常见时区
时区和时间设置
授时中心
时间同步
设置语言环境
编程
python
PDM管理
安装
初始化
语法
配置pypi源
增加依赖库
依赖库分组
查看依赖库
删除依赖库
更新依赖库
分组更新
查看项目环境
切换解释器
运行python命令
命令别名
python函数基础
1.函数的定义
2.函数参数
3.函数名称
4.函数返回值
5.函数作用域
6.函数类型
6.1 内置函数
6.2 匿名函数
6.3 嵌套函数
6.4 闭包函数
6.5 回调函数
7.函数属性
7.1 属性分析
7.2 属性和字节码对象PyCodeObject
8.函数冻结
9.函数装饰器
9.1 基础
9.2 定义
10.代码块
11.思考
python函数的执行过程
简介
解释器
基本执行
汇编
反汇编
关于dis
编译
栈帧
函数调用
函数调用与栈
函数调用过程
函数调用示例
模块和包
1. 内置模块和标准库
2. 模块和包的定义
2.1 模块
2.2 包
3. 模块导入
3.2 模块搜索路径
3.3 模块的导入过程
3.4 重载模块
3.5 模块导入细节
4. 包
4.1 导入格式
4.2 关于__init__.py
4.2 关于__path__.py
5. 导入示例
6. 相对导入
7.关于__name__
python基础知识
解释器执行流程
特点
与ELF文件的关系
变量
基本数据类型
语句和表达式
运算符
数值基本运算
其它数学运算方法
浮点数
真除法、Floor除法和小数位截断
数值类型的转换
小数类型(Decimal)
分数(Fraction)
布尔类型
True/False的各种形式
None
逻辑运算:and、or、not
空、非空测试的建议
等值、大小比较
is 和 ==
python中的字符串
raw字符串
字符串转换
操作字符串
字符串的索引和分片操作
索引取单个元素
分片取多个元素
异常和错误处理
异常处理:try/except
异常处理:try/finally
产生异常:raise和assert
自定义异常
如何看抛出的异常
深入异常处理
raise
sys.exc_info()
区分异常和错误
异常类的继承
异常类的嵌套
except应该捕获哪些异常
自定义异常类
自定义异常输出
提供构造方法
提供异常类的其它方法
with/as和contextlib上下文管理使用说明
with/as
嵌套多个环境管理器
自定义环境管理器
contextlib模块
f-string
基本语法
用 Python f-string 来评估表达式
如何在 Python f-string 中使用条件语句
用 Python f-string 调用方法
在 Python f-string 中调用函数
使用f-string进行格式化
使用建议
深拷贝与浅拷贝
for迭代的陷阱
验证小整数常量池
序列化及反序列化
基础概念
python中实现
比较
基础
递归算法
递归函数的条件
内存栈区堆区
尾递归
关于return
理解递归
python递归函数基本原理及执行顺序
编程语言
编码
基础概念
字与字长
Unicode编码
字符编码模型
现代字符编码模型
抽象字符表ACR-明确字符的范围(即确定支持哪些字符)
编号字符集CCS(Coded Character Set)-用数字编号表示字符(即用数字给字符编号)
字符编码方式CEF(Character Encoding Form)-将字符编号(即码点值)编码为码元序列(即字符编码)
字符编码模式CES
传输编码语法TES(Ttransfer Encoding Syntax)
内码+外码
UTF-8编码规则
UTF-16编码
零宽字符
进程线程和协程
进程
ps命令中的进程状态
进程状态转换:
线程
执行单元
切换问题与协程
协程的切换成本
大数据
数据指标体系
1.指标定义
2.指标理解
3.指标分类
4.指标分级
5.指标计算
6.指标要素
7.指标管理
7.1 覆盖和收敛
7.2 及时性的提升
7.3 命名的统一性
7.4 一致性与生态
8.指标命名
9.指标体系及建设流程
9.1 业务梳理与指标体系框架指定
9.2 基于业务目标做业务过程的拆解
9.3 基于业务过程梳理确定分析主题
9.4 校验整合信息形成指标体系框架
10.业务指标梳理
10.1业务分析所需指标清单的梳理
10.2分析数据所需的维度的确定
10.3建立指标和维度之间的映射关系
11.指标清单梳理
12.指标体系平台
13.指标拆解
中间件
Haproxy
特点
负载均衡算法
常见的使用场景
缺点
健康检查和故障转移机制
LVS、Nginx、HAproxy的区别
工具
vscode
1.快捷键使用
通用快捷键
基础编辑
导航
查询和替换
多行光标操作于选择
丰富的语言操作
编辑器管理
文件管理
显示
调试
集成终端
git
1.提交规范
1.1 目标
1.2 动机
1.3 提议
1.3.1 提交格式
1.4 恢复
1.5 例子
2.生成CHANGELOG.md
3.在线学习网站
4.Git常用
4.1 代码提交和同步代码
4.2 代码撤销和撤销同步
已修改,但未暂存
已暂存,未提交
已提交,未推送
已推送到远程
4.3 相对引用
4.4 整理提交记录
4.5 合并分支
4.6 冲突与合并
解决冲突
4.7 日志查看
4.8 其它常用命令
删除本地分支和远程分支
关联远程仓库
切换分支
撤销操作
版本回退与前进
4.9 配置Git
5. git模型
版本控制系统核心功能
git的优势
版本管理的挑战
git分支模型
Git flow
GitHub flow
Gitlab flow
TBD flow
TBD flow++
选择合适的分支模型
小团队
常见任务
vim使用
1. vim 键盘图
2. 基础命令
3.保存退出
4.移动
word 与 WORD 的区别
5.复制 / 粘贴 / 删除
6.模式切换
7.大小写 / 加减
8.撤销
9.Folding
10.window/tab
11.Buffer
12.tag
13.Mark
14.Completion
15.Quick List
16.Location List
17.宏
18.参数列表
19.命令行模式
20.Insert 模式
21.路径
22.寄存器
使用方式
23.vimdiff
24.远程编辑
正则表达式
正则表达式概念
断言
特殊字符
匹配字符的元字符
匹配位置的元字符
关于\b
量词
分支和分组
非捕获组
正向先行断言
负向先行断言
正向后行断言
负向后行断言
匹配模式选项
findall 和 finditer
compile
match 和 search
split
sub 和 subn
escape
match 对象
wget和curl
1.wget使用
1.1 使用 wget 命令下载单个文件
1.2 使用 wget 命令下载多个文件
1.3 使用 wget 命令获取不同名称的文件
1.4 使用 wget 命令将文件保存在指定目录中
1.5 使用 Wget 命令限制下载速度
1.6 使用 Wget 命令设置重试次数
1.7 使用 Wget 命令在后台下载
1.8 使用Wget命令通过FTP下载
1.9 使用 Wget 命令检索整个网站
1.10 使用 Wget 命令查找断开的链接
1.11 使用 Wget 命令断点续传
1.12 选择性的下载
2.CRUL工具
2.1 curl 协议
2.2 curl 命令选项
2.2 curl 示例
2.3 可用的 –write-out 变量
2.4 Unicode 编码的响应的转换
2.5 模拟POST/GET请求
nc命令
简介
文件传输
TCP端口扫描
it-boy
中间件
在 GitHub 上编辑
中间件
Haproxy