跳转至

03. 针对岗位要求的查漏补缺:非语言知识点补充(深挖版)

这篇不是泛泛而谈的“再补一点八股”,而是直接对照下面这类岗位要求做补强:

  • TCP/UDP 网络协议及相关编程
  • 进程间通讯编程
  • 算法、操作系统、软件工程、设计模式、数据库系统、网络安全
  • MySQL / SQL
  • NoSQL、Key-Value 存储原理
  • 分布式系统、负载均衡、系统容灾、高可用系统
  • 云原生相关技术

仓库里原本已经有:操作系统、网络、MySQL/Redis、基础架构、项目排障等主干内容。 这篇重点补的是:原仓库里相对分散、薄弱、或者缺少“面试成体系回答”的部分


先把这一章的知识骨架搭起来

岗位要求补强这章,目的不是再堆一份八股,而是把 JD 里常见但你准备不足的点系统补齐。很多岗位描述看似只是列关键词,背后对应的其实是能力缺口:TCP/UDP 对应网络编程基础,IPC 对应系统编程能力,数据库和缓存对应服务端数据链路,安全和软件工程对应工程边界感。

因此这章要按“岗位词汇 → 实际能力 → 具体知识点 → 面试表达方式”去看。只有这样,补强才会直接提升投递匹配度。


进入问答前,先把最小前置知识补齐

这章的作用不是重复八股,而是把 JD 里那些“你可能零散知道、但还没形成稳定表达”的要求重新整理成能力缺口。只有把“岗位要求到底在映射什么能力”想清楚,补强才有方向。

所以阅读时最好一直做映射:这个岗位词条背后要补哪部分知识、哪种场景、哪种表达方式。这样你补的就不是目录,而是岗位匹配度。


0. 先给结论:目前仓库相对缺哪些点?

如果先不看语言本体,只看这个岗位的非语言要求,你现在仓库的情况大致可以分成三类。

已有较强覆盖

  • 操作系统基础:进程/线程/内存/IO 多路复用/文件系统/信号
  • 计算机网络:TCP/UDP/HTTP/RPC/MQ/DNS/CDN
  • 数据库与缓存:MySQL、Redis、事务、索引、MVCC、缓存一致性
  • 架构基础:设计模式、高并发、线程池、线上排障
  • 算法基础

已有内容,但还不够“岗位定向”

  • 进程间通信:已有基础,但缺少服务端工程视角下的取舍总结
  • 高可用/分布式:有零散内容,但缺少一篇系统总览
  • 项目排障:已有,但缺少监控/可观测性体系化视角

当前最值得补齐的缺口

  1. 软件工程基础:代码评审、测试、CI/CD、回滚、发布流程、可维护性
  2. 网络安全基础:认证、授权、TLS、常见攻击、防刷、防重放、接口安全
  3. NoSQL / Key-Value 原理:不只是会说 Redis 快,还要知道 KV 系统怎么组织写放大、压缩、分片和一致性
  4. 分布式系统 / 负载均衡 / 容灾 / 高可用:这块很像 JD 明确加分项,值得专门补成一章
  5. 可观测性与稳定性工程:监控、日志、链路追踪、告警、SLO、容量治理
  6. 云原生基础:容器、K8s、服务发现、配置、弹性、健康检查

一句话概括:

你现在的仓库已经像“C++ / 后端基础知识库”,但如果要更贴这个岗位,还需要再补上工程体系、分布式体系、安全体系、云原生体系这四条线。


1. 软件工程:为什么后端岗也会问?

很多人会把软件工程理解成“写文档、画图、背瀑布模型”,但真正的后端 / 基础设施岗位里,软件工程问的是:

  • 你能不能把代码长期维护住?
  • 你有没有质量意识?
  • 你做改动时,是否知道怎么降低风险?
  • 你是否理解团队协作、测试、发布、回滚这些工程闭环?

1.1 基础知识:软件工程在服务端里到底是什么?

核心目标

软件工程本质上是在解决四个问题:

  • 可维护性:代码以后还能不能改
  • 可测试性:改完能不能验证
  • 可协作性:多人一起做会不会互相踩
  • 可交付性:功能能不能稳定上线

面试里常问的基础点

1)为什么要做代码评审?

不只是为了找 bug,更是为了:

  • 保持代码风格和抽象一致
  • 提前发现设计问题
  • 让知识在团队里扩散
  • 避免单点依赖

2)单元测试、集成测试、端到端测试区别?

  • 单元测试:验证局部函数/模块逻辑
  • 集成测试:验证模块之间协作是否正常
  • 端到端测试:从用户入口到最终结果做全链路验证

3)为什么要做 CI/CD?

因为手工流程容易:

  • 漏步骤
  • 环境不一致
  • 发布不可重复
  • 回滚不标准

CI/CD 的意义不是“自动化很酷”,而是降低人为失误,提高交付确定性。

4)什么是灰度发布?

先让一小部分流量进入新版本,确认:

  • 功能正常
  • 性能没恶化
  • 错误率没升高

再逐步放量。

5)为什么回滚方案和发布方案一样重要?

因为真正的线上改动不是“上线成功就结束”,而是:

  • 出问题能快速止损
  • 影响范围可控
  • 能恢复到稳定状态

一句标准总结

软件工程在后端场景里,不是抽象理论,而是如何把代码从“能跑”提升到“能维护、能验证、能稳定上线”。

1.2 面试可能追问的进阶点

追问 1:代码质量怎么衡量?

可以从几个维度答:

  • 正确性
  • 可读性
  • 可测试性
  • 可扩展性
  • 复杂度控制
  • 运行时性能与资源成本

不要把“代码质量”只理解成格式整齐。

追问 2:为什么有些系统测试很多,还是容易出事故?

因为问题可能不在“有没有测试”,而在:

  • 测试覆盖不到真实流量结构
  • 缺少异常路径和边界条件
  • 环境和生产不一致
  • 没有容量压测和回归验证

追问 3:重构和重写怎么选?

高分回答通常会说:

  • 优先局部重构,控制风险
  • 只有当历史债务和架构约束太大,才考虑重写
  • 重写最大风险不是技术,而是新旧系统长期并行和需求漂移

追问 4:如何避免需求迭代把系统做烂?

可以说:

  • 把变化点收敛到明确模块
  • 做接口边界和依赖管理
  • 用 review 保持一致抽象
  • 控制技术债,别无限堆 patch

2. 进程间通信(IPC):从“背名字”到“服务端取舍”

仓库里已经有 IPC 基础,但岗位要求里明确写了“进程间通讯编程”,这类题经常会从基础继续追到工程选型。

2.1 基础知识:常见 IPC 方式及适用场景

1)管道 / 命名管道

  • 适合本机、简单、字节流传输
  • 无名管道常见于父子进程
  • 命名管道适合无亲缘关系进程

2)消息队列

  • 提供消息边界
  • 比字节流更像“传消息”而不是“传字节”
  • 适合解耦,但有拷贝和排队开销

3)共享内存

  • 速度很快
  • 适合大块数据交换
  • 但同步复杂,需要额外锁/信号量控制

4)信号量

  • 本身不是数据通道
  • 更像同步与资源计数工具

5)Socket / Unix Domain Socket

  • 最通用
  • Unix Domain Socket 适合同机进程通信,省去了完整网络协议栈的一部分开销
  • TCP Socket 更适合跨机

6)mmap

  • 常用于文件映射,也可结合共享映射做高效共享

一句总结

IPC 的选择不是记忆题,而是吞吐、延迟、同步复杂度、是否跨机、是否需要消息边界之间的权衡。

2.2 面试高频追问

追问 1:共享内存为什么快?

因为它减少了数据在内核态/用户态之间的多次拷贝,多个进程可以映射同一块物理内存。

追问 2:共享内存为什么难?

因为“共享”虽然快,但意味着:

  • 并发同步自己负责
  • 生命周期管理更复杂
  • 崩溃恢复和脏数据处理更难

追问 3:同机服务通信为什么有时会用 Unix Domain Socket?

因为它既保留了 socket 编程模型的通用性,又比完整 TCP 栈更轻,适合本机服务进程间通信。

追问 4:什么时候消息队列比共享内存更合适?

当你更在意:

  • 解耦
  • 顺序语义
  • 生产消费模型
  • 开发复杂度

而不是极致吞吐时,消息队列通常更省心。


3. 数据库系统:别只会 MySQL 名词,还要会“系统视角”

你仓库里已经有 MySQL 和 Redis,但 JD 写的是“数据库系统”,面试官常会把问题往更抽象的系统层面推。

3.1 基础知识:数据库系统应该怎么整体理解?

数据库系统的几个核心目标

  • 数据组织与查询效率
  • 并发控制
  • 崩溃恢复
  • 一致性与持久性
  • 扩展能力

高频基础点

1)为什么数据库需要 WAL?

WAL(Write-Ahead Logging)核心思想是:

  • 先写日志
  • 再写数据页

这样崩溃恢复时,可以根据日志:

  • 重做已提交事务
  • 回滚未完成事务

2)为什么数据库要有 Buffer Pool?

因为磁盘太慢,热点页放内存里可以显著减少随机 IO。

3)为什么索引不是越多越好?

因为索引会增加:

  • 写入维护成本
  • 空间占用
  • Buffer Pool 压力
  • 执行计划复杂度

4)读写分离解决什么问题?

核心是:

  • 主库承接写
  • 从库承接读

提升读吞吐,但代价是:

  • 复制延迟
  • 主从切换复杂
  • 一致性窗口问题

5)分库分表解决什么问题?

单机容量、单表规模、热点和吞吐瓶颈。

但它会引入:

  • 跨分片事务难
  • 跨分片 join 难
  • 全局 ID 问题
  • 路由规则复杂

一句总结

数据库系统面试不只是在问“会不会 SQL”,更在问你是否理解存储、并发、恢复和扩展之间的系统权衡。

3.2 面试可能追问的进阶点

追问 1:为什么数据库复制通常做不到绝对强一致?

因为复制链路存在:

  • 网络延迟
  • 异步传播
  • 故障切换窗口

所以很多系统只能做到最终一致或近实时一致。

追问 2:分库分表后最麻烦的是什么?

高分回答通常不会只说“查询麻烦”,而会补:

  • 跨分片事务
  • 聚合统计
  • 分页排序
  • 热点 key / 热点用户
  • 扩容数据迁移

追问 3:数据库慢,应该优先看什么?

  • 执行计划
  • 是否走索引 / 是否回表很多
  • 锁等待
  • 热点页竞争
  • Buffer Pool 命中率
  • IO 与 CPU 分布

4. NoSQL / Key-Value:这块是当前仓库最值得补的一个缺口

岗位要求明确写了 NoSQL、Key-value 存储原理。你现在仓库里有 Redis,但如果面试官问的是“KV 系统原理”,不能只答“Redis 基于内存所以快”。

4.1 基础知识:NoSQL 到底在解决什么问题?

NoSQL 并不是“不要 SQL”,而是在解决传统关系型数据库在某些场景下的限制:

  • 超大规模数据
  • 高写入吞吐
  • 灵活 schema
  • 分布式扩展
  • 低延迟 key-based 访问

常见类别

  • Key-Value:Redis、RocksDB、LevelDB、etcd 底层存储思想
  • Document:MongoDB
  • Column Family:HBase、Cassandra
  • Graph:Neo4j

这份岗位里最重要的是 Key-Value 思维。

4.2 基础知识:Key-Value 存储原理的核心点

1)KV 系统最基本的访问模型

核心就是:

  • Put(key, value)
  • Get(key)
  • Delete(key)

很多时候它不强调复杂 join 和关系查询,而强调:

  • 单 key 快速访问
  • 范围扫描(某些系统)
  • 高吞吐写入

2)哈希表型 KV 与 LSM 树型 KV 区别

哈希表型

典型特点:

  • 单 key 查询快
  • 内存型系统常见
  • 不擅长有序范围扫描

LSM Tree 型

典型于 LevelDB / RocksDB:

  • 写入先顺序追加 WAL / MemTable
  • 内存表刷盘成 SSTable
  • 后台做 Compaction
  • 读取时需要查多个层级

LSM 树的核心优点是:

  • 把随机写尽量转成顺序写
  • 更适合 SSD / 日志型写路径

3)为什么 LSM 树适合高写入?

因为它避免频繁原地随机更新,而是:

  • 先写日志
  • 再写内存表
  • 批量刷盘
  • 后台合并

这种方式对磁盘尤其友好。

4)LSM 树的代价是什么?

  • 读放大:查询可能要查 MemTable + 多层 SSTable
  • 写放大:Compaction 会反复重写数据
  • 空间放大:合并前可能有多份历史数据

5)Bloom Filter 为什么常和 KV 系统一起出现?

因为可以快速判断“某层 SSTable 里大概率没有这个 key”,减少无效磁盘查找。

一句总结

Key-Value 系统核心不是“能存 key-value 这么简单”,而是它如何组织写路径、读路径、日志、压缩和分层存储。

4.3 面试可能追问的进阶点

追问 1:B+ 树和 LSM Tree 怎么选?

  • B+ 树:读和范围查询更稳,更新是原地修改页
  • LSM Tree:写入吞吐更强,但要接受 compaction、读放大

这本质上是:

  • 读优化结构
  • 写优化结构

之间的取舍。

追问 2:分布式 KV 为什么会有热点问题?

因为 key 分布不均匀,某些热点 key / 热点前缀会让:

  • 某个节点 CPU 打满
  • 某个分片网络打满
  • 某个存储层成为瓶颈

追问 3:如何做分片?

常见思路:

  • 范围分片
  • 哈希分片
  • 一致性哈希

追问 4:一致性哈希解决什么?

核心解决节点增减时的数据迁移范围问题,尽量避免全量重分布。

追问 5:etcd / ZooKeeper 为什么也常被归到 KV 体系里?

因为它们也提供键值存储接口,但更偏:

  • 元数据管理
  • 配置中心
  • 服务注册发现
  • 强一致协调

也就是说,KV 系统不只是一种存储形态,还是很多分布式系统的基础组件。


5. 网络安全:这是很多后端候选人会被打空的一块

很多人会觉得“安全不是安全岗才问吗”,但这个 JD 明确提了网络安全。对后端来说,面试通常问的是基础安全意识,不是渗透测试。

5.1 基础知识:后端面试里最常见的安全知识点

1)TLS / HTTPS 到底解决什么问题?

核心是:

  • 加密传输,防窃听
  • 身份认证,确认你连的是正确服务
  • 完整性校验,防篡改

2)对称加密和非对称加密区别?

  • 对称加密快,适合大数据量传输
  • 非对称加密适合密钥交换和身份认证

HTTPS 握手里通常是:

  • 用非对称方式协商
  • 之后用对称密钥传输数据

3)什么是数字证书?

数字证书本质上是在说:

  • 某个公钥属于某个域名/实体
  • 这个绑定关系由受信任 CA 背书

4)认证和授权区别?

  • 认证(Authentication):你是谁
  • 授权(Authorization):你能做什么

5)常见 Web 安全问题有哪些?

  • SQL 注入
  • XSS
  • CSRF
  • 重放攻击
  • 暴力破解
  • 接口刷流量

虽然你偏 C++ / 后端,但这些基础必须知道。

6)什么是重放攻击?

攻击者截获一个合法请求后,在之后重复发送,伪造合法操作。

常见防护:

  • nonce
  • timestamp
  • 签名
  • token 过期与一次性校验

7)为什么密码不能明文存?

因为数据库泄露时,明文密码会直接导致用户资产受损。

标准做法是:

  • 加盐
  • 哈希
  • 使用专门密码算法(如 bcrypt / scrypt / Argon2)

一句总结

后端安全题最重要的不是会多少攻击技巧,而是理解数据在传输、鉴权、存储、调用链中的暴露面,并知道基本防护原则。

5.2 面试可能追问的进阶点

追问 1:为什么只靠 HTTPS 还不够?

因为 HTTPS 只解决链路安全,不自动解决:

  • 权限越权
  • 业务逻辑漏洞
  • 重放
  • 内部服务滥用
  • 数据落库后的加密和脱敏

追问 2:JWT 一定安全吗?

不是。 JWT 只是令牌格式,不代表天然安全。安全性取决于:

  • 签名算法
  • 密钥管理
  • 有效期
  • 刷新机制
  • 是否允许吊销

追问 3:接口防刷怎么做?

  • 限流
  • 人机校验
  • IP / 账号维度频控
  • 行为风控
  • 滑动窗口统计

追问 4:内部 RPC 需要安全控制吗?

需要。 很多事故不是外部打进来,而是内部服务越权、配置泄露、凭证滥用导致的。


6. 分布式系统、负载均衡、容灾、高可用:这是和 JD 最贴的一条加分线

这块你仓库里有零散内容,但缺一篇统一视角。实际面试里,这一组很容易串起来追问。

6.1 基础知识:什么叫分布式系统?

分布式系统不是“服务拆成多个”这么简单,而是:

  • 多个节点共同提供一个逻辑整体服务
  • 节点之间通过网络协作
  • 系统需要面对部分失败、延迟、不一致、扩容和运维问题

分布式和单机最大的区别

不是机器数量,而是:

  • 网络不可靠
  • 时钟不完全一致
  • 节点可能部分失败
  • 数据需要复制与协调

一句总结

单机系统主要在解决资源管理问题,分布式系统还要额外解决通信、不一致和局部故障问题。

6.2 负载均衡基础

什么是负载均衡?

把请求合理分发到多个后端节点,避免某个实例过载。

常见策略

  • 轮询
  • 加权轮询
  • 最少连接
  • 一致性哈希
  • 基于响应时间/健康状态的调度

四层负载均衡 vs 七层负载均衡

  • 四层:基于 IP/端口/TCP
  • 七层:基于 HTTP 路径、Host、Header 等应用层信息

为什么要区分?

因为:

  • 四层更轻、更通用
  • 七层更灵活,但更复杂、开销更高

6.3 高可用基础

高可用在回答什么问题?

系统某个实例、某台机器、某个机房出问题时,还能不能继续提供服务。

常见手段

  • 主从 / 多副本
  • 健康检查
  • 自动故障切换
  • 限流降级
  • 超时重试
  • 隔离与熔断

为什么高可用不等于高一致性?

因为系统还能服务,不代表数据瞬时绝对一致。 复制延迟、切主窗口、脑裂风险,都会带来一致性问题。

6.4 容灾基础

容灾和高可用区别

  • 高可用:更偏局部节点/服务故障仍能扛住
  • 容灾:更偏更大级别事故,如机房、可用区、地域故障

常见容灾级别

  • 同机房冗余
  • 跨机房双活 / 主备
  • 跨地域灾备

面试里常见概念

  • RPO:最多允许丢多少数据
  • RTO:最多允许中断多久

这是容灾设计里特别典型的两个指标。

6.5 一致性与 CAP 的基础表达

CAP 怎么答更稳?

不要把它答成口诀题。 更稳的说法是:

  • 在发生网络分区时,系统无法同时完全满足强一致和可用性
  • 不同系统会根据业务场景做取舍

最终一致性怎么理解?

不是“一会儿总会对”,而是:

  • 允许短暂不一致
  • 通过重试、补偿、异步同步等手段,最终收敛

一句总结

分布式系统的核心不是把系统拆开,而是如何在延迟、可用性、一致性和复杂性之间做工程取舍。

6.6 面试可能追问的进阶点

追问 1:重试为什么可能让系统更糟?

因为失败时重试会放大流量,尤其在下游已过载时,重试可能把局部问题扩大成雪崩。

追问 2:为什么要做隔离?

因为不同依赖、不同业务优先级不应该互相拖死。 常见隔离包括:

  • 线程池隔离
  • 进程隔离
  • 资源配额隔离

追问 3:双活为什么难?

因为双活不是“两个地方都部署一下”,而是要解决:

  • 流量路由
  • 多地写入冲突
  • 数据同步延迟
  • 故障切换一致性

追问 4:如何回答“设计一个高可用系统”?

可以按这个顺序:

  1. 单点在哪里
  2. 如何做冗余
  3. 如何检测故障
  4. 如何切流 / 切主
  5. 如何限制故障扩散
  6. 如何监控和演练

7. 可观测性、监控、稳定性:这块能把“会排障”和“会体系化治理”区分开

你现在仓库已有排障题,但还缺“可观测性体系”这一层。

7.1 基础知识:可观测性三件套

1)Metrics(指标)

常用于看:

  • QPS
  • RT
  • 错误率
  • CPU/内存/磁盘/网络
  • 线程池队列长度
  • 连接池使用率

2)Logs(日志)

用来还原事件细节,适合:

  • 错误上下文
  • 参数记录
  • 异常路径排查

3)Tracing(链路追踪)

适合跨服务调用链排查:

  • 哪一跳慢
  • 哪个下游超时
  • 重试发生在哪

为什么三者不能互相替代?

  • 指标适合快速发现趋势
  • 日志适合看细节
  • 链路适合看分布式调用路径

三者是互补关系。

7.2 面试高频基础点

1)什么是 SLI / SLO / SLA?

  • SLI:可量化指标,如成功率、延迟
  • SLO:内部目标,如 99.9% 成功率
  • SLA:对外承诺

2)为什么只监控平均值不够?

因为平均值会掩盖尾延迟。后端系统更应该看:

  • P95
  • P99
  • P999

3)告警为什么不能只靠阈值?

因为:

  • 容易误报
  • 容易漏报
  • 不同业务高峰基线不同

更成熟的做法是结合:

  • 趋势
  • 同比/环比
  • 业务指标
  • 多指标联动

4)线上故障处理的标准思路是什么?

  • 先止血
  • 再定位
  • 再修复
  • 最后复盘

而不是一上来就在生产环境乱改。

一句总结

稳定性工程不只是“出问题会查”,更是平时就把监控、告警、限流、降级、容量评估这些机制搭好。

7.3 面试可能追问的进阶点

追问 1:为什么有监控还是会出事故?

因为可能:

  • 监控点不对
  • 告警阈值不合理
  • 没有覆盖关键链路
  • 没有人真正看懂指标

追问 2:复盘应该复什么?

不是只写“以后注意”,而是要复:

  • 根因
  • 触发条件
  • 影响范围
  • 为什么没提前发现
  • 什么机制应该补上

追问 3:容量评估怎么做?

  • 峰值流量估算
  • 单实例容量基线
  • 扩容阈值
  • 冗余水位
  • 压测验证

8. 云原生:岗位加分项里最容易低成本补强的一块

这类岗位写“对云原生相关技术有所了解”,一般不会要求你答到集群调度源码级别,但基础概念必须顺。

8.1 基础知识:云原生到底是什么?

云原生不是“用了云厂商”这么简单,通常指:

  • 容器化部署
  • 微服务化 / 服务化交付
  • 弹性伸缩
  • 自动化运维
  • 基础设施即代码
  • 更适合动态调度和快速交付

8.2 容器基础

容器和虚拟机区别

  • 虚拟机隔离更完整,包含 Guest OS
  • 容器共享宿主机内核,更轻量,启动更快

容器核心依赖什么?

  • Namespace:资源隔离
  • Cgroups:资源限制
  • Union FS / 镜像分层:构建与分发效率

为什么容器适合服务部署?

因为它提供了:

  • 一致环境
  • 更轻部署单元
  • 更快启动与扩缩容

8.3 Kubernetes 基础

K8s 里最核心的几个对象

  • Pod:最小调度单元
  • Deployment:无状态应用部署与滚动升级
  • Service:服务发现与负载均衡入口
  • ConfigMap / Secret:配置与敏感信息管理
  • Ingress:HTTP/HTTPS 流量入口

健康检查为什么重要?

因为平台要知道:

  • 实例是不是活着(liveness)
  • 实例是不是准备好接流量(readiness)

为什么配置不能写死进镜像?

因为镜像应该尽量稳定、环境无关;配置应随部署环境变化而注入。

一句总结

云原生的核心不是把程序塞进 Docker,而是让服务以标准化、可调度、可弹性、可自动化治理的方式运行。

8.4 面试可能追问的进阶点

追问 1:为什么服务上了 K8s 不代表高可用就自动解决了?

因为 K8s 只提供调度与编排基础,业务层仍要自己处理:

  • 无状态/有状态差异
  • 数据一致性
  • 下游依赖故障
  • 配置错误
  • 逻辑级雪崩

追问 2:为什么容器化后问题定位有时更难?

因为实例更短命、更动态,日志、网络、节点漂移、配置版本都更容易变化。

追问 3:什么是 Sidecar 思想?

把日志收集、代理、监控等通用能力从业务进程旁路抽出来,作为伴生容器运行。


9. 你可以怎么把这些知识点答成“更像这个岗位的人”?

如果面试官问得很散,你可以主动把回答往这个岗位画像上收:

这个岗位的核心画像

  • 不只是会写功能
  • 还要理解关键服务和基础设施
  • 还要对稳定性、可用性、效率、协作有工程认知

所以回答时要多补这几个维度

  • 这个机制解决什么问题
  • 为什么这样设计
  • 代价是什么
  • 故障时怎么表现
  • 线上怎么监控和验证

一个很好用的总括句

这类岗位不只要求把功能实现出来,还要求你理解服务在真实环境中如何运行、如何扩展、如何失败,以及失败后怎么定位和止损。


10. 一组针对这份 JD 的高频追问清单

下面这些问题,非常像这份 JD 对应岗位会问的:

软件工程

  1. 为什么代码评审是必要的?
  2. 单元测试、集成测试、端到端测试怎么分工?
  3. 为什么上线一定要有灰度和回滚?
  4. 重构和重写怎么选?

IPC / OS 工程化

  1. 共享内存为什么快?为什么难?
  2. Unix Domain Socket 和 TCP Socket 什么时候分别用?
  3. IPC 方案怎么按吞吐、复杂度、范围选型?

数据库系统

  1. WAL 和 Buffer Pool 分别解决什么问题?
  2. 读写分离为什么会带来一致性问题?
  3. 分库分表后最麻烦的工程问题是什么?

NoSQL / KV

  1. LSM Tree 为什么适合高写入?
  2. Bloom Filter 在 KV 系统里做什么?
  3. B+ 树和 LSM Tree 本质上在权衡什么?
  4. 分布式 KV 为什么容易遇到热点?

网络安全

  1. HTTPS 除了加密还解决什么?
  2. 认证和授权有什么区别?
  3. 重放攻击怎么防?
  4. 接口防刷怎么做?

分布式 / 高可用

  1. 高可用和高一致性为什么不是一回事?
  2. 重试为什么可能放大故障?
  3. 四层和七层负载均衡怎么选?
  4. 容灾里的 RPO 和 RTO 分别是什么?
  5. 双活为什么难?

可观测性

  1. 指标、日志、链路追踪为什么缺一不可?
  2. 为什么只看平均 RT 不够?
  3. 事故复盘应该复哪些内容?

云原生

  1. 容器和虚拟机区别是什么?
  2. Pod、Deployment、Service 分别是什么?
  3. readiness 和 liveness 区别?
  4. 为什么上了 K8s 不等于系统天然高可用?

11. 最后的建议:如果你只补 3 条线,优先补哪 3 条?

如果你时间有限,我建议优先按下面顺序补:

第一优先级:分布式系统 / 高可用 / 负载均衡 / 容灾

这是这份 JD 最明显的加分方向,而且非常容易形成和你现有网络、数据库、缓存章节的串联。

第二优先级:NoSQL / Key-Value 原理

这是当前仓库最明显的结构性缺口。补上以后,你对“数据库系统”和“存储系统”的回答会更完整。

第三优先级:网络安全 + 可观测性 + 云原生基础

这三块单点不一定深问,但很容易作为“有没有工程视野”的加分题出现。


12. 一份更像面试现场的总结回答

如果按照这份岗位要求看,语言基础之外,后端候选人真正需要补齐的是四类能力:第一类是系统主干能力,包括操作系统、网络、数据库、缓存;第二类是分布式与高可用能力,包括负载均衡、容灾、一致性和故障治理;第三类是工程化能力,包括软件工程、可观测性、发布和回滚;第四类是现代基础设施能力,包括 NoSQL / Key-Value 原理、网络安全和云原生基础。前两类决定你能不能把服务做出来并跑稳,后两类决定你能不能把系统长期维护好并适应真实生产环境。


13. 对你当前仓库的补充建议(下一步)

这篇文档先作为“岗位定向查漏补缺总览”。如果继续往下深化,最值得单独拆成新章节的顺序建议是:

  1. 05_design_patterns_architecture/04_distributed_high_availability.md
  2. 04_database_cache/04_nosql_kv_storage_principles.md
  3. 05_design_patterns_architecture/05_observability_reliability_cloud_native.md
  4. 03_computer_network/04_network_security_basics.md

这样整套仓库会从“后端基础很全”,进一步升级成“更贴基础设施 / 核心服务岗位要求”的版本。