2027暑期-腾讯微信小店一面
AI编程里面怎么固化对生成代码的基本要求(例如不能使用魔数、圈度复杂度低于10、函数行数小于300、一行长度小于80等)
核心不是让它记住规则,而是把规则做成它每次都会调用的能力
1)System Prompt / 自定义指令
把规范直接写进系统级指令里,作为默认行为。例如:必须避免魔数、函数不超过 300 行、单行不超过 80 字符、圈复杂度不超过 10。 这是最基础的一层,但单靠它不够稳。
2)Skill / 项目级规则包
如果工具支持 Skill、Project Instructions、Rules、Custom GPT Instructions 这类能力,就把“代码规范”做成一个可复用包。 里面放三样东西最好用:
- 规范文本:风格、复杂度、命名、魔数等
- 示例:什么算合格、什么算不合格
- 检查清单:生成后必须自查哪些项
这样 AI 每次接任务时,不是临时记规则,而是直接加载这套“技能”。
3)RAG / 知识库引用
把团队代码规范、最佳实践、禁用项放到知识库或项目文档里,让 AI 生成前先检索再写。 适合规范很多、经常更新的场景。 它的作用是:AI 不是“猜规则”,而是“查规则”。
4)工具调用 / Function Calling
这是最关键的一层。 让 AI 生成代码后,自动调用这些工具去检查:
- lint
- 复杂度分析
- 行长度检查
- AST 规则检查
- 魔数检测
AI 看见检查结果后,再自动修正。 这就把“靠自觉”变成“可执行约束”。
5)多轮代理流程(生成 → 审查 → 修复)
把 AI 拆成三个角色更稳定:
- 生成 Agent:先写代码
- 审查 Agent:专门挑毛病
- 修复 Agent:根据审查结果改代码
这类流程特别适合你说的这些硬指标,因为它天然适合做“二次约束”。
6)结构化输出 / Schema 约束
如果工具支持 JSON schema 或固定格式输出,可以让 AI 先输出:
- 代码
- 自检结果
- 风险点
- 是否满足规范
这样你就能让它“先说检查结论,再交代码”,减少漏项。
7)Few-shot 示例
给 AI 看几组“合格代码”和“违规代码”的对照样例。 这对“不要用魔数”“函数拆分”“复杂度控制”很有效,因为它会模仿你给的风格。
如果你真想在 AI 编程里固化这些要求,最稳的是: Skill / 项目规则包 + 知识库 + 工具调用校验 + 生成后自动修复
一句话理解就是: 规则靠 Skill 统一,知识靠文档补充,质量靠工具验证,最终靠 AI 自动改回去。
你可以直接这样设计一套 AI 编码能力 把它拆成四个角色最清楚:
- 规则加载:读取 Skill / 项目规范
- 代码生成:按规范写代码
- 自动审查:调用 lint / complexity 工具
- 自动修复:发现问题就重写
这样 AI 不是一次性出结果,而是一个闭环。
AI编程里面让AI修改的时候不影响以前的业务逻辑,只修改需要修改的
问题本质是:怎么让 AI 做“最小侵入修改(minimal diff)”,而不是整段重写。 实现上要靠“约束修改范围 + 强制对比 + 分阶段修改”。
1)不要让 AI“直接输出完整代码”,而是要求: 方式1:只输出 diff(强烈推荐) 方式2:只输出“修改片段” 避免: “请帮我优化这段代码” → 100%会重写 “给我更好的实现” → 逻辑可能变
2)在 prompt / skill 里加这种规则:
1 | 修改代码时必须遵守: |
3)让 AI 先“理解影响范围” 增加一步:
1 | 步骤: |
4)两阶段执行(最稳)
不要一步改完,拆成两步:
第一步:分析 让 AI 输出:修改点在哪、是否影响现有逻辑、修改范围、风险点
第二步:再改代码
AI 会“先思考再动手” 修改更保守
5)加“对比校验”
让 AI 自己做 diff 检查(让 AI 自己当 reviewer):
1 | 请对比修改前后代码: |
6)AST / 结构感知编辑
AI 只修改语法节点,而不是文本
7)codebuddy插件的功能(局部编辑、inline edit、apply patch)而不是“生成整文件”
Redis里面的key会不会越来越多,怎么清理
过期策略:由于 Sorted Set 的 member 无法单独设置 TTL,采用以下策略:
- 查询时清理:每次查询前执行 ZREMRANGEBYSCORE key 0 <7天前时间戳>
- Key 级别 TTL:设置 8 天过期,作为兜底清理不活跃 key
- Lua 脚本原子操作:将清理、查询、写入合并,减少网络往返
每次启动服务的时候Redis会不会要重新拉MySQL离线表数据,Redis是从消息队列里面拉去最新的告警吗?
需要抢一个分布式锁,抢到分布式锁的服务会启动两个线程:消费线程和同步线程,没抢到分布式锁的服务会启动一个消费线程。 同步线程分批同步数据,没数据需要同步后会释放分布式锁。保证同时只有一个线程在同步数据。
每次启动服务是Redis内部会有老数据,同步数据时会重复需要去重,根据 模块名+监控id+告警的时间戳 去重
需要重新拉取MySQL离线表数据,Redis会从消息队列中拉取最新的告警数据。
冷启动,启动消费线程和同步线程双线程,同步需要消耗一段时间,这时MySQL里面一直增加数据,消息队列也来数据了,怎么保证数据不重复?
会出现数据重复。根据 模块名+监控id+告警的时间戳 去重。
- https://www.notion.so/Redis-314254b59a8380878cade73c89631ef7
当前存在一个告警消息队列,承载着告警事件的实时流转。有一个服务持续消费该队列,并将消息写入数据库的表中进行持久化存储。约2000万条
需要开发一个新的告警分析服务,该服务需要:实时消费消息队列中的告警消息;判断每条告警是否在最近7天内出现过;如果出现过,分别是哪些天出现过;将判断结果写入新的表中供后续业务使用
备注:线程1(消费线程)在冷启动期间,由于redis中没有最近7天的历史告警信息,可能会有短暂的窗口期,只能当作是首次出现告警。

