面经
面经
来自 linux.do 这篇面经。候选人面的是 Agent 岗位,有些轮次转到了前端和全栈。Agent 题在前,编号从 121 续到原题库 120 之后。后半是同一篇里的其他轮次,题干带「非Agent」。
已经在 001–120 里答清楚的,这里只指向原题,并补上这篇面经的问法。日活、Token、降本百分比都不给可以背的数字,面试用自己系统里的口径。
系统在做什么
121 · 难 · 这个 AI 系统主要是做什么的?用途和用到的技术怎么讲?
来源:面经(linux.do)· ML、YF、YU
用四句讲完,不要从框架名讲起。
- 谁在用,原来这件事怎么做。
- 系统接过哪一段,哪一段仍由人做。
- 技术只留四样:模型、检索、编排、渠道。每样说一个具体选择。
- 用一个真实请求走完:用户说了什么,系统查了什么,最后交付什么。
YF 会追「用了哪些技术」,就把第 3 句展开。YU 会追「核心项目」,就停在一个系统上,不要把简历里所有 AI 名词串一遍。没有上线过,就说练习或课程项目的边界,不要安一个用户规模。
122 · 难 · 介绍一下你的 AI 项目架构。从架构上看分成哪些层?
来源:面经(linux.do)· JR、YC
一层只做一件事,层和层之间传结构化状态。
- 接入:渠道、身份、限流。
- 路由:这句话该走固定流程、检索,还是人。
- 编排:状态、循环、停下来的条件。
- 能力:模型、检索、工具。业务代码不直接调用某一家 SDK。
- 输出:给人看的文本、给系统的结构、流式通道。
- 运行:日志、评测、预算。
YC 问的「分成哪些层」用这六层。JR 问的「架构情况」再补一条真实请求怎么穿过它们。见现有题目「015」的状态机;这篇面经要的是整条链路,不是编排器内部那一张表。
123 · 难 · 如果做一个门店的 AI 数字化系统,模块、数据流和技术选型怎么拆?
来源:面经(linux.do)· YC
先把账和对话分开。库存、会员、班次、收款是业务系统,要事务。模型适合接待、把口语问题变成查询、在活动规则内起草推荐。下单和改库存要人确认,或者走原来的交易接口。
数据流:门店系统同步商品、库存和活动到可查询的存储;对话进来先认身份和门店,再决定是查库还是检索文案;回答或草稿回到店员,确认之后才写交易。
选型按规模说。模型用项目已经允许的国内 API 或内网模型。商品和库存仍以关系数据库为准,向量只放活动说明、话术和 FAQ。门店数据量通常不必上分布式向量库。编排用明确状态,直线流程不必上多 Agent。
124 · 难 · 怎么推动一套 AI 系统落地?
来源:面经(linux.do)· PY
落地顺序是:挑一个重复、可判定对错的任务 → 用现有数据做离线集 → 小流量和人工对照 → 再扩大工具权限。
推动靠一个业务方能看懂的指标,例如一次解决、转人工、引用能不能点开。没有这个指标,系统只能停在演示。权限从只读开始,写操作单独立项。见现有题目「027」讲价值怎么分期;这题要讲你本人怎么把第一版送进真实流量。
125 · 难 · 产品面向哪些用户,整体功能架构是怎样的?
来源:面经(linux.do)· YU
见现有题目「114」和本题「121」。YU 这问把「用户」和「功能」拆开:用户是谁,决定知识库范围和工具权限;功能按任务列,不按技术组件列。内部员工和外部客户如果共用一个入口,要说明检索隔离做在哪一层。
126 · 中 · 有没有自主设计过智能体?具体怎么实现?
来源:面经(linux.do)· YU
见现有题目「001」和「015」。这题在问是不是你设计的。回答落在三件事上:循环怎么停、状态放在哪、工具的边界是什么。只接过聊天 API,就直接说那是一次调用,不是智能体。设计过,就拿一个请求讲清从意图到工具再回到回答。
框架选型
127 · 中 · LangChain / LangGraph 主要用了哪些技术?
来源:面经(linux.do)· ML
LangChain 提供的是组件和连线:消息、提示模板、检索器、工具、LCEL 把这几段串成一条可调用的链,模型 I/O 和文档加载也在这里。它本身不是一种新的模型技术。
LangGraph 提供的是带状态的图:节点是一步,条件边决定下一步,检查点把状态存下来,于是循环、分支、人工暂停和失败回退能写在图上。
面试时按你项目里真正用到的说。用了检索器和工具调用,就说 RAG 和 Function Calling 落在链上。用了图,就说状态字段有哪些、哪条边会回到上一节点。不要把「用了 LangChain」说成用了一种独立的 AI 算法。
128 · 中 · 为什么选 LangChain、LangGraph?依据是什么?
来源:面经(linux.do)· JR
依据是控制流,不是流行程度。
直线流程用 LangChain 的链:检索、拼提示、生成、解析。步骤事先能写完,就不要上图。
出现循环、按结果分支、做完要人点头、中断后还要接着跑,用 LangGraph。这些若写在提示里,失败时没有位置可查。图的代价是多一层抽象,也要有人维护状态字段。
见现有题目「006」和「012」。006 比的是 LangChain 和 LlamaIndex,012 是编排框架和数据框架。这题是链和图怎么选。RAG 为主、几乎不循环,LlamaIndex 或一层薄封装就够,不必为了「Agent 项目」先引进整套 LangChain。
129 · 中 · LangChain 不同版本、不同模块有什么区别?
来源:面经(linux.do)· HQ
现在拆成多包。langchain-core 放 Runnable、消息和工具这些抽象。langchain 放链和少量高层封装。langchain-openai 这类合作方包负责一家模型的字段。langchain-community 是社区集成,质量不齐,核心类型不要从那里引。
老版本把 Agent、Chain 放在一个大包里。后来主流是 LCEL,用组合把提示、模型、解析器连起来。LangGraph 是另一个包,状态图不在核心链里。
面试要点:锁版本;升级时先看导入路径和 Agent API 有没有换;一个项目里不要同时维护两套 Agent 抽象。版本差异是工程事实,不要背一个已经过期的小版本号当结论。
通用 Agent 与分层
130 · 中 · 有没有了解过 Manus 这种通用 Agent?
来源:面经(linux.do)· ML
Manus 这类产品面向开放任务:自己拆目标,用浏览器、代码和文件把事情做完,中间产物看得见。它不是聊天窗口加一个知识库。
能力主要来自环境和工具,模型负责下一步。业务客服通常不需要一台通用电脑,需要的是权限收紧的少数工具。了解它,是为了分清「通用执行体」和「业务代理」,不是为了在项目里复刻一个 Manus。
131 · 中 · 这类通用 Agent 一般分几层?
来源:面经(linux.do)· ML
对外产品不一定用这些名字。面试时按职责分,并说明每一层失败时长什么样。
- 任务:目标和怎样算做完。
- 规划:步骤,允许按观察改。
- 执行:浏览器、代码、文件、API。
- 状态:做到哪一步、产物在哪、哪些事实已经确认。
- 约束:权限、预算、何时停、何时问人。
层数不是成绩。少一层的后果要能说清:没有状态层,重启就失忆;没有约束层,通用工具会做超出业务的事。见本题「122」是业务系统的分层,这题是通用执行体的分层。
132 · 中 · Harness 是什么?
来源:面经(linux.do)· HQ
Harness 是包在模型外面的运行时。模型决定下一步,Harness 负责组装上下文、执行工具、记录轨迹、在超限或危险动作时停下来。
可以把它看成一台很小的机器:模型是计算,上下文窗口是紧张的内存,工具是外部设备。Harness 做的是配额、换页、检查点和权限,不是再训一个模型。
窗口快满时,完整轨迹留在外面,提示里只放当前目标、硬约束和这一步要的证据。压缩只是缓存,原始事件还在。发邮件、改数据这类动作带幂等键,恢复之后不会再做一遍。见现有题目「024」是循环怎么停;Harness 把停止、压缩和工具安全放在同一层。
多 Agent
133 · 中 · 有没有构建过多智能体架构?
来源:面经(linux.do)· ML
见现有题目「008」和「016」。这题先回答有或没有。
有:每个角色的输入输出是什么、谁负责汇总、一个角色失败时任务会不会停。没有:说明当时工具数量和流程还用不上拆分,以及你心里的拆分门槛。不要为了这题临时把一个提示里的几段人设说成多 Agent。
134 · 易 · 什么是多 Agent?
来源:面经(linux.do)· ML
见现有题目「008」。这篇问法更短。多 Agent 是多个各自有指令、工具和上下文的循环,靠消息协作。一个模型在一次提示里扮演几个角色,仍是单 Agent。
135 · 中 · 为什么需要多 Agent?
来源:面经(linux.do)· ML
见现有题目「008」。优势用分工、并行和失败隔离来答。紧接着补代价:通信、汇总和「到底是谁错了」。只讲优势,这题只答了一半。
136 · 中 · 什么场景下需要多 Agent 架构?
来源:面经(linux.do)· ML
见现有题目「016」。场景看三件事:工具是否多到选不准、知识库和权限是否必须隔开、子任务能否并行。三条都不沾,就保持单 Agent。
137 · 中 · 单个 Agent 也可以分配多个职能,为什么还要多 Agent?
来源:面经(linux.do)· ML
见现有题目「016」。这篇的新角度是:职能写进同一份提示看起来更省事。它先坏在上下文和工具选择,而不是坏在「角色不够多」。指令互相打架、工具描述占满窗口、改一个职能碰到另一个职能,这三件出现再拆。拆开之后要付通信和超时的成本,所以拆分是门槛,不是默认值。
138 · 中 · 多 Agent 主要是为了解决什么问题?
来源:面经(linux.do)· ML
见现有题目「008」。要解决的是耦合:上下文太挤、工具选错、权限不能混在一个循环里。不是为了架构图更好看,也不是为了让每个业务名词都有一个 Agent。
139 · 中 · 多智能体里,动态路由怎么按条件把任务分到不同分支?
来源:面经(linux.do)· HQ
路由看状态,不看一句「你自己选一个同事」。状态里至少有意图、置信度、缺的槽位、上一个工具是否失败。
条件写在图的边上。例如:有订单号的查询进订单 Agent,知识问答进检索 Agent,置信度不够就追问或转人。互不依赖的分支可以并行,汇合点再汇总。失败回到主管,不要让子 Agent 自己再去呼叫另一个子 Agent,否则环不好发现。
见现有题目「016」和「017」。016 讲何时拆,017 讲意图从哪来。这题讲分支条件放在哪。
用量、Token 与成本
140 · 难 · 系统之前的用户量、日活怎么讲?
来源:面经(linux.do)· ML
面试前从统计里抄数,并准备口径:日活是登录用户、发起过对话的用户,还是任一请求。周期说明是上线后哪一段时间。没有生产流量,就说没有,改讲离线集的条数或内测人数。这里不提供一个可以背的日活。
141 · 难 · Agent 的使用量怎么讲?
来源:面经(linux.do)· ML
先定义「一次使用」:一次会话、一轮模型调用,还是一次完成的任务。三者可以差一个数量级。准备会话数、平均轮次、工具调用次数。和日活一起讲时说明分子分母。没有埋点就不要估一个整数。
142 · 难 · Token 消耗量大概多少?个人一个月大概多少?
来源:面经(linux.do)· ML、HJ
准备三列:输入、输出、调用次数,再按模型分开,因为单价不同。系统用量和自己写代码的用量分开报,HJ 问的是个人。输出以供应商账单为准,输入可以本地估算,两者不要加总后假装精确。没有账单,就说没有统计。见现有题目「082」是计数怎么实现;这题是你报哪一个数。
143 · 中 · 有没有考虑过节约 AI 成本?做了哪些方案?
来源:面经(linux.do)· ML
见现有题目「062」。方案按杠杆从大到小说:简单请求不要走最贵的模型,检索片段和历史不要整段塞进窗口,重复问题走缓存,输出长度封顶。这篇面经要你讲自己系统里动过的那一两项,以及质量指标有没有一起看。不要背题库里另一套系统的金额。
144 · 难 · 最终降了多少成本?投入前后的收益有多少?效率提升按百分比怎么说?
来源:面经(linux.do)· ML、HJ
见现有题目「120」的分法:成本是人、模型和机器,收益是省下的人工、剩下的人变快、以及你能证明的业务结果。百分比必须有前后口径和同一时间窗。
没算过就说没算过,并说明要补哪两个数才能算。效率提升同样要有对照,例如同一类需求的周期或返工次数。感觉「快了很多」不能报成一个百分比。本文不给降本比例。
Claude Code 的循环与上下文
145 · 中 · Claude Code 的多层架构是怎么做的?
来源:面经(linux.do)· KJ
按职责看,不必背内部文件名。
- 交互:命令行或编辑器里的会话。
- 循环:调用模型、执行工具、决定还要不要再来一轮。
- 工具:读文件、改文件、搜索、跑命令,以及接进来的 MCP。
- 上下文:系统说明、项目规则、对话、工具结果、压缩后的历史。
- 权限:哪些命令可以直接跑,哪些要人确认。
层与层的契约是:循环不自己实现业务,工具不决定任务是否完成,权限不靠提示词恳求。见本题「132」的 Harness;Claude Code 是这个运行时的一个产品形态。
146 · 中 · Claude Code 源码泄露这件事,你怎么看?有没有研究过?
来源:面经(linux.do)· JR
公开讨论过源码泄露。面试要的是你能不能把循环和上下文讲清楚,不是复述泄露仓库的路径。
研究过,就说对照的是公开行为和文档:模型提出工具调用,运行时执行,结果写回,直到停止。没有读过源码,就直接说没有,改讲你自己用它时观察到的压缩和工具确认。不要把泄露材料当生产依据,也不要声称记得未公开的内部实现。
147 · 中 · Claude Code 的上下文治理是怎么做的?
来源:面经(linux.do)· JR
常驻的是系统说明和项目规则(例如仓库里的说明文件)。对话和工具输出会涨。
治理就三步。大的工具输出截断,留下路径,需要时再读。窗口变满之前压缩旧轨迹,压缩结果写明目标、约束、已做决定和未完成事项。原始轨迹仍留在外面,摘要只是提示里的缓存。子任务用单独的上下文,只把结论交回主会话。
见现有题目「073」和「078」,以及本题「156」。073 是对话系统的四层预算,078 是摘要阈值。这题的产品做法是:规则常驻、大输出外置、压缩可回退。
148 · 中 · Claude Code 的核心循环是什么?
来源:面经(linux.do)· JR
组装这一轮上下文,请求模型。模型若给出工具调用,运行时执行工具,把结果作为观察写回,再请求。直到模型不再要工具,或轮次、时间、token 到达上限。
危险或不可逆的命令先问人。上限写在循环里,不写在「请不要死循环」这句提示里。见现有题目「002」和「024」。002 是 ReAct 的形状,024 是停止条件。Claude Code 的差别是工具就是这台开发环境,观察往往是文件和命令输出。
RAG:流程、速度、准确性
149 · 易 · 简单介绍一下 RAG 的流程。检索是怎么做的?
来源:面经(linux.do)· JR、TK
见现有题目「030」。离线是加载、切块、嵌入、入库。在线是查询、召回、可选的重排、把片段和问题一起交给模型。TK 若只问检索,就停在召回和重排,不要把生成也讲完。
150 · 中 · 怎么加速 RAG 的检索?
来源:面经(linux.do)· JR
先量时间再改。检索慢通常不是模型生成慢。
索引和过滤先做:按租户、文档类型缩小范围,再做向量或关键词搜索。嵌入只在入库和查询时算,不要每次把库重嵌一遍。多路召回并行。热门问可以缓存召回结果。重排只对前几十条做,极低延迟的路径可以关掉重排,用召回换时间。
见现有题目「063」和「081」。063 是整条链路的延迟,生成常常才是大头;081 是并行。这题只承诺检索这一段能省的时间。
151 · 难 · 向量库目前的数据量怎么讲?
来源:面经(linux.do)· JR
准备三个数:原文多少、切块多少、向量维度和大概体积。并说明是文档数还是 chunk 数。增长说增量:每天新增多少、全量重建要多久。没有生产库,就报实验数据的规模,并说明它还不能代表线上。不要借一个「百万级」当自己的数。选型见现有题目「042」。
152 · 中 · 向量库用的是什么?选型依据是什么?检索用什么模型和工具,效果怎么看?
来源:面经(linux.do)· JR、HQ、YU
见现有题目「042」「044」和「048」。这篇的问法是先报你的约束,再报产品名。
约束有四条:数据能不能出域、要不要按标量过滤、数据量和 QPS、团队是否要自己运维。单机库、托管库、分布式库分别卡在不同的条上。效果用你自己的查询集:召回有没有打中应有的段落,而不只说「我们用了某库」。YU 追模型和工具时,嵌入模型、向量库、关键词引擎分开说。
153 · 中 · 大模型的选型逻辑是什么?
来源:面经(linux.do)· JR
见现有题目「072」和「074」。逻辑是任务分布:分类和抽取不必用最贵的模型,长推理和最终回答再用强模型。约束加上数据能不能出境、工具调用字段是否稳定、延迟和单价。用你的评估集比较,不要用排行榜名次代替。国内外的限制见本题「157」。
154 · 难 · 政策、文件场景下,怎么确认召回的数据是准的?
来源:面经(linux.do)· JR
准,指的是召回的那一款,不是回答通顺。
文号、条款号走关键词,不要只靠向量。块上带文件名、版本和生效日期,旧版降权。回答里引用的句子必须能在命中块里找到原文,对不上就撤回这句。处罚、资格这类问题,置信度不够就转人工。
评估用一套真题:给条款提问,看回来的是不是那一款。见现有题目「035」和「051」。035 是检索和生成的指标,051 是不准时先定位断点。政策场景多一个版本和原文核对。
155 · 中 · 上下文压缩的策略是什么?
来源:面经(linux.do)· JR
见现有题目「078」。策略就这些:到了窗口预算再压,最近几轮留原文,摘要只留诉求、已确认的事实、做过的操作和未决问题,一次只压最旧的一段。阈值用你自己的窗口试,不要背一个与模型无关的百分比。质量不行见本题「156」。
156 · 难 · 压缩时如果模型能力不够、摘要质量差,怎么办?
来源:面经(linux.do)· JR
见现有题目「078」的触发条件。078 没有展开「摘要本身是坏的」。
摘要用固定字段。缺了关键实体、数字或否定,就算这次压缩失败。失败时换一个更强的模型只做这一次压缩,或者放弃摘要,把更旧的轮次移出窗口,需要时再按话题检索原文。不要让小模型反复摘要上一次摘要。原始对话留着,摘要不是事实来源。Claude Code 一类产品的上下文治理见本题「147」,回退原则相同。
157 · 中 · 政府项目只能用国内模型和工具,有没有影响?国内外怎么比?同一个模型换工具,或同一个工具换模型,差别在哪?
来源:面经(linux.do)· HJ
影响主要在数据和工具链,不在「国内模型能不能聊天」。材料不能出境时,海外 API 进不了核心链路。编码代理、某些托管检索和观测服务也可能不能用,要换成可以私有化或国内托管的等价物。客服和公文 RAG 用国内模型可以做,前提是你的评估集过关。
比较要锁变量。同一提示、同一工具、同一批题,只换模型,看的是指令遵循、工具参数和中文事实。同一模型,只换检索或工具描述,看的是任务完成率。两个一起换,就不知道是谁的功劳。
见现有题目「074」。差别往往是:弱的工具层会让强模型看起来不行;强模型也补不回召回错了的条款。
158 · 中 · 知识库的数据从哪来?向量化和检索怎么做?
来源:面经(linux.do)· YU、PY
见现有题目「030」。先讲数据源和更新:上传的文件、字幕、内部站点,还是数据库里的记录;是全量重建还是增量。然后才是切块、嵌入、入库和在线召回。来源不清,后面的模型选择没有意义。字幕这一路见本题「186」。
159 · 中 · 文档、PDF、课件怎么切分、入库?为什么要人工审核,而且是两道?
来源:面经(linux.do)· PY、YF
切分见现有题目「031」和「044」。PDF 和课件先按标题、页或时间轴得到候选块,再按长度收束。表格和代码不要按固定字数切断。入库前块上要有来源、位置和版本。待审的块不参与检索。
两道审核看的是两种错。第一道看切分:条款有没有被切断、表是不是碎了、字幕有没有串到别的视频。第二道看能不能进生产库:是不是过期版本、有没有不该公开的内容、和已有文档冲不冲突。混成一次审,人容易只看其中一种。驳回要留原因,规则才能改。全自动的问题是:错块一旦进索引,检索分可以很高,模型会引用它。
160 · 中 · Elasticsearch 里文档怎么切片?有哪些分词机制?
来源:面经(linux.do)· YF
切片和分词不是一步。切片决定检索单元,按标题、段落或字幕时间窗,一块一份文档进索引,带上来源和位置。分词决定 BM25 的词,由 analyzer 完成。
中文常见粗细两档。粗分词词更长,查得紧;细分词召回高,噪声也大。问句和文档要用能对上的分析器。专有名词、文号靠同义词或单独的关键词字段,不要指望默认分词认识它们。向量那一路不依赖分词。字幕按时间重叠一小段,回答才能回到原片的时间点。
161 · 中 · AI 回答效果差的时候,从哪些环节改?
来源:面经(linux.do)· YF
见现有题目「051」。顺序是:先复现这句问,看召回列表里有没有正确段落。没有,就改切分、查询或索引。有,但回答没用上,就改提示、引用约束或生成模型。同时改三处,就不知道是谁起了作用。
162 · 中 · 什么是查询改写?作用是什么?
来源:面经(linux.do)· HQ
查询改写是在检索之前,把用户原话变成更适合搜的查询。它补省略、解开「这个」「刚才那个」、换成库里的术语,或把一句里的多个意图拆开。
单号、文号、日期用规则,不必交给模型。其余可以用小模型生成检索句,原句仍保留一路,避免改写改错。政策编号不要被改写掉。
见现有题目「051」。改写是检索不准时的一环。每句话都重写,会增加延迟,也会把本来能命中的精确词改丢。
163 · 中 · Elasticsearch 加向量库,混合检索的整体流程是什么?
来源:面经(linux.do)· HQ
见现有题目「041」。流程是:查询同时走关键词和向量,各取一批,按名次融合,再按需要重排,最后把前几段交给模型。关键词负责编号和专有名词,向量负责说法不同但意思接近。见现有题目「047」是融合公式。
164 · 中 · 混合检索已经分组、排序、去重,为什么还要重排?
来源:面经(linux.do)· HQ
见现有题目「046」。这篇的角度是:融合和去重解决的是「各路分数不能直接相加」和「同一段出现多次」。它们没有把问题和这一段文字放在一起细看。重排用交叉编码器做这件事,所以能把「词面都沾上了、其实答非所问」的段落拿掉。代价是延迟,候选要先收到几十条以内。
165 · 中 · 项目里的领域词典做什么?
来源:面经(linux.do)· HQ
词典把用户的说法映射到库里的标准词,供查询扩展和关键词索引使用。它由人维护,模型可以提议新词,不能直接写进生产。
它提高的是召回。排序仍然要重排,因为同义词只让你搜得到,不决定哪一段最贴这句问。见本题「162」和「164」。
工具、能力模块与协议
166 · 中 · 抽象出来的通用 AI 能力模块做了什么?
来源:面经(linux.do)· JR
见现有题目「070」。模块边界是:模型接入、提示与解析、检索、工具、记忆、审核、追踪。业务流只调用这层,于是换模型和加工具不必改每个场景。
抽象要有代价意识。只有一个调用方时,先不要做平台。第二个场景出现,再把重复的调用收成接口。
167 · 中 · AI 调用工具失败了怎么解决?
来源:面经(linux.do)· JR
见现有题目「025」。先分清超时、参数错、没权限、对象不存在、服务不可用。只有第一类值得原样重试。错误要结构化地交回模型,连续失败就停这个工具,用已经拿到的信息回答。把异常吞成空结果,模型会当成「没有这条数据」。
168 · 中 · MCP、Function、Skills 三者怎么区分?
来源:面经(linux.do)· YF
见现有题目「023」,那里是 Function Calling 和 MCP。Skills 是这篇多出来的第三件。
Function Calling 是这一次请求里声明的函数。模型返回名字和参数,应用自己执行。边界是当前进程和这一家模型的字段。
MCP 是独立服务上的协议,暴露工具、资源和提示。换一个客户端还能用。适合数据库、浏览器、内部系统这种要复用的能力。
Skills 是一份「这类事怎么做」的说明,通常是文档和约束,有时带脚本。它不负责传输,也不代替函数调用。模型先按 Skill 知道步骤,真要动环境时再走 Function 或 MCP。
三者可以同时在:Skill 写流程,MCP 提供跨项目的工具,Function 处理这一次请求里的业务动作。不要把一份提示词叫成 MCP,也不要把一个远程工具叫成 Skill。
169 · 中 · 你在用哪些 MCP 或 Skill?它们怎么辅助开发?
来源:面经(linux.do)· XZ、PY
准备两三个你真用过的,每个用一句说清:它读什么、改什么、你怎么检查它的结果。例如仓库检索、文档查询、运行测试。
辅助开发指的是少做重复操作,不是代替评审。工具改了代码,仍然要看 diff 和测试。没有用过就说没有,改讲你打算把哪类重复步骤写成 Skill。名单见本题「168」的分工,不要把聊天窗口里的自定义指令和 MCP 服务混成一个词。
输出、路由与长任务
170 · 中 · 模型输出怎么保证是结构化的?为什么用 Markdown 而不是 JSON?
来源:面经(linux.do)· PY
见现有题目「092」,那是格式坏了怎么修。这题是两种格式各给谁。
给人看的回答用 Markdown:能流式吐出,小标题和列表可读,长 JSON 不适合当最终界面。给程序的结果用 JSON Schema 或工具参数:意图、卡片、写库字段必须能校验。两个通道分开,不要让人读工具参数,也不要靠解析 Markdown 去扣库存。
选 Markdown 当最终答案,是因为产品展示的是文章或说明,模型对长 JSON 更容易丢逗号。代价是难校验,所以引用、分类、下一步动作仍走结构化通道。解析失败的阶梯见「092」。
171 · 中 · 用户问题怎么路由到 AI 系统?意图识别怎么实现,用哪些模型?
来源:面经(linux.do)· PY
见现有题目「017」。路由是入口上的分发:规则能定的(单号、菜单)先定;其余用小分类器;不确定的再交给模型,并给出置信度。高置信度执行,中间地带请用户确认,低的追问或转人。
模型名字用你项目里的。没有单独的意图模型,就说用的是规则加主模型,并说明你为什么还没拆出一个小模型。不要报一个没部署过的模型名。
172 · 中 · 未登录用户的问题查询怎么处理?
来源:面经(linux.do)· PY
未登录只开放公开知识,不开放订单、账户和任何写操作。检索范围在路由之后就切开,不要靠提示词要求模型「不要透露别人的订单」。
需要身份的意图,先告诉用户要登录,不要用猜测去查。匿名流量的限流比登录用户更紧。公开回答仍然要引用,避免把公开 FAQ 答成内部口径。
173 · 难 · 用队列做 Embedding 长任务时,进程崩溃或 K8s 重启,任务会不会丢?
来源:面经(linux.do)· HQ
会不会丢,取决于任务在崩溃前有没有进队列,以及队列有没有持久化。
请求先写入队列再返回任务号。队列放在开了持久化的 Redis 一类存储里。Worker 崩溃或 Pod 重启,锁过期后任务回到可执行状态,这是至少一次,不是恰好一次。进程在入队之前死掉,这次请求会丢,所以接口不能先答成功再入队。
见本题「174」到「177」。模型调用本身不放进数据库长事务。
174 · 难 · 怎么保证队列里的任务不丢,并且和业务状态一致?
来源:面经(linux.do)· HQ
业务库里有一行任务状态:待执行、执行中、成功、失败,主键用文档加内容哈希加模型版本。入队和这行状态的创建放在一起考虑:状态写上之后才能对用户说已接收。
Worker 成功后把同一主键标成成功,并写下向量已存在。队列重试时先读这行。标成成功的不再调模型。标成执行中但锁已经过期的,才允许再跑。这样队列的「至少一次」和库里的「成功只有一次」对得上。
175 · 中 · 重试会造成重复执行、重复调用大模型。怎么做幂等,少花这份钱?
来源:面经(linux.do)· HQ
幂等键用文档标识、内容哈希和嵌入模型版本。相同的键已经成功,就直接返回,不再推理。任务号也用这个键,避免同一份文档被排进队列两次。
内容变了,哈希变了,才重新嵌入。重试只包住失败的批次,不把整份文档从头再算。见现有题目「050」是批量和增量计算;这题是崩溃重试时怎么不付第二次模型费用。
176 · 中 · 任务做到一半中断了,怎么断点续跑?
来源:面经(linux.do)· HQ
进度是已完成的批次或页码,写在任务状态里,每批提交成功后再前进。恢复时从进度之后开始。不要靠「进程内存里处理到第几条」。
一批内部仍可能重复,所以每一批也用本题「175」的幂等键。续跑省的是前面已经落库的向量,不是保证每一条网络请求只发生一次。
177 · 中 · 前端怎么感知任务在排队、执行、中断还是结束?
来源:面经(linux.do)· HQ
接口立刻返回任务号。状态用短轮询或一条 SSE:排队、执行中、进度、成功、失败。失败要带可显示的原因。
用户关掉页面不是取消。取消是单独的命令,Worker 在批次边界上看这个标记。断线之后用任务号再订阅,进度以服务端为准。和回答流式的差别见本题「178」:这里推的是任务状态,不是模型的逐 token。
流式输出
178 · 中 · SSE 和 WebSocket 怎么选?Agent 输出为什么常用 SSE?
来源:面经(linux.do)· FN、HQ、YF
SSE 是服务器单向推文本,走普通 HTTP,浏览器有 EventSource,断线可以用 Last-Event-ID 接着要。WebSocket 是双向二进制通道,适合客户端也要持续往上送的场景,例如协作光标。
Agent 回答主要是服务器往下推 token,请求本身已经把问题送上去了,所以 SSE 够用,中间设备也更好认。需要用户中途插话、取消之外还要持续上行,再用 WebSocket。
见现有题目「060」。060 是模型到页面的链路。这题是两个协议的选择。前端保活、重连见非 Agent 部分的 WebSocket 题,那是另一类实时连接。
179 · 难 · SSE 断了以后怎么续传?用户关掉窗口又马上打开,或刷新页面。
来源:面经(linux.do)· YC
每个事件有 id。服务端按会话把最近一段事件留在 Redis Stream 这类日志里。客户端重连时带上最后的 id,服务端从那之后重放。
短暂断开不要取消上游模型调用,否则用户一刷新,钱花了、字没了。生成还在进行,重连就接上;已经结束,就把存下的全文重放。只有用户明确停止,才取消上游。重放要按 id 去重,避免拼接出两段重复回答。
见现有题目「060」:客户端断开要取消上游,指的是用户离开、不再需要这次生成。这题是同一用户立刻回来,两条策略要分开。
180 · 中 · 后端流式推送时,前端怎么边收边渲染?AGUI 这类协议在做什么?
来源:面经(linux.do)· HQ
见现有题目「060」和「086」。060 是事件怎么推,086 是不要每个 token 改一次 DOM。渲染按帧把积下来的文本画出来,Markdown 对已收到的部分渐进解析。
AGUI 这类协议把模型流收成前端能识别的事件:一轮开始和结束、文本增量、工具调用的开始和参数、状态快照或补丁。动态表单和卡片不是执行模型给的 HTML。事件里带组件名和参数,前端只渲染注册表里有的组件。用户提交表单,作为工具结果回到模型。
底层仍是 SSE 或同类单向流。事件有顺序、有 id,才能接上本题「179」的续传。字段名以你接入的那一版协议为准,面试讲清「文本、工具、状态三种事件,组件白名单」即可。
模型、编码工作流与客服设计
181 · 中 · 你的 AI 开发工作流是什么?怎么写进流程、规范和评审?怎么少出错、少重复?
来源:面经(linux.do)· YC、XZ、YU、HJ
工作流是短循环:需求写成可以验收的说明,放在仓库里;任务拆到一次能看完的 diff;模型起草;人看差异和测试;讲不清的改动不合并。
规范写死三件:密钥和客户数据不进提示;行为变化要有测试或明确的手工步骤;公共接口以仓库里的类型为准,不以模型记忆为准。评审看边界、权限和测试,不看文笔。
少重复,是把第二次还要做的步骤写成脚本或 Skill,见本题「169」。少出错,是缩小一次修改的范围,并让测试在合并前跑。没有评审、只看模型说「已完成」,这个流程不成立。
182 · 难 · 日常用哪些 AI 开发工具?从哪来、费用和账号稳定性怎么讲?
来源:面经(linux.do)· YU
列出你每周真用的工具:编辑器里的代理、模型 API、检索或绘图。渠道说是官方、公司网关还是国内转售。费用用你自己的月账单,个人和公司账号分开。稳定性讲你遇到过的限流、封号或区域不可用,以及你的备份是换模型还是等恢复。
没有精确账单就不要报一个月消费。政府或内网项目还要说明这些工具能不能碰仓库,见本题「157」。
183 · 中 · 没有设计稿、也没有产品经理时,你怎么用 AI 把规划、草图、文档和开发接上?
来源:面经(linux.do)· HJ、PY、YU
先写用户和主路径,再让模型出一版可点击的草图和一页说明。拿去给业务方确认范围,确认之前不写正式接口。草图只证明流程,不证明视觉。视觉要人看过间距、对比和空状态,见非 Agent 部分对生成页面的问法。
开发仍走本题「181」:确认过的说明进仓库,模型按说明改代码。范围在确认后再变,就改说明再改实现,不要在聊天里把需求越加越长。
184 · 中 · Prompt 是谁写的?你怎么把需求交给 AI,让它生成提示词?
来源:面经(linux.do)· YF
对回答质量负责的人写提示词,不一定单设岗位。业务方提供判断标准:什么算答对、什么必须拒绝。
交给模型生成提示词时,输入是角色、输入输出、禁止项、两条正例、两条反例,而不是「写得专业一点」。生成之后用反例试,失败再改。提示词进版本库,和代码一起评审。见现有题目「061」是版本和对照实验;这题是谁有权改、改的依据是什么。
185 · 中 · 大模型做过微调吗?是第三方 API 还是私有化?
来源:面经(linux.do)· YF
见现有题目「053」。知识经常变、要引用,用 RAG 加 API 或内网推理。要改口吻、格式或工具习惯,才考虑微调。没做过微调就说没做过,不要把提示词工程说成微调。
部署看数据:可以出域就用合规的 API;不能出域就私有化或国内托管,并接受你要自己管容量和升级。见本题「157」。
186 · 中 · 知识库里的字幕总结是怎么搭的?
来源:面经(linux.do)· YF
字幕按时间轴切块,每块带视频标识和时间范围,重叠一两句,避免一句话被切在边界上。入库前走本题「159」的审核,错字和串片在这一步拦。
离线可以对每段做摘要,摘要单独成块,用来回答「这集讲了什么」。细节问题仍检索原字幕。回答里带回时间点,用户才能跳回原片。不要把整集总结收成唯一的一块,否则细问题召不回。
187 · 难 · 模型已经选定,从零做一套通用智能客服,选型和应用地怎么讲?
来源:面经(linux.do)· YF
模型已选定,剩下的选型都是外围。
- 渠道和身份:网页、企业微信或其他入口。访客和登录用户的检索范围分开,见本题「172」。
- 路由:高频、路径清楚的意图走固定流程。只有步骤会变的才进 Agent 循环。见现有题目「014」和「017」。
- 知识:公开 FAQ 和内部政策分库,回答带出处。切分和审核见本题「159」,准不准见「154」。
- 工具:查单、建单、转人工。写操作幂等,并且校验这人有没有权。失败见现有题目「025」。
- 输出:给人 Markdown 或卡片,给系统 JSON。流式用 SSE,见本题「178」。
- 人:投诉、政策冲突、低置信度转人工,把已经查到的上下文一并交过去。
- 上线:先离线题,再小流量。看解决率、转人工率、引用能不能打开。多 Agent 等单循环确实装不下再拆,见现有题目「016」。
第一版不要同时做多渠道、多 Agent 和微调。先做一个渠道上的只读问答。
188 · 难 · 如果是资产管理系统,你怎么用 AI 完成开发和交付?
来源:面经(linux.do)· HJ
资产、审批、库存数量仍是普通业务系统:权限、事务、审计日志。AI 放在两处:按确认过的说明起草实现,以及上线后的查询和填单辅助。模型不直接改台账。
交付仍走本题「181」。范围先收到「录入、查询、审批」这种能验收的闭环,再谈智能推荐或自动处置。政府或内网客户还要满足本题「157」的模型和工具限制。周期和人数用项目真实约束,不要报一个与团队无关的人月。
非Agent面试
这些题来自同一篇面经里偏向前端、全栈、基础设施和职业规划的轮次。题干带「非Agent」。个人经历只给答法,不编候选人的履历。
189 · 中 · 非Agent · PS 网页版怎么实现?
类型:非Agent面试
来源:面经(linux.do)· KJ
文档下面是图层,图层下面是像素或矢量对象。视口用变换看文档的一部分,不要把整个画布做成超大 DOM。
像素操作用离屏 canvas,滤镜和格式转换放在 Worker 或 WebAssembly,避免卡住输入。撤销用命令栈:多数步骤只记录操作,隔一段再存快照,避免每一步复制全图。历史、选区和导出分开,导出读的是文档状态,不是屏幕上那一张图。
190 · 难 · 非Agent · Canvas 无限画布怎么实现?
类型:非Agent面试
来源:面经(linux.do)· KJ
世界坐标和屏幕坐标分开。屏幕位置等于世界位置乘缩放再加上平移。缩放以指针下的世界点为锚,调平移,让这个点留在指针下。
只绘制视口里的元素。命中测试用四叉树或网格,不要每次遍历全部对象。指针事件统一用 pointer,滚轮改缩放。网格可以画在单独一层,元素层在上面。数量大时用 Canvas 或 WebGL;数量小、要可访问性时可以用 DOM 加变换。无限是坐标无限,不是画布元素无限。
191 · 中 · 非Agent · WebAssembly 了解多少?
类型:非Agent面试
来源:面经(linux.do)· KJ
WebAssembly 是跑在沙箱里的二进制指令,接近原生速度,和 JavaScript 共享页面,但不直接操作 DOM。适合图像、音视频、压缩、加密,以及已经用 C、C++、Rust 写好的库。
加载是编译再实例化。和 JS 大量交换像素时,拷贝内存会吃掉收益,能放在线性内存里就不要来回抄。调试和包体积是代价。界面和业务状态仍放在 JS。
192 · 易 · 非Agent · Docker 和 Kubernetes 是什么关系?
类型:非Agent面试
来源:面经(linux.do)· KJ
Docker 解决的是怎么把一个应用和它的依赖打成镜像,并在一台机器上跑起来。Kubernetes 解决的是很多机器上这些实例怎么调度、发现、扩容和在挂了之后拉起来。
集群里的运行时常常是 containerd,不一定是 Docker 引擎。镜像格式仍是 OCI 那一套。Docker 可以没有 Kubernetes;Kubernetes 管理的是容器,不负责替你写镜像。
193 · 中 · 非Agent · 镜像和容器是什么关系?挂载怎么做?
类型:非Agent面试
来源:面经(linux.do)· KJ
镜像是只读的层叠模板。容器是镜像加上一层可写层,再加上独立的进程、网络和资源限制。删掉容器,默认可写层一起没了。
要留下的数据用挂载。绑定挂载映的是主机上的一个路径;卷由 Docker 管理,不依赖你记得主机路径。数据库和上传文件放挂载里,不写进镜像层。镜像改完要重新构建,挂载里的数据不用。
194 · 中 · 非Agent · Kubernetes 里多个服务怎么通信?
类型:非Agent面试
来源:面经(linux.do)· KJ
同一 Pod 里的容器用 localhost 和端口。跨 Pod 用 Service:一个虚拟 IP 和 DNS 名,后面是一组 Pod。集群 DNS 解析这个名字,kube-proxy 或同类机制把流量转到就绪的 Pod。
跨命名空间要写完整服务名。从集群外进 HTTP,用 Ingress 或 Gateway。有状态实例需要稳定网络身份时用 Headless Service,直接解析到 Pod。默认网络是通的,隔离要另加 NetworkPolicy。
195 · 难 · 非Agent · 怎么做团队管理?
类型:非Agent面试
来源:面经(linux.do)· KJ
先说你管过的规模。没管过人,就说你负责的是模块和协作,不要编一个团队。
管过:目标怎么拆到人,进度怎么暴露,卡住时你改范围、加人还是改期。举一个你做过的决定和结果。不评价前同事的性格。
196 · 难 · 非Agent · 怎么推动项目进度?
类型:非Agent面试
来源:面经(linux.do)· KJ
讲一个你推动过的项目。结构是:当时卡在依赖、范围还是人;你把下一步写成可以完成的交付;你怎么同步风险。结果用当时的日期或范围变化,没有记录就不要补一个百分比。
197 · 中 · 非Agent · Express 的底层是怎样的?让你设计会怎么做?
类型:非Agent面试
来源:面经(linux.do)· KJ
请求依次穿过中间件。每个中间件拿到请求、响应和 next。调用 next 才进入下一个。错误交给四参数的错误中间件。路由是按方法和路径匹配的一层中间件,没有匹配就落到 404。
异步函数里的拒绝要送进错误处理,否则请求会挂住。Express 不负责多核,多进程放在外面。自己设计时,把路由表、中间件顺序和错误出口分成三块,应用代码只往上挂。
198 · 难 · 非Agent · 入职后怎么快速上手分配到的业务?
类型:非Agent面试
来源:面经(linux.do)· KJ
顺序:把本地环境跑起来,找到这条业务的入口和数据落点,读最近的相关变更,选一个小缺陷或小需求走完一次发布。每天把不懂的术语记下来问对应的人。第一周的目标是能改一处并说清影响,不是重做架构。
199 · 难 · 非Agent · 职业里比较有挑战的一件事怎么讲?
类型:非Agent面试
来源:面经(linux.do)· KJ
用一件事:背景、你的角色、约束、你做的选择、结果、如果再来会改什么。技术难点和协作难点都可以,要有你本人的动作。不要讲成团队的光荣史,也不要主动贬低前公司。
200 · 中 · 非Agent · 多租户时 Kubernetes 怎么部署?是一个租户一个 Pod 吗?
类型:非Agent面试
来源:面经(linux.do)· JR
一般不是一个租户一个 Pod。共享部署,数据层用租户标识隔离,是常态。一租户一 Pod 隔离强,但冷启动、调度碎片和发布次数都会上去。
隔离要升级时,先是命名空间、资源配额和网络策略,再是独立集群。噪声特别大或合规要求进程级隔离,才考虑一租户一套工作负载。应用里的租户数据隔离见现有题目「076」,那是另一层,不能用 Pod 数量代替。
201 · 中 · 非Agent · 企业微信里的 H5 登录流程是怎样的?
类型:非Agent面试
来源:面经(linux.do)· TK
在企业微信内置浏览器里走网页授权。应用配好可信域名。页面跳到企业微信的授权地址,带上企业 ID、回调地址、应用 ID 和 scope。静默授权拿身份;要头像手机号再用更高的 scope,并可能再换一次用户票据。
回调带 code。服务端用企业 ID 和应用密钥换 access_token,再用 code 换用户身份。企业内部成员得到 userid,外部联系人场景可能得到 external_userid 或 openid。身份以服务端这次交换为准,不信任前端自己报的 id。code 只能用一次。
202 · 中 · 非Agent · 企业微信只能绑两个域名时,多个业务域名怎么办?
类型:非Agent面试
来源:面经(linux.do)· TK
需要授权和 JS-SDK 的页面收进这两个可信域名,用路径区分业务。其他域名只做登录后的跳转:可信域名完成授权,发一个短时票据,业务域名凭票据建立自己的会话。
不要在每个业务域名上各做一次授权。票据一次有效、时间短,并且绑上目标域名。JS-SDK 的签名域名必须和页面域名一致,所以真正要调企业微信接口的页面不能随便放在第三个域名上。
203 · 难 · 非Agent · 没有设计稿,要你自己把页面推进去,你怎么做?
类型:非Agent面试
来源:面经(linux.do)· TK
先和业务确认主路径和必填信息,用现有组件库搭一版可点的页面。视觉沿用产品里已有的间距和颜色,不在这一张页面上新做一套风格。空状态、错误和加载一起给出。拿这版确认范围,再调整。没有确认就按自己的审美做完,返工会更大。用模型出草图见本题「183」,那是 Agent 岗位里的工作流;这题是页面交付本身。
204 · 中 · 非Agent · 企业微信 H5 里给用户打标签怎么做?
类型:非Agent面试
来源:面经(linux.do)· TK
标签打在外部联系人上,用的是客户联系接口,身份是 external_userid,不是员工的 userid。标签要先在企业标签库里存在。页面从客户详情或侧边栏进入时才能拿到这个外部联系人;普通成员授权拿不到该给谁打。
写入由服务端调用,并记录是谁在什么入口打的。重复打同一标签要幂等。个人标签和企业标签不要混用。
205 · 中 · 非Agent · 用户进入 H5 后,唯一身份怎么取?
类型:非Agent面试
来源:面经(linux.do)· TK
员工用 userid,外部联系人用 external_userid。两者都来自服务端用 code 换到的结果。外部联系人的 id 可能随应用不同而不同,代开发场景还有明文和密文,存储前定好用哪一种,转换在服务端做。
微信侧的 openid 只有在对应接口里出现时才使用。cookie 和设备指纹不能当账号。没有身份的访客,按本题「172」的原则只给公开内容;那一题是 Agent 查询,这里是 H5 身份。
206 · 中 · 非Agent · 企业微信回调里的身份同步怎么做?
类型:非Agent面试
来源:面经(linux.do)· TK
配置接收地址。企业微信先发校验请求,服务端验签名并解密 echostr,按要求返回明文。之后的事件是加密消息。
客户变更看事件类型和外部联系人 id,更新本地关系或标签。处理必须幂等:同一事件重试不能重复写入。先快速返回成功,耗时同步放队列。验签失败直接拒绝。本地没有这个人时,按事件里的 id 再向接口补一次资料,不要靠回调体里的残缺字段猜。
207 · 中 · 非Agent · 有没有做埋点?埋什么?
类型:非Agent面试
来源:面经(linux.do)· TK
有就讲事件模型:谁、何时、哪个页面、哪个动作、成功还是失败、从哪个入口进来。企业微信场景多记入口页面和员工维度,不要记聊天正文。
没做就说没做,并说明你会先埋主路径的曝光和提交。上报失败不能影响业务。用户标识用本题「205」的稳定 id,不用每次授权都变的 code。
208 · 难 · 非Agent · 定时把多表查询结果同步到另一个库,插入时报错且磁盘 IO 很高,怎么查?
类型:非Agent面试
来源:面经(linux.do)· TK
先分清时间花在查还是花在写。看磁盘是数据文件、日志还是临时文件。同时看当时的语句:三表连接有没有索引、有没有落磁盘的临时表、是不是一次查出过多行。
插入侧看是不是逐行提交、二级索引过多、单次事务太大。处理是连接条件补索引或先取出主键再分批,插入改成批量并限制每批大小,任务错开高峰。报错文本要和 IO 一起看,磁盘满、锁等待和超时不是同一种处理。
209 · 中 · 非Agent · 百万级之后大表插入变慢,怎么处理?
类型:非Agent面试
来源:面经(linux.do)· TK
先看是不是索引和主键导致的页分裂:随机主键、索引过多,插入都会变慢。能用顺序主键就不要用随机主键。一批提交一次,避免每行一次事务。历史数据归档或分区,让热表变小。
在线加索引和大事务会抬高 IO,放在低峰。读写分离不解决插入慢。分库分表等单表和索引已经不够再用。
210 · 中 · 非Agent · 数据库和缓存怎么保持一致?
类型:非Agent面试
来源:面经(linux.do)· YC
常用做法是:更新数据库,再删除缓存,读的时候未命中再装载。先改缓存再改数据库,失败时缓存会留下新值。
并发下仍可能把旧值写回缓存。要求更严时,用数据库日志订阅去删缓存,并给缓存一个不太长的过期时间。要强一致,就让这条读走主库或加锁,并接受吞吐下降。不要承诺缓存和数据库在任意时刻逐字相同。
211 · 难 · 非Agent · 从 0 到 1 做一个项目,架构怎么起?
类型:非Agent面试
来源:面经(linux.do)· YC
先写核心用例和数据,再定模块。一个进程里把接口、业务、存储分开,能独立部署时再拆服务。第一天就上微服务,通常是在没有边界时支付通信成本。
同时定三件运行时的事:配置和密钥放哪、日志怎么追一条请求、失败了怎么回滚。AI 系统的分层见本题「122」,不要把那六层套到一个普通后台上。
212 · 难 · 非Agent · 全栈项目里,你搭框架的整体思路是什么?
类型:非Agent面试
来源:面经(linux.do)· HJ
按调用方向搭:页面或客户端、接口、业务规则、存储。业务规则不放在页面里,也不写进 SQL 的边角。
选择用团队已经会维护的技术。新框架要能说清它替你解决的一个具体问题。认证、错误码和日志在第一个接口就统一,不要等接口多了再补。
213 · 中 · 非Agent · 传统业务系统的后端分几层?
类型:非Agent面试
来源:面经(linux.do)· HJ
常见是接口层、业务层、数据访问层。接口层处理协议和校验,业务层处理规则,数据访问层处理查询和事务边界。
层的意义是依赖方向固定。接口层可以调业务层,业务层不返回框架对象,数据访问层不知道 HTTP。项目更大时再加应用层编排用例。不要为了层数去加只做转发的空类。
214 · 难 · 非Agent · 最大并发大概多少?高并发项目部署在哪?
类型:非Agent面试
来源:面经(linux.do)· HJ
并发先定义:同时在线、每秒请求,还是数据库连接。准备峰值 QPS、当时的实例数和规格,以及这个数从监控的哪张图来。部署说云厂商或机房、几实例、有没有扩容。没有压测或监控,就说没有测过,不要给一个整数。
215 · 中 · 非Agent · 熔断、限流、缓存、异步队列用在什么时候?
类型:非Agent面试
来源:面经(linux.do)· HJ
限流保护自己的容量,超过就拒绝或排队。熔断保护你不去打一个已经失败的下游,过一段时间再试。缓存放读多且允许短暂旧数据的结果。队列把不必在请求里做完的事挪走,并削掉突发。
四件事不是一套必须全上。没有下游抖动就不必熔断;请求里必须马上看到结果的写入不能只丢进队列就当成功。Agent 系统里的熔断和限流见现有题目「077」和「090」,口径可以借用,例子用你自己的接口。
216 · 中 · 非Agent · 没有测试岗位时,全栈项目怎么测?
类型:非Agent面试
来源:面经(linux.do)· HJ
开发对自己的主路径负责:接口有自动测试,页面有一份和发布相关的手工清单,预发环境用接近生产的配置走一遍下单或提交。缺陷修完补一条能复现的检查。没有测试岗不是不测,是没有人替你做回归。
217 · 中 · 非Agent · AI 能不能做界面测试,覆盖点击、输入和提交?
类型:非Agent面试
来源:面经(linux.do)· HJ
可以生成草稿步骤,也可以驱动浏览器去点、输入、提交。断言仍要人写:结果对不对、权限对不对、金额对不对。模型会点错元素,页面一改就失败。
它适合帮助补冒烟,不适合当发布的唯一依据。稳定的选择器和预期结果仍然放在仓库里。
218 · 难 · 非Agent · 职业规划怎么讲?跟着公司走,还是自己有方向?
类型:非Agent面试
来源:面经(linux.do)· HJ、FN、XZ、YU、YF
用两层。近一两年:你要加深的手艺,例如把一个业务系统做完整,或把 Agent 从演示做成可维护的服务。三到五年:你希望负责的范围变大,是更深的技术还是带一个小模块。XZ 问的「3~5 年」就答第二层。
公司战略和自己的方向说成有交集的那一段,不要说「我什么都能接受」,也不要把规划讲成离职时间表。没想清楚管理还是技术,就说当前阶段以交付为准,管理等带过人再定。YU 若追问技术还是技术加管理,用同一套回答。
219 · 难 · 非Agent · 政府项目约一个月、体量有限,还要客户端、App 和小程序,你怎么拆?
类型:非Agent面试
来源:面经(linux.do)· HJ
先把一个月能验收的闭环写出来,三端同时从零做完通常不成立。能共用的接口和账号先做,端上先交付使用最频繁的一个,另外两端若必须有,就收成同一接口上的薄客户端。
售前调研里和闭环无关的需求放到下一期,并写进范围说明。没有这个取舍,进度会在三端联调时断掉。人数和报价用题目里的约束讨论,不要再编一个团队配置。
220 · 中 · 非Agent · Vue 和 React 的核心区别是什么?
类型:非Agent面试
来源:面经(linux.do)· FN
Vue 用模板和响应式依赖:用到的数据变了,对应的组件更新。React 用 JSX 描述界面,状态更新后重新计算这棵树,再把变化应用到 DOM。一个是依赖收集,一个是用新状态描述整棵界面。
组件通信、路由和请求都不是两者的本质差别。差别在状态怎么被观察、模板还是 JSX、以及更新是框架帮你追踪还是由你保证不可变。
221 · 中 · 非Agent · Vue 和 React 谁的性能上限更高?
类型:非Agent面试
来源:面经(linux.do)· FN
没有和业务无关的那个「上限更高」。上限取决于更新了多少 DOM、状态粒度、列表有没有虚拟化。两边都可以很快,也都会被错误的状态设计拖慢。
Vue 靠依赖收集少通知一些组件。React 靠不可变数据和调度,把不紧急的更新让开。面试时讲你在哪个场景里量过,而不是站队。
222 · 中 · 非Agent · React 和 Vue 最近的版本在做什么?
类型:非Agent面试
来源:面经(linux.do)· FN
按你核对过的正式版说,不要背一个没发布的版本号。
React 19 这一代把 Actions、use、把 ref 当普通 prop,以及服务端组件推进到正式用法里,并用编译器减少手工记忆化。Vue 3.5 这一代改进了响应式 props 的使用和 SSR。Vapor 是去掉虚拟 DOM 的试验方向,只有你的项目真采用了才说它已上线。
两边都在把更新做得更自动,并加强服务端渲染。这不改变本题「220」的核心差别。
223 · 中 · 非Agent · 浏览器发出一次 HTTP 请求会经历什么?缓存发生在哪?
类型:非Agent面试
来源:面经(linux.do)· FN
解析地址、查 DNS、建立 TCP、需要时握手 TLS,然后发送请求,服务器处理后返回,浏览器再解析并渲染。重定向和缓存可能让后面的步骤提前结束。
缓存出现在几处:浏览器的内存和磁盘、Service Worker、CDN、反向代理、应用自己的缓存。HTTP 缓存先看 Cache-Control 还是否新鲜;过期后用 ETag 或 Last-Modified 询问,未修改就继续用本地副本。
224 · 难 · 非Agent · 挑一个印象最深的项目讲。
类型:非Agent面试
来源:面经(linux.do)· FN
选你能讲清入口、数据和个人贡献的一个项目。两分钟结构:做什么、你负责哪一段、一个难的技术或协作决定、结果。被追问接口或表结构时要接得住。不要选一个你只写过页面文案的项目,然后把架构讲成自己的。
225 · 难 · 非Agent · AI 时代程序员的价值是什么?
类型:非Agent面试
来源:面经(linux.do)· FN
价值在问题定义、边界、验收和对结果负责。模型能起草实现,不能替你决定这是不是该做的需求,也不能在出错时承担责任。能把系统约束讲清、能判断 diff、能把重复步骤收成可重复的流程,这些比打字速度重要。结合你自己的工作流,见本题「181」。
226 · 难 · 非Agent · 编程上的优点和缺点是什么?这个岗位上你的优势和不足呢?
类型:非Agent面试
来源:面经(linux.do)· FN、YF
优点说一个能被作品证明的,例如把模糊需求收成可运行的主路径。缺点说一个真的限制,以及你现在怎么补,不要说「我太追求完美」。
YF 问的岗位优势,就对准这次的 Agent 或全栈要求:你已经做过的那一段,加上还缺的那一段。优点和缺点不要互相取消,例如「缺点是太负责」。
227 · 难 · 非Agent · 最近在学什么?
类型:非Agent面试
来源:面经(linux.do)· FN
说一个具体主题和你用它做过的小练习或项目改动。学到哪一步、还不会什么,一起说。不要报一个只收藏了教程的方向。
228 · 难 · 非Agent · 接到一个需求,你第一步做什么?
类型:非Agent面试
来源:面经(linux.do)· XZ
先确认谁用、怎样算做完、哪些不做。然后找现有代码里的入口,拆成可以合并的步骤,标出依赖别人的部分。能写进仓库的说明先写下来,再实现。见本题「181」是加了 AI 之后的同一条路径。
229 · 难 · 非Agent · 三到五年的职业规划是什么?
类型:非Agent面试
来源:面经(linux.do)· XZ
见本题「218」的第二层。加上你希望三年后别人把什么类型的问题交给你。规划要和你现在的项目连贯,不要突然换成一个完全没接触过的职业。
230 · 难 · 非Agent · 工作里比较深刻的一件事怎么讲?
类型:非Agent面试
来源:面经(linux.do)· XZ
见本题「199」。深刻可以来自一次错误的判断和你后来怎么改,不一定是一个成功上线。仍然要有你的动作和结果。
231 · 中 · 非Agent · CSS 里渐变、旋转、缩放、动画你怎么用?CSS 动画和 JS 动画怎么选?
类型:非Agent面试
来源:面经(linux.do)· SH
常用的是 flex、grid、媒体查询、变换、过渡和关键帧动画,加上线性和径向渐变。旋转和缩放放在 transform 上,透明度单独变,这两类更容易留在合成阶段。
宽度、高度、阴影和滤镜会更贵,大列表上少用。声明好的状态切换用 CSS。跟手势、和滚动位置绑定的用脚本配合帧回调。两者都可以做开场、抖动和浮动,选择看要不要和输入连续相关。
232 · 中 · 非Agent · Canvas 做过什么?红包或福袋动画怎么做?
类型:非Agent面试
来源:面经(linux.do)· SH
Canvas 适合自己画的图:图表、图像处理、粒子。普通界面仍用 DOM。
红包如果设计给的是图,就播放序列帧、Lottie 或 CSS,不要在 canvas 里把 UI 再画一遍。撕开、粒子这种设计图覆盖不了的才自己画。打开、抖动、浮动、阴影、缩放能用 CSS 做的就用 CSS。阴影在低端机上先减。无限画布见本题「190」,那是另一题。
233 · 中 · 非Agent · WebSocket 在前端怎么连、怎么约定消息、断了怎么办?
类型:非Agent面试
来源:面经(linux.do)· SH
连接用 WebSocket,在 open 之后再发业务消息,在 message 里按约定的类型字段分发,在 close 和 error 里进入重连。类型和字段与后端写在同一份约定里,不要靠消息文本猜。
心跳用服务端认可的 ping,间隔按空闲时间,不要比业务消息还密。重连用指数退避加抖动,设上限,页面隐藏时降频。连不上时提示用户,并在业务允许时降成 HTTP 轮询,轮询同样要退避。弱网时标明数据可能不是最新,不要把旧数显示成刚刚更新。认证失败不要无限重连。
Agent 回答的下行流见本题「178」,那里更常用 SSE。
234 · 中 · 非Agent · ES6 里哪些特性常用?柯里化是什么?构造函数怎么写?
类型:非Agent面试
来源:面经(linux.do)· SH
常用的是 let 和 const、箭头函数、解构、展开、模板字符串、class、模块、Promise、Map 和 Set。日常会区分:新代码用这些,碰到旧构建才改回函数和 var。
柯里化是把接收多个参数的函数变成一串单参数函数,用来先固定配置。ES5 用函数加 prototype,再 new。ES6 用 class。class 仍是原型,只是不能当普通函数调用,方法默认严格模式。对象字面量两边都能用,它不是构造。
235 · 中 · 非Agent · 浏览器兼容怎么处理?路由变了页面不跳,可能是什么?
类型:非Agent面试
来源:面经(linux.do)· SH
用 browserslist 定目标。CSS 用自动前缀。JS 用转译和按目标注入的 polyfill。不要在业务里手写一大片厂商前缀。
history 路由变了但页面不跳,先看服务器有没有把未知路径回退到入口页面,再看这个浏览器有没有 History API。没有就改用 hash。框架抹平的是视图写法,不抹平缺失的 Web API。低版本构建失败,先看目标浏览器和语法转换是不是一致。
236 · 难 · 非Agent · 你 React 用得多还是 Vue 用得多?
类型:非Agent面试
来源:面经(linux.do)· SH
按最近几年的项目说,并举一个你写过的功能。两边都写过,就说哪边能独立负责。只熟练一边,不要把另一边说成同等经验。原理差别见本题「220」。
237 · 中 · 非Agent · Vue 2 和 Vue 3 的响应式有什么区别?数组怎么拦截?WeakMap 做什么?
类型:非Agent面试
来源:面经(linux.do)· SH、HQ、YF
Vue 2 用 Object.defineProperty 劫持已有属性。数组改写了会改变内容的方法:push、pop、shift、unshift、splice、sort、reverse。按下标赋值和改 length 不在这些方法里,当时要用 Vue.set 或 splice。对象后来新增的属性也监听不到。
Vue 3 用 Proxy,拦截读写和删除,下标、length 和新增属性都能进入依赖。WeakMap 用来把「对象 → 它的依赖」存起来,对象没有别的引用时,依赖可以一起回收。用普通 Map 会把对象一直留住。
性能上 Vue 3 还有编译期的静态提升和按块更新的标记,不全是 Proxy 的功劳。数据变了视图没变:Vue 2 先查是不是漏了劫持;两边都要查是不是改了同一个对象的内部却没有触发你绑定的那个字段,或者组件根本没用这个数据。
238 · 难 · 非Agent · 你们的数据库和后端架构是什么?做过微服务或数据中台吗?
类型:非Agent面试
来源:面经(linux.do)· PY
架构按你的系统说:几个服务、主库是什么、缓存和队列有没有。没有微服务就说单体或少量服务,并说明为什么当时没拆。数据中台没做过就说没做过。不要把一张表的同步脚本说成中台。
239 · 难 · 非Agent · 这个项目做了多久?当时没有经验,你怎么学的?
类型:非Agent面试
来源:面经(linux.do)· PY、YF
时间用真实的起止,分成了解、第一版、上线。记不清周数就说大约的月份,不要编一个整齐的「三个月」。
学习说你读的文档和你把它用进哪一个模块。卡了多久、问了谁,可以讲。不要说「我看了一遍就都会了」。
240 · 难 · 非Agent · 秒杀怎么设计?怎么避免超卖?只有 MySQL 行不行?
类型:非Agent面试
来源:面经(linux.do)· PY
页面静态化,按钮在结果回来前不能重复提交。入口限流,请求先进队列,由消费者扣库存。超卖的根子是「看看还有没有」和「减一」分成了两步。
Redis 里把判断和扣减放在一段 Lua 里,扣完小于 0 就失败。MySQL 用一条带条件的更新:库存大于等于 1 才减 1,看影响行数是不是 1。队列消息可能重复,所以同一订单号只能扣成功一次。
不用 Redis 时,就靠这条条件更新。热点行会锁等待,可以把库存拆成多行再汇总,降低单行冲突。乐观锁用版本号,冲突高时重试会放大流量,秒杀里不如条件更新直接。分布式锁不是扣减本身,锁里仍然要做原子更新。
限流、队列、事务各管一段:限流挡住打不赢的流量,队列削峰,事务保证订单和库存一起成或一起败。
241 · 难 · 非Agent · 微信支付怎么接?支付成功后怎么保证到账?回调怎么验签?
类型:非Agent面试
来源:面经(linux.do)· PY
商户订单号自己生成并且唯一。统一下单拿到预支付标识,按对应端的字段签名后调起支付。金额以服务端订单为准。
回调先验签,再解密。用商户订单号找到本地单,核对金额,把状态改成已支付。同一通知重复到达时直接返回成功,不要再次发货。验签用平台证书或你接入的那一版算法,验不过就拒绝。
积分或虚拟商品不要在回调线程里做完所有事。回调只改支付状态并投递一条消息。消费者按订单号发放,发放记录唯一。队列停了,定时扫描「已支付但未发放」补做。回调没到,用查单接口补状态。前端说「我付过了」不能当依据。
242 · 难 · 非Agent · 你日常用 Next.js 多吗?
类型:非Agent面试
来源:面经(linux.do)· HQ
按真实项目说页面路由还是 App Router、数据在服务端取还是客户端取。用得少就说少,并说明你会的是哪一部分,例如路由和数据获取,而不是整个框架。不要把只跑过教程说成日常在用。
243 · 中 · 非Agent · TypeORM 和 Prisma 怎么比?技术选型谁来定?
类型:非Agent面试
来源:面经(linux.do)· HQ
TypeORM 用装饰器映射现有或新建的库,查询构建器灵活,和 Nest 的集成直接。代价是类型和真实表容易慢慢不一致,迁移要自己纪律。
Prisma 用一份 schema 生成客户端,迁移和类型连在一起,日常查询清楚。复杂 SQL、现有脏库和一些事务写法要额外处理。
选型由维护这段数据访问的人提方案,负责人拍板。标准是:库是新建还是已存在、团队谁读得懂生成的 SQL、迁移能不能审查。不是职位最高的人临时指定一个名字。
244 · 中 · 非Agent · NestJS 里 Provider 默认是单例吗?Pipe 是什么?大量接口的日志怎么统一加?
类型:非Agent面试
来源:面经(linux.do)· HQ
Provider 默认是单例,整个应用一份。请求作用域是每个请求一份,还会拖住依赖它的对象。瞬态是每次注入一份。
单例省资源,适合没有请求状态的服务和连接。不能在单例里存放当前用户这种字段,那会串请求。
Pipe 在进入处理方法前变换和校验参数。Guard 决定能不能进,拦截器包住前后,异常过滤器处理抛出。日志用拦截器统一记路径、耗时和调用者,不要在每个方法里复制。
245 · 中 · 非Agent · TypeORM 的两种模式是什么?查询慢时怎么看到 SQL?
类型:非Agent面试
来源:面经(linux.do)· HQ
一种是活动记录:实体自己保存。一种是数据映射:仓库操作实体,实体不直接碰库。Nest 项目里更常见仓库这一路,业务层不继承 ORM 的实体基类。
慢时打开 ORM 的 SQL 日志,或在数据库里看慢查询,把语句拿去看执行计划。先确认是不是 N+1 或漏了索引,再谈改 ORM。
246 · 中 · 非Agent · PostgreSQL 的物化视图是什么?
类型:非Agent面试
来源:面经(linux.do)· HQ
普通视图每次查询都现算。物化视图把结果存下来,读得快,数据要刷新才更新。适合贵的统计、读多写少。刷新期间的锁和延迟要接受。数据经常变、又要最新,就不要用它当业务主表。
247 · 中 · 非Agent · MySQL 慢查询和索引怎么处理?什么时候才分库分表?
类型:非Agent面试
来源:面经(linux.do)· HQ
慢查询先看执行计划:有没有用到预期的索引、是不是扫了太多行、回表是不是太多。缺索引就补,重复索引删掉。避免在索引列上套函数。分页很深时改成按主键续页。
分库分表在单表体积、写入热点或备份窗口已经靠归档和索引解决不了之后再做。先定分片键。分片键错了,跨库查询和事务会比原来的慢查询更难处理。读写分离解决读,不解决这张表的写入热点。
248 · 中 · 非Agent · 什么是数据库事务?什么业务必须用?
类型:非Agent面试
来源:面经(linux.do)· HQ
事务是一组操作一起成功或一起失败,并满足隔离和提交之后不丢。下单同时写订单、减库存、写支付单,必须在一个事务里。只改一行配置不用包一层空事务。
调用模型、等支付回调这种外部耗时不要放进事务,连接会被占住。先提交本地的「待处理」,外部完成后再用本题「241」那种状态机推进。
249 · 难 · 非Agent · 求职时你最看重工作的哪些方面?
类型:非Agent面试
来源:面经(linux.do)· YU
说两三点,并排个序,例如能负责的问题、团队怎么做技术决定、上班方式和稳定性。每一点用你过去的选择证明。不要把薪水说成唯一标准,也不要说成完全不在乎。
250 · 难 · 非Agent · 你过去主要是开发还是管理?
类型:非Agent面试
来源:面经(linux.do)· YU
按时间说比例。带过人就说人数和你还写不写代码。没带过就说清楚,并举协作的例子。不要把「帮同事看代码」说成管理。
251 · 难 · 非Agent · 工作里棘手的问题你怎么解决?
类型:非Agent面试
来源:面经(linux.do)· YU
见本题「199」。强调你怎么缩小问题:复现、分成可能的原因、一次改一个。结果和你排除掉的原因一起讲。
252 · 难 · 非Agent · 原公司技术和运维的规模、架构怎么讲?
类型:非Agent面试
来源:面经(linux.do)· YU
只讲你知道的:小组人数、有没有专职运维、发布是谁做的。不知道公司总人数就不要猜。架构讲你接触过的系统,不讲听说的。
253 · 难 · 非Agent · 从前端转到全栈,你怎么学会后端并胜任?
类型:非Agent面试
来源:面经(linux.do)· YU
讲一条你真的做完的后端路径:表、接口、一个失败场景、上线后你看过的日志。学习资源一笔带过。胜任的证据是这段代码在用,不是课程名。还不熟练的部分直接说,例如事务或容量。
254 · 难 · 非Agent · 用了 AI 之后,你的效率在团队里大概处于什么水平?
类型:非Agent面试
来源:面经(linux.do)· YU
不要给一个排名百分比,除非团队真有这份统计。可以讲同一类需求你现在的做法和以前有什么不同,以及评审里仍然会退回什么。见本题「144」:没有对照就不要报提升了百分之多少。
255 · 难 · 非Agent · 快交付时才发现没评估到的风险,你怎么处理?
类型:非Agent面试
来源:面经(linux.do)· YU
先说风险影响的是正确性、安全还是日期。正确性和安全不能换日期悄悄上线。然后给一个缩小后的可交付范围和明确的下一期。同步给能改期或改范围的人,而不是自己加班把未评估的部分做完。举你经历过的一次,没有就说你会按这个顺序做,不要编一次事故。
256 · 难 · 非Agent · 你了解公司前端、后端、算法和 AI 的技术栈吗?
类型:非Agent面试
来源:面经(linux.do)· YU
面试前只根据招聘说明和公开信息准备,现场把你了解的和你想确认的分开。不要假装已经知道他们的内部框架。把话题收回到你做过的相邻技术。
257 · 难 · 非Agent · 业务方要改原型、加功能,或要多版方案,你怎么落地?
类型:非Agent面试
来源:面经(linux.do)· YU
每一版方案写清差别和你建议的一版,不要交五份同等详细的稿。选定之后,新增功能先改范围说明,再改页面。来不及就列出放到下一期的项。见本题「183」是怎么出第一稿;这题是稿子已经开始变的时候怎么收口。
258 · 中 · 非Agent · AI 生成的页面,从界面角度看常见问题是什么?
类型:非Agent面试
来源:面经(linux.do)· YU
挑你真看到的讲,常见是这些:间距不统一、字号没有层级、对比度不够、焦点和错误状态缺失、对齐靠眼睛而不是网格、组件在空数据和长文本下撑破。
改的时候沿用现有组件和间距刻度,不要在生成结果上再叠一层随意的像素。这是界面质量,不是模型选型。
259 · 难 · 非Agent · 你最擅长哪一段?后端和界面做到什么程度?
类型:非Agent面试
来源:面经(linux.do)· YU
擅长的那段用一个项目证明。后端说你写过的最深的一块,例如事务或查询,没有就说停在接口。界面说你能不能独立决定布局和状态,还是按设计稿实现。优势就是这段深度,不足就是没做过的那几段。不要把「都接触过」说成「都擅长」。
260 · 难 · 非Agent · 这些需求是你提的,还是产品经理提的?
类型:非Agent面试
来源:面经(linux.do)· YF
按项目说。有产品经理,就说你负责把需求收成可实现的范围,并举一个你改过范围的例子。没有,就说你和业务方直接确认主路径,见本题「183」。不要把业务方的想法说成自己的产品判断,也不要把自己补的异常分支说成没有贡献。
261 · 难 · 非Agent · 你的 Java 到什么程度?
类型:非Agent面试
来源:面经(linux.do)· YF
用你写过的最大一块来定位:没写过、能改现有接口、能独立做一块业务。语法、集合、异常可以说到你用过的为止。没碰过并发和 JVM 调优就不要讲。和这次岗位无关时,说明你的主语言是什么。
262 · 难 · 非Agent · 你的 Kubernetes 日常用到什么程度?
类型:非Agent面试
来源:面经(linux.do)· YF
分成:只会构建镜像、能看 Pod 日志和重启、能改部署和配置、能处理发布失败。按你做过的最高一层说,并举一次发布或排障。概念见本题「192」到「194」。没上过集群就说没上过。
263 · 中 · 非Agent · 让你在 Linux 上查错误日志,你怎么查?
类型:非Agent面试
来源:面经(linux.do)· YF
先确认日志在文件里还是在 systemd 里。文件用按关键字过滤再看末尾,例如错误和异常。服务用 journalctl 按单元和优先级看最近若干行。知道时间范围就加上时间,避免在整份历史里翻。
看到错误后回到对应请求的标识,而不是只贴最后一行。权限不够或文件名不确定,先列出日志目录再查,不要对一个猜的路径下结论。
264 · 中 · 非Agent · MySQL 5.6 和 8.0 有什么差别?
类型:非Agent面试
来源:面经(linux.do)· YF
8.0 有窗口函数、公用表表达式、角色、更完整的在线 DDL,默认字符集和认证插件也变了。5.6 没有这些,升级时密码插件和保留字经常先出问题。
优化器在两个大版本里对同一条 SQL 可能选出不同计划,升级前要用慢查询再看执行计划。不要只背版本号。
265 · 难 · 非Agent · 你的数据库能力处于什么水平?
类型:非Agent面试
来源:面经(linux.do)· YF
用证据定位:能写业务 SQL、能看执行计划补索引、做过归档或主从、做过分库分表。停在哪一层就停在哪一层。见本题「247」和「266」。没在生产上处理过慢查询,就不要说自己擅长调优。
266 · 中 · 非Agent · 索引的最左前缀是什么?
类型:非Agent面试
来源:面经(linux.do)· YF
联合索引从左边连续使用。索引是 (a, b, c) 时,条件里有 a、a 和 b、或三者都有,才能顺着这棵索引找。只有 b 或只有 c,用不上这棵索引的查找。
遇到范围条件,这棵索引在范围这一列之后的列不再用于查找,仍可能用来覆盖或排序,这要看执行计划。所以列的顺序要符合真实的查询,而不是把所有字段随便排进去。
267 · 中 · 非Agent · 上万条数据的页面怎么渲染才不卡?
类型:非Agent面试
来源:面经(linux.do)· YF
不要一次创建上万个 DOM。虚拟列表只渲染可视区域和少量缓冲,滚动时换数据。服务端再做分页或按游标拉取。
筛选放在服务端还是已经取回的数据上,要看数据是不是全在浏览器里。图片和复杂样式会比行数先成为瓶颈。Agent 对话列表的虚拟化见现有题目「086」,原理相同。
268 · 中 · 非Agent · 原生小程序怎么做状态管理?setData 有什么问题?
类型:非Agent面试
来源:面经(linux.do)· YF
原生没有内置的大型状态库。页面用自己的 data,跨页面用应用上的全局对象、事件或自行引入的小状态库。自定义组件用属性和事件通信。
setData 把数据从逻辑层送到渲染层,数据会被序列化。一次传很大的对象,或频繁传没有变化的树,页面会卡。只传变化的路径,合并同一时刻的更新,列表用分页或虚拟化。不要把它当成普通的赋值。
269 · 中 · 非Agent · 首页慢、图片大,从哪些方向优化?
类型:非Agent面试
来源:面经(linux.do)· YF
图片用合适的尺寸和格式,走缓存,首屏之外的懒加载,首屏那一张优先。脚本和样式不要挡住第一屏。接口能并行的并行,不要等一个无关请求完了再画页面。
先用性能面板看是下载、脚本还是渲染。没有测量就同时改十处,不知道是哪一处生效。
270 · 难 · 非Agent · 你理想的工作是什么?现在做 AI 是岗位需要还是业余在学?
类型:非Agent面试
来源:面经(linux.do)· YF
理想工作说职责和问题类型,不说一家虚构的完美公司。AI 若是当前岗位里的交付,就举上线或仓库里的改动;若主要是业余学习,就说清业余做到了哪一个可运行的练习,以及你准备怎么把它变成工作里的责任。见本题「218」。两种都沾,就按比例说,不要把课程项目说成生产系统。