主题
IT 英语:后端、Git 与常见报错
三、后端 / 数据库 / 运维高频词
| 英文 | 发音 | 中文 | 说明 |
|---|---|---|---|
| Server | 服务器 | app server(应用服务器)、web server(Nginx/Apache) | |
| Client | 客户端 | browser client、mobile client | |
| Database / DB | 数据库 | relational DB(MySQL/PostgreSQL)、NoSQL(Mongo/Redis) | |
| Schema | 库结构 / 模式 | 数据库表结构定义、JSON Schema | |
| Table / Column / Row | 表 / 列 / 行 | 行也叫 record(记录) | |
| Primary Key / PK | 主键 | 唯一且不重复,雪花 ID 就是 PK | |
| Foreign Key / FK | 外键 | 引用另一张表的主键 | |
| Index | 索引 | add index、index scan(索引查)vs full table scan(全表扫,慢) | |
| Query | 查询 | SQL query、slow query(慢查询) | |
| Transaction | /trænˈzækʃn/ | 事务 | ACID、begin transaction / commit / rollback |
| Connection Pool | 连接池 | 数据库连接池,用完归还不销毁,省开销 | |
| Cursor | /ˈkɜːrsər/ | 游标 | 数据库里逐行读结果的指针 |
| Cache | 缓存 | Redis cache、cache hit(命中)/ cache miss(没命中)/ cache penetration(穿透)/ cache avalanche(雪崩) | |
| Message Queue / MQ | 消息队列 | RabbitMQ、Kafka、RocketMQ;producer(生产)/ consumer(消费) | |
| Microservice | /ˌmaɪkroʊˈsɜːrvɪs/ | 微服务 | 一个系统拆成很多小服务,互相通过 RPC/HTTP 调用 |
| Load Balancer / LB | 负载均衡器 | Nginx、F5;round-robin(轮询)、random(随机)、weighted(权重) | |
| Reverse Proxy | /rɪˈvɜːrs ˈprɒksi/ | 反向代理 | Nginx 最常用:客户端→Nginx→真实服务器,客户端不知道真实是谁 |
| Forward Proxy | /ˈfɔːrwərd ˈprɒksi/ | 正向代理 | 翻墙用的:客户端→代理服务器→目标网站,目标不知道真实客户端是谁 |
| Domain / DNS | 域名 / 域名解析 | A 记录(域名→IP)、CNAME(域名→域名)、TXT(验证) | |
| SSL / TLS / HTTPS | /es es el/ | 加密协议 / 证书 / 加密 HTTP | SSL certificate(证书)、expired cert(证书过期)、renew cert(续期) |
| Port | 端口 | HTTP:80 / HTTPS:443 / SSH:22 / MySQL:3306 / Redis:6379 | |
| Firewall | 防火墙 | port blocked by firewall(端口被防火墙挡了,telnet 不通) | |
| Process | 进程 | PID(进程号)、kill process、zombie process(僵尸进程) | |
| Thread | 线程 | main thread、UI thread、thread safe(线程安全) | |
| Daemon | /ˈdiːmən/ | 守护进程 | 后台一直跑的进程,比如 nginx、redis-server |
| Cron / Crontab | /krɒn/ | 定时任务 | cron expression( cron 表达式:分 时 日 月 周) |
| Container | 容器 | Docker container、container ID | |
| Image | 镜像 | Docker image、pull image、build image | |
| Volume | /ˈvɒljuːm/ | 数据卷 | Docker 里挂载宿主机目录,容器删了数据不丢 |
| Cluster | /ˈklʌstər/ | 集群 | Redis cluster、K8s cluster、多台机器一起对外服务 |
| Node | 节点 | 集群里的一台机器叫一个 node;K8s 里 master node / worker node | |
| Pod | /pɒd/ | K8s 最小单元 | 一个 pod 里可以有多个容器,共享网络 |
| Ingress | /ˈɪŋɡres/ | K8s 入口 | K8s 集群流量入口,相当于集群级 Nginx |
| CI / CD | 持续集成 / 持续部署 | Jenkins、GitHub Actions;commit 后自动构建测试部署 | |
| Pipeline | /ˈpaɪplaɪn/ | 流水线 | CI/CD pipeline(构建→测试→发布一整条流水线) |
| Artifact | /ˈɑːrtɪfækt/ | 构建产物 | jar 包、docker 镜像,pipeline 跑完生成的东西 |
| Health Check | 健康检查 | LB 定时探活接口,挂了就自动摘掉流量 | |
| Metric | /ˈmetrɪk/ | 指标 | Prometheus 采集的 QPS、CPU、内存、延迟等指标 |
| Log Aggregation | /ˌæɡrɪˈɡeɪʃn/ | 日志聚合 | ELK(Elastic+Logstash+Kibana),把多台机器日志搜在一起查 |
四、Git / 版本控制高频词
| 英文 | 发音 | 中文 | 典型句子 / 说明 |
|---|---|---|---|
| Repository / Repo | /rɪˈpɒzɪˌtɔːri/ | 仓库 | clone the repo、push to remote repo |
| Clone | /kloʊn/ | 克隆(下载整个仓库) | git clone https://xxx.git |
| Fork | /fɔːrk/ | 复刻(GitHub 概念) | 把别人仓库复制一份到自己账号下 |
| Remote | 远程仓库 | origin 是默认 remote 名;git remote -v 看地址 | |
| Local | 本地仓库 | 你电脑上的那个 | |
| Branch | 分支 | feature/login、hotfix/xxx、main/master | |
| Checkout / Switch | /ˈtʃekˌaʊt/ | 切换分支 | git checkout dev / git switch dev(新版推荐 switch) |
| Checkout -b | 新建并切换到 | git checkout -b feature/abc | |
| Commit | /kəˈmɪt/ | 提交(一次提交记录) | git commit -m "feat: xxx";commit hash |
| Stage / Add | /steɪdʒ/ | 暂存 / 加入暂存区 | git add .;staged changes(已暂存的改动) |
| Unstage | 取消暂存 | git restore --staged xxx | |
| Push | 推送到远程 | git push origin dev | |
| Pull | 拉取(= fetch + merge) | git pull origin dev | |
| Fetch | /fetʃ/ | 抓取(不合并) | 只把远程最新下载下来,不合并到本地,你自己决定合不合 |
| Merge | /mɜːrdʒ/ | 合并 | git merge dev(把 dev 合并到当前分支) |
| Merge Conflict | 合并冲突 | 俩人改了同一行,手动选哪个对再 commit | |
| Rebase | /ˈriːbeɪs/ | 变基 / 重放 | 把当前分支的提交"摘下来",接到目标分支最新提交后面,历史更直 |
| Cherry-pick | /ˈtʃeri pɪk/ | 挑拣提交 | 只想合并某一个 commit 到另一个分支:git cherry-pick <hash> |
| Stash | /stæʃ/ | 暂存改动(临时藏起来) | git stash(先藏起来切分支)/ git stash pop(拿回来) |
| Reset | 重置(回退) | git reset --soft(撤回 commit 但保留改动)/ --hard(危险:连改动一起扔) | |
| Revert | /rɪˈvɜːrt/ | 反提交(安全回退) | 已经 push 的提交不能 reset,要 revert(产生一个反向提交) |
| Tag | 标签 | 打版本号:git tag v1.2.0、git push --tags | |
| PR / Merge Request | /piː ɑːr/ | 合并请求 | GitHub 叫 Pull Request,GitLab 叫 Merge Request,代码审查后合并 |
| Reviewer | 审查人 | PR 的审核人 | |
| Approve | 审核通过 | LGTM = Looks Good To Me(我看可以,同意合) | |
| Blame | /bleɪm/ | 追溯(行级历史) | git blame file:看每一行最后是谁改的、哪次 commit 改的 |
| Diff | /dɪf/ | 差异对比 | 两个版本/两个分支的改动差异 |
| HEAD | /hed/ | 当前分支最新提交 | HEAD~1 = 上一个提交 |
五、常见报错信息中英对照(读得懂=会搜=能解决 80%)
原则:报错里的关键词最重要,不用全懂,抓关键词搜 Google/Stack Overflow。
| 报错关键词(英文) | 意思 | 常见原因 / 该搜什么 |
|---|---|---|
| SyntaxError: Unexpected token | 语法错误:意外的符号 | 少写了分号/括号/逗号,json 末尾多了逗号 |
| ReferenceError: xxx is not defined | 引用错误:xxx 没定义 | 变量名拼错、作用域不对、没 import |
| TypeError: xxx is not a function | 类型错误:xxx 不是个函数 | 以为是函数其实是 null/undefined/对象,加个 ?. 和判空 |
| TypeError: Cannot read property 'a' of null / undefined | 不能从 null/undefined 读属性 a | 典型:后端没返回你以为会有的字段,加可选链 ?. 和默认值 |
| TypeError: Assignment to constant variable | 给 const 变量赋值了 | const 改成 let,或变量名冲突 |
| RangeError: Maximum call stack size exceeded | 栈溢出:递归没出口、死循环 | 递归函数检查终止条件,是不是无限调用自己了 |
| 400 Bad Request | 请求参数错误 | 后端说你传的参数格式不对/缺必填,看浏览器 Network 里 Request 发了啥 |
| 401 Unauthorized | 未授权(没登录/登录过期) | token 过期/没带/不对,跳登录 |
| 403 Forbidden | 禁止访问(登录了但没权限) | 账号没这个接口权限,找管理员开 |
| 404 Not Found | 找不到(URL 错/接口被删了) | 检查请求 URL 路径拼对没、大小写、后端路由 |
| 405 Method Not Allowed | 请求方法不对 | 后端是 POST,你用了 GET;或反过来 |
| 408 Request Timeout | 请求超时 | 服务端太久没响应,可能挂了/慢了/网络问题 |
| 413 Payload Too Large | 请求体太大 | 上传文件太大;Nginx 改 client_max_body_size |
| 415 Unsupported Media Type | Content-Type 不对 | 后端要 application/json 你传了 form-data;反之亦然 |
| 429 Too Many Requests | 请求太多被限流 | 接口有频率限制,歇会儿再试/加个 sleep |
| 500 Internal Server Error | 服务端内部错误 | 后端自己崩了(空指针/数组越界/SQL 错),找后端查日志 |
| 502 Bad Gateway | 网关错误(上游挂了) | Nginx 转发给后端,后端没起来;重启后端服务 |
| 503 Service Unavailable | 服务不可用 | 服务挂了/重启中/过载了 |
| 504 Gateway Timeout | 网关超时 | Nginx 转发给后端,后端太久没返回(SQL 太慢/接口死循环) |
| CORS error / No 'Access-Control-Allow-Origin' | 跨域错误 | 后端没加 CORS 响应头;本地开发配 proxy |
| ERR_CONNECTION_REFUSED | 连接被拒绝 | 服务没启动、端口不对、防火墙挡了 |
| ECONNRESET | 连接被重置 | 连接建立了对方突然断开:服务挂了/网络波动/HTTPS 证书问题 |
| ETIMEDOUT | 连接超时 | 对方 IP 不通/端口没开/防火墙挡 |
| ENOTFOUND | 域名解析失败 | 域名拼错/没配 DNS / hosts 没写 |
| ENOENT: no such file or directory | 文件/目录不存在 | 路径拼错了、文件被删了、相对路径基准不对 |
| EACCES: permission denied | 权限不足 | 没写/读权限,Linux 改 chown/chmod,Windows 用管理员运行 |
| MODULE_NOT_FOUND / Cannot find module 'xxx' | 找不到模块 | npm install 没装/装错版本/大小写不对(Windows 不区分但 Linux 区分) |
| Module parse failed: Unexpected token | 模块解析失败 | webpack 缺少对应 loader(比如 .vue 没 vue-loader、.ts 没 ts-loader) |
| Maximum call stack size exceeded | 同上递归溢出 | — |
| Heap out of memory | 内存不足(爆堆) | 打包时内存不够:NODE_OPTIONS=--max-old-space-size=4096 |
| N+1 queries problem | N+1 查询问题 | ORM 循环里查数据库,1 次列表查询 + N 次每条查关联 = 慢爆 |
| Deadlock found when trying to get lock | 检测到死锁 | 两个事务互相等对方锁,数据库强行回滚一个;重试就行 |
| Duplicate entry 'xxx' for key 'yyy' | 唯一键重复 | 插入了 yyy 字段已有重复值 xxx,比如用户名重复 |
| Table 'xxx' doesn't exist | 表不存在 | SQL 里表名拼错/没建表/连错库 |
| Unknown column 'xxx' in 'field list' | 字段不存在 | 表里没 xxx 这列,ORM/手写 SQL 字段名写错 |