Git:回滚误提交
git log --oneline
git revert <commit> # 推荐:生成反向提交
git reset --hard HEAD~1 # 谨慎:丢弃本地提交共享分支优先 revert,本地未推送才考虑 reset。
覆盖 Git 版本控制、服务器运维、编程思想、Web 开发、Java 生态与网络协议六大领域,开发中常用的技术速查与参考手册,随查随用。
点击展开每个类别,查看详细速查表
| 命令 | 说明 | 示例 |
|---|---|---|
| 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 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 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 中的 JdbcTemplate、RestTemplate、工作流引擎 |
| 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 |
| 状态码 | 类别 | 说明 | 常见场景 |
|---|---|---|---|
| 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 | 说明 |
|---|---|---|---|
| 初始化项目 | 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 | 确保所有环境安装相同版本 |
| 快捷键 | 功能 | 说明 |
|---|---|---|
| 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) | 渲染效果 |
|---|---|---|
| 标题 | # H1 ~ ###### H6 | H1 ~ H6 |
| 加粗 | **加粗文字** | 加粗文字 |
| 斜体 | *斜体文字* | 斜体文字 |
| 链接 | [显示文字](https://url.com) | 显示文字 🔗 |
| 图片 |  | 显示图片 |
| 无序列表 | - 项目 1 - 项目 2 |
• 项目 1 • 项目 2 |
| 有序列表 | 1. 第一项 2. 第二项 |
1. 第一项 2. 第二项 |
| 代码 行内 | \`code\` | code |
| 代码块 | ```javascript console.log(1) ``` |
语法高亮的代码块 |
| 引用 | > 引用文字 | 引用文字 |
| 分割线 | --- | 水平分割线 |
| 表格 | | 表头 | 表头 | |------|------| | 内容 | 内容 | |
标准 Markdown 表格 |
| 任务列表 | - [x] 已完成 - [ ] 未完成 |
☑️ 已完成 ⬜ 未完成 |
| 删除线 | ~~删除文字~~ | |
| 脚注 | 文字[^1] [^1]: 注释 |
带脚注链接 |
| 注解 | 作用 | 说明 / 常用属性 |
|---|---|---|
| @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 固定速率 |
| 参数 | 说明 | 示例 / 建议值 |
|---|---|---|
| -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 |
| 语句 / 概念 | 说明 | 示例 |
|---|---|---|
| SELECT | 查询数据,支持 WHERE、ORDER BY、LIMIT 等子句 | 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 | 关联多表查询。INNER、LEFT、RIGHT、FULL | 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+ Tree、Hash、Composite(复合索引) | 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() OVER、AVG() OVER、COUNT() 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 |
| 类别 | 函数 | 说明 |
|---|---|---|
| 排名 | 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 |
| 概念 | 说明 |
|---|---|
| Protocol Buffers | 接口定义语言(IDL),定义服务和消息类型。比 JSON 更小更快,二进制序列化格式 |
| Unary RPC | 客户端发送单个请求,服务器返回单个响应。类似传统 HTTP API 调用 |
| Server Streaming | 客户端发送单个请求,服务器返回流式响应。适用于推送、实时数据 |
| Client Streaming | 客户端发送流式请求,服务器返回单个响应。适用于上传大文件、批量数据 |
| Bidirectional Streaming | 客户端和服务器同时双向发送流式数据。适用于实时交互场景 |
| HTTP/2 底层 | gRPC 基于 HTTP/2 多路复用、双向流、头部压缩特性,性能优于 REST |
| 维度 | REST | GraphQL |
|---|---|---|
| 数据获取 | 固定结构,多端点,常需多次请求 | 单一端点,客户端精确指定所需字段 |
| 过度/不足获取 | 常见问题(over-fetching / under-fetching) | 按需获取,不多不少 |
| 版本管理 | 通常靠 URL 路径版本化(/v1/, /v2/) | 渐进式演进,字段可弃用但不断开 |
| 缓存策略 | 天然支持 HTTP 缓存(GET 缓存) | 查询都是 POST,需额外实现缓存层 |
| 学习曲线 | 低,HTTP 语义通用 | 中等,需理解 Schema、Resolver、DataLoader |
| 工具生态 | 成熟(Postman、cURL) | GraphiQL、Apollo DevTools、Hasura |
比命令表更重要的是知道在真实问题中怎么组合使用。下面按 Git、Linux、Docker、数据库和 JVM 场景整理。
git log --oneline
git revert <commit> # 推荐:生成反向提交
git reset --hard HEAD~1 # 谨慎:丢弃本地提交共享分支优先 revert,本地未推送才考虑 reset。
git reflog
git checkout -b rescue <hash>reflog 是救命工具,误 reset、误 rebase 后先查它。
lsof -i:8080
ss -tlnp | grep 8080
kill -9 <pid>生产环境先确认进程归属,不要直接 kill。
du -h --max-depth=1 | sort -h
find /var/log -type f -size +100M日志目录优先看轮转策略,避免删正在写入的文件。
docker ps
docker exec -it <container> sh
docker logs -f --tail 200 <container>精简镜像可能没有 bash,先试 sh。
docker compose restart api
docker compose logs -f api
docker compose up -d --build api不要每次都重启全部服务,减少无关组件抖动。
# 查最近 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;有序范围查询选树。
OOM 先保留 dump;GC 问题看停顿时间、吞吐和分配速率;不要只靠增大 Xmx 掩盖泄漏。
索引列上避免函数计算;分页深度大时改游标;慢查询先看执行计划和回表。