本次面经共 3 轮。每轮单独成文;轮次标题重复时,以“第 N 轮”和稳定的轮次 ID 区分。
轮次导航
- 第 1 轮 · 一面(16 道题)
- 第 1 轮 · 二面(10 道题)
- 第 1 轮 · 三面(6 道题)
本次面经共 3 轮。每轮单独成文;轮次标题重复时,以“第 N 轮”和稳定的轮次 ID 区分。
← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本轮面试注重基础知识的掌握与表达,涵盖了前端语言、框架原理、计算机基础、网络协议、数据库设计、加密安全等内容,兼顾技术深度与广度。 本轮共 16 道题。答案默认折叠,便于先自行作答。 1. 面向对象和面向程序设计的主要区别 题目要点 面向过程以过程为中心,强调顺序执行逻辑,适合小型程序; 参考答案 面向过程以过程为中心,强调顺序执行逻辑,适合小型程序; 面向对象以对象和行为抽象为中心,强调封装、继承、多态,适合复杂系统的可维护性与复用性设计。 2. 面向对象的三大特性 题目要点 封装隐藏内部实现、继承提高复用性、多态通过统一接口实现行为差异,三者是构建大型系统的基础。 参考答案 封装隐藏内部实现、继承提高复用性、多态通过统一接口实现行为差异,三者是构建大型系统的基础。 3. 开发的过程中你用到过哪些设计模式? 题库原题:开发的过程中你用到过哪些设计模式? 题目要点 设计模式是一种被广泛接受并经过验证的面向对象软件开发中的最佳实践。它们提供了一套解决常见问题的可重用设计方案。 参考答案 设计模式是一种被广泛接受并经过验证的面向对象软件开发中的最佳实践。它们提供了一套解决常见问题的可重用设计方案。 以下是一些常用的设计模式: 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点来获取该实例。 工厂模式(Factory):通过工厂方法创建对象,而不是直接使用new操作符。这样可以隐藏具体实现,并根据需要创建所需类型的对象。 观察者模式(Observer):定义了一种一对多的依赖关系,当一个对象状态发生改变时,它的所有依赖者(观察者)都会收到通知并自动更新。 装饰器模式(Decorator):动态地将责任附加到对象上。通过将对象包装在装饰器对象中,可以在运行时为对象添加新的行为。 策略模式(Strategy):定义了一系列算法,将每个算法封装起来并使它们可以相互替换。策略模式可以让算法独立于客户端而变化。 适配器模式(Adapter):将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不匹配而无法一起工作的类可以协同工作。 每个设计模式都有其特定的应用场景和优缺点,可以根据具体情况来选择使用。设计模式可以提高代码结构的灵活性、可维护性和可扩展性,并促进重用和解耦。然而,需要根据实际需求慎重选择和应用设计模式,避免过度设计或不必要的复杂性。 4. JavaScript 中引用数据类型和基本数据类型 题目要点 基本类型包括 Number、String 等,按值传递;引用类型如 Object、Array 按地址传递,赋值为浅拷贝。 参考答案 基本类型包括 Number、String 等,按值传递;引用类型如 Object、Array 按地址传递,赋值为浅拷贝。 5. 谈谈对Vue中双向绑定的理解 题库原题:谈谈对Vue中双向绑定的理解 题目要点 Vue中的双向绑定是其核心特性之一,它极大地简化了数据在视图(View)和模型(Model)之间的同步过程。双向绑定意味着当数据发生变化时,视图会自动更新以反映这些变化,反之亦然,用户在视图上的操作(如输入)也会自动更新到数据中。 实现原理 Vue的双向绑定主要依赖于其响应式系统(Reactivity System)和模板引擎(Template Engine)。 响应式系统:Vue使用Object.defineProperty(在Vue 3中使用了Proxy)来劫持(或说“代理”)对象的getter和setter。当组件的data中的属性被访问或修改时,Vue会拦截这些操作,并执行相应的依赖更新逻辑。这样,Vue就能追踪到数据的变化,并在需要时更新视图。 模板引擎:Vue的模板引擎使用基于HTML的模板语法,允许开发者声明式地将DOM绑定到底层Vue实例的数据上。当数据变化时,Vue的模板引擎会重新渲染模板,生成新的虚拟DOM树,并通过高效的DOM diff算法更新真实的DOM,以反映数据的最新状态。 参考答案 一、什么是双向绑定 我们先从单向绑定切入单向绑定非常简单,就是把Model绑定到View,当我们用JavaScript代码更新Model时,View就会自动更新双向绑定就很容易联想到了,在单向绑定的基础上,用户更新了View,Model的数据也自动被更新了,这种情况就是双向绑定举个栗子 ...
← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 三面偏重项目经历、思维深度与工程解决方案,兼顾产品理解与算法能力。 本轮共 6 道题。答案默认折叠,便于先自行作答。 1. 讲一下之前的实习经历,主要负责什么工作,你们团队是做什么的? 题目要点 在回答实习经历时,可以遵循: “团队是做什么的 → 自己负责了什么 → 过程中遇到的挑战 → 最终的结果和成长”。 这样既能让面试官清楚地看到候选人的贡献,也能体现出对团队目标的理解和自身成长路径的清晰度。 要不要我帮你准备几个可直接套用的实习经历表述范例,比如业务团队和前端基础设施团队两个版本? 参考答案 这个问题本质上考察的是候选人能否清晰表达实习经历的价值,以及是否能将个人的工作与团队目标联系起来。回答时既要避免流水账式的叙述,也要避免过度拔高,而是重点体现做过什么、为什么做、产生了什么影响。 回答思路 1. 团队定位与职责 先交代团队是做什么的,比如: 是否负责某条具体业务线(例如地图、金融、电商、内容平台); 是否是基础架构团队(组件库、工程化平台、性能优化、监控体系); 团队的核心目标是什么(提升用户体验、提升研发效率、支撑业务增长)。 这样能让面试官快速理解环境。 2. 个人负责的工作 描述时可以抓住几个关键词: 核心任务:负责开发某个功能模块、参与前端组件封装、接入监控埋点、优化性能等; 协作方式:是否需要和后端、测试、设计配合,是否参与需求评审或接口联调; 挑战与亮点:是否遇到过性能瓶颈、复杂交互、数据量大等问题,是否提出了改进方案。 避免简单说“写页面、改 bug”,而是强调“通过实现某个功能/优化某处性能,解决了某类问题”。 3. 收获与成长 最后点出在实习期间的成长: 是否熟悉了前端项目的完整研发流程(需求 → 开发 → 测试 → 上线 → 复盘); 是否积累了在团队协作、代码规范、工程化工具上的经验; 是否提升了技术能力,比如掌握了某些框架或优化手段。 2. 在工作中遇到过什么问题,是怎么解决的? 题目要点 这个问题的最佳回答路径是: “提出一个具体问题 → 说明如何分析定位 → 阐述解决过程和思考 → 总结结果和反思”。 重点不是问题有多难,而是展现出遇事冷静分析、推动落地并能沉淀经验的能力。 要不要我帮你列几个可以直接在面试里使用的典型案例场景,比如“性能优化”、“构建优化”、“协作问题”三类? 参考答案 这个问题考察的是候选人的问题意识、分析能力、解决路径和复盘能力。面试官关注的不是问题本身多么“高大上”,而是能否体现出逻辑清晰、方案合理、结果正向。 ...
← 第 1 轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 二面重点考察前端框架理解与性能优化能力,同时关注工程化处理思维和大规模数据处理能力。 本轮共 10 道题。答案默认折叠,便于先自行作答。 1. 元素隐藏的三种方法(display:none、visibility:hidden、opacity:0)及其区别 题目要点 display: none:元素不在文档流中,不占位,无法响应事件。 参考答案 display: none:元素不在文档流中,不占位,无法响应事件。 visibility: hidden:占位但不可见,无法响应事件。 opacity: 0:占位且可响应事件(需用 pointer-events: none 避免)。 2. display:none是否影响DOM渲染性能?如何用CSS实现淡出动画? 题目要点 display:none 会从渲染树中移除,提升性能,但不能用于动画过渡。 参考答案 display:none 会从渲染树中移除,提升性能,但不能用于动画过渡。 使用 opacity + transition 实现淡出,再用 JS 延迟设置 display:none。 3. Array.from({ length: 5 }, (v, i) => i * 2) 的输出是什么? 题目要点 输出 [0, 2, 4, 6, 8]。构造一个长度为 5 的数组,并通过索引乘以 2 填充。 参考答案 输出 [0, 2, 4, 6, 8]。构造一个长度为 5 的数组,并通过索引乘以 2 填充。 ...