拿下技术面上传简历

现场给你一段约 50 行的 Python 函数 process(items),它在一个三层嵌套的 for/if 里同时做四件事:跳过 item['status'] != 'ok' 的记录;把 item['amount'] 累加到以 item['uid'] 为 key 的字典里;对负数或 None 的 amount 打一条日志;循环结束后再遍历一遍这个字典,算每个用户的平均值并写回同一个字典。变量名是 i、tmp、d1、data2 这种。请你做两件事:(1) 指出这段代码在读的时候最难的地方具体是什么;(2) 在不改变任何行为的条件下重构,讲清你会拆成哪几个函数,每个函数的名字、输入和输出分别是什么。

代码能力与调试排障现场编码1-3 年知识点 1 个

面试官在考什么

判断候选人能不能把「可读性」落到具体的职责边界和命名契约上,并且知道重构的第一约束是行为不变(包括日志这类副作用)。

代码可读性

回答框架 · 前两步

  1. 定位问题要具体:一个函数承担了过滤、聚合、日志、统计四种职责,加上 i/tmp/d1 这类无信息量的名字和三层的嵌套,读的人要在脑子里同时维护多个状态。
  2. 拆分原则是按职责切出纯函数:例如 iter_valid(items) 产出合法记录、amounts_by_user(items) 返回 {uid: [amount]}、build_averages(...) 返回平均值,每个函数的名字直接体现输入输出。

还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

同一能力域的其他题