字节-今日头条-校招 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本次面试主要考察前端基础知识、项目经验和算法能力。 本轮共 12 道题。答案默认折叠,便于先自行作答。 1. 简单介绍一下你上一段实习中觉得做的比较好的项目 题目要点 ● 主观型问题,无唯一标准答案。 ● 面试官主要考察你的项目理解深度、技术选型能力、问题解决能力、以及对项目成果的复盘与表达能力。 ● 建议的答题结构:首先简要介绍项目背景和你的角色;接着详细阐述你在项目中负责的具体工作、遇到的挑战及如何解决;最后总结项目成果和你的收获。 参考答案 我在XX公司实习期间,参与了一个内部运营效率工具的开发,其中我主导了"智能数据报表系统"的前端部分,这个项目我个人觉得做得比较好。项目背景是,之前的运营数据统计完全依赖人工手动导出和整理,效率低下且易出错。我们团队的目标是构建一个自动化、可视化的报表系统,让运营人员能够实时查看核心数据指标。 我主要负责报表的可视化组件开发和数据交互逻辑。在技术选型上,我没有简单地套用现有图表库,而是深入调研了业务需求,最终选择了ECharts进行定制化开发,因为它的灵活性和丰富图表类型能很好地满足我们多样化的报表展示需求。开发过程中最大的挑战是如何处理海量数据在前端的渲染性能问题。初期我们尝试直接加载全部数据,导致页面卡顿严重。我查阅资料并与后端协商,最终采用了数据分批加载和前端数据虚拟化的方案,即只加载当前视图所需数据,并对表格和图表进行局部渲染。这不仅大幅提升了页面响应速度,也降低了后端的数据传输压力。 另一个亮点是,我设计并实现了一个可配置的报表生成器。运营人员可以通过拖拽组件、配置数据源和筛选条件,自定义生成各种报表,极大地提高了他们的工作效率,也减少了开发人员的维护成本。在项目上线后,我通过用户反馈持续迭代,例如增加了数据导出功能、优化了图表联动效果,使得系统更加完善。这个项目让我深刻体会到了前端工程化和性能优化的重要性,也锻炼了我从需求分析到方案设计、再到具体实现和持续优化的全链路项目能力。 2. 想知道你们的项目大概是什么样的结构,你在开发的时候会从什么地方下手? 题目要点 ● 主观型问题,无唯一标准答案。 ● 面试官主要考察你对项目整体架构的理解、系统性思维、以及实际开发流程的把控能力。 ● 建议的答题结构:首先概述项目采用的架构模式(如微前端、Monorepo、单体应用等);接着描述核心模块的划分和技术栈;然后详细说明当你接到一个开发任务时,会从哪些方面着手分析和实现;最后可以提及一些你在开发流程中的最佳实践或思考。 参考答案 我们团队负责的XX系统,其整体架构是一个典型的微前端应用。具体来说,我们采用了基于qiankun的微前端方案,将整个系统拆分为多个独立的子应用,例如用户管理、订单中心、数据分析等。每个子应用都可以独立开发、独立部署,但在主应用中进行集成和路由管理。这样的好处是,团队成员可以专注于各自的子应用开发,降低了耦合度,也便于技术栈的演进和模块的复用。 当我接到一个开发任务时,通常会遵循以下步骤: 首先是需求分析和理解。我会仔细阅读需求文档,明确用户故事和业务目标,如果存在不清晰的地方,会主动与产品经理或设计师沟通,确保我对需求的理解是准确和全面的。这一步至关重要,它决定了后续开发的方向。 其次是技术方案设计。我会根据需求,结合当前项目的架构和技术栈,思考实现方案。这包括:是否需要新增组件或模块?数据流如何设计?接口如何定义?是否涉及到性能优化或兼容性问题?例如,如果是一个新功能模块,我会考虑其在微前端架构下的集成方式,以及与主应用之间的通信机制。如果涉及复杂的数据处理,我会优先考虑数据在前端的缓存策略,以及如何减少不必要的渲染。 接着是代码实现。我会根据设计好的方案,开始编写代码。我会严格遵循团队的代码规范和组件化原则,确保代码的可读性和可维护性。在实现过程中,我会注重模块的拆分和函数的封装,避免出现冗余代码。 在开发过程中,我非常重视自测和调试。我会编写单元测试和集成测试,确保自己实现的功能符合预期。如果遇到问题,会利用浏览器开发工具进行调试,分析问题原因并及时解决。此外,我也会关注代码的性能,例如使用Chrome DevTools进行性能分析,寻找优化点。 最后是代码评审和部署。在完成开发和自测后,我会提交代码进行代码评审,听取团队成员的建议,并对代码进行优化。通过评审后,会按照CI/CD流程进行部署,并在部署后关注线上监控,确保功能稳定运行。 这种结构化的开发流程,使得我在面对复杂任务时能够有条不紊地进行,并能及时发现和解决问题,保障了项目的开发质量和效率。 3. IntersectionObserver的事件回调是宏任务还是微任务?如何判断呢? 题目要点 ● JavaScript 事件循环机制:考察对宏任务和微任务的理解,以及它们在事件循环中的执行顺序。 ● 浏览器 API 原理:考察对 IntersectionObserver 这一 Web API 的底层工作原理的掌握,特别是其回调函数的执行时机。 ● 实际应用与判断:考察如何在实际开发中判断异步操作的类型,并理解其对程序性能和行为的影响。 参考答案 1.1 原理说明 IntersectionObserver 的事件回调是微任务。 宏任务 (MacroTask):包括 script (整体代码)、setTimeout、setInterval、setImmediate (Node.js 独有)、I/O、UI 渲染等。每次事件循环只会执行一个宏任务,执行完后会检查微任务队列。 微任务 (MicroTask):包括 Promise.then()/.catch()/.finally()、MutationObserver、process.nextTick (Node.js 独有)、queueMicrotask。微任务在当前宏任务执行完毕后,下一个宏任务开始之前执行,且会清空所有微任务。 IntersectionObserver 的回调函数被设计为微任务,是为了保证在当前帧的 DOM 更新完成之后、但浏览器渲染之前执行。这样可以确保在回调函数中进行的 DOM 操作能够及时反映在当前帧的渲染中,避免了不必要的布局抖动或视觉闪烁。 ...

June 27, 2025

字节-今日头条-校招 · 第 1 轮 · 一面

← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本次面试主要考察前端基础知识和工程化实践 本轮共 19 道题。答案默认折叠,便于先自行作答。 1. 介绍一下简历中的组件库项目 题目要点 非唯一标准答案:本题是主观型问题,没有唯一的标准答案,主要考察面试者的综合能力。 考察能力:面试官主要考察您的表达能力、对项目背景和技术细节的理解、解决问题的思路系统性,以及项目复盘和总结的能力。 答题结构建议:建议从项目背景和目的、技术选型与核心功能、遇到的挑战与解决方案、个人贡献与收获等方面展开阐述,力求条理清晰、重点突出。 参考答案 高质量参考范文: 在我的简历中,我提到了一个组件库项目,这个项目是我在实习期间为了统一团队UI规范,提升开发效率而主导或参与开发的。我们的目标是构建一套覆盖常用UI组件(如按钮、输入框、弹窗、表格等)的跨框架(或特定框架如Vue/React)的组件库,以满足业务快速迭代的需求,并保证产品界面的一致性。 在技术选型上,我们选择了Vue 3 + TypeScript + Vite + Sass Modules作为核心技术栈。Vue 3 的 Composition API 帮助我们更好地组织组件逻辑,提升了组件的复用性和可维护性;TypeScript则保证了代码的类型安全,尤其是在大型项目协作中大大减少了潜在的类型错误。Vite作为构建工具,极大地提升了开发服务器的启动速度和热更新效率。在样式方面,我们采用了Sass Modules,确保了组件样式的局部作用域,避免了全局污染,同时通过Sass的变量和混入特性,提升了样式代码的可维护性。 在核心功能实现上,我们关注了组件的通用性和可配置性。例如,在实现一个Select组件时,我们不仅考虑了基本选择功能,还加入了搜索过滤、多选、自定义渲染模板、异步加载选项等高级特性。每个组件都经过了详细的API设计和文档编写,确保其他开发者能够快速上手和正确使用。我们还集成了单元测试和端到端测试,以保证组件的质量和稳定性。 在项目过程中,我们也遇到了一些挑战。例如,如何设计一套灵活的主题机制,使得组件库能够轻松适应不同业务线的品牌风格,我们最终通过CSS Variables和一套主题生成工具解决了这个问题。另一个挑战是性能优化,特别是大型组件(如虚拟列表的表格)的渲染性能,我们通过按需加载、虚拟滚动等技术手段,确保了组件在处理大量数据时依然保持流畅。 通过这个组件库项目,我不仅深入理解了前端组件化开发的最佳实践,也锻炼了我在项目规划、技术选型、问题解决和团队协作方面的能力。我觉得最大的收获是,看到自己开发的组件被其他业务方广泛使用,并有效提升了他们的开发效率时,那种成就感是非常大的。这个项目也让我对前端工程化有了更深刻的理解,认识到标准化、自动化和高质量交付对于前端开发的重要性。 2. vite 和 webpack 有什么区别? 题目要点 构建工具的理解:面试官希望了解面试者对前端构建工具的整体认知,包括它们在前端开发流程中的作用和重要性。 Vite与Webpack的核心差异:考察面试者是否能清晰阐述两者在开发模式(Dev Server)和生产模式(Build)上的根本性区别,特别是它们处理模块依赖和启动开发服务器的方式。 性能优化:面试官想确认面试者是否能从性能角度分析两者的优劣,特别是Vite如何利用ESM(ECMAScript Modules)和原生浏览器支持实现快速的开发体验。 技术趋势:考察面试者是否关注前端生态的新技术发展,并能理解新技术带来的优势和对现有工具的影响。 参考答案 1.1 原理说明 Webpack: Webpack 是一个模块打包器。在开发模式下,Webpack 会将整个应用的所有模块(JavaScript、CSS、图片等)打包成浏览器可以识别的静态资源。在启动开发服务器之前,它需要完成整个打包过程。当代码发生修改时,Webpack 会重新编译并生成新的打包文件,然后通过热模块替换(HMR)机制将更新注入到浏览器中。 Vite: Vite 是一种基于浏览器原生 ES Modules 的构建工具。在开发模式下,Vite 不会预先打包整个应用。它利用浏览器对 ES Modules 的原生支持,当浏览器请求某个模块时,Vite 会即时地对该模块进行转换(例如处理 TypeScript、Vue/React 单文件组件等),然后直接提供给浏览器。这极大地减少了开发服务器的启动时间和热更新的时间。 核心区别与联系: 开发模式启动速度:Webpack 需要先打包再启动服务,随着项目规模增大,打包时间会显著增加。Vite 则利用浏览器原生 ES Modules 按需加载,实现了"冷启动"的秒开。 热更新(HMR)机制:Webpack 的热更新通常需要重新编译被修改的模块及其依赖链。Vite 的热更新同样基于 ES Modules,当一个模块被修改时,Vite 只需要精确地替换该模块及其直接相关的部分,更新速度更快,因为不需要重新构建整个依赖图。 生产环境构建:尽管开发模式下两者原理不同,但在生产环境构建时,Vite 内部仍然会使用 Rollup 进行打包,类似于 Webpack 的打包输出,以获得最佳的兼容性和性能优化(例如代码分割、Tree-shaking 等)。这意味着 Vite 在生产构建阶段也进行打包,并非完全无打包。 底层技术:Webpack 依赖于自己的模块解析和打包机制,而 Vite 则深度依赖于浏览器原生的 ES Modules 特性。 为什么会出现 Vite:随着前端项目日益庞大,基于打包器的开发服务器在冷启动和热更新方面的性能瓶颈日益凸显。Vite 的出现正是为了解决这一痛点,通过利用浏览器原生能力,显著提升开发效率和体验。 1.2 核心用法 + 使用场景 Vite 的优势使用场景: 大型项目开发:对于拥有大量模块和复杂依赖的项目,Vite 的即时按需编译能够显著缩短开发服务器的启动时间和热更新响应时间,提升开发效率。 追求极致开发体验:如果你希望在开发过程中获得近乎瞬时的代码修改反馈,Vite 是一个理想的选择。 新建项目:对于新项目,Vite 提供了更现代、更快速的开发起点。 Webpack 的优势使用场景: 老旧项目或复杂构建需求:对于历史项目,或需要高度定制化构建流程(例如微前端、特殊资源处理)的项目,Webpack 成熟的生态系统和灵活的配置依然是其优势。 对浏览器兼容性有极高要求:Webpack 拥有更广泛的浏览器兼容性处理能力,可以通过各种 Loader 和 Plugin 支持老旧浏览器特性。 核心用法体现: 无论是 Vite 还是 Webpack,它们的核心目标都是为了提供更好的开发体验和生产环境下的代码优化。Vite 通过"开发阶段无打包"的理念解决了传统打包器的性能痛点,而 Webpack 则以其强大的生态和高度可配置性,满足了各种复杂的构建需求。开发者在项目中选择使用哪种工具,通常取决于项目规模、团队熟悉度、对开发效率和生产环境性能的权衡。 1.3 常见误区或面试陷阱 误区一:Vite 在生产环境也是无打包的。 这是一个常见的误解。Vite 在开发环境利用原生 ESM 实现按需加载,确实没有预打包的步骤。但为了在生产环境中获得最佳的性能和兼容性(例如代码压缩、Tree-shaking、兼容性处理等),Vite 仍然会使用 Rollup 进行打包。面试时如果直接说 Vite 生产环境也无打包,会暴露对 Vite 工作原理理解不深。 误区二:Vite 能够完全替代 Webpack。 尽管 Vite 在许多方面表现出色,尤其是在开发体验上,但它并不能在所有场景下完全替代 Webpack。Webpack 的生态系统更加庞大和成熟,拥有更多针对特定场景的 Loader 和 Plugin,其配置灵活性也更高。例如,一些复杂的构建需求、特定的兼容性要求或集成旧技术栈时,Webpack 可能会是更稳健的选择。 误区三:只强调速度快,不深入原理。 面试官更希望听到你对 Vite 和 Webpack 底层原理的理解,而不仅仅是停留在"Vite 比 Webpack 快"的表层认知。理解它们在模块处理、HMR 实现、构建流程上的差异,并能结合实际场景分析各自的优劣,才能体现出更深入的理解。 误区四:混淆"打包"和"编译/转换"。 Vite 在开发模式下不是"打包",而是对单个文件进行"编译/转换"以适应浏览器。而 Webpack 则是在启动服务前进行完整的"打包"过程。清晰区分这两个概念很重要。 3. vite 打包可能会有什么问题呢?需要怎么处理? 题目要点 Vite 生产环境构建的理解:考察面试者是否清楚 Vite 在开发和生产环境的不同工作机制,特别是它在生产环境如何进行打包。 常见打包问题及解决方案:面试官想了解面试者是否遇到过 Vite 打包过程中可能出现的问题,以及如何诊断和解决这些问题,体现解决实际问题的能力。 Rollup 配置的掌握:由于 Vite 生产环境依赖 Rollup,面试官会关注面试者是否了解如何通过配置 Rollup 来解决特定的打包问题。 性能优化与兼容性:考察面试者在打包层面如何考虑应用的性能和浏览器兼容性,以及如何通过打包工具进行优化。 参考答案 1.1 原理说明 尽管 Vite 在开发模式下以其"无打包"的理念提供极速体验,但在生产环境,它仍然需要对代码进行打包,以实现最佳的性能优化和兼容性。Vite 内部使用 Rollup 作为其生产环境的打包工具。Rollup 的优势在于其高效的 Tree-shaking(清除未使用的代码)和生成优化过的 ES Modules 捆绑包。因此,Vite 打包时可能遇到的问题,很多时候是与 Rollup 的打包特性、插件机制以及项目本身的特定需求相关的。 ...

June 27, 2025

阿里-蚂蚁金服-校招 · 第 1 轮 · 一面

← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 21 道题。答案默认折叠,便于先自行作答。 1. 数组排序:实现一个函数,对包含数字和字符串的混合数组进行排序,数字在前按升序,字符串在后按字母顺序。 题目要点 JavaScript算法。 参考答案 function sortMixedArray(arr) { return arr.sort((a, b) => { const typeA = typeof a; const typeB = typeof b; if (typeA !== typeB) { return typeA === 'number' ? -1 : 1; } if (typeA === 'number') { return a - b; } else { return a.localeCompare(b); } }); } 2. 发布订阅模式:实现一个简单的EventEmitter类,包含on, emit, off方法。 题目要点 JavaScript设计模式。 参考答案 class EventEmitter { constructor() { this.events = {}; } on(event, callback) { if (!this.events[event]) { this.events[event] = []; } this.events[event].push(callback); } emit(event, ...args) { if (this.events[event]) { this.events[event].forEach(callback => { callback(...args); }); } } off(event, callback) { if (this.events[event]) { this.events[event] = this.events[event].filter(cb => cb !== callback); } } } 3. lodash.get实现:实现一个类似lodash.get的函数,安全地获取嵌套对象属性。 题目要点 JavaScript对象操作。 ...

June 27, 2025

阿里-蚂蚁金服-校招 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 15 道题。答案默认折叠,便于先自行作答。 1. 自我介绍 题目要点 自我认知。 参考答案 您好!我是一名对前端开发充满热情的工程师,拥有[X]年的开发经验。我熟练掌握HTML、CSS和JavaScript等前端技术,并在多个项目中运用Vue、React等框架构建用户友好的应用。在大学期间,我主修计算机科学,这为我打下了坚实的编程基础。通过参与各类项目,我不仅提升了技术能力,还培养了良好的团队协作和问题解决能力。我热爱学习新技术,经常阅读技术博客并参与开源项目。在之前的实习和工作中,我积累了丰富的实战经验,能够独立完成项目开发并优化性能。我期待能在贵公司继续我的前端开发之旅,为团队贡献我的技能和热情。 2. 什么时候开始接触前端? 题目要点 学习经历。 参考答案 我是在大学二年级的时候开始接触前端开发的。当时,我选修了一门网页设计与开发的课程,这让我对前端开发产生了浓厚的兴趣。从那时起,我便开始系统地学习HTML、CSS和JavaScript等前端技术,并通过大量的实践项目不断提升自己的技能。毕业后,我继续深入学习前端框架和工具,如Vue、React等,并在实际工作中不断积累经验。 3. 复杂度比较高的项目有哪些 题目要点 项目经验。 参考答案 我参与过一个大型电商平台的前端开发,该项目的复杂度较高,主要体现在以下几个方面: 1. 技术栈丰富:项目中使用了Vue.js、Vuex、Vue Router、Vite、TypeScript等技术,结合了 Vuex 进行状态管理,Vue Router 实现了复杂的路由管理,Vite 作为构建工具提高了开发效率。 2. 性能要求高:由于平台需要支持大量的商品列表和用户并发访问,对性能的要求极高。我们通过代码分割、懒加载、图片优化等手段确保了页面的快速加载和流畅交互。 3. 功能模块复杂:涉及商品展示、购物车、订单管理、用户中心等多个功能模块,各模块之间需要紧密协作和数据共享。 4. 跨团队协作:前端团队与后端团队、设计团队紧密合作,确保项目的顺利交付。 4. 实习中的全栈部分做了什么 题目要点 全栈开发能力。 参考答案 在实习期间,我参与了多个全栈开发项目,主要负责以下工作: 1. 后端接口开发:使用Node.js和Express框架开发RESTful API接口,与前端进行数据交互。我设计并实现了用户认证、商品管理、订单处理等功能的API。 2. 数据库设计与操作:负责MySQL数据库的设计和优化,包括表结构设计、索引优化和查询性能提升。编写SQL语句进行数据的增删改查操作。 3. 前端与后端的联调:确保前后端数据格式的一致性和接口的稳定性,处理可能出现的跨域问题和数据验证问题。 4. 部署与运维:参与项目的部署工作,使用Docker容器化应用,并通过Nginx进行反向代理配置。监控应用的运行状态,及时处理线上问题。 5. Vue 和 React 都是什么时候开始接触的 题目要点 技术学习历程。 参考答案 我是在大学期间开始接触Vue和React的。具体来说: 1. Vue:在大三时,我通过一个个人项目开始学习Vue。当时,我被Vue简洁的语法和强大的组件化特性所吸引,于是深入研究了Vue的文档,并通过实践项目掌握了Vue的基本使用方法,包括组件的创建、数据绑定、事件处理等。 2. React:在大四时,我为了扩展自己的技术栈,开始学习React。我通过官方文档和在线教程了解了React的组件化思想、JSX语法以及Hooks的使用。通过一个小型的社交媒体项目,我实践了React的单向数据流和状态管理。 6. 对原生 JS 如何学习的,掌握程度怎么样 题目要点 JavaScript能力。 ...

June 27, 2025

阿里-阿里妈妈-实习 · 第 1 轮 · 一面

← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 13 道题。答案默认折叠,便于先自行作答。 1. 实现第一个元素不移动后续元素与左边相隔8px(:not(:first-child) 题目要点 CSS选择器与布局。 参考答案 要实现第一个元素不移动,后续元素与左边相隔8px,可以使用CSS中的:not(:first-child)选择器来选择除第一个元素外的所有同级元素,并为其设置左边距。这在布局中非常有用,可以避免对第一个元素应用不必要的样式。以下是一个示例: <div class="container"> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> <div class="item">Item 4</div> </div> .container { display: flex; } .item:not(:first-child) { margin-left: 8px; } 在这个示例中,.item:not(:first-child)选择器匹配了所有带有item类的元素,除了第一个元素。然后,我们通过margin-left: 8px为这些元素设置了左边距,使它们与左边的元素相隔8px。第一个元素不会受到影响,因此不会产生左边距,从而实现了题目要求的布局效果。这种技术在创建水平排列的元素时非常有用,例如导航栏或标签页,可以确保第一个元素与容器的边缘对齐,而后续元素之间保持一致的间距。 2. 写一个防抖 题库原题:实现 debounce(防抖)函数 题目要点 触发高频时间后n秒内函数只会执行一次,如果n秒内高频时间再次触发,则重新计算时间。 参考答案 触发高频时间后n秒内函数只会执行一次,如果n秒内高频时间再次触发,则重新计算时间。 const debounce = (fn, time) => { let timeout = null; return function() { clearTimeout(timeout) timeout = setTimeout(() => { fn.apply(this, arguments); }, time); } }; 防抖常应用于用户进行搜索输入节约请求资源,window触发resize事件时进行防抖只触发一次。 3. 讲讲你的项目难点 题目要点 项目经验与问题解决能力。 ...

June 27, 2025

阿里-阿里妈妈-实习 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 9 道题。答案默认折叠,便于先自行作答。 1. Flex布局中flex-grow与flex-shrink的计算规则? 题目要点 CSS布局。 参考答案 在Flex布局中,flex-grow和flex-shrink属性用于控制子元素在可用空间内的扩展和收缩行为。它们的计算规则如下: flex-grow: 定义:定义项目的扩展比例,即项目在主轴方向上可占有的额外空间的比例。 计算规则:剩余空间按项目flex-grow值的比例分配。如果所有项目的flex-grow值之和大于1,则按比例分配;如果小于1,则先分配剩余空间。 示例:如果有两个子元素,flex-grow分别为1和2,总剩余空间为300px,则第一个子元素获得100px,第二个获得200px。 flex-shrink: 定义:定义项目的收缩比例,即项目在主轴方向上需要收缩时的比例。 计算规则:当总项目大小超过容器可用空间时,项目按flex-shrink值的比例收缩。收缩的最小尺寸受min-width或min-height限制。 示例:如果有两个子元素,flex-shrink分别为1和2,总超出行空间为100px,则第一个子元素收缩约33.33px,第二个收缩约66.66px。 完整计算步骤: 计算总可用空间:容器主轴长度减去所有项目初始尺寸(flex-basis或未设置时的内容尺寸)。 判断剩余空间: 若剩余空间为正,按flex-grow分配扩展空间。 若剩余空间为负,按flex-shrink分配收缩空间。 计算比例:每个项目的比例为flex-grow或flex-shrink值除以所有项目对应值之和。 分配空间:按比例将剩余空间分配或从项目中扣除。 flex属性:flex是flex-grow、flex-shrink和flex-basis的简写形式。例如,flex: 1 1 0表示flex-grow: 1、flex-shrink: 1、flex-basis: 0。这在等比例分配剩余空间时非常有用。 2. 讲一下js闭包 题库原题:说说你对闭包的理解,以及闭包使用场景 题目要点 什么是闭包 简单理解就是函数中嵌套函数。我们都知道局部变量我们是无法访问的,但是通过闭包可以做到。 // 正常访问 var lan = 'zh'; function hello(){ var name = '前端未来'; } console.log(name)//很明显'undefined' // 换成闭包 function hello(){ var name = '前端未来'; function demo(){ console.log(name)//打印:前端未来 } } 闭包的应用场景 1. 数据封装和隐私 闭包可以用来封装数据和功能,创建具有私有变量和公共接口的模块。 应用 创建具有私有状态的模块或对象。 2. 函数工厂 闭包用于创建返回函数的函数,这些返回的函数可以维持状态。 ...

June 27, 2025

阿里-国际电商-校招 · 第 1 轮 · 一面

← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 19 道题。答案默认折叠,便于先自行作答。 1. 讲一下你的技术栈,为什么要学前端,如何学习前端的? 题目要点 技术栈、学习动机与方法。 参考答案 技术栈: HTML/CSS:用于构建页面结构和样式。 JavaScript:包括ES6+特性,用于实现页面交互。 框架:熟练使用Vue.js和React,了解其生态系统(如Vue Router、Vuex、React Router、Redux)。 构建工具:使用Vite和Webpack进行项目构建和优化。 状态管理:使用Vuex和Redux进行状态管理。 UI组件库:使用Element UI、Ant Design等。 其他工具:Git、ESLint、Prettier、Jest等。 学习动机: 前端开发结合了技术和创意,能够直接看到代码转化为用户界面,带来了即时满足感。 前端领域技术更新快,充满挑战,提供了不断学习新知识的机会。 对用户界面和交互设计的兴趣,希望创造良好的用户体验。 学习方法: 在线课程:通过Coursera、Udemy、MDN Web Docs等平台学习基础知识。 实践项目:通过个人项目和开源项目应用所学知识。 阅读书籍:如《JavaScript高级程序设计》、《你不知道的JavaScript》。 参与社区:在GitHub、Stack Overflow等社区与开发者交流,解决遇到的问题。 技术博客:关注CSS-Tricks、JavaScript.info等博客,了解新技术和最佳实践。 2. 常见的H5标签有哪些 ,你是怎么用的 题库原题:常见的H5标签有哪些 ,你是怎么用的 题目要点 常见 H5 标签包括结构语义标签、文本语义标签、表单标签和媒体标签;实际使用中优先考虑语义表达和可访问性,而非样式;充分利用表单和媒体标签的原生能力以减少 JS 复杂度;canvas 与 svg 需根据场景选择;合理使用语义化标签能显著提升页面质量和长期可维护性。 参考答案 在实际工程中,H5 标签并不是“记住有哪些”,而是是否理解它们在语义、结构、可访问性和默认行为上的差异,并能在合适的场景中使用。对标签的理解,直接影响页面结构质量、SEO 以及后续的可维护性。 从结构层面看,最常用的一类是语义化结构标签。例如 header、nav、main、section、article、aside、footer。在页面搭建时,通常会用 header 承载页面或模块级头部信息,用 nav 明确标识导航区域,用 main 作为页面主体的唯一入口,再用 section 或 article 对内容进行分块。这类标签本身不改变样式,但会向浏览器、搜索引擎和辅助技术清晰表达“这块内容的角色是什么”,比单纯使用 div 更具表达力。 ...

June 27, 2025

阿里-国际电商-校招 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 9 道题。答案默认折叠,便于先自行作答。 1. React/Vue/Angular框架熟悉哪个?对比一下 题目要点 前端框架。 参考答案 我对React和Vue较为熟悉,以下是对这三大框架的对比: React: 优点: 组件化:React采用组件化开发,将复杂的用户界面拆分为多个可复用的组件,提高代码的可维护性和复用性。 虚拟DOM:使用虚拟DOM优化DOM操作,减少页面重绘和回流,提升性能。 生态丰富:拥有庞大的生态系统,如Redux、React Router等,可满足各种复杂的开发需求。 社区活跃:社区庞大,更新迅速,遇到问题时容易找到解决方案。 缺点: 学习曲线:对初学者来说,需要学习JSX语法和组件化的思想,有一定学习成本。 配置繁琐:项目搭建和配置相对复杂,需要手动配置Webpack等构建工具。 Vue: 优点: 易上手:语法简洁,文档清晰,容易上手,适合初学者快速入门。 渐进式框架:可以逐步引入Vue,与现有项目或其他技术结合使用,灵活性高。 模板语法:使用HTML模板,对熟悉HTML和JavaScript的开发者更友好。 性能优化:也采用虚拟DOM,性能表现良好。 缺点: 生态不够丰富:相较于React,生态和社区稍小,插件和库的选择相对有限。 大型项目支持:在处理大型复杂项目时,可能不如React和Angular成熟。 Angular: 优点: 全栈解决方案:提供从前端到后端的一整套解决方案,包括路由、状态管理、表单处理等。 强类型系统:基于TypeScript开发,具有强类型检查,有助于大型项目的代码维护和团队协作。 依赖注入:内置依赖注入系统,方便管理组件和服务之间的依赖关系。 适合企业级应用:在开发大型企业级应用时,提供了一套完整的架构和规范。 缺点: 学习曲线陡峭:对初学者来说,需要掌握TypeScript、依赖注入、模块化等概念,学习成本较高。 灵活性较低:框架较为庞大,定制化程度不如React和Vue高,不适合小型项目快速开发。 社区相对较小:相较于React,社区活跃度和更新速度稍逊一筹。 2. React Hooks闭包陷阱的产生原因? 题库原题:说说你对 React Hook的闭包陷阱的理解,有哪些解决方案? 题目要点 React Hook 的闭包陷阱是一个常见的问题,它发生在使用 Hook 时,特别是在处理事件处理函数或异步操作时。 闭包陷阱的本质是,在 Hook 内部定义的函数会捕获 Hook 函数执行时的状态,而不是最新的状态。这可能会导致一些意想不到的行为,比如事件处理函数无法访问最新的状态,或者异步操作使用了过期的数据。 造成这个问题的原因是,React Hook 的设计使得组件函数在每次渲染时都会重新定义内部的函数,而这些函数会关闭当时的状态。 解决这个问题的主要方案有以下几种: 使用 useCallback Hook: ...

June 27, 2025

阿里-灵犀互娱-校招 · 第 1 轮 · 一面

← 已是第一轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 21 道题。答案默认折叠,便于先自行作答。 1. 先简单自我介绍 题目要点 自我认知。 参考答案 您好,我叫[你的名字],毕业于[学校名称]的[专业名称]专业。在大学期间,我就对计算机科学产生了浓厚的兴趣,尤其是前端开发领域。在学习和实践中,我积累了扎实的编程基础,熟练掌握了HTML、CSS、JavaScript等前端开发技术,并在多个项目中担任核心开发角色。我热爱前端开发工作,喜欢通过代码创造用户友好的界面和交互体验。在业余时间,我会不断学习新技术,提升自己的专业能力。我希望能够在一个富有创新和挑战的环境中工作,与优秀的团队成员共同成长。 2. 什么时候学前端? 题目要点 学习经历。 参考答案 我是在大学二年级的时候开始接触前端开发的。当时,我选修了一门网页设计与开发的课程,这让我对前端开发产生了浓厚的兴趣。从那时起,我便开始系统地学习HTML、CSS和JavaScript等前端技术,并通过大量的实践项目不断提升自己的技能。毕业后,我继续深入学习前端框架和工具,如Vue、React等,并在实际工作中不断积累经验。 3. 怎么学前端? 题目要点 学习方法。 参考答案 学习前端开发需要系统的学习和不断的实践。首先,我从基础的HTML、CSS和JavaScript开始,通过阅读书籍、在线教程和官方文档,打下了坚实的基础。然后,我深入学习了前端框架,如Vue和React,通过实践项目来理解框架的核心概念和使用方法。同时,我积极参与开源项目和在线社区,与其他开发者交流经验,解决遇到的问题。此外,我还关注前端技术的最新发展趋势,通过参加技术会议、观看在线课程等方式不断更新自己的知识体系。 4. 你的未来规划? 题目要点 职业规划。 参考答案 我的短期目标是在前端开发领域持续深耕,提升自己的技术能力和项目经验。我希望能够在当前的岗位上承担更多的责任,参与复杂项目的开发,并不断优化现有系统的性能和用户体验。长期来看,我希望能够成为前端技术专家,带领团队进行技术创新和项目研发。同时,我也希望能够不断提升自己的架构设计能力和团队管理能力,为公司的技术发展做出更大的贡献。 5. 你觉得你什么地方比较强?哪里比较薄弱? 题目要点 自我认知。 参考答案 我认为我的强项在于对前端技术的深入理解和实践经验。我能够快速学习新技术,并将其应用到实际项目中。同时,我具备良好的问题解决能力和团队协作精神,能够与团队成员高效合作,共同完成项目目标。然而,我也意识到自己在某些方面还有提升的空间。例如,在性能优化和大型项目的架构设计方面,我还需要进一步积累经验。此外,我还需要加强对后端技术的了解,以更好地进行前后端协同开发。 6. 一个前端架构师要有什么长处? 题目要点 职业素养。 参考答案 一个优秀的前端架构师需要具备多方面的长处。首先,需要有深厚的技术功底,对前端技术栈有全面而深入的理解,包括HTML、CSS、JavaScript、前端框架、构建工具等。其次,需要具备良好的系统设计和架构能力,能够设计出高性能、可扩展、易维护的前端系统。此外,前端架构师还需要有较强的项目管理能力,能够领导团队进行项目的规划、开发和交付。良好的沟通能力和团队协作精神也是必不可少的,能够与产品、后端团队等进行有效的沟通和协作。最后,前端架构师需要有敏锐的技术洞察力,能够关注行业动态,引入新的技术和方法,推动团队的技术进步。 7. 微前端是什么? 题库原题:什么是微前端? 题目要点 微前端(Micro-Frontends)是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。 参考答案 微前端(Micro-Frontends)是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。 各个前端应用还可以独立运行、独立开发、独立部署。 微前端不是单纯的前端框架或者工具,而是一套架构体系, 8. SPA和MPA的区别? 题库原题:SPA和MPA的区别? 题目要点 SPA 通过前端路由在单一 HTML 中完成页面切换,交互流畅但首屏和 SEO 成本较高;MPA 每次导航请求新页面,SEO 友好且隔离性强,但交互体验有限;两者本质差异在于前后端渲染与路由职责的划分;现代项目常通过 SSR、SSG 等方式在两种模式之间折中。 ...

June 27, 2025

阿里-灵犀互娱-校招 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 本次面试主要考察校招生的基础内容 本轮共 13 道题。答案默认折叠,便于先自行作答。 1. 你是什么时候开始学前端的 题目要点 学习经历。 参考答案 我接触前端开发是在大学二年级的时候。当时,我选修了一门网页设计与开发的课程,这让我对前端开发产生了浓厚的兴趣。从那时起,我便开始系统地学习HTML、CSS和JavaScript等前端技术。我通过阅读书籍、在线教程和官方文档,打下了坚实的基础。同时,我积极参与实践项目,不断提升自己的技能。毕业后,我继续深入学习前端框架和工具,如Vue、React等,并在实际工作中不断积累经验。这段学习经历不仅让我掌握了前端开发的技术,还培养了我对前端开发的热爱和持续学习的态度。 2. 为什么选择前端这个方向呢,是如何学习前端的 题目要点 学习动机与方法。 参考答案 我选择前端开发是因为它结合了技术和创意,能够直接看到自己的代码转化为用户界面,这种即时反馈让我感到非常满足。同时,前端领域技术更新快,充满挑战,能够不断学习新知识。我通过在线课程(如Coursera、Udemy)、官方文档(如MDN Web Docs)和实践项目学习前端。我积极参与开源社区(如GitHub),与其他开发者交流经验,并通过阅读技术博客(如CSS-Tricks、JavaScript.info)保持对新技术的敏感度。这种多渠道的学习方式让我能够全面掌握前端开发的技能,并在实践中不断提升。 3. 说一下你觉得前端和后端有什么区别 题目要点 前后端理解。 参考答案 前端和后端在技术栈、运行环境、关注点等方面有显著区别: 技术栈: 前端:主要使用HTML、CSS、JavaScript及其框架(如Vue、React、Angular)进行开发。例如,使用Vue.js构建用户界面,处理用户交互逻辑。 后端:使用服务器端语言(如Node.js、Java、Python、Ruby)和框架(如Express、Spring Boot、Django、Rails)开发API、处理业务逻辑和与数据库交互。例如,使用Node.js和Express框架搭建RESTful API服务器。 运行环境: 前端:代码运行在客户端浏览器中,与用户直接交互。前端开发者需要考虑不同浏览器的兼容性和用户体验。 后端:代码运行在服务器上,处理请求、管理数据和执行业务逻辑。后端开发者关注服务器性能、安全性和可扩展性。 关注点: 前端:注重用户体验、界面设计、响应式布局和性能优化(如页面加载速度、交互流畅性)。前端开发者需要与设计师紧密合作,实现视觉效果和交互功能。 后端:关注数据存储、业务逻辑实现、API设计和安全性。后端开发者需要与数据库交互,处理并发请求,并确保系统的稳定性和可靠性。 开发工具: 前端:使用VS Code等编辑器,搭配浏览器开发者工具进行调试。依赖构建工具(如Vite、Webpack)进行代码打包和优化。 后端:使用IntelliJ IDEA、PyCharm等IDE,搭配数据库管理工具(如pgAdmin、MySQL Workbench)进行开发。需要配置服务器环境(如Nginx、Apache)和部署工具(如Docker、Kubernetes)。 数据处理: 前端:主要处理数据的展示和用户输入的收集。通过API从后端获取数据,并将其转换为用户界面。 后端:负责数据的存储、查询和业务逻辑处理。与数据库(如MySQL、MongoDB)交互,执行复杂的数据操作和事务管理。 性能优化: 前端:优化页面加载时间、减少重绘和回流、提升交互响应速度。例如,通过懒加载、代码分割、图片优化等技术提高性能。 后端:优化服务器响应时间、数据库查询效率、减少内存泄漏和提升并发处理能力。例如,使用缓存机制(如Redis)、数据库索引优化、连接池管理等技术提高性能。 4. 最近有在看什么技术文章吗 题目要点 学习态度。 参考答案 最近我在阅读关于WebAssembly性能优化的文章,了解如何通过WebAssembly提升前端应用的运行效率。例如,我读了一篇关于使用WebAssembly进行图像处理的文章,介绍了如何将图像处理算法编译为WebAssembly模块,从而在浏览器中实现高性能的图像编辑功能。 同时,我也在关注前端框架的新特性,如Vue 3的Composition API和React的Concurrent Mode。这些新技术有助于构建更高效、响应更快的用户界面。 此外,我还阅读了一些关于前端安全的文章,特别是关于防止XSS攻击和CSRF攻击的最佳实践,这些知识对于构建安全的Web应用至关重要。 通过这些文章,我能够不断更新自己的知识体系,保持对技术前沿的敏感度,并将所学应用到实际项目中。 5. canvas 引擎有什么优化渲染性能的方案 题库原题:canvas 有什么优化渲染性能的方案 ...

June 27, 2025