跳转至

后端工程师职业认知

学习目标

学完本章后,学习者应该能够:

  1. 说清楚后端工程师负责什么。
  2. 区分“写业务代码”和“负责后端系统”的差别。
  3. 理解高级后端工程师为什么需要基础知识、工程化能力和系统设计能力。
  4. 用一条真实请求链路解释后端工作的范围。

后端工程师负责什么

后端工程师主要负责服务端系统。服务端系统通常不直接面对用户界面,而是为客户端、前端页面、移动 App、内部系统或第三方系统提供能力。

常见职责包括:

  • 设计和实现 API。
  • 处理业务逻辑。
  • 读写数据库。
  • 使用缓存提升性能。
  • 接入消息队列处理异步任务。
  • 做认证、授权、审计和安全防护。
  • 保证服务稳定运行。
  • 处理线上故障。
  • 评估系统容量和性能瓶颈。
  • 设计系统架构和技术方案。

一个后端接口看起来可能只是返回一段 JSON,但背后往往包含参数校验、权限检查、业务规则、数据库事务、缓存读写、消息投递、日志记录、指标上报和错误处理。

后端系统的典型位置

一个常见 Web 系统可以简化成下面这样:

flowchart LR
    User["用户"] --> Browser["浏览器 / App"]
    Browser --> Gateway["网关 / 负载均衡"]
    Gateway --> Service["Go 后端服务"]
    Service --> DB["数据库"]
    Service --> Cache["Redis 缓存"]
    Service --> MQ["消息队列"]
    Service --> ObjectStorage["对象存储"]
    Service --> ThirdParty["第三方服务"]

后端工程师通常主要负责 Go 后端服务,但不能只理解这一块。因为服务是否稳定,常常取决于它和外部组件的交互。

例如:

  • 数据库慢,会导致接口慢。
  • Redis 热 Key,会导致缓存层抖动。
  • 消息队列堆积,会导致业务延迟。
  • 第三方接口超时,会拖慢自己的请求。
  • 网关配置错误,会导致请求根本打不到服务。
  • 容器资源限制过小,会导致服务频繁 OOM。

初级、中级、高级的差别

初级后端工程师通常关注:

  • 按需求写接口。
  • 完成 CRUD。
  • 能跑通基本功能。
  • 能根据报错修改代码。

中级后端工程师通常关注:

  • 接口设计是否清晰。
  • 数据模型是否合理。
  • 错误处理是否统一。
  • 测试是否覆盖核心逻辑。
  • 性能是否满足当前业务量。
  • 部署和配置是否规范。

高级后端工程师还需要关注:

  • 系统边界是否清楚。
  • 方案是否能长期演进。
  • 依赖失败时系统如何降级。
  • 数据一致性如何保证。
  • 容量增长后瓶颈在哪里。
  • 如何定位线上问题。
  • 如何让团队更稳定地交付。
  • 技术选择是否匹配业务阶段。

高级工程师不是“知道更多框架的人”,而是能在不确定条件下做出合理判断,并对系统结果负责的人。

后端工程师的一天可能在做什么

一个真实后端工程师的工作并不只有写代码,可能包括:

  • 和产品确认需求边界。
  • 设计接口和数据表。
  • 编写业务代码。
  • 写单元测试和集成测试。
  • Review 同事代码。
  • 排查测试环境问题。
  • 优化慢 SQL。
  • 看日志定位线上报错。
  • 配置告警。
  • 写设计文档。
  • 参与技术方案评审。
  • 复盘线上事故。

这就是为什么本知识库不只讲 Go 语言,还要讲操作系统、网络、数据库、缓存、Docker、Kubernetes、可观测性和系统设计。

必会知识点

API 不是系统的全部

接口只是系统暴露出来的一小部分。一个接口背后可能有很多隐藏工作:

  • 输入是否合法。
  • 用户是否有权限。
  • 操作是否幂等。
  • 数据是否需要事务。
  • 是否需要写缓存。
  • 是否需要投递消息。
  • 是否需要记录审计日志。
  • 失败后是否可以重试。
  • 是否会影响其他服务。

代码正确不等于系统可靠

代码在本地能跑,只能说明它在一个简单环境中成立。生产系统还会遇到:

  • 高并发请求。
  • 网络抖动。
  • 依赖服务超时。
  • 数据库连接耗尽。
  • 容器内存限制。
  • 配置错误。
  • 版本不兼容。
  • 灰度发布期间新旧逻辑共存。

所以后端工程师要从“函数正确”走向“系统可靠”。

高级工程师要能解释取舍

真实工程里很少有绝对正确的方案,更多是取舍。

例如:

  • 使用缓存可以提升性能,但会带来一致性问题。
  • 使用消息队列可以削峰,但会带来延迟和重复消费问题。
  • 微服务可以拆分团队边界,但会增加部署、调用、观测和治理复杂度。
  • 数据库强一致更简单,但在高并发场景下可能牺牲吞吐。

能解释这些取舍,是高级工程师的重要能力。

工程实践

阅读一个你熟悉的网站或 App 的功能,比如“登录”“发布评论”“上传头像”,尝试回答:

  1. 前端会调用哪些后端接口?
  2. 后端需要访问哪些数据?
  3. 需要鉴权吗?
  4. 失败后用户会看到什么?
  5. 哪些地方可能变慢?
  6. 哪些地方需要记录日志?
  7. 如果请求量变成 10 倍,哪里最可能先出问题?

常见误区

  • 误区一:后端就是写接口。

实际上,后端还要负责数据、性能、稳定性、安全、部署、排障和系统演进。

  • 误区二:会一个框架就会后端。

框架只是工具。离开框架后,HTTP、数据库、缓存、并发、错误处理这些问题仍然存在。

  • 误区三:高级工程师就是写更复杂的代码。

高级工程师更多是在控制复杂度,而不是制造复杂度。

实战任务

选择一个常见功能,画出它的后端链路图。建议从下面选一个:

  • 用户登录
  • 文件上传
  • 发送验证码
  • 查询订单列表
  • 发布评论

要求:

  1. 标出客户端、网关、后端服务、数据库、缓存、消息队列等组件。
  2. 标出同步流程和异步流程。
  3. 写出至少 3 个可能失败的点。
  4. 写出你会记录哪些日志。

面试题

1. 后端工程师和前端工程师的职责边界是什么?

参考答案

前端工程师主要负责用户界面、交互体验、浏览器或客户端侧状态管理,以及把用户操作转化为对后端 API 的调用。后端工程师主要负责服务端 API、业务逻辑、数据存储、权限控制、系统稳定性、性能、安全和外部依赖集成。

这个边界不是绝对隔离的。一个成熟团队里,前后端需要共同确认接口契约、错误码、鉴权方式、数据格式和异常场景。高级后端工程师不能只说“这是前端问题”,而应该能从完整链路判断问题发生在哪一层。

2. 一个接口从请求进来到响应返回,后端通常会做哪些事情?

参考答案

通常会经历路由匹配、中间件处理、参数解析、参数校验、认证鉴权、业务逻辑执行、数据库或缓存访问、调用外部服务、错误处理、响应组装、日志记录、指标上报等步骤。

不是所有接口都会包含全部步骤,但生产级接口通常都需要考虑超时、幂等、权限、错误码、审计日志和可观测性。面试时可以按“请求入口 -> 业务处理 -> 数据访问 -> 响应返回 -> 观测记录”这条线回答。

3. 为什么说代码能跑不等于系统可靠?

参考答案

代码能跑只说明它在当前输入和当前环境下没有立刻失败,但生产系统还会面对高并发、网络抖动、数据库慢查询、缓存异常、依赖超时、配置错误、发布过程中新旧版本共存等情况。

可靠系统需要额外考虑超时、重试、降级、限流、熔断、日志、监控、告警、回滚和数据一致性。代码正确是基础,系统可靠还需要工程化和架构层面的保障。

4. 初级、中级、高级后端工程师的核心差别是什么?

参考答案

初级工程师主要关注按需求完成接口和功能;中级工程师开始关注代码质量、数据模型、错误处理、测试、性能和可维护性;高级工程师需要关注系统边界、长期演进、稳定性、容量、风险、技术取舍和团队协作。

简单说,初级更多是“把功能写出来”,中级是“把功能写稳、写清楚”,高级是“让系统和团队都能长期稳定地交付”。

5. 你如何理解“技术方案取舍”?

参考答案

技术方案取舍是指在业务目标、团队能力、时间成本、系统复杂度、性能、稳定性和未来演进之间做平衡。工程中很少有绝对最优方案,更多是选择当前约束下最合适的方案。

例如,引入缓存能提升读性能,但会带来一致性问题;使用消息队列能削峰解耦,但会带来延迟、重复消费和排障成本;拆微服务能清晰团队边界,但会增加部署和治理复杂度。能讲清楚收益、代价、风险和回滚方案,就是技术取舍能力。