本次面经共 2 轮。每轮单独成文;轮次标题重复时,以“第 N 轮”和稳定的轮次 ID 区分。
轮次导航
- 第 1 轮 · 一面(10 道题)
- 第 1 轮 · 二面(12 道题)
← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 聚焦前端基础深度:虚拟DOM性能边界(复杂DOM场景优劣)、响应式布局实现(媒体查询/弹性布局)、浏览器兼容性实战(Polyfill/Babel)、微信小程序架构设计理念。难点在于Rem计算优化策略和O(1)空间复杂度的字符串逆序算法设计。 本轮共 10 道题。答案默认折叠,便于先自行作答。 1. 自我介绍 题目要点 个人背景、技能、经验、职业规划等。 参考答案 参考模版如下,一般3分钟以内即可。 面试官您好!我叫[姓名],毕业于[毕业院校],专业是[专业名称]。我有XX段前端开发实习经验,熟练掌握HTML、CSS、JavaScript等前端技术栈,主要的技术栈是React。在XX公司实习期间,主要参与过供应链管理系统和微信小程序开发,学习了前端相关专业技术,以及熟悉了项目的整体流程,同时积累了丰富的项目经验。 2. React 的虚拟 DOM 解决了什么问题? 题库原题:React 的虚拟 DOM 解决了什么问题? 题目要点 跨平台能力:通过对象层的抽象,实现了 UI 描述与具体渲染平台的解耦。 开发范式转换:将命令式的 DOM 操作转变为声明式的数据驱动,提升了复杂业务的可维护性。 性能兜底:通过批处理和 Diff 算法,在不增加开发者负担的情况下,减少了不必要的真实 DOM 操作开销。 研发效率:让开发者专注于业务逻辑而非底层 DOM 树的增删改查,降低了出错概率。 参考答案 在探讨 React 虚拟 DOM(Virtual DOM)所解决的问题时,不能简单地将其归结为“性能更快”,这实际上是一个常见的误区。 从长期的工程实践和框架演进来看,虚拟 DOM 核心解决了以下几个维度的挑战: 1. 解决跨平台与抽象层的问题 虚拟 DOM 最本质的贡献在于建立了一层声明式的抽象。在传统的 Web 开发中,代码直接耦合在真实的 DOM 环境中。而虚拟 DOM 将复杂的 UI 转换成了一种轻量级的 JavaScript 对象结构(即 VNode)。 这种抽象层使得 React 脱离了浏览器的物理限制。因为 VNode 只是普通的 JS 对象,它不仅可以被渲染为浏览器的 DOM,也可以被渲染为移动端的原生控件(React Native)、服务端字符串(SSR)甚至是 Canvas 绘制指令。它解决了 UI 描述与底层渲染引擎之间的强耦合问题,实现了“一次学习,随处编写”的愿景。 ...
← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 深入框架原理与工程化:小程序加载流程(缓存/渲染机制)、Vue路由动态加载(Code Splitting)、全局状态管理(Vuex模块化)、生命周期资源管理(mounted/beforeDestroy)。难点在于手势识别算法(滑动速度计算)和可控动画引擎(开始/暂停/取消)。 本轮共 12 道题。答案默认折叠,便于先自行作答。 1. 小程序的页面加载流程是怎样的?请简要描述从用户点击小程序图标到页面显示的整个过程。 题库原题:小程序的页面加载流程是怎样的?请简要描述从用户点击小程序图标到页面显示的整个过程。 题目要点 双线程并行:启动过程是渲染层(UI)和逻辑层(JS)同步初始化的过程。 离线包机制:通过本地缓存和分包加载策略,极大减少了网络传输对首屏的影响。 预加载优化:微信客户端通过预热环境和提前下载包来压榨启动耗时。 数据驱动渲染:首屏显示依赖于逻辑层到渲染层的初始数据传输(setData 机制的前身)。 参考答案 小程序的加载是一个多线程协作的过程,主要可以分为环境准备、代码下载、注入运行以及首屏渲染四个阶段。 1. 运行环境准备(准备阶段) 当用户点击小程序图标时,微信客户端会立即启动一个原生容器。 进程启动:微信会为小程序分配独立的进程或线程。 双线程环境初始化:微信会同时初始化两个运行环境,即逻辑层(AppService)和渲染层(WebView)。为了提速,微信通常会预先启动一个通用的空白 WebView(预加载机制),从而缩短环境搭建的时间。 2. 代码包下载与加载(资源阶段) 在环境准备的同时,微信会根据小程序的 AppID 去服务端请求最新的代码包。 增量更新与缓存:如果本地已有缓存,则直接校验版本;若无或版本过旧,则下载加密的代码包。 分包加载优化:如果开发者配置了分包,此时只会下载“主包”内容,从而减少首次下载的数据量,提升启动速度。 3. 代码注入与逻辑初始化(初始化阶段) 代码包下载完成后,微信会开始解析并执行代码。 逻辑层注入:执行 app.js 和各页面的 JS 逻辑。此时,小程序会触发 App.onLaunch 和 App.onShow 生命周期回调。 配置解析:解析 app.json 和页面配置,确定全局样式、路由关系及初始页面。 4. 渲染层视图构建与首屏渲染(渲染阶段) 这是用户肉眼感知页面出现的关键时刻。 视图层初始化:渲染层载入 WXML 转换后的模板和 WXSS 样式。 初始数据传输(First Paint):逻辑层在实例化页面后,会将初始数据(Initial Data)通过微信底层提供的 evaluateJavascript 方式,跨线程传递给渲染层。 动态渲染:渲染层接收到数据后,结合模板生成最终的 DOM 树,并交由浏览器引擎进行绘制。 5. 交互就绪(Finish 阶段) 生命周期触发:页面初次渲染完成后,逻辑层会收到反馈,并触发页面的 onReady 回调。此时,逻辑层与渲染层已经建立了稳定的双向数据绑定,用户可以开始进行交互操作。 2. 小程序页面间有哪些传递数据的方法? 题库原题:小程序页面间有哪些传递数据的方法? ...