腾讯-3年社招-前端面试 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮共 13 道题。答案默认折叠,便于先自行作答。 1. 讲一下你的低代码平台架构设计 题目要点 分层架构、组件引擎、JSON Schema、热更新机制 参考答案 低代码平台采用分层架构设计:底层是组件引擎,负责组件的注册、渲染和生命周期管理;中间层是可视化编辑器,提供拖拽、属性配置和预览功能;上层是业务逻辑层,处理数据绑定、事件处理和页面路由。技术栈选择 Vue 3 + TypeScript,通过 JSON Schema 描述组件结构,使用虚拟 DOM 进行高效渲染。同时建立了组件市场和模板库,支持组件的版本管理和热更新机制。 2. 动态加载第三方组件时,如何解决样式冲突与DOM管理问题? 题目要点 样式隔离、容器化渲染、事件总线、冲突检测 参考答案 样式隔离通过 CSS Modules 或 Shadow DOM 实现,为每个组件创建独立的样式作用域。建立样式优先级管理机制,通过 CSS 变量和主题系统统一管理全局样式。DOM管理采用容器化策略,每个第三方组件在独立的容器中渲染,通过事件总线进行通信。同时实现样式冲突检测工具,在组件加载时自动检测并解决潜在冲突。 3. 当业务需求超出平台预设组件能力时,你们是怎么扩展的 题目要点 插槽扩展、开发工具链、能力评估、贡献机制 参考答案 建立组件扩展机制,支持通过插槽(slot)和高阶组件进行功能扩展。提供自定义组件开发工具链,包括脚手架、调试工具和发布流程。实现组件能力评估系统,当检测到需求超出现有能力时,自动推荐相似组件或提供扩展建议。同时建立组件贡献机制,允许开发者提交自定义组件到组件库,经过审核后供全平台使用。 4. 组件的热更新策略是怎么处理的,在不影响用户的使用情况下 题目要点 渐进式更新、状态保持、回滚机制、用户确认 参考答案 采用渐进式热更新策略,通过版本控制和灰度发布确保更新的安全性。实现组件状态保持机制,在更新过程中保存组件的当前状态,更新完成后恢复状态。建立回滚机制,当检测到更新异常时自动回滚到稳定版本。同时提供更新通知和用户确认机制,让用户选择合适的时机进行更新,避免在关键操作时中断用户体验。 5. 组件通信机制如何设计 题目要点 多层次通信、消息路由、协议标准化、调试工具 参考答案 设计多层次的通信机制:父子组件通过 props 和 events 通信,兄弟组件通过事件总线或状态管理,跨层级组件使用 provide/inject 或全局状态。建立消息路由系统,支持组件间的异步通信和消息队列。实现通信协议标准化,定义统一的消息格式和处理流程。同时提供通信调试工具,帮助开发者追踪消息流向和排查通信问题。 6. 移动端适配是什么做的 题目要点 响应式设计、弹性布局、手势支持、性能优化 参考答案 采用响应式设计和移动优先策略,使用 rem/vw 单位实现弹性布局。建立设备适配规则库,根据屏幕尺寸和设备类型自动调整组件样式。实现触摸手势支持,优化移动端的交互体验。同时建立性能优化机制,针对移动设备的性能特点进行资源加载和渲染优化,确保在低性能设备上也能流畅运行。 ...

September 7, 2025

腾讯-2年社招-前端面试 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮共 9 道题。答案默认折叠,便于先自行作答。 1. 讲一下你觉得比较有亮点的项目 题目要点 技术选型合理性、渐进式迁移策略、自动化工具、性能保障 参考答案 在负责的一个大型电商平台重构项目中,面临着从传统 jQuery 架构向现代化 Vue 3 + TypeScript 架构迁移的挑战。项目的亮点在于采用了渐进式迁移策略,通过微前端架构实现新老系统的平滑过渡。设计了一套自动化的代码转换工具,将重复性的迁移工作自动化,提升了整体迁移效率 60%。同时建立了完善的性能监控体系,确保迁移过程中用户体验不受影响。 2. 项目的难点,你是怎么推动的 题目要点 风险控制、分阶段实施、灰度发布、跨团队协作 参考答案 最大的难点是在不影响线上业务的前提下完成大规模重构。通过制定详细的迁移计划,将整个项目拆分为多个独立的里程碑,每个阶段都有明确的交付物和验收标准。建立了灰度发布机制,新功能先在小范围用户中验证,逐步扩大覆盖范围。同时与产品、测试、运维团队建立了紧密的协作机制,确保各个环节的顺畅衔接。 3. 页面性能优化你做了哪些工作 题目要点 多维度优化、量化效果、监控体系、持续改进 参考答案 从多个维度进行了系统性优化:资源层面实施了代码分割和懒加载,将首屏加载时间减少 40%;网络层面启用了 HTTP/2 和资源预加载,优化了关键渲染路径;渲染层面使用了虚拟滚动和组件缓存,提升了长列表的交互性能;同时建立了性能监控体系,通过 Performance API 和用户行为分析持续跟踪优化效果。 4. 相关的指标有哪些,怎么去衡量的,标准是什么 题目要点 Core Web Vitals、RUM监控、分类基准、持续监测 参考答案 建立了完整的性能指标体系:Core Web Vitals 作为核心指标,包括 LCP(2.5s 以内)、FID(100ms 以内)、CLS(0.1 以内);业务指标包括首屏加载时间、页面完全加载时间、接口响应时间等。通过 RUM(真实用户监控)收集线上数据,结合 Lighthouse 进行定期检测。制定了不同页面类型的性能基准,如首页 LCP 控制在 2s 内,列表页控制在 2.5s 内。 5. WebSocket 协议原理 题库原题:说下 websocket 的连接原理 ...

September 7, 2025

腾讯-1年社招-前端面试 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮共 10 道题。答案默认折叠,便于先自行作答。 1. 讲一下你的第一个项目 题目要点 突出难点与解决方案,亮点强调可扩展性与价值。 参考答案 第一个项目是一个内部管理系统,主要功能是数据可视化和表单管理。难点在于表单项类型复杂、交互逻辑多。解决方案是抽象出一套动态表单引擎,通过 JSON 配置生成组件,既降低了开发成本,也提升了可扩展性。项目的亮点在于统一了交互和样式规范,同时通过可配置化提高了可维护性。 2. 为什么选择 Vue3 + Vite 而非 React/Webpack 题目要点 Vue3 → 响应式系统和语法优势;Vite → 构建性能显著提升。 参考答案 Vue3 在响应式系统上引入了 Proxy,更适合处理复杂响应式数据,语法上对团队更友好。Vite 基于 ESBuild 和原生 ESM,构建速度远快于 Webpack,特别是在开发阶段的冷启动和热更新体验明显更优。而 Webpack 尽管生态成熟,但在开发构建效率上落后。 3. Vite 的构建速度比 Webpack 快多少 题目要点 冷启动快一个数量级,HMR 延迟极低,原因是按需编译 vs 整包构建。 参考答案 在实际项目中,冷启动通常能快 10 倍以上。例如一个中大型项目,Webpack 启动需要 20-30 秒,Vite 一般在 1-3 秒即可完成;热更新延迟也从秒级缩短到 100ms 以内。这是因为 Vite 基于原生 ESM 做按需编译,而 Webpack 是整包构建。 4. FCP 从 3.2s 降到 1.1s,具体做了哪些优化? 题目要点 构建优化 + 资源优化 + 网络优化 + SSR 骨架屏。 ...

September 4, 2025

字节-技术中台-校招 · 第 2 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 本次面试主要考察小程序、前端基础及算法等方面的知识。 本轮共 17 道题。答案默认折叠,便于先自行作答。 1. 讲一下你的小程序项目 题目要点 这是一个典型的主观型问题,没有唯一的标准答案。面试官主要考察候选人的项目经验、技术选型能力、问题解决能力以及对小程序生态的整体理解。 答题时建议围绕项目背景、个人职责、技术挑战与解决方案、项目成果与思考等方面展开,体现出系统性和条理性。 参考答案 在我的某某项目中,我主要负责开发一个基于微信小程序的某某功能模块,比如一个校园服务小程序,其中我负责了课程表、成绩查询以及校园活动发布的功能。 项目启动之初,我们对需求进行了详细的分析。我选择了小程序作为技术栈,主要是考虑到其轻量级、无需下载安装的特性,能够快速触达用户,并且微信生态提供了丰富的API支持,例如微信支付、地理位置等,非常适合我们校园服务的场景。在技术选型上,我们使用了原生小程序开发模式,结合了小程序自定义组件的能力,将课程表、活动列表等通用UI和逻辑封装成可复用组件,大大提高了开发效率和代码的可维护性。 在开发过程中,我遇到了一些挑战。例如,课程表数据的展示,由于涉及到大量的时间和格子计算,以及复杂的状态管理,我采用了组件化的方式来解耦视图和逻辑。为了避免频繁调用setData导致性能问题,我仔细规划了数据结构,并通过局部更新和事件代理的方式,将数据更新的粒度控制到最小,确保了界面的流畅性。此外,在处理校园活动图片上传和展示时,也遇到了图片内存飙升的问题,我通过启用lazy-load属性,并对图片进行后端压缩和CDN分发,有效解决了内存占用过高的问题,提升了用户体验。在保证安全性的前提下,对于用户敏感信息,我们严格遵循小程序的加密存储和传输规范。 项目上线后,用户反馈良好,尤其是加载速度快、操作流畅得到了肯定。通过这个项目,我不仅深化了对小程序双线程架构、生命周期、组件化等核心概念的理解,也锻炼了我在实际项目中解决复杂性能问题的能力。同时,也让我认识到在项目开发中,前期的技术选型、架构设计以及对潜在性能瓶颈的预判都是至关重要的。 2. 小程序的架构组成 题目要点 宿主环境: 了解小程序运行的载体,如微信、支付宝等App提供的运行环境。 双线程模型: 掌握小程序的逻辑层和视图层分离,通过异步通信机制进行数据交换。 组件系统: 熟悉小程序内置组件和自定义组件的构成。 数据层: 理解小程序数据管理和更新机制。 小程序生命周期: 熟悉小程序应用和页面的生命周期函数。 参考答案 1.1 原理说明 宿主环境: 小程序运行在一个特定的宿主环境中,这个环境由微信、支付宝等App提供。它为小程序提供了运行所需的API、渲染能力、文件系统等。 双线程模型: 小程序采用双线程模型,即逻辑层和视图层分别运行在不同的线程中。 逻辑层: 运行在JSCore(或V8引擎)中,负责处理业务逻辑、数据请求、数据处理等,使用JavaScript编写。它不直接操作DOM。 视图层: 负责渲染页面,使用WebView(或独立的渲染引擎)渲染WXML和WXSS。 通信机制: 逻辑层和视图层之间通过Native层进行异步通信。视图层将用户操作(如点击、输入)传递给逻辑层,逻辑层处理后将数据变化通知视图层进行更新。 组件系统: 小程序提供了一套丰富的基础组件,如view、text、image等,开发者也可以基于这些基础组件创建自定义组件,实现模块化开发。 数据层: 小程序的数据管理主要通过Page.prototype.data和this.setData进行。数据变化后,通过双线程通信机制同步到视图层,触发视图更新。 1.2 核心用法 + 示例代码 在小程序中,开发者主要通过JavaScript编写逻辑层代码,WXML构建页面结构,WXSS定义页面样式。 app.js 定义小程序的全局逻辑,app.json 进行全局配置,app.wxss 定义全局样式。 每个页面由 .js(逻辑)、.json(配置)、.wxml(结构)、.wxss(样式)组成。 示例:页面数据更新 // page.js Page({ data: { message: 'Hello Mini Program!' }, onLoad: function() { setTimeout(() => { this.setData({ message: 'Data Updated!' }); }, 2000); } }); 这种架构分离了业务逻辑和页面渲染,提高了性能和安全性,也方便平台对小程序进行管控。 1.3 常见误区或面试陷阱 误区: 认为小程序是基于浏览器内核直接运行的H5页面。实际上,小程序运行在独立的宿主环境,有其特定的渲染机制和API。 误区: 将双线程通信理解为同步通信。实际上是异步通信,需要注意数据同步的时序问题。 陷阱: 不清楚小程序无法直接操作DOM的原因,本质上是为了安全和性能考量,避免开发者直接对渲染层进行复杂操作,影响性能和用户体验。 3. 小程序和 H5 在开发和使用上有哪些主要的区别和优势? 题目要点 运行环境: 区分小程序和H5的运行载体和能力限制。 开发模式: 掌握两种技术栈的开发流程和工具链。 性能: 对比加载速度、运行流畅度等方面的差异。 功能和权限: 了解各自能调用的系统能力和接口。 用户体验: 分析用户感知到的流畅性、便捷性。 分发和推广: 比较获取用户、传播的难易程度。 参考答案 1.1 原理说明 ...

September 2, 2025

字节跳动-商业化-校招 · 第 2 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: 本次面试主要考察前端基础(CSS布局、JavaScript原型链)、React框架深入理解(虚拟DOM、性能优化)、设计模式应用以及算法能力。 本轮共 13 道题。答案默认折叠,便于先自行作答。 1. 实现一个三栏布局,左右两侧固定宽度,中间区域自适应 题目要点 面试官出这道题主要想确认哪些知识维度? 考生对CSS布局(如Flexbox, Grid, 浮动, 定位, 表格布局等)的掌握程度。 考生如何处理不同元素之间的空间分配和自适应能力。 该题所考知识点中有哪些高频实际应用点? 页面整体布局,如经典后台管理系统布局(侧边栏固定,内容区自适应)。 组件内部布局,如卡片、列表项中固定图标/按钮,内容区域自适应。 参考答案 1.1 原理说明 三栏布局是一种常见的网页布局方式,其核心在于实现左右两边固定宽度,中间内容区域根据可用空间自适应。这要求布局方案能够灵活处理流体宽度和固定宽度元素的共存,并且能够正确处理元素之间的堆叠和清除浮动等问题。不同的CSS布局技术提供了不同的实现原理和特性,选择合适的方案取决于兼容性要求、布局复杂度和维护成本。 1.2 核心用法 + 示例代码 以下是几种实现三栏布局的常见方法,并说明其原理和适用场景: 1.2.1 Flexbox 布局 原理: Flexbox (弹性盒子) 是一种一维布局模式,它在父容器中管理子项的分布和对齐。通过设置主轴和交叉轴,可以非常灵活地控制子元素的排列。 使用场景: 现代浏览器环境下的首选布局方式,适用于需要灵活对齐、空间分配的场景。 示例代码: <div class="container-flex"> <div class="left">Left</div> <div class="center">Center</div> <div class="right">Right</div> </div> .container-flex { display: flex; /* 开启Flex布局 */ } .left, .right { width: 200px; /* 左右固定宽度 */ flex-shrink: 0; /* 防止收缩 */ } .center { flex-grow: 1; /* 中间区域自适应,占据剩余空间 */ } 优势: 代码简洁,语义化好,对齐和分配空间非常方便。 1.2.2 Grid 布局 ...

September 2, 2025

百度-APP产品研发-秋招 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 面试时间: 60分钟 本轮共 21 道题。答案默认折叠,便于先自行作答。 1. 讲一下你在官网开发中的主要职责,开发的模块以及你觉的比较亮点的地方 题目要点 如果是面试官问到“官网开发中的主要职责、开发的模块以及比较亮点的地方”,一般可以从以下几个角度来回答,既展示你的全局把控能力,又体现你在某些点上有深度。 参考答案 如果是面试官问到“官网开发中的主要职责、开发的模块以及比较亮点的地方”,一般可以从以下几个角度来回答,既展示你的全局把控能力,又体现你在某些点上有深度。 下面是一个参考思路: 1. 主要职责 官网整体架构搭建:根据业务和设计稿,使用 React/Vue + Vite/Next.js/Nuxt.js 等技术栈完成整体框架搭建,包括路由、状态管理、多语言支持等。 公共模块封装:抽象公共组件(如导航栏、页脚、轮播、富文本渲染、内容卡片等),提高复用率,减少重复开发。 性能优化:处理首屏加载速度、资源拆分、图片懒加载、SSR/SSG、SEO 优化。 协作沟通:与产品、UI、后端保持沟通,保证页面上线节奏和质量。 2. 负责的模块(可根据实际情况举例) 首页:承担品牌形象展示,涉及 banner 动效、动态数据展示、视频播放等。 产品/解决方案页:结合后端接口,展示不同产品模块,支持筛选、搜索、动态路由。 活动/新闻动态页:接入 CMS(如 Strapi、Sanity、WordPress 等),支持运营人员通过后台直接发布。 多语言切换模块:基于 i18n 实现官网多语言,支持自动识别浏览器语言,静态资源跟随切换。 SEO 优化模块:处理 meta 信息、OG 标签、站点地图、robots.txt,提升搜索引擎收录效果。 3. 亮点/难点突破 性能优化亮点 利用 SSR/SSG(Next.js/Nuxt.js)提升首屏渲染速度,Lighthouse 分数提升到 90+。 使用图片 CDN + WebP 格式,首页加载时间缩短 30%。 按需加载组件、拆分 bundle,减少首次请求体积。 可配置化思路 引入 CMS 系统,实现官网内容可配置,避免频繁改代码上线,运营可直接维护。 封装通用“模块化组件”,如 Banner、富文本、图文组合,做到拖拽/配置式渲染。 前端体验优化 首页/产品页引入 动效(基于 Lottie 或 GSAP),提升视觉冲击力。 交互细节(滚动吸附、视差动画、过渡效果)增强用户沉浸感。 工程化实践 ...

August 20, 2025

阿里巴巴-社招-5年 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 第 1 轮 → 本轮要点: 浏览器的缓存机制、react hooks 本轮共 11 道题。答案默认折叠,便于先自行作答。 1. 魔方组件的整体架构设计,包括其模块划分和核心功能 题目要点 略 参考答案 略 2. 你们是如何选择技术栈的?有哪些关键因素影响了决策 题目要点 略 参考答案 略 3. 魔方组件如何实现动态加载,以提升初始加载性能 题目要点 略 参考答案 略 4. 魔方组件如何管理组件的配置信息?组件之间的通信是如何处理的 题目要点 略 参考答案 略 5. 三维模型的加载性能,将加载时间从10秒缩短至3秒都做了哪些操作 题目要点 略 参考答案 略 6. 这个项目中在移动端,你们是如何处理不同设备的适配问题的 题目要点 略 参考答案 略 7. 有没有用服务端渲染(SSR)?如果有,你们是如何实现的 题目要点 SSR 是服务器预先渲染页面,提高首屏性能和 SEO 常用框架有 Next.js、Nuxt.js,也可自研实现 实现时结合服务器渲染和客户端 Hydration 完成完整页面交互 需处理代码共享、数据预取、样式加载及性能优化 了解 SSR 的局限性和优化难点,合理权衡使用场景 参考答案 一、考察点 理解 SSR 的基本概念和优势 掌握常见 SSR 实现方案及其原理 理解 SSR 与客户端渲染(CSR)的区别和协同方式 了解 SSR 在项目中的具体落地方法和技术选型 二、参考答案 2.1 SSR 的基本概念 SSR(Server-Side Rendering)是指在服务器端完成页面的 HTML 渲染,再将完整的 HTML 返回给客户端 相比纯客户端渲染,SSR 提升了首屏渲染速度和 SEO 友好性 用户拿到的是已渲染好的页面,浏览器可以更快显示内容 2.2 SSR 的优势和适用场景 首屏速度快:浏览器无需等待大量 JS 执行即可显示页面 SEO 优化:搜索引擎能抓取到完整的内容,提升排名 社交分享友好:分享链接时可显示完整预览 适合内容型或公共站点,电商、新闻、博客等场景 2.3 常见 SSR 实现方案 Next.js(React):提供开箱即用的 SSR 支持和静态生成 Nuxt.js(Vue):Vue 生态的 SSR 框架,支持服务端渲染和静态导出 自研 SSR:使用 Node.js 搭配 ReactDOMServer 或 Vue SSR API 手动实现 传统模板引擎:如 EJS、Handlebars 等,服务器渲染 HTML 2.4 我们项目中 SSR 的实现方式 使用了 [Next.js / Nuxt.js / 自研 SSR] 作为 SSR 框架 服务器通过 Node.js 环境调用 ReactDOMServer.renderToString 或 Vue SSR 的 renderToString,生成完整 HTML 结合路由系统,实现根据请求 URL 渲染对应页面 页面返回时携带初始数据(通过服务端数据预取),客户端接管 Hydration,实现页面交互 结合缓存策略,优化性能和响应速度 配合 Webpack 和 Babel,保证服务端代码和客户端代码一致性 2.5 实现过程中需注意的问题 服务端和客户端代码共享及差异处理(避免浏览器 API 直接调用) 初始数据的获取与注入,保证页面完整性和交互 处理样式加载,避免闪烁(FOUC) 性能优化,如页面缓存、资源压缩和异步加载 服务器负载和扩展性考虑 三、常见误区或面试陷阱 ❌ 认为 SSR 只是在服务器渲染静态 HTML,忽略客户端 Hydration ❌ 忽视服务端渲染的性能开销和状态同步难题 ❌ 直接复用客户端代码,未处理服务端无 DOM 的环境差异 ❌ 忽略 SEO 以外的性能和用户体验提升点 8. 项目中使用了哪些状态管理工具?为什么选择这些工具 题目要点 状态管理工具选择基于项目规模、团队经验和性能需求 Redux 适合大型复杂应用,MobX 适合响应式需求 Context 适合轻量局部状态管理 结合工具生态和中间件支持,提升开发效率和维护性 合理划分全局与局部状态,避免状态管理复杂化 参考答案 一、考察点 理解不同状态管理工具的特点及适用场景 掌握项目中选择状态管理工具的决策逻辑 能清晰阐述所选工具带来的优势和解决的问题 了解状态管理的基本概念和复杂度控制方法 二、参考答案 2.1 项目中使用的状态管理工具 Redux 适用于大型复杂应用,状态集中管理 具备时间旅行调试、可预测状态变更、丰富中间件生态 MobX 响应式状态管理,自动追踪依赖,适合数据驱动视图更新 代码简洁,学习曲线较低 React Context + useReducer/useState 轻量级状态共享方案,适合中小型或局部状态管理 Recoil / Zustand / Valtio 等轻量方案 现代灵活的状态管理,适合部分场景需求 Vuex(Vue 项目) Vue 官方状态管理库,集中管理全局状态,支持插件扩展 2.2 选择这些工具的理由 项目规模与复杂度 ...

July 28, 2025

阿里巴巴-社招-3年 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: react hooks、高阶组件、列表和key、react 渲染机制、react 组件设计模式、前端模块化、Webpack与Vite 本轮共 12 道题。答案默认折叠,便于先自行作答。 1. 讲一下你对Hooks 了解 题目要点 Hooks 是函数组件状态和副作用管理的新方案 常用 Hooks 有 useState、useEffect、useMemo、useCallback 等 Hook 调用必须遵循规则,保证顺序稳定 自定义 Hooks 用于逻辑复用,提高代码可维护性 理解 Hook 设计原理,有助于写出高质量 React 代码 参考答案 一、考察点 理解 React Hooks 的设计初衷与核心概念 掌握常用 Hooks(如 useState、useEffect、useMemo、useCallback 等)的作用与使用场景 理解 Hooks 规则及其背后的原理机制 认识 Hooks 对函数组件状态管理和生命周期的改进 了解自定义 Hooks 的设计思路及复用价值 二、参考答案 2.1 Hooks 的定义与设计初衷 定义:Hooks 是 React 16.8 引入的函数组件状态和副作用管理的特性 设计目标: 解决类组件中状态逻辑难以复用和组件嵌套过深的问题 让函数组件拥有类似类组件的状态和生命周期能力 简化组件逻辑,提升代码可读性和复用性 2.2 常用 Hooks 及其作用 Hooks 功能描述 典型使用场景 useState 在函数组件中声明状态变量 组件内部状态管理 useEffect 处理副作用(订阅、异步请求、DOM操作等) 替代类组件的生命周期钩子 useContext 订阅 React Context,实现跨组件数据传递 共享全局状态、主题、语言等 useMemo 记忆计算结果,避免不必要的重复计算 性能优化,避免昂贵计算重复执行 useCallback 记忆函数实例,避免子组件重复渲染 优化子组件性能,防止无意义的 props 变化 useRef 保存可变值,不触发组件重新渲染 访问 DOM 节点或保存不变引用 2.3 Hooks 的规则与原理 规则: 只能在函数组件或自定义 Hooks 中调用 只能顶层调用,不能在循环、条件或嵌套函数中调用,保证 Hook 调用顺序稳定 原理:React 通过维护一个 Hook 链表和调用顺序,关联 Hook 状态与对应组件实例,实现状态的持久化和更新 2.4 自定义 Hooks 将组件中可复用的状态逻辑抽象成函数 函数内部调用其他 Hooks,实现逻辑复用与拆分 提高代码复用性和可维护性 三、常见误区或面试陷阱 误用 Hook 规则,导致调用顺序不稳定 过度使用 useEffect,产生复杂副作用链和性能问题 误解 useMemo 和 useCallback 的使用时机和作用 忽略依赖项数组,导致副作用不正确执行 不了解自定义 Hooks 是普通函数,不能在其中调用 Hook 规则外的逻辑 2. 对比 Class 组件的 Mixin 模式,Hooks 如何解决逻辑复用问题?Mixin 的主要缺陷是什么 题目要点 Mixin 依赖多继承,存在命名冲突、状态污染、难维护等问题 Hooks 通过函数组合和自定义 Hook 实现逻辑复用,避免冲突和复杂继承 Hooks 提升代码可读性、维护性、测试性和类型支持 React 官方推荐使用 Hooks 替代 Mixin 模式 参考答案 一、考察点 理解 Class 组件中 Mixin 的工作方式及缺陷 掌握 Hooks 解决组件逻辑复用的机制和优势 比较两种方案在代码组织、维护性和复用性上的差异 理解现代 React 设计理念和组件开发最佳实践 二、参考答案 2.1 Mixin 模式及其缺陷 Mixin 定义:通过多个类混入(mixin)共享方法和状态,Class 组件通过继承或组合多个 mixin 实现代码复用 ...

July 28, 2025

阿里巴巴-社招-2年 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: call、apply和bind、性能优化、浏览器渲染过程、浏览器的缓存机制 本轮共 10 道题。答案默认折叠,便于先自行作答。 1. 假设现在有一个老项目需从React 17升级至React 18,你会怎么做 题目要点 先升级 react/react-dom 版本,再更改根渲染方式为 createRoot 理解 React 18 并发特性,调整相关组件代码 确认并升级第三方依赖,保证兼容性 充分测试,监控性能,平滑迁移 参考答案 一、考察点 理解 React 18 的新特性及其对应用的影响 掌握 React 18 升级步骤及兼容性处理 了解新版本的渲染机制变化(如并发特性) 熟悉常见问题排查与升级风险规避 二、参考答案 2.1 升级前准备 阅读官方升级指南(React 官方文档提供详尽升级说明) 检查项目依赖版本,确保 React 相关依赖(如 ReactDOM、react-scripts 等)兼容 React 18 备份代码及建立测试环境,保证升级过程可回滚 2.2 主要升级步骤 1)升级 React 和 ReactDOM 版本 npm install react@18 react-dom@18 或 yarn add react@18 react-dom@18 2)更新根节点渲染方式 React 18 引入了新的根 API:createRoot,替代 React 17 的 ReactDOM.render。 ...

July 28, 2025

阿里巴巴-社招-1年 · 第 1 轮 · 二面

← 第 1 轮 · 返回本次面经 · 已是最后一轮 → 本轮要点: react hooks、性能优化 本轮共 10 道题。答案默认折叠,便于先自行作答。 1. 你们项目为什么选Redux而非MobX 题目要点 Redux 强调可预测性、单向数据流、纯函数 reducer,适合复杂项目 丰富的调试工具和社区中间件支持开发效率和可维护性 MobX 响应式自动追踪,适合快速开发,但隐式依赖增加调试难度 团队规模和项目复杂度是选择状态管理方案的关键因素 现代 Redux 已大幅简化,代码冗余感降低 参考答案 一、考察点 是否理解 Redux 和 MobX 两种状态管理库的设计理念与差异 是否能结合项目实际需求,论述选择某一方案的合理性 是否掌握 Redux 在复杂状态管理中的优势与局限 是否能表达对团队协作、维护性和性能的综合考虑 二、参考答案 1.1 原理说明 Redux 基于 Flux 架构思想,使用单一全局状态树(Store) 状态只读,通过派发(dispatch)纯函数(Reducer)更新状态 强调不可变数据和纯函数,方便调试和时间旅行(time-travel debugging) 侧重于可预测性和可维护性 MobX 采用响应式编程思想,通过可观察(observable)数据和自动追踪依赖实现状态同步 支持隐式状态更新,使用更接近传统面向对象编程 适合快速开发,较少样板代码 1.2 选择 Redux 的主要理由 1)明确的状态流向和可预测性 Redux 的单向数据流和纯函数 reducer 让状态变化过程清晰、易追踪 在多人协作中,可以方便定位状态更新的具体原因,减少调试成本 2)强大的开发者工具支持 Redux DevTools 提供时间旅行、快照对比、action 日志等,极大提升调试体验 有丰富的中间件生态(如 redux-thunk、redux-saga),便于处理复杂异步逻辑 3)适合大型复杂项目 状态结构复杂时,Redux 更便于组织和维护,模块化拆分 reducer 明确职责 明确的规范和社区共识,团队成员易于理解和统一编码风格 4)可测试性强 Reducer 是纯函数,易于单元测试,保证业务逻辑可靠 1.3 不选 MobX 的考虑 1)隐式依赖难以追踪 MobX 的自动依赖追踪机制带来状态变化的隐式性,可能导致调试困难 团队成员对响应式原理不熟悉时,维护成本升高 2)状态变化不够可预测 MobX 允许任意地方修改状态,可能出现难以预料的副作用 不利于实现严格的状态管理和权限控制 3)社区规范和中大型项目生态 Redux 生态成熟且社区规范丰富 MobX 在某些复杂场景下不够透明,团队风险较大 1.4 常见误区或面试陷阱 ❌ 误区一:认为 MobX 性能一定优于 Redux 实际性能差异因项目而异,合理使用 Redux 也能实现优秀性能 ❌ 误区二:Redux 代码一定繁琐难写 现代 Redux 工具(如 Redux Toolkit)极大简化开发体验,减少样板代码 ❌ 误区三:认为 MobX 是“魔法”,不需要学习状态管理原理 响应式原理本身也需要深入理解,否则容易导致维护难题 2. 项目中提到“首屏加载优化1.5秒”,具体如何实现 题目要点 首屏加载优化核心在于减少首屏资源体积和请求数量 结合 SSR/SSG 预渲染,缩短白屏时间 动态拆分代码,懒加载非关键资源 充分利用浏览器缓存和 CDN 监控指标涵盖 FCP、TTI,持续迭代优化 参考答案 一、考察点 理解首屏加载的定义及关键性能指标(如 FCP、TTI) 掌握多种前端性能优化手段,涵盖资源、网络、渲染等层面 能结合具体技术和业务场景,说明优化实施细节 理解优化过程中的权衡与监控方法 二、参考答案 1.1 首屏加载的概念与性能指标 首屏加载:用户打开页面到看到页面主要内容(首屏内容)完整渲染的时间 ...

July 28, 2025