☰
AI Coding工作流实战:校招生如何在大厂高效开发
2026/10/8 3:47:35 网站建设 项目流程

1. 先交代背景:校招生的困境与我的破局思路

1.1 入职第一个月,我被真实项目"毒打"的场景

我是去年通过校招进的大厂,做的后端开发。进组之前,我自认为代码能力还行,算法题刷了不少,项目也做过几个。但真正入职之后,面对的第一个任务就让我懵了:在一个维护了五六年的老订单模块里,新增一种订单状态。

听起来不复杂对吧?但真实情况是,那个模块有几千个类,状态流转散落在不同的Service里,数据库表结构里埋了不少历史字段,还有几个定时任务在背后改状态。我需要先搞懂:当前有哪些状态、谁在什么条件下改状态、新增状态会不会影响对账、会不会影响已有的定时任务。光是理清这些,我在代码里翻了一个下午,效率低到怀疑人生。

后来我发现,不只是我,同批进来的校招生普遍都有这个问题:在学校里练的是"从零写一个系统",到了大厂却是"在一个庞大系统里做局部修改"。前者只要自己逻辑通就行,后者要求你先理解一堆别人的逻辑,再小心翼翼地改动。而理解代码,恰恰是新人最耗时间、也最容易遗漏细节的环节。

也就是这个时候,我开始认真思考怎么把AI接进我的开发流程。我当时的想法很朴素:AI最擅长的,不就是"快速处理大量文本"和"基于已有信息做推演"吗?读代码、理逻辑、找线索,这些事情正好可以交给它先跑一遍,我做校验和决策。

1.2 我理解的AI Coding工作流:不是多了一个ChatGPT,而是每个环节都有AI

很多人以为AI Coding就是"打开一个对话窗口,把问题扔进去,拿答案抄下来"。我刚入职那几周也是这么干的,结果并不理想:要么AI给的代码风格跟项目完全不一致,要么它引用了一个我们项目里根本不存在的工具类,要么它给的方案看着对,一编译就报错。

问题出在哪?出在我把AI当成一个"无所不知的答题机器",却没有给它足够的上下文,也没有把它放到一个明确的"流程位置"里。

后来我调整了思路:把开发流程拆成一个个环节——读需求、写方案、写代码、写单测、做Review、查问题,然后在每个环节里,给AI布置一个带有明确输入和输出的子任务。比如"读代码"环节,输入是一段代码文件,输出是这段代码的逻辑说明和需要注意的副作用;"写代码"环节,输入是方法签名、数据模型和项目约束,输出是可编译的代码草稿。

这样一来,AI就不再是一个飘在流程外面的聊天框,而是嵌在流程里的一个个节点。每个节点做的事情都很窄,但它能做得很稳,我只需要检查它的产出,而不是每次从零开始跟它对话。这个思路,是我整个AI Coding工作流的核心,也是后面所有经验的地基。

2. 我把AI嵌入开发流程的四个环节:从需求到上线的完整链路

2.1 需求理解与技术方案:让AI当"文档速读员"和"方案质疑者"

新人在大厂接触需求,最先感受到的往往是"文档怎么这么长"。一份PRD动辄几十页,里面有背景、有规则、有各种边界情况、还有历史决策记录。我第一次独立接需求时,光读文档就读了大半天,读完还不敢说自己全懂了,因为一些隐含的业务规则散落在评论区和旧需求邮件里。

我的做法是:把PRD的核心部分复制给AI,让它做三件事——用三句话概括需求本质、列出所有显式和隐式的验收标准、把可能影响到的现有模块列出来。AI做这件事非常快,而且它的概括能力比我这个新人强得多。它列出的验收标准里,有些是我自己读文档时忽略的边界条件,比如"超时时间从哪一秒开始计算""重复触发怎么处理"。

在技术方案阶段,我会让AI扮演"方案质疑者"。当时我在设计那个"新增订单状态"的方案时,先自己想了一个基于状态机的实现,又让AI从并发、幂等、数据迁移三个角度提出质疑。它指出了几个我没考虑到的问题,比如"状态变更和支付回调同时发生时,要不要加锁""历史订单里是否可能出现这个新状态"。这些质疑不一定都对,但确实逼着我去查证、去补全方案。我觉得这就是AI在方案阶段最大的价值:它不替你做决策,但它能帮你把思考的盲区照亮。

2.2 编码实现:AI补全、生成单测、批量重构

编码阶段是我日常用AI最多的环节,细分下来主要是三类场景。

第一类是补全样板代码。比如我要写一个"根据用户ID查询最近N条订单"的方法,我会先写上方法签名和一段注释,剩下的交给IDE里的AI补全。它通常会生成一个基本能用的实现,我再根据项目的实际情况调整查询条件和返回值。这类任务逻辑简单、模式固定,AI补全的准确率很高,能省不少敲键盘的时间。

第二类是生成单元测试。写单测是新人最容易忽略、但又必须做的事情。我的习惯是先让AI读一读目标类的代码,然后让它生成一组测试用例,重点覆盖正常路径、空值、边界值和异常场景。AI生成的测试用例不一定都能直接通过,但它的覆盖思路往往比我自己拍脑袋想出来的更全,我只需要把不合适的用例删掉、把缺少的断言补上。

第三类是批量重构。老项目里经常有"把所有StringUtil的调用替换成内部公共类"这类机械性改动。让AI去做替换,比人肉眼搜索快得多,也少了许多遗漏。我自己动手前会明确告诉AI:"只做等价替换,不改变任何业务逻辑,不顺手优化其他代码。"改完之后,我会把diff从头到尾看一遍,重点确认没有误伤。

2.3 Code Review与自测:让AI先审一遍再交给人

提交MR之前,我习惯让AI先把我的diff"审"一遍。具体做法是把改动涉及的文件和相关代码贴给它,让它重点排查几类问题:空指针、资源没关闭、并发安全、数组越界、事务边界错位。这些是代码评审中最常见的模式化问题,AI扫一遍往往能发现一些我写完代码后自己看不出来的低级错误。

有一次我写了一个异步线程池提交的任务,AI提醒我"线程池使用了无界队列,且没有拒绝策略,极端情况下可能导致内存溢出"。这个提醒点醒了我,后来我专门去查了项目里线程池的标准用法,改成有界队列加拒绝策略。那一轮Code Review,人工评审几乎没有提出线程池相关的问题。

不过我也要说清楚:AI的Code Review是"低配版"预审,它只能发现通用模式问题,理解不了业务上下文。它看不出你这个状态字段是不是和支付网关的约定不符,也判断不了这个接口的返回结构是否满足下游的兼容性要求。所以我的态度是:AI审一遍,我自己再审一遍,最后提交给人评审。它帮我挡掉一批低级问题,但"背锅"的还是我自己。

2.4 定位线上问题:把AI当成"日志分析助手"

新人最怕的就是线上出问题,一收到告警就慌。我后来慢慢总结出一个相对稳的排查流程:先把异常堆栈、相关代码片段、最近的改动记录这三样东西收集起来,然后一起扔给AI,让它帮我梳理可能的原因。

有一次线上出现偶发性的空指针,堆栈指向一个异步回调方法。我没看懂调用链是怎么走到那里的,就把堆栈和附近的代码贴给AI,它分析说:"这个对象在主流程里已经走完了生命周期,异步回调拿到的可能是一个已经被释放的引用。"我顺着这个思路去查,果然发现回调没有做判空保护。那次排查比我对着堆栈干瞪眼高效太多了。

但这里有个重要的提醒:AI给的是假设,不是结论。它经常给出三四个可能原因,里面第一个看起来最合理,但实际可能不是。我会把每个假设当成一条"待验证线索",逐一用日志和代码去确认,而不是看到第一个原因就下结论。排查线上问题,AI负责把搜索空间缩小,做最终判断的依然是人。

3. 大厂环境下的AI Coding选型:合规、效率与成本的三方平衡

3.1 为什么我几乎不用"外网AI"处理公司代码

大厂对信息安全的要求非常严格,公司的代码、业务数据、用户信息都属于内部敏感信息。把一段包含业务逻辑的代码原封不动贴到一个外部公开的AI网站里,这个动作本身就有很大的合规风险。刚入职的时候组长就专门提醒过:不要图方便用外网AI处理公司代码,出了问题追责不是开玩笑的。

所以我的基本原则是:优先使用公司内部统一接入的AI能力,比如内部平台提供的代码助手、IDE插件。这些工具的数据链路经过了合规审批,代码不会流出公司边界。如果某个场景确实需要用外部模型,我也会先做脱敏处理:去掉真实的业务名词、变量名、注释,只保留问题的通用结构。

这里我也特别想提醒一些刚入职的同学:不要因为外部AI工具用起来顺手,就忽略公司的信息安全红线。你觉得自己只是"问一个问题",但在审计视角里,这就是"敏感代码外发"。我在团队里见过因为随手贴代码被通报的案例,真的很不值。

3.2 团队常用的三类AI Coding工具怎么选

我在实际工作中,观察和接触到的AI Coding工具大概分三类,各有各的适用场景:

工具类型典型形态优势需要注意的点
IDE插件编辑器内的代码补全、对话框与编码流程结合紧密,补全体验好通常不支持超长上下文,对老项目的背景理解有限
内部AI平台网页端或命令行工具功能全,支持长文档、长上下文,可以喂入多份代码文件需要在工具和编辑器之间来回切换,流程感稍弱
私有化部署的开源模型本地或部门内网部署数据可控,可以针对项目做微调工程成本高,需要维护,非大团队一般玩不转

以我的实际体验来说,日常写代码最顺手的是IDE插件,因为它就在你写代码的地方,补全和基于选区对话都非常自然。但到了"解读整个模块""梳理完整调用链"这种需要大上下文的场景,IDE插件就明显吃力了,我会改用内部AI平台,把相关文件一次性喂进去。所以我的做法不是"只认一个工具",而是根据任务大小选择合适的工具。

3.3 我给自己定的"红绿灯"使用原则

接触AI Coding久了之后,我给自己定了一套"红绿灯"使用原则,用来快速判断一个任务能不能交给AI:

  • 绿灯任务:通用算法题、学习示例、正则表达式、SQL生成、单元测试草稿、模板代码。这类内容不涉及具体业务,可以放心让AI发挥。
  • 黄灯任务:涉及业务逻辑的代码、稍大一点的方案设计。我会先把关键信息脱敏,或者只给AI抽象后的伪代码,让它生成草稿,再由我结合真实业务改写。
  • 红灯任务:包含密钥、token、真实用户数据、核心交易逻辑的原始代码。这些绝对不会出现在任何外部工具的对话框里。

这套原则帮我省了很多纠结的时间。遇到一个任务,先看它属于哪个颜色,再决定给AI多少信息。不要一概而论地"全部给"或者"全部不给",那样要么低效,要么危险。

4. 提示词工程的"开发态"玩法:不是聊天,是写代码

4.1 为什么开发态提示词不能照搬聊天惯用法

很多人跟AI对话还停留在聊天习惯上:"帮我看看这个""这个怎么改"。但到了开发场景,这种模糊的对话方式会吃大亏。因为AI不知道你的项目背景、不知道代码风格、不知道你想要的输出形式,它只能靠"猜",而猜出来的结果往往就是"看起来合理但没法用"。

我自己的理解是:在开发流程里,应该把AI当成一个"刚入职的外包同事"。你把任务交给一个外包同事之前,是不是要交代背景、目标、约束和交付形式?对AI也是一样。背景告诉它项目用什么框架、什么语言;目标告诉它要做什么;约束告诉它什么不能做、要符合什么规范;交付形式告诉它"给我方法实现和简要说明"还是"给我一个完整的测试类"。

把这个思路想清楚之后,我写提示词的方式就彻底变了。不再说"帮我写个查询",而是像下工单一样把任务描述完整。AI的产出质量也随之提高了一大截。

4.2 一套我反复用的代码生成提示词模板

下面这套模板是我用得最多、成功率最高的,分享出来供参考:

背景:项目是Java 8,Spring Boot 2.7,MyBatis,数据库MySQL。 任务:在OrderMapper中新增方法,查询某用户最近N条未支付订单,按创建时间倒序。 输入:OrderDO字段包括id、userId、status、amount、createTime;OrderMapper现有查询风格见下方代码。 约束: 1. 不改变现有接口签名,不新增依赖; 2. 使用项目已有的日志框架,不自行引入; 3. 遵循现有Mapper的XML写法,不要用注解SQL; 4. 只提供方法实现和对应的XML片段,不解释原因。 输出:方法代码 + XML片段。

这套模板的关键在于把"背景、任务、输入、约束、输出"五个要素都填满了。尤其是约束这一栏,很多人会忽略。你不说"不要引入新依赖",AI就真的可能顺手给你引一个commons-lang3;你不说"遵循现有XML写法",它就可能给你写注解SQL,跟项目习惯完全不一致。

还有一种情况,项目里已经有类似的方法,那我会直接把那一段代码贴进提示词里,告诉AI"仿照这段的风格写新的"。这比任何口头描述都管用,因为代码本身就是最好的风格说明书。

4.3 上下文注入技巧:把"项目语境"喂给AI

AI在代码生成上最大的短板是"不了解你的项目语境"。同样是"查询订单",它不知道你的订单状态字段有哪些取值,不知道你的软删除规则,不知道你的分页规范。如果你什么都不给,它只能凭常识猜,猜错是大概率事件。

解决这个问题的方法是"上下文注入":在提问或生成代码之前,先把相关的上下文喂给AI。具体有这么几种做法:

第一种,使用IDE类工具提供的文件上下文功能,比如通过@文件的方式把相关文件引入对话。这样AI在生成代码时,能看到你正在操作的项目文件,生成的代码风格会贴近项目实际。

第二种,手动摘录关键信息。如果工具不支持文件引用,我会把相关的类定义、接口方法签名、数据库字段列表复制进提示词,让AI基于真实结构去写代码。哪怕只是粘贴几个关键类,效果也比空手提问好得多。

第三种,让AI"先读再写"。我在需要AI理解现有逻辑时,会先给它几个相关文件,指令是"先阅读以下代码,理解现有逻辑,然后……"。这样做可以让AI先建立对项目的认知,再在这个基础上完成任务。我自己试下来,这一道工序能让代码生成的质量明显提升,尤其是涉及多文件联动的改动。

5. 实测踩坑记录:AI生成的代码为什么不能直接信

5.1 幻觉高发区盘点

AI生成代码不是不出错,而是出错的方式很有迷惑性。我整理了自己踩过的和一些同事遇到的坑,发现幻觉集中在这几类:

第一是"不存在的API"。AI会编出一个看起来很像标准库但实际不存在的方法,或者把某个类名写得很真,但一编译就报"找不到符号"。这类错误相对容易发现,因为编译是第一道关卡。

第二是"错误版本的依赖坐标"。比如让AI写一个使用Redis的工具类,它可能给你一个org.redisson:redisson:2.9.0这样的坐标,看起来没问题,但实际这个版本跟我们项目用的Spring Boot版本不兼容。这种坑比不存在的API更隐蔽,因为依赖能拉下来,启动才会报错,排查起来很费劲。

第三是"过时的用法"。AI的知识有截止日期,它可能还在推荐十年前的老写法。比如在Java里用Vector、在Spring里用已经被废弃的@Autowired构造器注入形式,或者在MyBatis里写早就被淘汰的配置方式。这些代码在单测里可能都是绿的,但Code Review阶段会被有经验的同事打回去。

5.2 翻车案例:AI"修复"了一个根本不存在的问题

有一次,我把一段自己刚写完的工具类代码贴给AI做Code Review,它很认真地指出了一个"严重的线程安全问题",说这个静态方法里使用了SimpleDateFormat,存在线程安全风险,建议换成DateTimeFormatter或ThreadLocal。

我一开始真被它说服了,因为SimpleDateFormat线程不安全是个经典问题。我还仔细检查了那段代码,确认确实用了SimpleDateFormat。但后来准备改的时候,我又重新读了一遍调用方,才发现问题所在:这个方法每次调用都会new SimpleDateFormat,并不会跨线程共享实例,所以根本不存在它说的线程安全问题。

这个翻车案例给我的教训很深:AI的Review会基于"常见代码模式"来臆想问题,而不是基于"这个项目的实际运行方式"来判断。它看到SimpleDateFormat就想到了线程安全,但它没注意到实例作用域。从那以后,我再也不无脑接受AI的Review意见了。每个问题都必须回到代码里核实一遍,确认它说的是不是真的。

5.3 翻车案例:注释风格的"污染"

还有一个看上去不算bug但实际很烦人的问题:AI生成的注释风格,会在不知不觉中"污染"整个代码库。

我有一段时间图快,让AI批量生成了一些工具方法和测试代码,当时觉得挺省事。结果交上去做Code Review,同事在diff里圈了好几个地方,不是逻辑问题,而是注释问题:AI生成的中英文夹杂注释、一行空一行再注释、写了大量重复无意义的JavaDoc。同事直接问了一句:"这代码不是你写的吧?"然后要求我把所有注释改成项目统一的风格。

这件事让我意识到,代码风格也是团队规范的一部分。AI默认生成的注释常常过于啰嗦、格式夸张,跟老项目的习惯格格不入。从那以后,我在提示词里都会加一句"注释风格与现有代码保持一致,不写多余注释",并且提交之前专门扫一遍AI改过的注释,该删的删、该改的改,免得给评审同事留下不好的印象。

5.4 我的三层防线:编译、单测、人工Review

踩了这么多坑之后,我给自己定了一套固定的三层防线,所有AI生成或辅助编写的代码,都要过了这三道关才算完成。

第一层是编译和构建。AI生成的代码,必须在我本地能编译通过、能启动起来。这一步能挡掉大部分不存在的API、错写的类名、漏掉的import。虽然低级,但这是最基础的保底。

第二层是单元测试。AI生成的业务代码,我一定会让AI顺便生成一组覆盖关键分支的单元测试,然后手动补充边界条件。测试过了,代码大概率是正常跑的;测试写不出来,那说明代码本身可能有问题,我会回头重新审视。

第三层是人工Review。我会把AI生成的改动当成"一个刚入职同事提交的草稿",带着审视的眼光从头到尾检查一遍。重点看边界条件、异常处理、架构一致性、以及是否引入了不必要的依赖。

说白了,AI负责"数量",我负责"质量"。它帮我快速生成60分的代码,再由我把它提到80分、90分。如果指望它直接交付90分的代码,那大概率是要翻车的。

6. 新人搭AI工作流的三个建议:从"能用"到"好用"

6.1 先固定环节,再优化效率

很多新人拿到AI工具之后,第一个想法是"我要找到最牛的提示词"。但我的建议恰恰相反:先别急着优化单次对话的效率,先把整个开发流程梳理清楚。

我是这样做的:把一次完整的需求开发拆成固定的清单——读需求、提取要点、写方案、实现代码、写单测、自测、提交评审。然后,在每一个环节旁边标注一个"AI可用点",写明这个环节里AI可以做什么、需要给它什么输入、期望它输出什么。比如"读需求"环节,输入是PRD文本,输出是需求要点和风险点;"实现代码"环节,输入是方法签名和约束,输出是代码草稿。

把流程固定下来之后,你会发现每个环节的AI调用变得很机械、很稳定,质量自然就稳了。这时候再去做效率优化,比如改进某一个环节的提示词模板,就能看得到明显的效果。先跑通流程,再跑得更快,这个顺序不能反。

6.2 维护自己的"AI命令集"

用久了之后,我把自己经常用到的AI任务整理成了固定"命令",每个命令背后都对应一套完整的提示词模板。比如:

  • /explain:解释一段代码,输出逻辑说明、关键变量、潜在问题。
  • /test:根据一段代码生成单元测试,覆盖正常、边界、异常场景。
  • /review:对一段diff做预审,重点检查空指针、并发、资源释放等问题。
  • /fix:根据报错信息和相关代码,给出修复建议或直接修改。

每个命令我都在自己的笔记里存了固定的模板。这样每次使用,我就不用重复组织语言,直接套模板、填具体内容就行。这个动作看起来简单,但长期积累下来,节省的时间非常可观。

更重要的是,这个命令集是"活"的。我每个月会整理一次,把哪些命令效果好、哪些命令经常翻车记录下来,效果不好的就改进模板,或者干脆废弃。半年下来,整个工作流会越来越顺手。

6.3 把踩坑心得变成团队文档

最后这个建议,是我觉得对新人最有长期价值的一件事:把你在AI Coding过程中踩过的坑、验证过好用的模板、总结出来的原则,沉淀成文字,放到团队Wiki里。

我在入职第四个月左右,花了一个晚上把《AI Coding使用建议》整理了出来,内容包括:哪些场景适合用AI、哪些场景坚决不能用、我常用的几套提示词模板、几个典型的翻车案例。一开始我还担心写得不专业,但后来团队里来了新的实习生和校招生,他们看到这份文档之后,少走了很多弯路。组长也因为这个事对我的印象分增加了不少。

我觉得这就是AI Coding时代新人可以建立的一个独特优势:你可能写业务代码的经验不如老同事,但在"怎么高效、安全地使用AI辅助开发"这件事上,你完全有机会成为团队里最熟的人。把这些经验固化成文档,既帮了别人,也帮了未来的自己。

说到底,AI Coding带给我的不是"写代码更快"这么简单。它让我这个经验不足的校招生,在处理老项目、面对复杂需求时,有了一份额外的底气。我始终记得一句话:AI是我的外包队友,而我才是那个要对最终结果负责的工程师。把这句话想清楚,你就能在AI时代和所有新人拉开差距。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询