Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

项目复盘专题

项目复盘不是流水账,而是把经历讲成背景清楚、责任明确、难点可信、取舍有依据、结果可验证的面试表达。所有涉及规模、收益、耗时、事故、用户量、业务线的数据,必须替换为真实记录;没有真实数据就讲验证方法,不要现场编。

一、项目复盘的总框架

项目类问题建议按“一条主线 + 三个证据“组织:

  1. 项目背景:项目服务谁、解决什么问题、为什么当时重要。
  2. 我的责任:我负责哪些模块、决策、交付物,边界在哪里。
  3. 技术难点:难点来自性能、稳定性、兼容性、安全、协作还是业务规则。
  4. 方案取舍:为什么选 A 不选 B,代价是什么,如何兜底。
  5. 结果证据:指标、灰度、日志、监控、线上反馈、复盘文档。

可直接套用的 STAR+复盘模板:

背景:【项目名】属于【业务线】,目标是解决【真实问题】,当时约束是【真实值】。
责任:我负责【模块/链路】,边界是【我负责什么】,不负责【其他团队/模块】。
行动:我先拆了【关键链路】,再针对【技术难点】做了【方案】,同时准备【监控/灰度/回滚】。
结果:上线后用【指标】验证,【真实值】从【真实值】变为【真实值】;如果没有指标,说明用【日志/灰度/测试】验证。
复盘:这件事沉淀了【流程/工具/规范】,如果重做我会提前补【风险点】。

二、项目背景与责任边界怎么讲

背景要回答“为什么做“,责任要回答“你到底做了什么“。中级 Android 面试最忌讳把团队成果全说成个人成果,也忌讳只说“参与开发“。

维度应该讲不要讲
背景【项目名】服务【业务线】,要解决【真实问题】“公司让做的”
规模真实接入范围、版本、机型、调用量或验证环境编造 DAU、收入、QPS
责任我负责的模块、接口、排查、上线、文档“整个项目都是我做的“但说不出细节
边界哪些由服务端、客户端、产品、测试负责把不了解的链路硬讲成自己的

表达模板:

“这个项目的背景是【项目名】在【业务线】里承担【真实职责】。我主要负责【客户端模块/SDK 模块/性能链路】,包括【接口设计/核心实现/排查上线/监控补充】。服务端策略、产品规则或运营配置由【真实协作方】负责,我这边重点保证端侧链路稳定、可观测、可回滚。”

三、技术难点与方案取舍

技术难点要讲“为什么难“,不是堆名词。方案取舍要讲“当时为什么这样选“,不是事后包装。

  1. 性能难点:启动、内存、包体、卡顿、线程调度。讲指标口径和预算,如主线程耗时、P95、峰值内存,用 【指标】【真实值】 替换。
  2. 稳定性难点:崩溃、ANR、弱网、进程死亡、兼容性。讲复现路径、日志补点、灰度观察、回滚开关。
  3. 安全/风控难点:环境异常、Hook、篡改、数据可信度。讲防御和工程化,不要讲可操作绕过细节。
  4. 协作难点:跨端、服务端、测试、产品口径不一致。讲接口契约、验收标准、对齐机制。

取舍回答公式:

“我们当时有两个方案:A 是【方案 A】,优点是【优点】,但代价是【代价】;B 是【方案 B】,优点是【优点】,但风险是【风险】。最后选【真实选择】,因为当时最重要的约束是【真实约束】。为了控制风险,我补了【灰度/开关/监控/回滚】。”

四、问题、事故与线上指标复盘

项目复盘一定要准备“出过什么问题“。没有严重事故也可以讲灰度问题、兼容问题、测试漏测、指标波动,但必须真实。

事故/问题表达不要甩锅,按下面顺序:

  1. 现象:什么指标或反馈异常,影响范围是多少。例:【时间】 发现 【指标】 异常,影响 【真实值】
  2. 定位:如何缩小范围,用了哪些日志、监控、灰度分组、复现设备。
  3. 处置:临时止血、开关回滚、版本修复、数据修复。
  4. 根因:代码、配置、流程、测试覆盖、依赖变更还是沟通问题。
  5. 预防:新增监控、用例、检查项、发布门禁、文档沉淀。

指标不要只说“提升明显“。至少准备三类证据:

  • 业务/使用证据:覆盖【业务线】、接入【真实值】版本、使用【真实值】天/周/月。
  • 技术指标:崩溃率、ANR、启动耗时、内存、包体、成功率、失败率,统一写成 【指标】=【真实值】
  • 过程证据:灰度批次、监控面板、日志字段、测试报告、复盘文档、Code Review 记录。

五、协作、推进与冲突处理

中级岗位会追问你是否能推动事情,不要只讲技术实现。协作复盘可以按“目标一致 → 契约明确 → 风险透明 → 结果闭环“说。

  • 和产品:确认成功标准,避免只按口头需求开发。可说“我把验收口径从’体验更好’拆成【指标】和【真实场景】“。
  • 和服务端:对齐接口字段、幂等、重试、错误码、灰度策略。强调契约和联调清单。
  • 和测试:补充兼容机型、弱网、异常输入、升级覆盖、回滚路径。
  • 和客户端同事:明确模块边界、代码 Review、公共能力沉淀。

冲突回答模板:

“当时分歧点是【真实分歧】。我没有直接争论实现偏好,而是把风险拆成【性能/稳定性/排期/可维护性】几项,用【真实数据或验证方式】对比。最后我们选择【真实方案】,并保留【降级/灰度/后续优化】。”

六、如果重做,你会怎么改

“如果重做“不是自我否定,而是展示复盘能力。回答要具体,不能只说“更早沟通”。

可以从 5 个方向选 2-3 个真实点:

  1. 更早定义指标:上线前就确定 【指标】、采集口径和看板,避免上线后补证据。
  2. 更细灰度和回滚:按版本、机型、渠道、业务线分层灰度,准备开关和降级。
  3. 更完善测试矩阵:覆盖弱网、低端机、进程死亡、升级、异常配置。
  4. 更清晰边界文档:把接口契约、错误码、调用时机、线程模型写清。
  5. 更早做风险评审:提前评估隐私合规、性能预算、安全误报、服务端依赖。

推荐回答:

“如果重做,我会先补两件事:第一,在开发前就把【指标】口径定下来,避免只靠上线后观察;第二,把【风险点】提前放进灰度和回滚方案。代码实现本身不是最大问题,真正容易出问题的是指标口径、协作边界和异常场景。”

高频面试题

Q1:请介绍一个你最有代表性的项目。

答题要点:按“背景 → 责任 → 难点 → 方案 → 结果 → 复盘“讲,控制在 3-5 分钟。所有数字替换为 【真实值】,例如“【指标】从【真实值】到【真实值】“;没有数字就说清验证方式。

Q2:这个项目最大的技术难点是什么?

答题要点:只选 1-2 个最能体现能力的难点。先讲难点来源,再讲方案取舍,最后讲验证。不要把所有技术栈都报一遍。

Q3:这个项目上线后出过什么问题?你怎么处理?

答题要点:讲真实问题,按“发现 → 定位 → 止血 → 根因 → 预防“回答。即使问题不大,也要体现监控、灰度、回滚和复盘意识。

Q4:你在项目里具体负责什么?哪些不是你负责的?

答题要点:主动划清边界,例如“我负责端侧【模块】和【指标】,服务端策略由【协作方】负责,但我参与了接口联调和异常码定义“。边界清楚反而更可信。

Q5:如果现在让你重做这个项目,会怎么优化?

答题要点:不要说“没什么问题“。从指标、灰度、测试、文档、风险评审中选真实改进点,说明为什么当时没做以及现在会怎么补。

易错点 / 追问

  • 易错点:把团队成果全揽到自己身上。 追问一到接口细节、日志字段、灰度策略就露馅;要明确自己的负责范围。
  • 易错点:编造指标。 面试官会追问口径、看板、样本量、时间窗口;没有真实数据就讲验证方法和补数计划。
  • 易错点:只讲成功不讲问题。 中级面试更看重事故处理和复盘能力,要准备真实故障或灰度问题。
  • 易错点:方案取舍讲成标准答案。 要回到当时约束,说明为什么在【时间】、人力、风险下做那个选择。
  • 追问:你怎么证明这是你做的? 准备代码提交、设计文档、日志字段、联调记录、复盘文档等真实证据。
  • 追问:项目结果和业务有什么关系? 用【业务线】、用户路径、稳定性、安全、效率或成本解释技术指标的业务意义。