腾讯 IEG 光子 一面 4.23 11:00-12:00

八股

VueDIFF 算法核心是什么,具体怎么实现

无论是 Vue2Vue3,还是 React,它们在对比两棵树时,都是“同层比较”。如果同一层级的节点类型(如 div 变成了 span)或 key 发生了变化,它们都会直接销毁旧节点、创建新节点,不再继续向下深度比较。

面经图 15

大模型

上下文工程演变历程

上下文工程的本质是【如何更高效地管理大模型的短期显存】,主要经历了以下五个阶段:

1. 意图对齐期:Few-Shot (少样本学习)

痛点:纯零样本(Zero-shot)下,模型输出的格式和语气易跑偏,不符合业务预期

方案:在上下文中预置 2-3 个标准 Q&A 样例,模型无需微调即可通过类比完成任务

2. 容量突破期:RAG (检索增强生成)

痛点:早期模型 Token 窗口小(4K-8K),无法直接塞入长文档或私密数据,易产生事实幻觉

方案:引入向量数据库(Vector DB)。在喂给大模型前先进行语义检索,取出最相关的切片(Top-K Chunks),按需拼接进上下文

3. 降本提效期:压缩与缓存 (Compression & Caching)

痛点:128K+ 超长窗口带来副作用:1)中间细节丢失(Lost in the Middle);2)Token 费用高昂;3)首字响应(TTFT)极慢

方案:【信息压缩】引入小模型(如 LLMLingua)提前剔除无用停用词,实现信息浓缩。【物理缓存】利用 Prompt Caching 技术,将长期不变的系统提示词或长文档固化在 GPU 显存池中,命中后实现降本及秒级响应

4. 架构隔离期:多智能体编排 (Agentic Workflow)

痛点:复杂任务下,将多轮历史、旧目标、报错栈全塞入单一上下文,会导致模型逻辑错乱(即上下文污染 Context Pollution / 上下文腐化 Rot/ 上下文衰减 Decay

方案:从“单体巨石”转向“微服务”。拆分多 Agent,实施上下文局部隔离(例如:Planner 只看宏观需求,Coder 只看当前函数)。引入草稿纸(Scratchpad)机制隔离推演过程与最终输出

5. 跨会话感知期:持久化记忆 (Stateful Memory)

痛点:模型底层无状态(Stateless),跨级、跨会话的历史经验无法继承,需反复输入背景信息

方案:引入全自动化记忆层。在后台静默提取用户偏好构建【特征图谱】,当用户开启新会话时,系统利用语义检索精准激活历史记忆,前置拼装为用户的上下文

skill 是直接传给底层大模型嘛

不会直接生传,通常经过如下中间件:

意图路由引擎:判断当前任务是否需要使用特定的 skill

文本解析与 Chunking:如果 Markdown 内容长,会切片或者转换为结构化提示

RAG 向量检索:如果是知识型 skill,会被作为外部知识存入向量库检索

Prompt Builder(拼装器):将 user query, rules(系统规则), history(记忆)和截取的 skill.md 内容动态组装进最终的 Prompt payload 中,提交给 LLM

AI 与人如何协作

人做架构与审查,AI 做填空与执行(Copilot 模式)

AI 负责: 繁琐样板代码生成、文档编写、单测补充、海量日志初步排错

人类负责: 核心业务逻辑设计、边界条件定义、架构选型、最终 Safety Review

信任但验证(Trust but Verify):AI 视为【高智商但容易粗心的应届生实习生】

AI 时代怎么学习知识,怎么学会知识

这个问题很诡异,我说通过与 AI 对话快速获取知识,面试官说【AI 像是老师,老师讲完之后你怎么学习并把知识化为自己的】,那我就说可能通过 NotebookLM 之类的工具提高做笔记的效率,不确定是否回答到点子上……

RulesMemoryHarness 的区别

Rules 是指导大模型行为的系统级约束与准则(System Prompt),核心作用是限制行为边界和指导输出风格。不会因为你当前在开发什么项目而改变,规定了 AI【能做什么、不能做什么、以什么语气做】

设定 AI 必须使用 TypeScript 强类型,禁止使用 any 标注;要求所有 UI 组件必须优先使用 Tailwind CSS 类名而不是内联样式;规定生成的代码中必须要包含 JSDoc 注释等。这些属于强制遵守的法则

MemoryAI 对当前环境的认知和历史记录,它的核心作用是提供上下文,解决【我是谁、我在哪、我在做什么】的问题。Memory 是动态的,随着你的操作不断更新

实例:

短期记忆包含你和 AI 的前 10 轮对话历史,以及当前编辑器里高亮选中的那十几行代码

长期记忆(RAG 知识库)则是 Cursor 在底层把你整个项目的万行代码、路由结构解析后存入的本地向量数据库

Harness 是隐藏在模型背后的工程化执行与验证外壳

实例:

当大模型生成一段代码后,Harness 会在后台利用 Language Server ProtocolLSP)悄悄进行语法检查,如果发现有类型未引入或拼写错误,Harness 会自动把错误信息发回给大模型让它重新修改,然后再把最终正确的结果展示给你看(这就是 Shadow Workspace 机制)。此外,帮你自动执行终端命令、一键应用 Diff 代码、分析你的项目目录树结构再传给模型,这些将“模型文本”转化为“编辑器实际动作”的基础设施系统,全部统称为 Harness

面经图 16
面经图 17

工程

资源包更新怎么提高效率(只有部分文件发生改变)

内容哈希(Content Hash): Webpack / Vite 打包时给文件名带上 Hash(如 app.a1b2.js)。只更新变动的文件,未变动的文件享受浏览器强缓存

拆包(Code Splitting): 将稳定的第三方库(Vendor)和业务代码分离,业务更新不影响依赖库缓存

差异化更新(增量更新 / BSDiff): 移动端/桌面端常见,下发 patch 补丁包,客户端合并新旧版本

Service Worker 预缓存: 结合 PWA(渐进式 Web 应用,Progressive Web App)策略,后台静默下载变动文件,下次打开秒开

出现偶发问题怎么排查(移动端)

留痕与上报: 接入自研日志系统,捕获报错堆栈、SourceMap 还原,记录用户前置行为轨迹(Breadcrumbs

复现环境: 尽量还原机型、OS 版本、网络状态。利用移动端调试工具(vConsole, Eruda, Chrome Inspect

控制变量与灰度: 采用二分法隔离代码,降级回滚。是否某种特定数据格式或临界条件引发

异常监控兜底: window.onerror / 资源加载失败 / 白屏监控(MutationObserverDOM 树)

调研市场上现有的跨端框架,讲明方法步骤

  1. 明确核心诉求 (包体积、性能、生态、团队现有技术栈 Vue/React)
  2. 市场盘点 (收集主流方案:Flutter, React Native, UniApp, Taro, Capacitor)
  3. 构建评估矩阵
  • 性能表现: 渲染机制(WebView vs 原生控件 vs 自绘引擎)
  • 开发体验: 调试热更新、学习曲线
  • 生态与基建: 社区活跃度、第三方库丰富度
  1. Demo PoC 验证(做个核心业务的最小可行性产品,测试踩坑)
  2. 输出调研报告与选型建议