CHEATSHEET · 开发必备 / 速查速用

速查手册

覆盖 Git 版本控制、服务器运维、编程思想、Web 开发、Java 生态与网络协议六大领域,开发中常用的技术速查与参考手册,随查随用。

6大类别 200+条目 持续更新

📖 速查手册

点击展开每个类别,查看详细速查表

📋 基础操作
命令说明示例
git init 在当前目录初始化一个新的 Git 仓库,创建 .git 子目录 git init
git init my-project
git clone 克隆远程仓库到本地,默认创建与仓库同名的目录 git clone https://github.com/user/repo.git
git clone --depth=1 repo.git 浅克隆
git add 将工作区的修改添加到暂存区(Staging Area),准备提交 git add .
git add src/main.js
git add -p 交互式
git commit 将暂存区的修改提交到本地仓库,生成一个快照 git commit -m "feat: add login"
git commit --amend 修改上次提交
git push 将本地分支的提交推送到远程仓库 git push origin main
git push --force-with-lease 安全强制推送
git pull 从远程仓库拉取最新代码并合并到当前分支
等价于 git fetch + git merge
git pull origin main
git pull --rebase 变基拉取
🌿 分支与合并
命令说明示例
git branch 列出、创建或删除分支。当前分支前有 * 标记 git branch
git branch feature-x
git branch -d old-branch
git merge 将指定分支合并到当前分支,生成一个合并提交 git merge feature-x
git merge --no-ff feature-x 禁止快进
git rebase 将当前分支的提交「移植」到另一个分支的顶端,历史更线性 git rebase main
git rebase -i HEAD~3 交互式变基
git cherry-pick 将某个或某几个提交的更改应用到当前分支(精选移植) git cherry-pick abc123
git cherry-pick abc123..def456
🔄 暂存与回退
命令说明示例
git stash 临时保存工作区和暂存区的修改,恢复到干净的 HEAD 状态 git stash push -m "wip"
git stash pop
git stash list
git reset 撤销提交或修改。--soft 保留工作区,--hard 完全丢弃 git reset HEAD~1
git reset --hard abc123
git reset --soft HEAD~1
git reflog 查看 HEAD 的移动历史,是数据恢复的最后一道防线 git reflog
git reset HEAD@{2}
🔍 检查与调试
命令说明示例
git log 查看提交历史,支持丰富的格式化输出 git log --oneline --graph
git log --author="john"
git diff 比较工作区、暂存区、提交之间的差异 git diff
git diff --staged
git diff HEAD~2 HEAD
git blame 逐行显示文件的每一行是谁在什么时候修改的 git blame src/index.js
git bisect 二分查找引入 Bug 的提交,标记 good/bad 自动缩小范围 git bisect start
git bisect bad
git bisect good v1.0
🏷️ 标签与工作树
命令说明示例
git tag 为某个提交打标签,常用于标记版本号(v1.0.0) git tag v1.0.0
git tag -a v1.0.0 -m "Release 1.0"
git push origin --tags
git worktree 允许在同一个仓库中同时检出多个分支到不同目录 git worktree add ../hotfix hotfix-branch
git worktree list
📂 文件与目录操作
命令说明示例
ls 列出目录内容。-l 详情,-a 显示隐藏文件,-h 人类可读 ls -lah
ls *.log
cd 切换工作目录。cd ~ 回家目录,cd - 回上一个目录 cd /var/log
cd ~/projects
pwd 显示当前工作目录的绝对路径 pwd
# 输出: /home/user/projects
cp 复制文件或目录。-r 递归复制目录,-p 保留属性 cp file.txt /backup/
cp -r ./dist/ /deploy/
mv 移动或重命名文件/目录 mv old.txt new.txt
mv file.txt /tmp/
rm 删除文件或目录。-rf 强制递归删除(⚠️ 谨慎使用) rm temp.log
rm -rf node_modules/
mkdir 创建目录。-p 递归创建父目录 mkdir -p a/b/c/d
🔐 权限与用户
命令说明示例
chmod 修改文件权限。u/g/o/a 用户/组/其他人/全部,+/-/= 添加/移除/设置 chmod +x script.sh
chmod 755 app.py
chown 修改文件所属用户和组。-R 递归更改 chown user:group file.txt
chown -R www-data:www-data /var/www
⚙️ 系统与进程管理
命令说明示例
ps 查看进程快照。aux 显示所有进程详细信息 ps aux | grep nginx
ps -ef
top / htop 实时显示系统资源占用和进程列表。htop 是增强版(需安装) top -bn1
htop
kill 发送信号终止进程。-9 强制杀死,-15 优雅终止 kill -15 12345
kill -9 12345
free 查看内存使用情况。-h 人类可读格式 free -h
free -m
du 统计文件或目录的磁盘使用量 du -sh /var/log
du --max-depth=1 -h
df 查看文件系统磁盘空间使用情况 df -h
df -i 查看 inode
uname 查看系统内核信息。-a 显示全部信息 uname -a
# Linux hostname 6.1.0 #1 SMP ...
uptime 查看系统已运行时间、负载平均值 uptime
# 14:23 up 30 days, 2:15, 3 users
🔍 搜索与文本处理
命令说明示例
grep 在文件中搜索匹配模式的行。-r 递归,-i 忽略大小写,-n 显示行号 grep -rn "TODO" src/
grep -E "error|warn" app.log
find 在目录树中查找文件,支持按名称、类型、大小、时间等条件 find /var -name "*.log" -size +100M
find . -type f -mtime -7
sed 流编辑器,用于对文本进行替换、删除、插入等操作 sed -i 's/old/new/g' file.txt
sed -n '10,20p' file.log
awk 强大的文本分析工具,按字段处理、格式化输出 awk '{print $1, $NF}' access.log
awk -F: '{print $1}' /etc/passwd
📦 网络与文件传输
命令说明示例
curl HTTP 请求工具,支持 GET/POST/HEAD 等方法及各种协议 curl -I https://example.com
curl -X POST -d '{"k":"v"}' -H "Content-Type: application/json" url
wget 下载工具,支持断点续传、递归下载 wget https://example.com/file.zip
wget -c -O output.zip url
ssh 远程登录服务器,-p 指定端口,-i 指定密钥 ssh -p 2222 user@host
ssh -i ~/.ssh/id_rsa user@host
scp 基于 SSH 的安全文件复制,-r 递归复制目录 scp file.txt user@host:/tmp/
scp -r ./dist/ user@host:/var/www/
🗜️ 压缩与归档
命令说明示例
tar 归档工具。-czf 创建 gzip 压缩,-xzf 解压 tar -czf archive.tar.gz /path
tar -xzf archive.tar.gz
⏰ 任务计划与系统服务
命令说明示例
crontab 管理定时任务。-e 编辑,-l 列出,格式:分 时 日 月 周 命令 crontab -e
0 3 * * * /backup.sh 每天 3 点备份
systemctl 管理系统服务(systemd)。启动、停止、启用、查看状态 systemctl start nginx
systemctl enable nginx
systemctl status nginx
journalctl 查看 systemd 日志。-u 查看特定服务,-f 实时跟踪 journalctl -u nginx -f
journalctl --since "1 hour ago"
lsof 列出当前系统打开的文件(常用于查看端口占用) lsof -i :8080
lsof -iTCP -sTCP:LISTEN
iptables Linux 防火墙规则管理。-L 查看规则,-A 添加规则 iptables -L -n
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
🐳 Docker 容器管理
命令说明示例
docker ps 列出运行中的容器。-a 显示全部(含已停止) docker ps
docker ps -a --format "table {{.Names}}\t{{.Status}}"
docker images 列出本地镜像列表 docker images
docker images --filter "dangling=true"
docker run 创建并启动一个新容器。-d 后台运行,-p 端口映射,--name 命名 docker run -d -p 80:80 --name web nginx
docker run -it --rm ubuntu bash
docker build 从 Dockerfile 构建镜像。-t 标记标签 docker build -t my-app:latest .
docker build --no-cache -t my-app .
docker exec 在运行中的容器内执行命令。-it 交互式终端 docker exec -it web bash
docker exec web ls /etc/nginx
docker logs 查看容器日志。-f 实时跟踪,--tail 只看最近 N 行 docker logs -f web
docker logs --tail 100 web
docker stop 优雅停止一个或多个容器(发送 SIGTERM) docker stop web
docker stop $(docker ps -q)
docker rm 删除一个或多个已停止的容器。-f 强制删除运行中的容器 docker rm web
docker rm -f web
docker rmi 删除一个或多个本地镜像。-f 强制删除 docker rmi nginx:latest
🐳 Docker Compose 与高级管理
命令说明示例
docker-compose up 启动 Compose 项目中所有服务。-d 后台运行 docker-compose up -d
docker-compose up -d web db
docker-compose down 停止并移除所有容器、网络,默认不移除卷 docker-compose down
docker-compose down -v 同时移除卷
docker network 管理 Docker 网络。ls 列出,create 创建,connect 连接容器 docker network ls
docker network create --driver bridge my-net
docker volume 管理 Docker 卷。ls 列出,create 创建,prune 清理 docker volume ls
docker volume create my-vol
docker system prune 清理 Docker 未使用的资源(容器、网络、镜像、构建缓存) docker system prune -a --volumes ⚠️ 全面清理
🏗️ 创建型设计模式
模式类型说明适用场景
Singleton 单例 创建型 确保一个类只有一个实例,并提供一个全局访问点。Java 中常用 enum 或双重检查锁定实现 配置管理器、线程池、数据库连接池、日志记录器
Factory 工厂 创建型 定义一个创建对象的接口,让子类决定实例化哪个类。将客户端与具体类解耦 日志框架(SLF4J)、DAO 工厂、跨平台 UI 组件创建
Builder 建造者 创建型 将复杂对象的构建与表示分离,允许通过相同的构建过程创建不同的表示。支持链式调用 Lombok @Builder、构造复杂配置对象、SQL 查询构建器
Prototype 原型 创建型 通过复制已有对象来创建新对象,而不是通过 new。Java 中实现 Cloneable 对象创建成本高、需要保留对象副本的场景(如缓存快照)
🔌 结构型设计模式
模式类型说明适用场景
Adapter 适配器 结构型 将一个类的接口转换成客户端期望的另一个接口,让不兼容的类可以一起工作 兼容旧系统接口、不同日志框架统一封装、Spring MVC 处理器适配器
Proxy 代理 结构型 为另一个对象提供一个替身或占位符以控制对它的访问。分为静态代理和动态代理 Spring AOP(JDK 动态代理 / CGLIB)、延迟加载、权限控制、日志记录
Decorator 装饰器 结构型 动态地给对象添加额外的职责,比继承更灵活。Java I/O 流是经典示例 BufferedInputStream 包装 FileInputStream、Spring Security 过滤器链
🔄 行为型设计模式
模式类型说明适用场景
Observer 观察者 行为型 定义对象间一对多的依赖关系,当一个对象状态变化时,所有依赖者都会收到通知并自动更新 Spring 事件监听(ApplicationListener)、消息队列发布订阅、Vue 响应式系统
Strategy 策略 行为型 定义一系列算法,将每个算法封装起来,并使它们可以互相替换。算法独立于使用它的客户端 支付方式选择、排序策略、压缩算法、认证方式(OAuth/JWT/Basic)
Template Method 模板方法 行为型 在父类中定义算法的骨架,将一些步骤延迟到子类中实现。子类可以重定义算法的特定步骤 Spring 中的 JdbcTemplateRestTemplate、工作流引擎
Command 命令 行为型 将请求封装为对象,从而可以用不同的请求对客户进行参数化、队列请求或记录日志 操作撤销/重做、事务操作、任务队列、GUI 按钮回调
State 状态 行为型 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类 订单状态流转、工作流审批、游戏角色状态
📊 数据结构
结构说明时间复杂度(平均)典型应用
Array 数组 连续内存空间存储相同类型元素,支持随机访问 O(1) 读 / O(n) 插入删除 ArrayList、数据缓冲区、矩阵运算
Linked List 链表 通过指针链接的节点序列,插入删除快,不支持随机访问 O(n) 读 / O(1) 插入删除 LinkedList、LRU Cache、区块链
Stack 后进先出(LIFO)结构,只能在栈顶操作 O(1) push/pop 函数调用栈、表达式求值、括号匹配、浏览器的前进后退
Queue 队列 先进先出(FIFO)结构,队尾入队、队首出队 O(1) enqueue/dequeue 消息队列、BFS 广度优先搜索、线程池任务队列
Hash Table 哈希表 通过哈希函数将键映射到存储位置,实现 O(1) 查找 O(1) 平均 / O(n) 最坏 HashMap、HashSet、缓存系统、数据库索引
Tree 分层结构,每个节点有零个或多个子节点,根节点唯一 视具体类型而定 文件系统、DOM 树、组织架构、路由表
Binary Search Tree 二叉搜索树 左子树所有节点 < 根节点 < 右子树所有节点,支持高效查找 O(log n) 平均 / O(n) 退化为链表 TreeSet、TreeMap、数据库索引的底层结构
Heap 完全二叉树,最大堆的父节点 ≥ 子节点,最小堆相反 O(log n) 插入/删除 / O(1) 取最值 优先队列(PriorityQueue)、Top K 问题、堆排序
Graph 由顶点和边组成,分有向图/无向图、加权图/无权图 O(V+E) 遍历 社交网络、地图导航(Dijkstra)、依赖分析
Trie 前缀树 字符串查找树,利用公共前缀节省空间,支持前缀匹配 O(m) m 为字符串长度 自动补全、拼写检查、IP 路由前缀匹配
Skip List 跳表 多层链表的概率性数据结构,支持 O(log n) 查找 O(log n) 平均 Redis 的 ZSET 有序集合底层实现
⚡ 算法速查
算法类别时间复杂度说明
Bubble Sort 冒泡排序 排序 O(n²) / O(n) 优化后 相邻元素两两比较,大的往后冒。稳定排序,适合小数据量或基本有序的数据
Quick Sort 快速排序 排序 O(n log n) 平均 / O(n²) 最坏 选取枢轴,分区后递归排序。大多数语言排序函数的默认实现
Merge Sort 归并排序 排序 O(n log n) 所有情况 分治思想,先将数组递归分成两半,再合并有序子数组。稳定排序,额外 O(n) 空间
Heap Sort 堆排序 排序 O(n log n) 利用堆结构(最大堆)进行排序,先建堆再反复取出堆顶。不稳定排序
Binary Search 二分查找 搜索 O(log n) 在有序数组中通过不断折半缩小查找范围。前提是数组已排序
BFS 广度优先搜索 图遍历 O(V + E) 使用队列逐层遍历,先访问离起点最近的点。适合求最短路径(无权图)
DFS 深度优先搜索 图遍历 O(V + E) 使用栈(递归或显式)深入一条路径到底再回溯。适合遍历所有解空间
Dijkstra 最短路径 图算法 O(V²) / O(E log V) 堆优化 计算带权重图中从源点到所有节点的最短路径。要求边权非负
DP 动态规划 优化方法 视问题而定 将复杂问题分解为重叠子问题,通过存储中间结果避免重复计算。经典问题:背包、LCS、LIS
🌐 HTTP 状态码速查
状态码类别说明常见场景
200 成功 请求成功,服务器返回所请求的数据 GET 请求获取资源成功、POST 返回数据
201 成功 请求成功并创建了新资源。响应头应包含 Location 字段指向新资源 POST 创建用户成功、上传文件创建完成
204 成功 请求成功但无返回内容。常用于 DELETE 操作 删除资源成功、更新部分字段成功
301 重定向 永久重定向。搜索引擎会更新索引为新 URL 域名变更、HTTP → HTTPS 永久跳转
302 重定向 临时重定向。搜索引擎仍保留原 URL 用户登录后跳转、A/B 测试
304 缓存 未修改,可使用缓存版本。响应体为空 基于 ETag / Last-Modified 的协商缓存
400 客户端错误 请求语法错误或参数无效,服务器无法理解 JSON 格式错误、缺少必填参数、参数类型不匹配
401 客户端错误 未认证,请求需要身份验证。响应头包含 WWW-Authenticate 未提供 token、token 过期、未登录
403 客户端错误 服务器理解请求但拒绝执行(权限不足) 普通用户访问管理员接口、IP 被封禁
404 客户端错误 请求的资源在服务器上不存在 URL 拼写错误、资源已被删除
405 客户端错误 请求方法不被允许。响应头应包含 Allow 字段 只允许 GET 的接口收到了 POST 请求
429 客户端错误 请求速率超过限制(Rate Limiting) API 调用频率超限、爬虫被限速
500 服务端错误 服务器内部错误,无法完成请求 代码抛出未捕获异常、数据库连接失败
502 服务端错误 网关或代理服务器收到上游服务器无效响应 Nginx 代理的后端服务挂了、PHP-FPM 进程崩溃
503 服务端错误 服务暂时不可用(过载或维护中)。响应头可包含 Retry-After 服务器重启、流量激增被限流、停机维护
🔤 正则表达式常用模式
用途正则表达式说明
邮箱 ^[\w.-]+@[\w.-]+\.\w{2,}$ 匹配标准邮箱格式,支持点号和中划线
手机号 ^1[3-9]\d{9}$ 匹配中国大陆 11 位手机号(13~19 开头)
URL ^https?://[\w.-]+(:\d+)?(/[\w./%-]*)?(\?[\w=&.-]+)?(#\w+)?$ 匹配 HTTP/HTTPS URL,含端口、路径、查询参数和锚点
IP 地址 ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ 匹配 IPv4 地址(建议配合数值范围校验:0-255)
日期 ^\d{4}-\d{2}-\d{2}$ 匹配 YYYY-MM-DD 格式日期(如 2026-06-29)
密码强度 ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$ 至少 8 位,包含大小写字母、数字和特殊字符
\d [0-9] 匹配任意数字
\w [a-zA-Z0-9_] 匹配单词字符(字母、数字、下划线)
\s [ \t\n\r\f] 匹配空白字符(空格、制表符、换行等)
📦 npm / yarn 命令对比
操作npmyarn说明
初始化项目 npm init yarn init 创建 package.json
安装依赖 npm install yarn 安装 package.json 中所有依赖
添加依赖 npm install react yarn add react 安装并写入 dependencies
添加 dev 依赖 npm install -D jest yarn add -D jest 安装并写入 devDependencies
全局安装 npm install -g vue yarn global add vue 安装到全局 node_modules
移除依赖 npm uninstall react yarn remove react 移除并更新 package.json
更新依赖 npm update react yarn upgrade react 更新到符合 package.json 范围的最新版
运行脚本 npm run dev yarn dev 执行 scripts 中定义的命令
发布包 npm publish yarn publish 将包发布到 npm registry
缓存目录 ~/.npm ~/.yarn/cache 离线安装时 yarn 更快
锁定文件 package-lock.json yarn.lock 确保所有环境安装相同版本
⚡ VS Code 常用快捷键
快捷键功能说明
Ctrl + P快速打开文件输入文件名跳转到任意文件
Ctrl + Shift + P命令面板打开所有可用命令的搜索面板
Ctrl + D选中下一个相同词多次按可多光标编辑
Ctrl + /切换行注释在当前行或选中行切换注释
Alt + ↑/↓移动行上下移动当前行或选中行
Shift + Alt + ↓复制行快速复制当前行或选中行到下方
Ctrl + Shift + L全选所有匹配项选中文档中所有当前选中词
F2重命名符号智能重命名变量、函数、类等
Ctrl + \`打开终端切换显示内置终端
Ctrl + B切换侧边栏显示/隐藏资源管理器侧边栏
Ctrl + Shift + F全局搜索在整个项目中搜索文本
Ctrl + G跳转到行输入行号快速跳转
Ctrl + Shift + K删除行删除当前行而不复制到剪贴板
Ctrl + .快速修复显示当前错误的快速修复建议
Ctrl + Space触发建议手动触发代码补全建议
📝 Markdown 语法参考
元素语法(Markdown)渲染效果
标题 # H1 ~ ###### H6 H1 ~ H6
加粗 **加粗文字** 加粗文字
斜体 *斜体文字* 斜体文字
链接 [显示文字](https://url.com) 显示文字 🔗
图片 ![alt文字](https://url.com/img.png) 显示图片
无序列表 - 项目 1
- 项目 2
• 项目 1
• 项目 2
有序列表 1. 第一项
2. 第二项
1. 第一项
2. 第二项
代码 行内 \`code\` code
代码块 ```javascript
console.log(1)
```
语法高亮的代码块
引用 > 引用文字 引用文字
分割线 --- 水平分割线
表格 | 表头 | 表头 |
|------|------|
| 内容 | 内容 |
标准 Markdown 表格
任务列表 - [x] 已完成
- [ ] 未完成
☑️ 已完成
⬜ 未完成
删除线 ~~删除文字~~ 删除文字
脚注 文字[^1]
[^1]: 注释
带脚注链接
🍃 Spring Boot 核心注解
注解作用说明 / 常用属性
@RestController 组合 @Controller + @ResponseBody,所有方法返回 JSON 标记 RESTful API 控制器,返回值自动序列化为 JSON
@RequestMapping 映射 HTTP 请求到处理器方法 value 路径,method 请求方式,params 参数过滤,headers 请求头过滤
@Autowired 自动装配 Spring Bean 按类型注入,可配合 @Qualifier 指定 Bean 名称
@Service 标记服务层组件 业务逻辑层,@Component 的语义化别名
@Repository 标记数据访问层组件 DAO 层,支持持久层异常转换(DataAccessException
@Configuration 标记配置类,包含一个或多个 @Bean 方法 替代 XML 配置,由 Spring 容器处理
@Bean 声明一个由 Spring 容器管理的 Bean @Configuration 类的方法上使用,name 指定 Bean 名称
@Value 注入配置属性值 @Value("${app.name}") 从配置文件读取,支持 SpEL 表达式
@Transactional 声明式事务管理 readOnly 只读优化,rollbackFor 指定回滚异常,propagation 传播行为
@Cacheable 方法结果缓存 value 缓存名称,key 缓存键,unless 条件过滤不缓存
@Async 异步执行方法 方法在独立的线程池中异步执行,需启用 @EnableAsync
@Scheduled 定时任务 cron 表达式,fixedDelay 固定延迟,fixedRate 固定速率
⚙️ JVM 常用参数
参数说明示例 / 建议值
-Xms 初始堆大小(JVM 启动时分配的堆内存) -Xms512m / -Xms4g
-Xmx 最大堆大小(JVM 允许的最大堆内存) -Xmx2g / -Xmx8g
-Xmn 新生代大小(影响 Minor GC 频率) -Xmn512m(通常为堆的 1/3~1/4)
-XX:+UseG1GC 使用 G1 垃圾回收器(JDK 9+ 默认) 适用于大堆内存(>4G),低延迟场景
-XX:MaxGCPauseMillis G1 GC 最大停顿时间目标(毫秒) -XX:MaxGCPauseMillis=200
-XX:+UseConcMarkSweepGC 使用 CMS 垃圾回收器(JDK 9 弃用,JDK 14 移除) 低停顿,但存在碎片化和 CPU 高问题
-XX:+UseParallelGC 使用并行垃圾回收器(JDK 8 默认) 高吞吐量,适合批处理、科学计算
-XX:MetaspaceSize 元空间初始大小(取代 JDK 8 之前的永久代) -XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize 元空间最大大小 -XX:MaxMetaspaceSize=512m
-Xss 每个线程的栈大小 -Xss256k(减小栈空间可容纳更多线程)
-XX:+HeapDumpOnOutOfMemoryError OOM 时自动生成 Heap Dump -XX:HeapDumpPath=/tmp/dump.hprof
-XX:+PrintGCDetails 打印详细 GC 日志 -Xlog:gc*(JDK 9+ 新语法)
-D 设置系统属性 -Dserver.port=8080 -Dspring.profiles.active=prod
🗄️ SQL 核心语法速查
语句 / 概念说明示例
SELECT 查询数据,支持 WHEREORDER BYLIMIT 等子句 SELECT name, age FROM users WHERE age > 18 ORDER BY age DESC LIMIT 10
INSERT 插入新行,可指定列或使用默认值 INSERT INTO users (name, age) VALUES ('Alice', 25)
UPDATE 修改已有行,务必配合 WHERE 防止全表更新 UPDATE users SET age = 26 WHERE name = 'Alice'
DELETE 删除行,务必配合 WHERE 防止全表删除 DELETE FROM users WHERE age < 18
JOIN 关联多表查询。INNERLEFTRIGHTFULL SELECT u.name, o.total FROM users u LEFT JOIN orders o ON u.id = o.user_id
GROUP BY 按列分组聚合,常配合 HAVING 过滤 SELECT dept, COUNT(*) FROM employees GROUP BY dept HAVING COUNT(*) > 5
HAVING GROUP BY 结果进行过滤(不能用 WHERE 替代) HAVING SUM(amount) > 1000
子查询 嵌套在 SELECT/FROM/WHERE 中的查询 SELECT * FROM users WHERE id IN (SELECT user_id FROM orders)
窗口函数 在结果集的行组上计算,不折叠行。ROW_NUMBER()RANK()DENSE_RANK() SELECT name, salary, RANK() OVER (PARTITION BY dept ORDER BY salary DESC)
索引 加速查询的数据结构。B+ TreeHashComposite(复合索引) CREATE INDEX idx_name ON users(name)
CREATE UNIQUE INDEX idx_email ON users(email)
事务 ACID 特性。BEGIN / COMMIT / ROLLBACK 隔离级别:READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ (MySQL 默认), SERIALIZABLE
窗口函数 - 聚合 SUM() OVERAVG() OVERCOUNT() OVER SELECT date, amount, SUM(amount) OVER (ORDER BY date) AS running_total FROM sales
窗口函数 - 偏移 LAG() 上一行、LEAD() 下一行 SELECT date, amount, LAG(amount) OVER (ORDER BY date) AS prev_amount
🔗 JOIN 类型详解
INNER JOIN
只返回两张表中匹配的行。不匹配的行被丢弃。这是最常用的 JOIN 类型。
LEFT JOIN
返回左表所有行,右表无匹配则填充 NULL。适合「查主表及其可选关联」的场景。
RIGHT JOIN
返回右表所有行,左表无匹配则填充 NULL。LEFT JOIN 的反向操作,但 LEFT 更常用。
FULL JOIN
返回两张表的所有行,无匹配处填充 NULL。MySQL 不直接支持,可通过 LEFT JOIN UNION RIGHT JOIN 实现。
📊 窗口函数分类速查
类别函数说明
排名 ROW_NUMBER() 为结果集每一行分配唯一的连续整数
排名 RANK() 排名相同会跳号(1, 1, 3, 4)
排名 DENSE_RANK() 排名相同不跳号(1, 1, 2, 3)
聚合 SUM() OVER 累计求和,支持 PARTITION BY 分组
聚合 AVG() OVER 移动平均值,常与 ROWS BETWEEN 配合
偏移 LAG() 访问前 N 行的值(同比/环比分析)
偏移 LEAD() 访问后 N 行的值
📡 协议对比总览
协议层级传输方式特点典型场景
HTTP/1.1 应用层 TCP 文本协议,队头阻塞(HOL),每个请求/响应占用一个连接或通过 Keep-Alive 复用 传统 Web 页面、RESTful API
HTTP/2 应用层 TCP 二进制分帧、多路复用(同一连接多个流)、服务器推送、头部压缩(HPACK) 现代 Web 应用、SPA 加载优化
HTTP/3 应用层 QUIC (UDP) 基于 QUIC(基于 UDP),0-RTT 连接建立、多路复用无队头阻塞、更好的弱网表现 实时应用、移动端弱网环境
WebSocket 应用层 TCP 全双工通信,通过 HTTP 升级(101 Switching Protocols),持久连接 实时聊天、推送服务、在线游戏、协同编辑
TCP 传输层 面向连接 面向连接、可靠传输(确认重传)、流量控制(滑动窗口)、拥塞控制(慢开始、拥塞避免) Web 浏览、文件传输、邮件等绝大多数网络应用
UDP 传输层 无连接 无连接、不可靠但低延迟、无拥塞控制、支持广播/多播 DNS 查询、视频直播、语音通话、在线游戏
DNS 应用层 UDP(主)+ TCP 域名解析系统,将域名映射为 IP 地址。UDP 53 端口为主,大响应时使用 TCP 浏览器地址栏输入后发起的第一个网络请求
gRPC 应用层 HTTP/2 基于 HTTP/2 的高性能 RPC 框架,使用 Protocol Buffers 序列化,支持双向流 微服务间通信、多语言交互、流式数据传输
GraphQL 应用层 HTTP 查询语言 + 运行时,客户端精确指定所需字段,避免过度获取或获取不足 复杂数据聚合、BFF 层、移动端 API
🌐 HTTP 协议版本演进
HTTP/1.1 (1997)
持久连接 Keep-Alive 复用
管道化 理论上可并行但实际困难
队头阻塞 一个请求阻塞整个连接
文本协议 可读性好但效率低
HTTP/2 (2015)
二进制分帧 效率更高
多路复用 同一连接多个流
服务器推送 主动推送资源
头部压缩 HPACK 降体积 80%+
HTTP/3 (2022)
基于 QUIC 底层使用 UDP
0-RTT 连接建立几乎零延迟
无队头阻塞 丢包只影响单个流
内核无关 用户空间实现,易升级
🔄 TCP 与 UDP 对比
TCP(传输控制协议)
✅ 面向连接 — 三次握手建立连接
✅ 可靠传输 — 确认机制 + 超时重传
✅ 流量控制 — 滑动窗口
✅ 拥塞控制 — 慢开始 / 拥塞避免 / 快重传 / 快恢复
✅ 有序交付 — 接收端重新排序
❌ 头部较大(20-60 字节)
❌ 连接延迟(三次握手)
❌ 队头阻塞问题
UDP(用户数据报协议)
✅ 无连接 — 直接发送,延迟低
✅ 不可靠 — 无确认重传,适合实时
✅ 头部小(8 字节)
✅ 支持广播和多播
✅ 无拥塞控制
⚠️ 不保证有序交付
⚠️ 可能丢包、重复
⚠️ 应用层需自己处理可靠性
🔗 gRPC 核心概念
概念说明
Protocol Buffers 接口定义语言(IDL),定义服务和消息类型。比 JSON 更小更快,二进制序列化格式
Unary RPC 客户端发送单个请求,服务器返回单个响应。类似传统 HTTP API 调用
Server Streaming 客户端发送单个请求,服务器返回流式响应。适用于推送、实时数据
Client Streaming 客户端发送流式请求,服务器返回单个响应。适用于上传大文件、批量数据
Bidirectional Streaming 客户端和服务器同时双向发送流式数据。适用于实时交互场景
HTTP/2 底层 gRPC 基于 HTTP/2 多路复用、双向流、头部压缩特性,性能优于 REST
📊 GraphQL vs REST
维度RESTGraphQL
数据获取 固定结构,多端点,常需多次请求 单一端点,客户端精确指定所需字段
过度/不足获取 常见问题(over-fetching / under-fetching) 按需获取,不多不少
版本管理 通常靠 URL 路径版本化(/v1/, /v2/) 渐进式演进,字段可弃用但不断开
缓存策略 天然支持 HTTP 缓存(GET 缓存) 查询都是 POST,需额外实现缓存层
学习曲线 低,HTTP 语义通用 中等,需理解 Schema、Resolver、DataLoader
工具生态 成熟(Postman、cURL) GraphiQL、Apollo DevTools、Hasura
🔍 DNS 解析流程
浏览器输入 https://www.example.com 1. 浏览器缓存查询 — 是否已有该域名的 IP? 2. 操作系统缓存查询(/etc/hosts 或系统 DNS 缓存) 3. 本地 DNS 服务器(通常是 ISP 或 8.8.8.8) └─ 递归查询 4. 根域名服务器(.) → 返回 .com 顶级域名服务器地址 5. .com 顶级域名服务器 → 返回 example.com 权威域名服务器地址 6. example.com 权威服务器 → 返回 www.example.com 的 IP 地址(A/AAAA 记录) 7. 本地 DNS 服务器缓存结果并返回给客户端 8. 浏览器拿到 IP 地址,发起 TCP 连接(HTTP 请求)
🔄 TCP 三次握手与四次挥手
三次握手(建立连接)
① 客户端 → 服务器:SYN=1, Seq=x
② 服务器 → 客户端:SYN=1, ACK=1, Seq=y, Ack=x+1
③ 客户端 → 服务器:ACK=1, Seq=x+1, Ack=y+1
为什么不是 2 次? 防止已失效的连接请求传送到服务器导致错误
四次挥手(断开连接)
① 客户端 → 服务器:FIN=1, Seq=u
② 服务器 → 客户端:ACK=1, Seq=v, Ack=u+1
③ 服务器 → 客户端:FIN=1, ACK=1, Seq=w, Ack=u+1
④ 客户端 → 服务器:ACK=1, Seq=u+1, Ack=w+1
TIME_WAIT 等待 2MSL 确保对方收到关闭确认

常用开发场景速查

比命令表更重要的是知道在真实问题中怎么组合使用。下面按 Git、Linux、Docker、数据库和 JVM 场景整理。

Git:回滚误提交

git log --oneline
git revert <commit>   # 推荐:生成反向提交
git reset --hard HEAD~1 # 谨慎:丢弃本地提交

共享分支优先 revert,本地未推送才考虑 reset。

Git:找回丢失提交

git reflog
git checkout -b rescue <hash>

reflog 是救命工具,误 reset、误 rebase 后先查它。

Linux:端口被占用

lsof -i:8080
ss -tlnp | grep 8080
kill -9 <pid>

生产环境先确认进程归属,不要直接 kill。

Linux:定位大文件

du -h --max-depth=1 | sort -h
find /var/log -type f -size +100M

日志目录优先看轮转策略,避免删正在写入的文件。

Docker:进入容器排查

docker ps
docker exec -it <container> sh
docker logs -f --tail 200 <container>

精简镜像可能没有 bash,先试 sh。

Compose:重启单个服务

docker compose restart api
docker compose logs -f api
docker compose up -d --build api

不要每次都重启全部服务,减少无关组件抖动。

高风险命令警示

rm -rf执行前先 pwd + ls,变量为空时尤其危险。
git reset --hard会丢弃工作区修改,先 git stash 或建临时分支。
docker system prune -a会清理未使用镜像,可能导致回滚镜像丢失。
DROP TABLE必须确认环境、备份和事务,生产建议走审批。

命令组合示例

# 查最近 1 小时错误日志
grep -i "error" app.log | tail -100

# 找出当前目录最大的 10 个文件
du -ah . | sort -rh | head -10

# 查看容器实时资源
docker stats --no-stream

# 查看 SQL 执行计划
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 1001;

复杂度记忆

哈希表查找平均 O(1),树结构多为 O(log n),普通数组查找 O(n)。遇到嵌套循环先警惕 O(n²)。

数据结构选型

频繁随机访问选数组;频繁头尾操作选队列/双端队列;需要去重和查找选 HashSet/Map;有序范围查询选树。

JVM 生产提示

OOM 先保留 dump;GC 问题看停顿时间、吞吐和分配速率;不要只靠增大 Xmx 掩盖泄漏。

SQL 实战提示

索引列上避免函数计算;分页深度大时改游标;慢查询先看执行计划和回表。