news 2026/4/16 23:47:17

前端八股文面经大全:京东零售JDY前端一面(2026-04-14)·面经深度解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端八股文面经大全:京东零售JDY前端一面(2026-04-14)·面经深度解析

前言

大家好,我是木斯佳。

相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的潮水退去,留下的才是真正在踏实准备、努力沉淀的人。学习的需求,从未消失,只是变得更加务实和深入。

这个专栏的初衷很简单:拒绝过时的、流水线式的PDF引流贴,专注于收集和整理当下最新、最真实的前端面试资料。我会在每一份面经和八股文的基础上,尝试从面试官的角度去拆解问题背后的逻辑,而不仅仅是提供一份静态的背诵答案。无论你是校招还是社招,目标是中大厂还是新兴团队,只要是真实发生、有价值的面试经历,我都会在这个专栏里为你沉淀下来。专栏快速地址

温馨提示:市面上的面经鱼龙混杂,甄别真伪、把握时效,是我们对抗内卷最有效的武器。

面经原文内容

📍面试公司:京东零售JDY
🕐面试时间:4月14日早上10:30,时长25分钟
💻面试岗位:前端一面
📝面试体验:面试官很友善,跟美团一样舒服,无手撕,一半八股一半项目

❓面试问题:

  1. 两个项目中哪个难度更高,为什么
  2. 虚拟消息列表解决什么问题
  3. 前缀高度表 + 二分查找在虚拟列表中解决什么问题
  4. 上下文摘要压缩机制的实现思路
  5. 本地持久化机制如何实现,用什么结构存储
  6. 存储溢出如何处理,有无删除逻辑
  7. 流式响应与非流式响应的区别
  8. 流式返回慢时界面如何优化
  9. 大模型返回中断如何处理(断点续传/重连)
  10. Vue3 和 Vue2 有什么区别
  11. 大文件分片上传怎么实现
  12. 秒传、断点续传的实现原理
  13. 了解哪些设计模式
  14. 观察者模式的优点是什么
  15. 了解哪些排序算法
  16. 归并排序的时间、空间复杂度是多少
  17. 是否了解 Transformer 原理
  18. 解释 MCP 和 Skill 的原理

来源:牛客网 前端死了咩

💡木木有话说(刷前先看)

京东零售这场一面,是一份“质量比较高”的面经。中规中矩,结合了传统前端高频八股与新AI生产力内容。设计模式我最近半个月都看到比较少问,其实设计模式相关的东西也是非常值得同学们专门去刷刷的,对一些代码的理解会有帮助。
总体来讲,这份面经非常适合用来检验AI应用开发+工程化的能力——既有深度,又有广度。


📝 京东零售JDY前端一面·深度解析

🎯面试整体画像

维度特征
面试风格友善引导型 + 工程实战型 + AI应用型
难度评级⭐⭐⭐⭐(四星,虚拟列表优化、上下文压缩、MCP等较深)
考察重心虚拟列表高级优化、上下文管理、本地持久化、流式响应、AI工程化概念
特殊之处无手撕,但问到了MCP和Skill等较新的AI工程化概念

🔍逐题深度解析

三、虚拟消息列表解决什么问题

回答思路:虚拟列表解决长列表渲染的性能问题。

具体问题

  • DOM节点过多:消息量大时(如上千条),浏览器渲染大量DOM节点,内存占用高
  • 滚动卡顿:每次滚动都涉及大量DOM的重排重绘
  • 首屏加载慢:一次性渲染所有消息导致白屏时间长

解决方案:只渲染可视区域内的消息,动态替换,保持DOM节点数恒定。


四、前缀高度表 + 二分查找在虚拟列表中解决什么问题

回答思路:这是虚拟列表的进阶优化,用于处理可变高度的列表项。

问题:消息高度不一致(文本长短不同、带图片等),无法用固定高度预估位置。

前缀高度表

  • 存储每条消息的累积高度,如[h1, h1+h2, h1+h2+h3, ...]
  • 通过二分查找快速定位滚动位置对应的消息索引

二分查找的作用

  • 给定滚动距离scrollTop,在前缀高度表中二分查找第一个大于scrollTop的位置
  • 时间复杂度从O(n)降为O(log n),滚动时实时计算不卡顿
// 前缀高度表constprefixHeights=[100,250,450,700,1000]// 滚动到300px,二分查找找到索引2(450>300),起始索引为2

五、上下文摘要压缩机制的实现思路

回答思路:AI对话中历史消息过长时,用摘要压缩替代原始消息。

实现步骤

  1. 触发条件:消息token数超过阈值(如4000 tokens)
  2. 选择压缩内容:保留系统消息+最近N条,压缩中间消息
  3. 调用LLM生成摘要:将中间消息发送给模型,生成简短摘要
  4. 替换上下文:用摘要替代原始消息,继续对话
asyncfunctioncompressContext(messages,maxTokens=4000){lettokens=estimateTokens(messages)if(tokens<=maxTokens)returnmessagesconstsystem=messages.find(m=>m.role==='system')constrecent=messages.slice(-6)// 保留最近6条consttoCompress=messages.slice(1,-6)constsummary=awaitgenerateSummary(toCompress)return[system,{role:'system',content:`历史摘要:${summary}`},...recent]}

六、本地持久化机制及存储结构

回答思路:前端本地存储对话历史、用户设置等。

实现方式

  • IndexedDB:存储大量结构化数据(消息列表),支持索引、事务
  • localStorage:存储轻量配置(用户设置、会话ID)

存储结构

// IndexedDB 结构constdbSchema={conversations:{keyPath:'id',indexes:['updatedAt','title']},messages:{keyPath:'id',indexes:['conversationId','timestamp']}}// 示例数据{id:'conv_123',title:'React讨论',updatedAt:Date.now(),messages:[...]// 或单独存储}

七、存储溢出如何处理(删除逻辑)

回答思路:实现LRU(最近最少使用)淘汰策略。

实现

  1. 记录每条会话的最后访问时间
  2. 存储总大小超过阈值时,删除最久未访问的会话
  3. 可设置最大会话数(如50条)或最大存储容量(如50MB)
classConversationStorage{constructor(maxItems=50){this.maxItems=maxItems}save(conversation){constitems=this.getAll()if(items.length>=this.maxItems){// 删除最久未使用的constoldest=items.sort((a,b)=>a.lastAccessed-b.lastAccessed)[0]this.delete(oldest.id)}this.store(conversation)}}

八、流式响应与非流式响应的区别

维度非流式响应流式响应
数据返回一次性返回完整数据分块逐步返回
用户感知等待时间长,空白期逐字显示,无空白
实现方式普通HTTP请求SSE、WebSocket、Fetch + ReadableStream
适用场景短文本、API接口AI对话、大文件、实时日志

九、流式返回慢时界面如何优化

回答思路:从用户体验和性能两个维度优化。

优化策略

  1. 骨架屏/占位符:先展示消息容器,再逐字填充
  2. 打字机效果:控制显示速度,避免闪现太快
  3. 优先渲染首屏:先展示已收到的内容,不等全部
  4. 加载提示:显示“正在输入中…”动画
  5. 预加载:提前建立连接,减少首字延迟
// 打字机效果asyncfunctiontypewriter(text,element,speed=30){for(leti=0;i<text.length;i++){element.textContent+=text[i]awaitnewPromise(r=>setTimeout(r,speed))}}

十、大模型返回中断如何处理(断点续传/重连)

回答思路:结合SSE的断线恢复机制。

方案

  1. 自动重连:SSE原生支持,监听onerror触发重连
  2. 断点续传:携带Last-Event-ID,服务端从断点继续推送
  3. 消息缓存:前端缓存已收到的内容,重连后追加
  4. 超时重试:设置超时时间,超时后主动重连
functionconnectWithResume(){letlastId=localStorage.getItem('last_event_id')consturl=lastId?`/events?lastId=${lastId}`:'/events'constsource=newEventSource(url)source.onmessage=(e)=>{constdata=JSON.parse(e.data)localStorage.setItem('last_event_id',data.id)appendMessage(data.content)}}

十一、Vue3和Vue2的区别

维度Vue2Vue3
响应式Object.definePropertyProxy
API风格Options APIComposition API(推荐)
TypeScript支持较弱原生支持
体积较大更小(tree-shaking)
性能初始化递归遍历懒递归,性能更好
新特性-Teleport、Suspense、Fragment

十二、大文件分片上传实现

回答思路:参考之前面经的断点续传。

核心Blob.slice分片 + 并发上传 + 合并通知。


十三、秒传、断点续传的实现原理

秒传

  • 上传前计算文件哈希(如MD5)
  • 服务端检查哈希是否存在,存在则直接返回成功,无需上传

断点续传

  • 服务端记录已上传的分片
  • 前端跳过已上传分片,只传缺失部分

十四、了解哪些设计模式

常见设计模式

  • 单例模式:全局状态管理(Vuex/Pinia)
  • 观察者模式:响应式系统、事件总线
  • 工厂模式:创建不同类型的组件
  • 策略模式:表单校验规则
  • 装饰器模式:高阶组件(HOC)
  • 发布-订阅模式:跨组件通信

十五、观察者模式的优点

优点

  1. 解耦:目标和观察者之间松耦合,彼此不需要知道对方细节
  2. 动态关系:运行时可以添加/删除观察者
  3. 广播通信:一个目标变化,可以通知多个观察者
  4. 符合开闭原则:增加新观察者无需修改目标代码

Vue中的应用:响应式系统中,数据(目标)变化时,自动通知依赖它的组件(观察者)更新。


十六、了解哪些排序算法

常见排序

  • 冒泡排序、选择排序、插入排序(O(n²))
  • 归并排序、快速排序、堆排序(O(n log n))
  • 计数排序、桶排序、基数排序(非比较排序)

十七、归并排序的时间、空间复杂度

  • 时间复杂度:O(n log n)(最好、最坏、平均都是)
  • 空间复杂度:O(n)(需要额外数组存储临时数据)

十九、是否了解Transformer原理

回答思路:Transformer是LLM的核心架构(如GPT、BERT)。

核心组件

  1. 自注意力(Self-Attention):计算序列中每个词与其他词的相关性
  2. 多头注意力(Multi-Head Attention):多个注意力头并行,捕捉不同维度的关系
  3. 前馈网络(Feed-Forward):对注意力输出做非线性变换
  4. 位置编码(Positional Encoding):注入位置信息
  5. 残差连接 + 层归一化:稳定训练
Transformer = Encoder(编码器)+ Decoder(解码器) Encoder:输入 → 多头注意力 → 前馈网络 → 输出 Decoder:输出 → 掩码多头注意力 → 编码器-解码器注意力 → 前馈网络 → 输出

二十、解释MCP和Skill的原理

回答思路:这是AI工程化的新概念。

MCP(Model Context Protocol):Anthropic提出的模型上下文协议,用于标准化AI Agent与外部工具/数据的交互方式。

核心

  • 定义工具(Tools)、资源(Resources)、提示(Prompts)的统一接口
  • AI可以动态发现和调用工具,无需硬编码

Skill(如Cursor的Skill、Copilot的Skill):

  • 预定义的能力单元,封装特定任务的Prompt + 工具调用
  • 例如:代码审查Skill、生成单元测试Skill、解释代码Skill

原理

  1. 开发者定义Skill(名称、描述、指令、可调用的工具)
  2. AI根据用户意图自动选择合适的Skill
  3. 执行Skill的指令,调用相关工具,返回结果

示例

# test-generator.skillname:生成单元测试description:为指定函数生成单元测试用例instructions:|分析用户提供的代码,生成完整的Jest单元测试tools:-read_file-search_code

📚知识点速查表

知识点核心要点
虚拟列表解决长列表性能,固定/可变高度,前缀高度表+二分查找
上下文压缩历史消息超长时生成摘要,保留系统消息+最近N条
本地持久化IndexedDB(大量数据)+ localStorage(轻量配置),LRU淘汰
流式响应分块返回,打字机效果,预加载,骨架屏
断点续传Last-Event-ID,重连后继续推送
Vue3 vs Vue2Proxy、Composition API、TS支持、体积更小
分片上传Blob.slice、并发上传、秒传(哈希)、断点续传
观察者模式松耦合、广播通知、动态添加观察者
归并排序O(n log n)时间,O(n)空间
Transformer自注意力、多头注意力、位置编码
MCP/Skill模型上下文协议、预定义能力单元、动态工具调用

📌 最后一句:

京东零售这场一面,是一场“工程化+AI应用”的优质面试。从虚拟列表的二分查找优化,到上下文摘要压缩、本地持久化LRU淘汰,再到MCP和Skill这些AI工程化前沿概念,面试官既考基础深度,又问技术广度。用户反馈“跟美团一样舒服”,说明面试官是懂业务、懂技术、也懂沟通的人。这样的面试,即使没过,也能让人学到东西。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 23:46:28

树莓派小车————从“冲出弯道”到“丝滑循迹”的调参实战

1. 从零开始的树莓派小车循迹之旅 第一次玩树莓派小车循迹的朋友们&#xff0c;相信你们和我一样兴奋又忐忑。我清楚地记得那天晚上&#xff0c;当我看着自己组装的小车在直线上跑得稳稳当当&#xff0c;却在第一个弯道就"飞"出赛道时的心情——简直像个刚学会走路就…

作者头像 李华
网站建设 2026/4/16 23:44:48

Lando多项目协作:团队开发的完整解决方案终极指南

Lando多项目协作&#xff1a;团队开发的完整解决方案终极指南 【免费下载链接】lando A development tool for all your projects that is fast, easy, powerful and liberating 项目地址: https://gitcode.com/gh_mirrors/la/lando Lando是一款快速、简单、强大且自由的…

作者头像 李华
网站建设 2026/4/16 23:42:06

UPF实战:构建多电压域与电源门控的物理实现蓝图

1. 多电压域设计的核心挑战 我第一次接触多电压域设计是在2015年一个智能手表芯片项目上。当时客户要求在保持性能的同时将待机功耗降低到竞品的60%&#xff0c;这个看似简单的需求让我们团队整整加班了三个月。多电压域设计最让人头疼的不是概念理解&#xff0c;而是如何在物理…

作者头像 李华
网站建设 2026/4/16 23:41:12

Linux开发工具(gdb/cgdb篇)

目录 1.模式 -g选项&#xff0c;让最后形成的可执行程序&#xff0c;添加调试信息---dabug模式&#xff01; 程序要调试&#xff0c;必须debug模式&#xff01;也就是说明编译时要加-g选项 2.安装gdb 3.快速认识gdb 输入quit可以退出 查看代码list b打 断点 r运行…

作者头像 李华
网站建设 2026/4/16 23:40:21

3-5 WPS JS宏 工作表的移动与复制学习笔记

************************************************************************************************************** 点击进入 -我要自学网-国内领先的专业视频教程学习网站 *******************************************************************************************…

作者头像 李华