更新题目 AI 辅助调试:修 bug 过测试
题目 amazon-oa-ai-debug · 修改(rev 8) · · 2026-10-27 00:33
body
@@ -1,49 +1,62 @@ +## TL;DR + +- 这是 OA 编程部分的第二题,单独计时 60 分钟,要在现成的项目里修 bug,让一组失败的测试(多数是 6 个)通过,见「题目」。 +- 语言(实际是框架)开考前选定、进去不能改,你熟的 Java(Spring Boot)和 C++ 选哪个见「开考前」。 +- 进题先抄清单:题面列的 issue、README 里每种情况的状态码和 message 原文,见「0–5 分钟:读题」。 +- 先跑测试,全部失败且报缺依赖或变量找不到时先修测试环境,见「5–10 分钟」。 +- web 框架版的测试只看 API 返回的状态码、message、JSON 结构和数据库,不看页面,见「题目」和「易错点」。 +- 打开测试文件读断言,测试会考题面没写的东西,见「10–50 分钟」。 +- 顺着 Test → 路由 → handler → service → 查询 → 保存 → Response 一层层找,见「思路」开头的表。 +- 反复出现的 bug 是改了没存、状态码或 message 不对、缺存在性检查,见「易错点」。 +- AI 助手多半不给答案,用它定位文件和函数、问语法,见「怎么用 AI」。 +- 没全过照样进下一轮的人很多,卡住就跳到下一个测试,见「时间和结果」。 + ## 题目 -这是 Amazon 招软件开发工程师(SDE,Software Development Engineer)时,在线测评(OA)编程部分的第二题。应届生、SDE II(Amazon 软件工程师职级里的第二级)和实习生的面经(论坛上的面试经验帖)里都出现过。最早见于 2025-12 的帖子;2026 年上半年它还和「两道编程题」的旧形式并存,到 2026-08 以后,多数全职 OA 的第二题都是它。 - -OA 邀请信上写的是「编程 100 分钟两题:一道传统写代码,另一道在代码仓库环境里可以用 AI coding assistant」。实际做的时候,**第一题是算法题,限时 40 分钟;第二题就是本题,限时 60 分钟;两题分开计时**。每题一点开就开始倒计时,第一题提前做完省下的时间也挪不到第二题——发帖人(论坛上叫「楼主」,下文沿用)在回复里说「我记得不行」。2025-12 有一篇 SDE II 的帖子写的是两题一共 90 分钟,但那时第二题已经是这道项目题了。 - -做完这两题,后面还有 Work Simulation(给出工作中的场景,让你判断怎么处理)和 Work Style 问卷(问的是你自己的工作习惯和偏好),见 [[q:amazon-oa-work-simulation]];整个 OA 的结构见 [[p:amazon/overview]]。 - -### 平台和界面 - -题目在 HackerRank 上做,多位楼主都这么说,截图里的包名就是 `com.hackerrank.corebanking`。界面像 VS Code:左边是题目描述,另外有文件树、编辑器、终端和网站预览,右边是 AI Assistant 面板。仓库里有 README,截图里还能看到一个 `PROJECT_FILES_INSTRUCTIONS.md`。README 要求通过 IDE 菜单来操作:进题时会自动执行 Install,点 Run 启动项目,点 Test 跑测试,对应的终端命令都在后台执行。 - -### 监考 - -几位楼主都说不用开摄像头,有人说也不用验证证件。切到别的窗口会弹窗提醒。有楼主说「monitor 会检查」,但没说清是指检测外接显示器,还是泛指有监控。 - -### 选语言 - -语言要在开考前选(实际选的是框架),**进去以后不能改**。帖子里见到的选项有 Java Spring Boot、Python Django(有的带 React 前端)、Node.js(MERN,即 MongoDB + Express + React + Node.js 这套技术栈)和 C++。第一题和第二题能不能选不同的语言,楼主们的说法相反:一位说开始前可以分别选,一位说好像不能,一位说 AI 题跟着所选的语言走。这一点没有定论,以开考页面为准。 +这是 Amazon 招软件开发工程师(SDE,Software Development Engineer)时,在线测评(OA,Online Assessment)编程部分的第二题。应届生、SDE II(Amazon 软件工程师职级里的第二级)和实习生的面经(论坛上的面试经验帖)里都有。最早见于 2025-12 的帖子。2026 年上半年它和「两道算法题」的旧形式并存,到 2026-08 以后,多数全职 OA 的第二题都是它。 + +OA 邀请信上写的是「编程 100 分钟两题:一道传统写代码,另一道在代码仓库环境里可以用 AI coding assistant」。实际做的时候,**第一题是算法题,限时 40 分钟,第二题就是本题,限时 60 分钟,两题分开计时**。每题一点开就开始倒计时。第一题提前做完,省下的时间能不能挪到第二题,发帖人(论坛上叫「楼主」,下文沿用)在回复里说「我记得不行」。2025-12 有一篇 SDE II 的帖子写的是两题一共 90 分钟,那时第二题已经是这道项目题了。 + +两题之后还有 Work Simulation(给出工作中的场景,让你判断怎么处理)和 Work Style 问卷(问你自己的工作习惯和偏好),见 [[q:amazon-oa-work-simulation]]。整个 OA 的结构见 [[p:amazon/overview]]。 + +### 平台、监考和语言 + +题目在 HackerRank 上做,多位楼主都这么说,截图里的包名就是 `com.hackerrank.corebanking`。界面像 VS Code:左边是题目描述,另有文件树、编辑器、终端和网站预览,右边是 AI Assistant 面板。仓库里有 README,截图里还有一个 `PROJECT_FILES_INSTRUCTIONS.md`。README 要求通过 IDE 菜单操作:进题时自动执行 Install,点 Run 启动项目,点 Test 跑测试,对应的终端命令在后台执行。 + +几位楼主说不用开摄像头,有人说也不用验证证件。切到别的窗口会弹窗提醒。有楼主说「monitor 会检查」,没说清是检测外接显示器,还是泛指有监控。 + +语言在开考前选(实际选的是框架),进去以后不能改。见过的选项有 Java Spring Boot、Python Django(有的带 React 前端)、Node.js(MERN,即 MongoDB + Express + React + Node.js 这套技术栈)和 C++。第一题和第二题能不能选不同的语言,楼主们说法相反:一位说开始前可以分别选,一位说好像不能,一位说 AI 题跟着所选的语言走。这一点以开考页面为准。 ### 要修什么 -题面会列出 1–3 个坏掉的功能或业务规则(比如电影推荐 MovieDB 那题,README 里只写了一个接口),仓库里有一组失败的测试,最常见是 6 个,任务是把代码修到这些测试通过。**web 框架版的测试是按 API 返回的状态码、message、JSON 结构,以及数据有没有真的存进数据库来判定的,不看页面显示**;C++ 版的几篇都没提到 API,其中一篇说是跑 `test.sh`。有的题面还注明,仓库里故意留了一些和本题无关的问题,只需要修描述里提到的部分。 - -### AI 助手 - -多数帖子说 AI 助手有护栏(guardrail,也就是平台给 AI 设的限制):它不直接给答案,也不替你改文件,问题一接近答案它就拒绝回答;但它能指出问题大概在哪个文件、哪个函数、哪几行,也能讲语法。也有楼主说它能直接生成代码,由你自己贴进去。各篇的具体说法见下面「AI 助手的实际表现」一小节。 - -### 变体 - -少数人抽到的不是修 bug,而是加功能:一位要在全栈项目里加限流(rate limit)和屏蔽关键词 / 用户黑名单,一位要实现一个包裹追踪状态聚合器。还有一位是在一个大项目里做 3 个 debug task,楼主只说给了一个数据集、要改的地方多。 +题面列出 1–3 个坏掉的功能或业务规则(电影推荐 MovieDB 那题,README 里只写了一个接口),仓库里有一组失败的测试,最常见是 6 个,任务是把代码修到这些测试通过。web 框架版的测试按 API 返回的状态码、message、JSON 结构,以及数据有没有真的存进数据库来判定,页面显示什么不影响结果。C++ 版的几篇都没提到 API,其中一篇说是跑 `test.sh`。有的题面注明,仓库里故意留了和本题无关的问题,只修描述里提到的部分。 + +> [!say] The tests only check the API contract, so I read the assertions first: the expected status code, the exact error message, and whether the record is actually persisted. + +多数帖子说 AI 助手有护栏(guardrail,平台给 AI 设的限制),不直接给答案,也不替你改文件,但能指出问题大概在哪个文件、哪个函数、哪几行,也能讲语法。也有楼主说它能直接生成代码让你自己贴进去,各篇的说法见下面「AI 助手的实际表现」。少数人抽到的是加功能题,见下面「加功能的变体」。 ## 面经里怎么考的 -每次抽到的项目都不一样,但**同一类项目会反复出现**。楼主们会说电影数据库(movie DB)那题是一亩三分地(北美华人求职论坛,常简称「地里」)上早有人发过的面经题,或者说类似 Jira 的那题地里之前有人提过。所以下面这些场景都值得过一遍。 - -下面按项目类型分组。文中的「在职」指楼主已经工作、是跳槽来面的,「应届」指刚毕业的校招生。标【推断】的是整理时根据上下文推出来的,原帖没有明说;标「旁证」的来自帖子下面别人的回复,不是楼主本人的经历。 +每次抽到的项目不一样,但同一类项目会反复出现。楼主们说电影数据库(movie DB)那题是一亩三分地(北美华人求职论坛,常简称「地里」)上早有人发过的,类似 Jira 的那题地里之前也有人提过。所以下面的场景都值得过一遍。 + +下面按项目类型分组。「在职」指楼主已经工作、是跳槽来面的,「应届」指刚毕业的校招生。标【推断】的是整理时根据上下文推出来的,原帖没明说。标「旁证」的来自帖子下面别人的回复,不是楼主本人的经历。 ### 电影网站(最常见,多是 Spring Boot 或 Django) -- 2026-06 一位在职的 SDE II(选的是 Spring)修的是待看清单(watch list)的增删。6 个失败的测试分别是:往已建好的 list 里加电影、加一部已经在 list 里的电影、删电影、加很多部再一部部删、往不存在的 list 里加、从不存在的 list 里删。要检查的是状态码对不对、代码有没有先确认 list 和 movie 存在、新电影有没有存进数据库。楼主没有全部通过,照样直接进了 onsite(最后一轮的多场面试,也就是终面)。他说平台的 AI 很弱,不能改代码,只能当搜索引擎用;另外用笔记本的小屏幕做起来很费劲。 -- 2026-06 另一位在职的楼主遇到的是用户自定义片单加不进电影,他说测试都没过。 -- 2026-05 一位应届生遇到的是主页上的电影推荐不显示;他说项目自带的 AI 只能针对选中的文件提问,没法通览整个项目。2026-08 一位楼主做的是 Django + React 版,截图里的 README 写明要修推荐接口 `GET /api/ratings/recommendations/user`。请求要带 Bearer token(通常放在 HTTP 请求头 `Authorization` 里的访问令牌);「有推荐」「没看过也没评过分」「看过、评过分但找不到推荐」三种情况,各自要返回规定的 message 和列表;每个推荐项的字段很多,包括评分、类型、热度、推荐来源是评过还是看过、来源电影、用户打的分等。楼主说可以从单元测试(unit test)倒推出要求,但要在很短的时间内看懂代码。 -- 下面两位做的都是 Spring Boot 的电影搜索。2026-08 一位 SDE II 遇到的是输入片名的一部分搜不出来,最后自己查出原因:查询逻辑(query)没有把搜索词转成小写,而数据库里存的是小写;但他没修完。2026-09 一位的题面要求支持部分匹配,能按标题、演员或全部字段匹配,忽略大小写,能按热度(popularity)等字段排序,并且只返回已发布的电影;楼主说逻辑复杂,这题 0 个测试通过。 -- 2026-09 一位做的是 Django 项目里的过滤和排序(从字段看应该是电影库【推断】)。楼主列的检查项有:按类型(genre)、导演(director)、编剧(writer)过滤;评分(rating)和年份(year)的边界;排序规则和 tie-breaker(主排序键相同时用来决定先后的次要规则);以及只有过滤条件(filter)、没有搜索词(query)时也要能正常工作。楼主还给了一套排查顺序,见下面「思路」一节。 -- 2026-08 一位做的是 Spring Boot 的电影增删改查(CRUD),有 6 个单元测试。楼主不熟 Spring Boot,写了 45 分钟;AI 不能直接替他改 bug,但能给建议。另一位(2026-08 在职,也是 Spring Boot)的 6 个失败测试只修完了前两个(里面其实含 4 个子测试,即 subtest)。问题大多是 controller(接收 HTTP 请求的那一层,各层的含义见下面「思路」)里的接口没有把数据持久化(persist,即存进数据库),或者没返回正确的状态码。他照大家的建议用 AI 一个个找文件再改,时间还是不够。 -- 2026-04 前后,一位加拿大的应届生(用 Java)做的是演员 + 电影网站:用户可以关注(follow)演员,管理员(admin)可以添加新电影和演员表,用户关注的演员有新片时要收到通知。左边的题目描述会说明哪些功能坏了、怎么坏的;楼主每修完一个功能,就问 AI 这个功能还涉及哪些文件。**他做的那个版本,测试并没有覆盖所有 bug**,所以他建议修完以后按描述在 UI 上把所有功能再点一遍。 +- 2026-06 一位在职的 SDE II(选 Spring)修的是待看清单(watch list)的增删。6 个失败的测试是:往已建好的 list 里加电影、加一部已经在 list 里的电影、删电影、加很多部再一部部删、往不存在的 list 里加、从不存在的 list 里删。要查的是状态码对不对、代码有没有先确认 list 和 movie 存在、新电影有没有存进数据库。他没有全部通过,照样直接进了 onsite(最后一轮的多场面试,也就是终面)。他说平台的 AI 很弱,不能改代码,只能当搜索引擎用,另外用笔记本的小屏幕做很费劲。 +- 2026-06 另一位在职的楼主遇到用户自定义片单加不进电影,测试都没过。 +- 2026-05 一位应届生遇到主页上的电影推荐不显示。他说项目自带的 AI 只能针对选中的文件提问,没法通览整个项目。 +- 2026-08 一位楼主做的是 Django + React 版,截图里的 README 写明要修推荐接口 `GET /api/ratings/recommendations/user`。请求要带 Bearer token(放在 HTTP 请求头 `Authorization` 里的访问令牌)。「有推荐」「没看过也没评过分」「看过、评过分但找不到推荐」三种情况,各自要返回规定的 message 和列表。每个推荐项字段很多,包括评分、类型、热度、推荐来源是评过还是看过、来源电影、用户打的分。楼主说可以从单元测试(unit test)倒推出要求,但要在很短时间内看懂代码。 +- 下面两位做的都是 Spring Boot 的电影搜索。2026-08 一位 SDE II 遇到输入片名的一部分搜不出来,自己查出原因是查询逻辑(query)没把搜索词转成小写,而数据库里存的是小写,但没修完。2026-09 一位的题面要求支持部分匹配,能按标题、演员或全部字段匹配,忽略大小写,能按热度(popularity)等字段排序,只返回已发布的电影。他说逻辑复杂,0 个测试通过。 +- 2026-09 一位做的是 Django 项目里的过滤和排序(从字段看是电影库【推断】)。他列的检查项有这几类: + - 按类型(genre)、导演(director)、编剧(writer)过滤。 + - 评分(rating)和年份(year)的边界。 + - 排序规则和 tie-breaker(主排序键相同时决定先后的次要规则)。 + - 只有过滤条件(filter)、没有搜索词(query)时也要能正常工作。 + + 他还给了一套排查顺序,见「思路」开头。 +- 2026-08 一位做的是 Spring Boot 的电影增删改查(CRUD),6 个单元测试。他不熟 Spring Boot,写了 45 分钟。AI 不能直接替他改 bug,但能给建议。 +- 2026-08 另一位在职的楼主(也是 Spring Boot)的 6 个失败测试只修完前两个(里面其实含 4 个子测试,即 subtest)。问题大多是 controller(接收 HTTP 请求的那一层,各层见「思路」)里的接口没把数据持久化(persist,即存进数据库),或者没返回正确的状态码。他照大家的建议用 AI 一个个找文件再改,时间还是不够。 +- 2026-04 前后,一位加拿大的应届生(用 Java)做的是演员 + 电影网站:用户可以关注(follow)演员,管理员(admin)可以添加新电影和演员表,用户关注的演员有新片时要收到通知。左边的题目描述会说明哪些功能坏了、怎么坏的。他每修完一个功能,就问 AI 这个功能还要改哪些文件。他做的那个版本,测试没有覆盖所有 bug,所以他建议修完后按描述在 UI 上把功能都点一遍。 ### 类 Jira 的 issue 系统 @@ -51,139 +64,157 @@ 另一大类项目仿的是 Jira(Atlassian 的任务和缺陷跟踪工具),bug 多出在 comment 和 issue 的创建、更新上。 -- 2026-05 一位在职的 SDE II(Spring Boot)遇到的是 comment 创建或更新后不显示。原因很简单,比如把要改的 comment 读出来、改完却没保存,或者没和所属的 issue 关联上。但修的时候要按 README 里的 API contract(接口约定,规定每个接口在各种情况下返回什么)来:未认证返回 401、无权限返回 403,并带上对应的 message;成功时返回规定的状态码;还要处理「用户只能改自己的 comment」这类边界情况。所以 handler(处理请求的那一层)和 service(业务逻辑层)两层都要改。**楼主一开始在 UI 上已经修好了,测试却过不了**,因为测试只看 API 返回的状态码和 message。代码库在练手项目(toy project)里算大的,根本看不过来,但实际要改的只有两三个文件。AI 能在语法上帮忙(比如怎么构造 response),但不能直接写代码。 -- 还有几篇只提到了坏掉的是什么功能:2026-07 一位应届生是不能创建 / 发布(post)comment;2026-09 一位 SDE II 是 dashboard 上不能新建 issue;2026-10 一位应届生是创建 Issue 和 sub-issue 有问题;2026-08 一位做的 Django 版是创建 Issue 对象时出错。 -- 2026-08 还有一位没说是什么系统,只说要创建一个新的 issue,看起来也是 issue 系统【推断】。问题出在 controller 没检查请求里发来的字段;另外还要先生成一个标识符(identifier)再创建 issue。他建议对着数据结构定义(schema)来做。AI 不能直接给出结果,还是得自己写,但他觉得不算特别难。 +- 2026-05 一位在职的 SDE II(Spring Boot)遇到 comment 创建或更新后不显示。原因很简单,比如把 comment 读出来改完却没保存,或者没和所属的 issue 关联上。但修的时候要按 README 里的 API contract(接口约定,规定每个接口在各种情况下返回什么)来:未认证返回 401,无权限返回 403,都要带对应的 message,成功时返回规定的状态码,还要处理「用户只能改自己的 comment」这类边界。所以 handler(处理请求的那一层)和 service(业务逻辑层)两层都要改。他一开始在 UI 上已经修好了,测试却过不了,因为测试只看 API 返回的状态码和 message。代码库在练手项目里算大的,看不过来,但实际要改的只有两三个文件。AI 能在语法上帮忙(比如怎么构造 response),不能直接写代码。 +- 几篇只提到坏掉的功能:2026-07 一位应届生是不能创建、发布(post)comment,2026-09 一位 SDE II 是 dashboard 上不能新建 issue,2026-10 一位应届生是创建 Issue 和 sub-issue 有问题,2026-08 一位做的 Django 版是创建 Issue 对象时出错。 +- 2026-08 还有一位没说是什么系统,只说要创建一个新的 issue(看起来也是 issue 系统【推断】)。问题出在 controller 没检查请求里发来的字段,另外要先生成一个标识符(identifier)再创建 issue。他建议对着数据结构定义(schema)来做。AI 不直接给结果,还得自己写,他觉得不算特别难。 ### 银行、贷款、付款 -金融类的项目见过银行反欺诈、贷款、定期付款和银行 App 几种。 - -- 2025-12 一位 SDE II 做的是银行反欺诈(Spring Boot 后端 + Angular 前端),题面列了三条失效的规则:一是 3 分钟内向同一个收款人转账超过三次,要标记为疑似欺诈;二是收款账号以 9 开头的属于已知欺诈账户,要自动标记;三是被标记过三次的账户要锁定,不能再交易。欺诈和锁定都返回 403 Forbidden,并且各有一句固定的 message。`FraudDetectionService` 里有几个判断方法原本直接返回 null,构造函数也是空的。楼主贴了一张改到一半的截图:用当前时间减 3 分钟作为截止时间,调用 repository(负责查数据库的那一层)按发送方和时间计数(这个方法名下面有红色波浪线),和计数比较的阈值看不清;账号是否以 9 开头,用的是字符串前缀判断。 -- 2026-03 一位应届生做的是贷款系统,题面列了三个 issue:建不了 loan、看不到已建的 loan、余额不足时仍能出资(fund)。他用 AI 修完后跑测试,通过了 5/6,剩下那个测的是「余额不足时仍能还款(repay)」,**这一条题面里根本没提**。当时只剩 5 分钟,他怕改了来不及测,就直接交了。楼主说这次的 AI 可以直接生成代码,题目里的问题也简单,模型够用。他后来通过了 OA,约了 4 轮 VO(virtual onsite,线上进行的终面)。 -- 2026-06 一位在职的楼主做的是 Django 的定期付款(schedule payment),有 6 个失败测试,bug 都很明显:该用 `!=` 的地方写成了 `==`,`< 0` 应该是 `<= 0`,还漏了更新一个变量。楼主说平台的 AI 被设定成不告诉你怎么改,但可以问它大概错在哪个函数、哪几行;他建议把每个失败的测试都贴给 AI 去问。 -- 2026-06 一位应届生做的是银行 App,有 6 个失败测试。结果 AI 对话框坏了,打不了字,平台客服(support)也联系不上,剩下的半小时只能完全靠手修,不知道最后过了几个;他照样进了 VO。 +- 2025-12 一位 SDE II 做的是银行反欺诈(Spring Boot 后端 + Angular 前端),题面列了三条失效的规则: + 1. 3 分钟内向同一个收款人转账超过三次,标记为疑似欺诈。 + 2. 收款账号以 9 开头的属于已知欺诈账户,自动标记。 + 3. 被标记过三次的账户锁定,不能再交易。 + + 欺诈和锁定都返回 403 Forbidden,各有一句固定的 message。`FraudDetectionService` 里几个判断方法原本直接返回 null,构造函数也是空的。他贴了一张改到一半的截图:用当前时间减 3 分钟作为截止时间,调用 repository(负责查数据库的那一层)按发送方和时间计数,这个方法名下面有红色波浪线,和计数比较的阈值看不清。账号是否以 9 开头用的是字符串前缀判断。 +- 2026-03 一位应届生做的是贷款系统,题面列了三个 issue:建不了 loan、看不到已建的 loan、余额不足时仍能出资(fund)。他用 AI 修完后跑测试,通过 5/6,剩下那个测的是「余额不足时仍能还款(repay)」,这一条题面里根本没提。当时只剩 5 分钟,他怕改了来不及测,就直接交了。他说这次的 AI 可以直接生成代码,题目也简单,模型够用。后来他通过了 OA,约了 4 轮 VO(virtual onsite,线上进行的终面)。 +- 2026-06 一位在职的楼主做的是 Django 的定期付款(schedule payment),6 个失败测试,bug 都很明显:该用 `!=` 的地方写成了 `==`,`< 0` 应该是 `<= 0`,还漏了更新一个变量。他说平台的 AI 被设定成不告诉你怎么改,但可以问它大概错在哪个函数、哪几行,建议把每个失败的测试都贴给 AI 去问。 +- 2026-06 一位应届生做的是银行 App,6 个失败测试。AI 对话框坏了打不了字,平台客服(support)也联系不上,剩下半小时完全靠手修,不知道最后过了几个。他照样进了 VO。 ### 退货、规则引擎和 C++ 工程 -这一组是退货相关的规则系统,以及几篇选 C++ 的工程题。 - -- 2026-04 前后一位在职的楼主(没说用什么语言)做的是退货风险评分:系统按每个顾客的历史退货件数、商品价值、账号时长等算一个分数,分太高就应该判定不可退货。现在有些不该退的被放行了,要借助 AI 找出系统里的 6 个问题。楼主第二天收到了拒信。 -- 2026-05 一位应届生做的是 C++ 退货路由引擎,项目有多个文件,用的是 VS Code 风格的 IDE,bug 集中在 `parser.cpp` 和 `engine.cpp`。他修好了 parser,但直接编辑 `engine.cpp` 时反复出语法错误。原帖没有提到 AI 助手。 -- 2026-05 一位在职的楼主(AWS)做的是 C++ 退货政策引擎(return policy engine),代码量不少。他一开始以为只有规则引擎(rule engine)有 bug,后来发现项目自带的 JSON parser 也有 bug。他的做法是根据测试用例反推,最后找到 4–5 个,没有全部通过,但还是过了 OA。内置的 AI 基本没用,只给提示(hint),接近答案就拒绝回答。帖子回复里有人说,除了代码,SQL 也会有错(旁证)。 -- 2026-08 一位应届生做的是 C++ 工程,没说是什么业务。他的流程是先看 README,跑 `test.sh`,哪里过不了就问 AI 是哪个文件有问题,再去改。bug 里逻辑错误、空着没写完的函数、语法错误都有。AI 一碰到要给答案的问题就拒绝,也拒绝直接改文件。**他特别提醒,最后要留出时间把代码 push 上去。** -- 2026-09 一位在职的楼主做的是 C++ 的「经典 OOP 题」,也没说是什么业务:6 个测试,每个测试背后都有好多问题,时间很紧,AI 基本没起作用,最后过了 5 个。 +- 2026-04 一位在职的楼主(没说语言)做的是退货风险评分:系统按顾客的历史退货件数、商品价值、账号时长等算一个分数,分太高就判定不可退货。现在有些不该退的被放行了,要借助 AI 找出 6 个问题。他第二天收到了拒信。 +- 2026-05 一位应届生(SDE1)做的是 C++ 退货路由引擎,多个文件,VS Code 风格的 IDE,bug 集中在 `parser.cpp` 和 `engine.cpp`。他修好了 parser,但直接编辑 `engine.cpp` 时反复出语法错误。原帖没提到 AI 助手。 +- 2026-05 一位在职的楼主(AWS)做的是 C++ 退货政策引擎(return policy engine),代码量不少。他一开始以为只有规则引擎(rule engine)有 bug,后来发现项目自带的 JSON parser 也有。他根据测试用例反推,找到 4–5 个,没有全部通过,还是过了 OA。内置的 AI 基本没用,只给提示(hint),接近答案就拒绝。回复里有人说,除了代码,SQL 也会有错(旁证)。 +- 2026-08 一位应届生做的是 C++ 工程,没说业务。他的流程是先看 README,跑 `test.sh`,哪里过不了就问 AI 是哪个文件的问题,再去改。bug 里逻辑错误、没写完的空函数、语法错误都有。AI 碰到要给答案的问题就拒绝,也拒绝直接改文件。他特别提醒最后要留时间把代码 push 上去。 +- 2026-09 一位在职的楼主做的是 C++ 的「经典 OOP 题」,也没说业务。6 个测试,每个背后都有好多问题,时间很紧,AI 基本没起作用,最后过了 5 个。 ### 其他项目 -- 2026-06 一位在职的 SDE II(Node.js)做的是评论内容审核。add review 和 edit review 两处都要接上项目里现成的内容检查函数;内容违规时要返回 403 而不是 201;违规计数加 1,并且要 `await user.save()` 把它存下来;违规超过 3 次就把 `isFlagged` 设为 true 并保存;已经被标记(flag)的用户,之后即使发正常内容也要拦住;命中的违规词要存进 user,数量要和测试期望的一致。测试检查的是状态码、违规次数、`isFlagged` 和违规词。他 6 个测试过了 4 个,之后仍然收到了 HR 的联系,下一轮是电话面试。他觉得 AI 比较笨,不能直接改代码,但能生成代码让你贴进去跑。 -- 2026-09 一位在职的楼主做的是租车 app(Node 后端),有三个互相独立的 bug:My Cars 里混进了别人的车(问题在过滤条件)、新加的车不出现(问题在插入逻辑)、编辑后一刷新修改就丢了(更新没有持久化)。他逐个函数对照接口文档查,两道题加上调试前后二十多分钟就写完了,OA 过了。 -- 2026-04 一位在职的 SDE II 做的是重置密码,从 `randint`、`pytest` 这些名字看应该是 Python【推断】。流程是先生成验证码、再校验、再重置。题面写明的 bug 有两处:验证码根本没生成(要改成随机生成);验证码要在 30 秒内有效(生成时记下时间戳,校验时比较)。修完一跑测试,结果全部失败——测试用到的一个 url 文件里很多变量找不到,把它改好之后测试才过。跑测试时还发现了第三处问题:新密码要存进 user profile。有人问没装 pytest 怎么办,楼主说问 AI 怎么装;他认为题目是故意让测试跑不起来的,测试环境本身也要 debug。 -- 2026-09 一位应届生(L4,Amazon 入门级的职级;Django + React)做的是博客:用户填完必填字段却发不了帖,要修 `POST /api/posts/`。要求是从 `request.data` 里读字段,title、content、category 必填,可选字段生成默认值,按请求头 `X-User-Id` 关联作者,存进数据库,返回 201 和一个含 `_id`、嵌套 author 对象的 JSON,新帖还要出现在「My Posts」下面。预置了 2 个测试,一个检查返回的结构和值,一个检查是否真的存进了数据库。回复里有人说这只是 HackerRank 的 demo test,不是正式 OA(他人回复,未核实)。 +- 2026-06 一位在职的 SDE II(Node.js)做的是评论内容审核,6 个测试过了 4 个。测试检查状态码、违规次数、`isFlagged` 和违规词,要做到的有: + - add review 和 edit review 两处都接上项目里现成的内容检查函数。 + - 内容违规时返回 403,原来返回的是 201。 + - 违规计数加 1,并且 `await user.save()` 存下来。 + - 违规超过 3 次就把 `isFlagged` 设为 true 并保存。已被标记(flag)的用户之后发正常内容也要拦住。 + - 命中的违规词存进 user,数量和测试期望的一致。 + + 他之后收到 HR 联系,下一轮是电话面试。他觉得 AI 比较笨,不能直接改代码,但能生成代码让你贴进去跑。 +- 2026-09 一位在职的楼主做的是租车 app(Node 后端),三个互相独立的 bug:My Cars 里混进了别人的车(过滤条件的问题),新加的车不出现(插入逻辑的问题),编辑后一刷新修改就丢了(更新没持久化)。他逐个函数对照接口文档查,两道题加调试前后二十多分钟就写完了,OA 过了。 +- 2026-04 一位在职的 SDE II 做的是重置密码,从 `randint`、`pytest` 这些名字看是 Python【推断】。流程是生成验证码、校验、重置。题面写明两处 bug:验证码根本没生成(要改成随机生成),验证码要 30 秒内有效(生成时记时间戳,校验时比较)。修完一跑测试全部失败,原因是测试用到的一个 url 文件里很多变量找不到,改好之后测试才过。跑测试时还发现第三处问题:新密码要存进 user profile。有人问没装 pytest 怎么办,他说问 AI 怎么装。他认为题目故意让测试跑不起来,测试环境本身也要 debug。 +- 2026-09 一位应届生(L4,Amazon 入门级的职级,Django + React)做的是博客:用户填完必填字段却发不了帖,要修 `POST /api/posts/`。要求是从 `request.data` 里读字段,title、content、category 必填,可选字段生成默认值,按请求头 `X-User-Id` 关联作者,存进数据库,返回 201 和一个含 `_id`、嵌套 author 对象的 JSON,新帖还要出现在「My Posts」下面。预置 2 个测试,一个查返回的结构和值,一个查是否真的存进了数据库。回复里有人说这只是 HackerRank 的 demo test,不是正式 OA(旁证,未核实)。 - 2026-02 一位数据科学(DS)背景的应届生遇到的是大项目里的 3 个 debug task,给了一个数据集,要改的地方很多,光理解题意、熟悉已有代码就花了很久。 -### 加功能而不是修 bug - -少数几篇做的不是修 bug,而是加功能。2026-04 一位应届生要在全栈项目里借助 AI 加限流(rate limit)和屏蔽关键词 / 用户黑名单,他说 AI 还算靠谱。2026-08 一位实习生要实现一个包裹追踪状态聚合器:输入是一个 JSON 格式的 shipment 列表(带投递规则和截止时间),以及一个 JSONL 格式(每行一个 JSON 对象)的扫描事件流;要算出包裹当前的位置,判定它是 `ON_TIME`、`LATE` 还是 `PENDING`,最后按 tracking ID 的字母序输出最终的 ledger,也就是逐个包裹列出最终状态的台账。 +### 加功能的变体 + +2026-04 一位应届生要在全栈项目里借助 AI 加限流(rate limit)和屏蔽关键词、用户黑名单,他说 AI 还算靠谱。2026-08 一位实习生要实现一个包裹追踪状态聚合器。输入是一个 JSON 格式的 shipment 列表(带投递规则和截止时间),和一个 JSONL 格式(每行一个 JSON 对象)的扫描事件流。要算出包裹当前的位置,判定它是 `ON_TIME`、`LATE` 还是 `PENDING`,最后按 tracking ID 的字母序输出最终的 ledger(逐个包裹列出最终状态的台账)。 ### 时间和结果 -- 多数人说 60 分钟很紧,大部分时间花在读陌生代码上。也有反例:上面租车 app 那位(2026-09)两道题加调试前后二十多分钟就写完了;一位应届生(new grad,NG)记录整个面试流程的帖子说 OA 挺简单,记得测试全过了;论坛英文区(一亩三分地的英文版块)一位 SDE I 说,如果有这些框架的工作经验,这题比较简单。一位选 Django 后端的在职楼主(2026-06)6 个测试刚好在 60 分钟内全部通过,说再做一遍能快 30 分钟;他的做法是先让 AI 帮忙锁定接口所在的文件,再按测试里的 API 调用逐个 debug。 -- **没全部通过、照样进入下一轮的人很多。** 评论审核那位 6 个过了 4 个,收到了 HR 联系;watch list 那位没全过,直接进了 onsite;C++ 退货政策引擎那位找到 4–5 个 bug,没全过也过了 OA;银行 App 那位 AI 坏掉、全靠手修,照样进了 VO;一位 SDE II(OA 在 9 月中以前做的)那道 Spring Boot 题完全没做(应该就是本题【推断】),还是进了电话面试。英文区一位只过了 2/6,他说看到算法差但调试好的、调试差但算法好的人,都被叫回来了。 -- 反过来,也有人没往下走:一位过了 5/6,接到电话被问了工作签证和经验,两小时后就被拒了(楼主自己的解释是名额少,全做出来的人很多);回复里另一位只过了 1/6。上面 6 个全过的那位第一题没写出来,recruiter 告诉他没通过;Spring Boot 搜索那位 0 个通过,自己估计没过。 -- 【推断】综合来看,这题应该是按通过的测试数给分,再和第一题、LP(Leadership Principles,Amazon 的领导力准则)部分一起评估,并不是要全过才算过。所以多过一个是一个,但也别指望它能弥补第一题交白卷。 - -### AI 助手的实际表现(各篇差别很大) - -- 有几位觉得它有用。2026-03 贷款那位说能直接生成代码,模型完全够用;2026-04 加功能那位说还算靠谱;2026-06 Node 评论审核那位说它不能直接改代码,但能生成代码让你贴进去;6 个全过的那位说多问 AI 怎么做,它会给足够的示例。 -- 其余多数人说它有 guardrail,不给答案,也不替你改文件;它能做的是告诉你问题在哪个文件、哪个函数、哪几行,讲讲语法,帮忙理解代码结构。 -- 还有更差的情况:有的版本只能针对选中的文件提问;有人说它弱到只能当搜索引擎用,有人说它连理解代码库、在代码里搜东西都做不到;还有一位遇到对话框直接坏掉。 -- 回复里还有一位说,改完代码再跑测试,好像跑的还是改之前的代码,AI 也一口咬定还是原来那个错误(旁证)。 +- 多数人说 60 分钟很紧,大部分时间花在读陌生代码上。也有反例。租车 app 那位前后二十多分钟就写完了。一位应届生(new grad,NG)记录整个面试流程的帖子说 OA 挺简单,记得测试全过了(这篇只说「AI coding」,是不是本题是【推断】)。论坛英文区(一亩三分地的英文版块)一位 SDE I 说,有这些框架的工作经验的话这题比较简单。一位选 Django 后端的在职楼主(2026-06)6 个测试刚好在 60 分钟内全过,说再做一遍能快 30 分钟。他的做法是先让 AI 帮忙锁定接口所在的文件,再按测试里的 API 调用逐个 debug。 +- 没全部通过、照样进下一轮的人很多: + - 评论审核那位 6 个过 4 个,收到了 HR 联系。 + - watch list 那位没全过,直接进了 onsite。 + - C++ 退货政策引擎那位找到 4–5 个 bug,没全过也过了 OA。 + - 银行 App 那位 AI 坏掉、全靠手修,照样进了 VO。 + - 一位 SDE II(OA 在 9 月中以前做的)那道 Spring Boot 题完全没做(应该就是本题【推断】),还是进了电话面试。 + - 英文区一位只过了 2/6。他说算法差但调试好的、调试差但算法好的人,他都见过被叫回来。 +- 也有人没往下走。一位过了 5/6,接到电话被问了工作签证和经验,两小时后被拒(他自己的解释是名额少,全做出来的人多)。回复里另一位只过了 1/6。6 个全过的那位第一题没写出来,recruiter 告诉他没通过。Spring Boot 搜索那位 0 个通过,自己估计没过。 +- 【推断】这题应该按通过的测试数给分,再和第一题、LP(Leadership Principles,Amazon 的领导力准则)部分一起评估,不要求全过。所以多过一个是一个,但它也补不上第一题交白卷。 + +### AI 助手的实际表现 + +- 有几位觉得它有用。贷款那位说能直接生成代码,模型完全够用。加功能那位说还算靠谱。Node 评论审核那位说它不能改代码,但能生成代码让你贴进去。6 个全过的那位说多问 AI 怎么做,它会给足够的示例。 +- 多数人说它有护栏:不给答案,不替你改文件,问题一接近答案就拒绝。它能告诉你问题在哪个文件、哪个函数、哪几行,讲语法,帮忙理解代码结构。 +- 更差的情况也有:有的版本只能针对选中的文件提问,有人说它弱到只能当搜索引擎用,有人说它连理解代码库、在代码里搜东西都做不到,还有一位遇到对话框直接坏掉。 +- 回复里有一位说,改完代码再跑测试,跑的好像还是改之前的代码,AI 也一口咬定还是原来那个错误(旁证)。 ## 思路 -排查的主线用上面做 Django 过滤和排序的那位楼主给的顺序:**Test → URL → View → QuerySet / Model → Response**。意思是从失败的测试出发,先看它请求的 URL 被路由到哪个 view(Django 里处理请求的函数或类),再看 view 里用到的 QuerySet 和 Model,最后看返回的 Response。QuerySet 是 Django ORM 的查询对象,Model 是和数据表对应的类;ORM(对象关系映射)就是把数据库表映射成类、用对象来读写数据库的那层库。按这个顺序走,是为了顺着请求的路径一层层缩小范围,而不是看到测试失败就在某个函数里乱改。 - -换成 Spring Boot 或 Node 时,View 那一层对应的是 controller / handler,中间往往还多一层 service【推断】。各框架的对应关系见下表: +排查主线用做 Django 过滤和排序那位给的顺序:**Test → URL → View → QuerySet / Model → Response**。从失败的测试出发,先看它请求的 URL 被路由到哪个 view(Django 里处理请求的函数或类),再看 view 里用到的 QuerySet 和 Model,最后看返回的 Response。QuerySet 是 Django ORM 的查询对象,Model 是和数据表对应的类。ORM(对象关系映射)是把数据库表映射成类、用对象读写数据库的那层库。按这个顺序走,是顺着请求的路径一层层缩小范围,免得看到测试失败就在某个函数里乱改。 + +Spring Boot 项目通常分四层:Controller 接收 HTTP 请求,Service 放业务逻辑,Repository 查数据库,Entity 是和数据表对应的类。换成 Spring Boot 或 Node 时,Django 的 View 对应 controller 或 handler,中间往往多一层 service【推断】。各框架顺着看的链路如下: | 框架 | 顺着这条链看 | | --- | --- | -| Spring Boot | Controller(路径、参数、返回的状态码)→ Service(业务判断)→ Repository(查询方法)→ Entity;测试一般在 `src/test` 下(Maven 惯例) | +| Spring Boot | Controller(路径、参数、返回的状态码)→ Service(业务判断)→ Repository(查询方法)→ Entity。测试一般在 `src/test` 下(Java 构建工具 Maven 的惯例) | | Django | `urls.py` → views(`request.data`、query parameter 怎么取)→ QuerySet / Model(filter 条件、字段名)→ 返回的 Response | | Node.js | routes → controller / handler → model(改完有没有 `await xxx.save()`)→ `res.status(...)` | -| C++ | README → 跑测试(有一篇是 `test.sh`)→ 对应模块(两篇退货引擎的 bug 在 parser、rule engine、`engine.cpp` 这类模块);先看编译错误再看逻辑 | - -Spring Boot 项目通常分这几层:Controller 接收 HTTP 请求,Service 放业务逻辑,Repository 负责查数据库,Entity 是和数据表对应的类。表里的 Maven 是 Java 常用的构建工具,它约定测试代码放在 `src/test` 目录下。 +| C++ | README → 跑测试(有一篇是 `test.sh`)→ 对应模块(退货引擎那两篇的 bug 在 parser、rule engine、`engine.cpp`)。先看编译错误,再看逻辑 | ### 开考前 -1. 先定语言。你最熟的是 C++ 和 Java,下面分别说选这两种会遇到什么。 - - 选 Java 基本就是做 Spring Boot 的 web 后端,电影、Jira、银行这几类项目都出现过。要能快速看懂 Controller → Service → Repository 这条调用链,知道怎么返回指定的状态码和 message,还要熟悉 Spring Data 的写法:它能根据 Repository 接口里的方法名自动生成查询。英文区一位说,有这些框架的工作经验的话这题比较简单;但也有不熟 Spring Boot 的人,光写代码就花了 45 分钟。 - - 选 C++ 的有四篇,都没提到 web 框架。其中两篇是退货规则引擎:一篇的 bug 集中在 `parser.cpp` 和 `engine.cpp`,直接改 `engine.cpp` 时反复出语法错误;另一篇项目自带的 JSON parser 也有 bug。一篇只说先看 README、跑 `test.sh`,最后要把代码 push 上去;还有一篇说是经典 OOP 题。选 C++ 不用懂 web 框架,但要能快速读懂编译错误。【推断】C++ 版不涉及 HTTP 状态码和 ORM,对熟悉 C++ 的人来说可能更省时间,不过样本只有这四篇。 +1. 先定语言。你最熟的是 C++ 和 Java,两种的情况不同。 + - 选 Java 基本就是做 Spring Boot 的 web 后端,电影、Jira、银行几类项目都出现过。要能快速看懂 Controller → Service → Repository 这条调用链,知道怎么返回指定的状态码和 message,还要熟悉 Spring Data 的写法(它按 Repository 接口里的方法名自动生成查询)。英文区一位说有这些框架的工作经验就比较简单,也有不熟 Spring Boot 的人光写代码就花了 45 分钟。 + - 选 C++ 的四篇都没提到 web 框架。两篇是退货规则引擎,bug 在 `parser.cpp`、`engine.cpp` 和自带的 JSON parser 里。一篇只说先看 README、跑 `test.sh`、最后 push,一篇说是经典 OOP 题。选 C++ 不用懂 web 框架,但要能快速读懂编译错误。【推断】C++ 版不碰 HTTP 状态码和 ORM,对熟悉 C++ 的人可能更省时间,不过样本只有这四篇。 2. 做一遍官方的练习题(practice / sample),有楼主专门这样建议过,目的是提前摸清 AI 能问什么、不能问什么。 -3. 楼主推荐的练法是:让 AI 帮你 vibe code(用自然语言描述需求、让 AI 直接写出整段代码)一个类似的小型增删改查(CRUD)项目,在里面埋几个 bug,再照着失败的单元测试去修。时间不够的话,至少用选定的框架把「跑测试 → 读断言 → 顺着调用链找 → 改 → 重跑」这个流程走一遍。 -4. 用大屏幕。有楼主说用笔记本的小屏幕做起来很费劲。外接显示器允不允许用,看开考说明。 +3. 楼主推荐的练法:让 AI 帮你 vibe code(用自然语言描述需求、让 AI 直接写出整段代码)一个类似的小型 CRUD 项目,在里面埋几个 bug,再照着失败的单元测试去修。时间不够的话,至少用选定的框架把「跑测试 → 读断言 → 顺着调用链找 → 改 → 重跑」走一遍。 +4. 用大屏幕,有楼主说笔记本的小屏幕做起来很费劲。外接显示器允不允许用,看开考说明。 ### 0–5 分钟:读题 -先读左侧的题目描述、README 和 `PROJECT_FILES_INSTRUCTIONS.md` 这类说明文件,把三样东西抄成清单:题面列了哪几个 issue;API contract 里每种情况对应的状态码、message 原文和返回字段;以及有没有写「仓库里有无关问题,只修描述的」。后面修代码、核对返回值都要对照这份清单。 +读左侧的题目描述、README 和 `PROJECT_FILES_INSTRUCTIONS.md` 这类说明文件,抄一份清单,后面修代码、核对返回值都对照它: + +- 题面列了哪几个 issue。 +- API contract 里每种情况对应的状态码、message 原文和返回字段。 +- 有没有写「仓库里有无关问题,只修描述的」。 ### 5–10 分钟:先让测试跑起来 -- 用 IDE 菜单里的 Test(或者 `test.sh`、pytest)跑一遍,看哪几个测试失败、各报什么错。 -- 如果测试全部失败,而且报的是缺依赖、import 失败、变量找不到这类错误,就先修测试环境(可以问 AI 怎么装依赖)。上面重置密码那篇就是这种情况,修环境本身就是题目的一部分。 -- 预览页一片空白时,先别急着找 bug。截图里的 README 写着:用 Run and Debug 模式启动时,前端可能比后端(包括数据库初始化)先起来,这时页面上没有数据,等后端起来后刷新预览就好;要重置数据库,就停掉服务再重新启动。 +- 用 IDE 菜单里的 Test(或 `test.sh`、pytest)跑一遍,看哪几个测试失败、各报什么错。 +- 测试全部失败,而且报的是缺依赖、import 失败、变量找不到,就先修测试环境(可以问 AI 怎么装依赖)。重置密码那篇就是这样,修环境本身是题目的一部分。 +- 预览页一片空白时先别急着找 bug。截图里的 README 写着:用 Run and Debug 模式启动时,前端可能比后端(包括数据库初始化)先起来,页面上暂时没有数据,等后端起来后刷新预览就好。要重置数据库,就停掉服务再重新启动。 ### 10–50 分钟:逐个修失败的测试 -1. 先把失败的测试按接口分组。几个失败常常是同一个根因,比如代码里漏了 save,增、删、改的测试就会一起失败。反过来,一个「测试」里也可能包含好几个子测试(subtest)。 -2. **打开测试文件看断言(assertion)**,不要只看题面。测试可能会考题面没写的东西(比如余额不足时仍能 repay、新密码要存进 profile),从断言里也能看到 message 要照什么原文写。 -3. 顺着请求的链路找:路由有没有指到正确的 handler → handler 有没有校验参数、检查资源是否存在、检查权限 → service 里的条件判断和边界 → 查询条件和排序 → 有没有保存、有没有关联到父对象 → 返回的状态码和 body。如果报的是 500(服务器内部错误),就顺着 traceback(报错时打印的调用栈)看是哪一层抛了异常。 -4. 每修一处就重跑那一个测试,并确认跑的是新代码:先保存,需要编译的话重新编译,然后再跑。这样做是因为前面「AI 助手的实际表现」一小节里有人说过,改完代码再跑测试,跑的好像还是改之前的版本。 -5. 一个测试卡太久就先跳过去修别的,因为分数很可能是按通过的测试数算的(见上面「时间和结果」最后一条的推断)。有人只修完前两个就没时间了。 - -### 怎么用 AI(它多半不给答案,但能省找文件的时间) - -- 把失败的测试名和报错整段贴给它,问它「这个测试调的是哪个接口、处理它的是哪个文件哪个函数」「大概错在哪几行」。用英文可以这样问: +1. 把失败的测试按接口分组。几个失败常常是同一个根因,比如漏了 save,增、删、改的测试会一起失败。反过来,一个「测试」里也可能含好几个子测试。 +2. **打开测试文件看断言(assertion)**,别只看题面。测试可能考题面没写的东西(余额不足时仍能 repay、新密码要存进 profile),message 要照什么原文写也在断言里。 +3. 顺着请求的链路找:路由有没有指到正确的 handler,handler 有没有校验参数、检查资源存在、检查权限,service 里的条件判断和边界,查询条件和排序,有没有保存、有没有关联到父对象,最后返回的状态码和 body。报 500(服务器内部错误)的,顺着 traceback(报错时打印的调用栈)看是哪一层抛了异常。 +4. 每修一处就重跑那一个测试,并确认跑的是新代码:先保存,需要编译就重新编译,再跑。原因是「AI 助手的实际表现」里有人说改完再跑,跑的好像还是旧版本。 +5. 一个测试卡太久就先修别的,因为分数很可能按通过的测试数算(见「时间和结果」最后一条)。有人只修完前两个就没时间了。 + +> [!say] I'd start by running the tests and grouping the failures by endpoint, because several failures often share one root cause. Then I trace each one from the route to the handler to the query, and rerun the tests after every fix. + +### 怎么用 AI + +AI 多半不给答案,但能省下找文件的时间。 + +- 把失败的测试名和报错整段贴给它,问这个测试调的是哪个接口、处理它的是哪个文件哪个函数、大概错在哪几行。英文可以这样问: - Which file and function handle the endpoint this failing test calls? - Without giving the fix, which lines could cause this record not to be saved? - How do I return a 403 with a JSON message in Spring Boot? -- 问语法和框架的用法,比如怎么构造 response、ORM 的某句查询查的是什么。 -- 修完一个功能,问它这个功能还涉及哪些文件,防止漏改。比如评论审核那题,add 和 edit 两处都要加检查。 -- 如果它肯生成代码,自己先看一遍再贴,贴完跑测试验证。如果是只能针对选中文件提问的版本,就先在文件树里点开相关文件再问。 -- 也要做好 AI 完全没用的准备:全局搜索接口路径、message 字符串、测试里调用的函数名,一样能找到相关代码。 +- 问语法和框架用法,比如怎么构造 response、ORM 的某句查询查的是什么。 +- 修完一个功能,问它这个功能还要改哪些文件,防止漏改。评论审核那题,add 和 edit 两处都要加检查。 +- 它肯生成代码的话,自己先看一遍再贴,贴完跑测试验证。只能针对选中文件提问的版本,先在文件树里点开相关文件再问。 +- 做好 AI 完全没用的准备:全局搜索接口路径、message 字符串、测试里调用的函数名,一样能找到相关代码。 ### 最后 5–10 分钟 -- 跑一遍全部测试,确认代码能编译,也没有把原来通过的测试改坏。 +- 跑一遍全部测试,确认代码能编译,也没把原来通过的测试改坏。 - 按题面要求提交(跑 `test.sh` 的那篇 C++ 要 push)。 ## 易错点 -下表按三种来源整理:楼主实际修过的 bug、楼主给的排查清单(标「排查清单」的,是 Django 过滤排序那位列的检查项),以及题面要求;标「旁证」的来自别人的回复。排查时可以照这张表过一遍: +下表来自楼主实际修过的 bug、Django 过滤排序那位列的检查项(标「排查清单」)和题面要求,标「旁证」的来自别人的回复。排查时照着过一遍: | 类型 | 面经里的样子 | | --- | --- | -| 改了没存 | 读出 comment 改完没 save;更新只改了内存、刷新就丢;违规计数加了没 `await user.save()`;新电影没写进库;新密码没存进 profile | -| 没关联 | comment 没挂到 issue 上;帖子没按 `X-User-Id` 关联作者 | -| 状态码和 message | 违规应 403 而不是 201;未认证 401、无权限 403;资源不存在、重复添加返回规定的码;message 照 README 原文写(测试会比对 message) | -| 缺校验 | 不检查 list / movie 是否存在;用户能改别人的 comment;controller 不检查请求字段;必填字段、可选字段默认值;被锁定 / 被 flag 的用户还能操作 | -| 过滤和查询 | My Cars 没按当前用户过滤;搜索词没转小写;genre、director、writer 这类字段怎么过滤(排查清单);部分匹配、忽略大小写、只返回已发布(Spring Boot 搜索题的题面要求,楼主没说具体错在哪);SQL 要补额外条件(旁证) | -| 排序 | 排序字段、方向、tie-breaker(排查清单);按 popularity 等排序(搜索题的题面要求) | -| 比较和边界 | `==` 和 `!=` 反了;`< 0` 应为 `<= 0`;30 秒、3 分钟这类时间窗;rating、year 的边界(排查清单);「超过三次」是大于还是大于等于【推断】 | -| 没写完 | 方法直接返回 null;函数体是空的;验证码根本没生成 | -| 环境 | 测试依赖没装;url / 路由配置文件里变量缺失导致测试全部失败;改完跑测试好像还在跑旧代码(旁证) | +| 改了没存 | 读出 comment 改完没 save。更新只改了内存,刷新就丢 | +| 改了没存 | 违规计数加了没 `await user.save()`。新电影没写进库,新密码没存进 profile | +| 没关联 | comment 没挂到 issue 上,帖子没按 `X-User-Id` 关联作者 | +| 状态码和 message | 违规应返回 403,代码返回 201。未认证 401,无权限 403 | +| 状态码和 message | 资源不存在、重复添加要返回规定的码。message 照 README 原文写,测试会比对 | +| 缺校验 | 不检查 list 和 movie 是否存在。用户能改别人的 comment。controller 不检查请求字段 | +| 缺校验 | 必填字段和可选字段默认值没处理。被锁定或被 flag 的用户还能操作 | +| 过滤和查询 | My Cars 没按当前用户过滤。搜索词没转小写。genre、director、writer 的过滤(排查清单) | +| 过滤和查询 | 部分匹配、忽略大小写、只返回已发布(搜索题的题面要求,楼主没说具体错在哪)。SQL 要补额外条件(旁证) | +| 排序 | 排序字段、方向、tie-breaker(排查清单)。按 popularity 等排序(搜索题的题面要求) | +| 比较和边界 | `==` 和 `!=` 反了,`< 0` 应为 `<= 0`。30 秒、3 分钟这类时间窗 | +| 比较和边界 | rating、year 的边界(排查清单)。「超过三次」是大于还是大于等于【推断】 | +| 没写完 | 方法直接返回 null,函数体是空的,验证码根本没生成 | +| 环境 | 测试依赖没装。url 或路由配置文件里变量缺失,测试全部失败。改完跑的好像还是旧代码(旁证) | 还有几条教训: - **web 框架版的测试只看 API。** UI 上看着修好了不算数,状态码和 message 对不上,测试照样不过。 -- **测试可能比题面要求的多。** 余额不足仍能 repay、新密码要存进 profile,都是题面没写、测试里却有的,所以要先通读测试文件。 -- **测试也可能比题面要求的少。** 演员网站那位说测试没覆盖题面列出的所有 bug。【推断】分数按测试算,所以先保证测试通过,时间够的话,再按题面在 UI 上把各个功能点一遍查漏。 -- 银行反欺诈截图里那位,在 service 里调用的 repository 计数方法下面标了红线。【推断】这说明这个方法在 Repository 接口里还没声明。Spring Data 虽然能按方法名自动生成查询,但方法本身也得先在接口里写出来;IDE 标红就意味着编译不过,测试一个也跑不了。 -- C++ 退货路由引擎那位直接改 `engine.cpp` 时反复出语法错误。【推断】所以最好改一小段就编译一次,出错时容易定位是哪一处改动引起的。 -- add 和 edit(或者增、删、改)往往要加同样的逻辑,只改一处,另一处对应的测试还是会失败。 - -## 英文讲法 - -> [!say] I'd start by running the tests and grouping the failures by endpoint, because several failures often share one root cause. Then I trace each one from the route to the handler to the query, and rerun the tests after every fix. - -> [!say] The tests check the API contract, not the UI, so I read the assertions first: the expected status code, the exact error message, and whether the record is actually persisted. +- **测试可能比题面多,也可能比题面少。** repay 和新密码存 profile 是题面没写、测试里有的,所以要先通读测试文件。演员网站那位的测试又没覆盖题面列的所有 bug。【推断】分数按测试算,先保证测试通过,有时间再按题面在 UI 上点一遍查漏。 +- 银行反欺诈那张截图里,service 调用的 repository 计数方法下面标了红线。【推断】这说明这个方法还没在 Repository 接口里声明。Spring Data 能按方法名自动生成查询,但方法本身要先写进接口。IDE 标红意味着编译不过,测试一个也跑不了。 +- C++ 退货路由引擎那位直接改 `engine.cpp` 时反复出语法错误。【推断】改一小段就编译一次,出错时容易定位是哪处改动引起的。 +- add 和 edit(或者增、删、改)往往要加同样的逻辑,只改一处,另一处的测试还是会失败。
meta
@@ -1 +1,5 @@ -{} +{ + "depth_guide": "2026-10-23", + "rewritten_by": "cloud:20261026-2313", + "rewritten_at": "2026-10-27" +}