高级前端300问
一、 JavaScript 核心与高级特性 (50 题)
- 解释 JavaScript 事件循环(Event Loop)的完整机制,包括宏任务和微任务的区别及执行顺序。
Promise.allSettled 和 Promise.all 有何不同?在什么场景下会选择使用前者?
async/await 是如何工作的?它在底层是如何转换为 Promise 的?
- 深入解释
this 绑定的四种规则,以及 bind, call, apply 的区别和手写实现。
- 什么是闭包(Closure)?它的内存管理和潜在的内存泄漏问题如何避免?
Proxy 和 Object.defineProperty 在实现数据劫持方面有何异同?各自的优缺点和适用场景?
- 解释 JavaScript 中的原型链(Prototype Chain)和继承机制。如何手写实现一个
new 操作符?
WeakMap 和 Map、WeakSet 和 Set 有何区别?它们各自的适用场景是什么?
- 请解释 JavaScript 的垃圾回收机制。什么是 V8 引擎的垃圾回收策略?
- 什么是尾调用优化(Tail Call Optimization, TCO)?JavaScript 引擎对其支持情况如何?
- 如何实现一个深拷贝(Deep Clone)函数,并考虑循环引用问题?
- 解释 JavaScript 模块化(CommonJS, ES Modules)的原理和差异。ES Modules 的 Tree Shaking 是如何实现的?
Generator 函数的用途和工作原理是什么?它与 async/await 有何关联?
- 什么是函数式编程(Functional Programming)?在 JavaScript 中如何实践函数式编程,以及它的优缺点?
- 解释
Set 和 Map 的内部实现原理,以及它们在性能上的优势。
- 如何优化一个有大量计算的 JavaScript 函数,使其不阻塞主线程?(Web Workers)
- 解释
debounce 和 throttle 的原理和应用场景,并手写实现。
- JavaScript 中的类型转换(Type Coercion)规则是什么?举例说明常见的隐式类型转换陷阱。
- 什么是事件委托(Event Delegation)?它的优点和缺点是什么?
- 如何判断一个对象是纯粹的 JavaScript 对象(Plain Object)?
- 解释
Symbol 数据类型的用途和特点。
for...of 和 for...in 的区别?它们分别适用于什么场景?
- 什么是
requestAnimationFrame?它在动画和性能优化中的作用是什么?
- 如何处理 JavaScript 中的大数运算?
- 解释
try...catch...finally 中 finally 块的执行时机和特点。
- 如何实现一个通用的事件发布/订阅(Pub/Sub)模式?
- 解释
Iterator 和 Generator 协议,以及它们在 ES6+ 中的应用。
- 什么是
SetTimeout(0) 的作用?它和 Promise.resolve().then() 有何区别?
- 如何实现一个
compose 或 pipe 函数用于函数式编程?
- 解释 JavaScript 中的
WeakRef 和 FinalizationRegistry 的用途。
- 如何实现一个 LRU (Least Recently Used) 缓存?
- 解释
Object.freeze(), Object.seal(), Object.preventExtensions() 的区别和用途。
- 什么是
BigInt?它解决了什么问题?
- 如何实现一个并发限制的 Promise 池?
- 解释 JavaScript 中的
Module Federation 及其应用场景。
- 什么是
Service Worker?它的生命周期和应用场景是什么?
- 如何使用
Intersection Observer API 实现图片的懒加载或无限滚动?
- 解释
Mutation Observer API 的用途和实现原理。
- 如何实现一个简单的模板引擎?
- 解释
Web Components 的四个主要规范及其应用。
- 如何实现一个简单的状态管理模式(不依赖框架)?
- 解释
SharedArrayBuffer 和 Atomics 的用途和安全限制。
- 什么是
WebAssembly?它在前端的应用前景如何?
- 如何使用
IndexedDB 进行离线数据存储?
- 解释
requestIdleCallback 的作用和使用场景。
- 什么是
Proxy 对象的 revocable 代理?
- 如何实现一个简单的响应式系统(类似 Vue 2 的响应式原理)?
- 解释
async/await 中的错误处理机制。
- 什么是
Symbol.iterator?它在可迭代对象中的作用是什么?
- 如何在 JavaScript 中实现一个事件总线(Event Bus)?
二、 HTML 与 CSS (40 题)
- 解释浏览器渲染页面的过程(从 HTML 解析到最终呈现)。
- 什么是 BFC (Block Formatting Context)?它有什么作用以及如何创建?
- 解释 CSS 盒模型(Box Model)的两种类型(标准盒模型和 IE 盒模型)及其区别。
- 什么是 CSS 优先级(Specificity)?如何计算?
!important 的使用原则是什么?
- 解释 CSS 动画(Animation)和过渡(Transition)的区别,以及它们各自的优缺点。
- 如何实现一个自适应的等比例矩形布局?
- 解释
position: sticky 的工作原理和应用场景。
- 什么是 Flexbox 布局?请详细说明其主要属性及作用。
- 什么是 Grid 布局?它与 Flexbox 相比有何优势和劣势?
- 如何实现一个响应式图片加载策略,以适应不同设备和网络环境?
- 解释
rem, em, vh, vw 等单位的含义和适用场景。
- 什么是 CSS 预处理器(如 Less, Sass, Stylus)?它们解决了什么问题?
- 什么是 CSS 后处理器(如 PostCSS)?它与预处理器有何不同?
- 如何优化 CSS 的加载和解析性能?
- 解释
z-index 的工作原理和堆叠上下文(Stacking Context)。
- 什么是 CSS BEM 命名规范?它的优缺点是什么?
- 如何实现一个多行文本溢出显示省略号的效果?
- 解释
will-change 属性的作用和滥用可能带来的问题。
- 什么是无障碍性(Accessibility, A11y)?在 HTML 和 CSS 中如何实现无障碍性?
- 解释
<meta name="viewport"> 标签的作用和常用配置。
- 如何实现一个自定义的滚动条样式?
- 什么是 CSS Sprites?它的优缺点是什么?
- 解释
display: contents 的作用和潜在的无障碍性问题。
- 如何使用 CSS 实现一个自定义的复选框或单选框样式?
- 什么是语义化 HTML?它的优点是什么?
- 解释
picture 元素和 srcset 属性在响应式图片中的作用。
- 如何实现一个粘性页脚(Sticky Footer)?
- 解释
line-height 的计算方式和对布局的影响。
- 什么是 FOUC (Flash Of Unstyled Content)?如何避免?
- 解释 CSS 变量(Custom Properties)的用途和优势。
- 如何使用 CSS 实现一个波浪动画效果?
- 什么是 CSS Houdini?它解决了什么问题?
- 解释
aspect-ratio 属性的用途和兼容性。
- 如何使用 CSS 实现一个纯粹的 Tooltip 组件?
- 什么是 CSS Modules?它解决了什么问题?
- 解释
scroll-snap-type 的作用和应用场景。
- 如何使用 CSS 实现一个三栏布局,要求中间自适应,两边固定宽度?
- 解释
content-visibility 属性的作用和性能优化原理。
- 什么是
contain 属性?它在性能优化中的作用是什么?
- 如何实现一个响应式的导航菜单,在小屏幕上变为汉堡菜单?
三、 前端框架 (React/Vue/Angular 综合) (50 题)
- 解释虚拟 DOM (Virtual DOM) 的工作原理,以及它如何提高性能?
- 解释 React/Vue 的 Diff 算法(Reconciliation)原理。
- 解释 React 的 Hooks (useState, useEffect, useContext, useMemo, useCallback, useRef) 的作用和使用场景。
- 解释 Vue 3 的 Composition API 和 Vue 2 的 Options API 有何区别?各自的优缺点?
- 解释 React 中的高阶组件(HOC)和 Render Props 模式,以及它们各自的优缺点和适用场景。
- 解释 Vue 中的 Mixin 和 Custom Directives 的使用场景和注意事项。
- 解释 React 中的 Context API 的作用和使用场景。它是否能替代 Redux/Vuex?
- 解释 Vue 中的响应式原理(Vue 2 的
Object.defineProperty 和 Vue 3 的 Proxy)。
- 解释 React 的生命周期方法(Class Components 和 Function Components with Hooks)。
- 解释 Vue 的生命周期钩子。
- 解释 React Fiber 架构的原理和优势。
- 解释 Vue 中的
keep-alive 组件的作用和原理。
- 解释 React 中的错误边界(Error Boundaries)及其应用。
- 解释 Vue 中的
Teleport 组件的作用和使用场景。
- 解释 React 中的受控组件和非受控组件的区别和适用场景。
- 解释 Vue 中的
v-model 指令在不同组件上的工作原理。
- 如何在 React/Vue 中进行性能优化?
- 解释 React 中的
shouldComponentUpdate 和 React.memo 的作用和使用场景。
- 解释 Vue 中的
computed 属性和 watch 属性的区别和适用场景。
- 解释 React 中的 SSR (Server-Side Rendering) 和 CSR (Client-Side Rendering) 的区别和优缺点。
- 解释 Vue 中的 SSR (Nuxt.js) 和 SSG (Static Site Generation) 的区别和优缺点。
- 解释 React Router / Vue Router 的工作原理(Hash 模式和 History 模式)。
- 解释 React 中的 Portals 的作用和使用场景。
- 解释 Vue 中的
slot 和 scoped slot 的区别和使用场景。
- 如何在 React/Vue 中管理组件状态?(Redux/Vuex, Context, Recoil/Jotai, Pinia 等)
- 解释 Redux 的核心概念(Store, Reducer, Action, Dispatch)和工作流程。
- 解释 Vuex 的核心概念(State, Getter, Mutation, Action, Module)和工作流程。
- 解释 React 中的
useEffect 的第二个参数(依赖数组)的作用和注意事项。
- 解释 Vue 3 中的
ref 和 reactive 的区别和使用场景。
- 解释 React 中的
StrictMode 的作用。
- 解释 Vue 中的
nextTick 的作用和原理。
- 如何在 React/Vue 中处理表单验证?
- 解释 React 中的
Suspense 和 lazy 的作用。
- 解释 Vue 中的
defineAsyncComponent 的作用。
- 解释 React 中的并发模式(Concurrent Mode)和 Suspense 的关系。
- 解释 Vue 3 中的
provide/inject 的作用和使用场景。
- 如何在 React/Vue 中实现组件库的按需加载?
- 解释 React 中的
key 属性的作用和重要性。
- 解释 Vue 中列表渲染的
key 属性的作用和重要性。
- 解释 React 中的
setState 是同步还是异步的?为什么?
- 解释 Vue 中的响应式数据添加属性的注意事项。
- 如何在 React/Vue 中进行组件间的通信?
- 解释 React 中的
Profiler 组件的作用。
- 解释 Vue 中的
ErrorCaptured 钩子的作用。
- 解释 React 中的
useReducer 和 useState 的区别。
- 解释 Vue 3 中的
watchEffect 和 watch 的区别。
- 如何在 React/Vue 中实现国际化(i18n)?
- 解释 React 中的
memo 和 useCallback / useMemo 的协同作用。
- 解释 Vue 中的
v-once 和 v-memo 指令的作用。
- 解释 React 中的
createPortal 和 ReactDOM.createPortal 的区别。
- 解释 Vue 中的
is 特性在动态组件中的作用。
- 如何在 React/Vue 中实现一个拖拽组件?
- 解释 React 中的
useLayoutEffect 和 useEffect 的区别。
- 解释 Vue 3 中的
setup 函数的执行时机和作用。
- 解释 React 中的
forwardRef 的作用。
- 解释 Vue 中的
ref 属性在模板中的作用。
- 如何在 React/Vue 中处理动画?
- 解释 React 中的
useImperativeHandle 的作用。
- 解释 Vue 中的
v-if 和 v-show 的区别。
- 讨论你对微前端(Micro-Frontends)的理解,以及它在框架层面的实现方式。
四、 前端工程化与构建工具 (30 题)
- 解释 Webpack 的核心概念(Entry, Output, Loader, Plugin, Mode, DevServer)。
- 解释 Webpack 的打包优化策略(Tree Shaking, Code Splitting, Lazy Loading, Scope Hoisting)。
- 解释 Babel 的工作原理,以及它如何将 ES6+ 代码转换为 ES5。
- 什么是 Tree Shaking?它在 Webpack 中是如何实现的?
- 解释 Code Splitting 的目的和实现方式。
- 解释 Webpack 中
Loader 和 Plugin 的区别和作用。
- 解释 Vite 的工作原理和优势,它与 Webpack 有何不同?
- 什么是模块打包(Module Bundling)?它解决了什么问题?
- 解释
ESLint 和 Prettier 的作用和配置。
- 什么是 CI/CD (持续集成/持续部署)?前端 CI/CD 的流程是怎样的?
- 解释
npm 和 yarn 的包管理机制和区别。
- 什么是
npm workspaces 或 yarn workspaces?它们解决了什么问题?
- 如何优化 Webpack 的构建速度?
- 解释
PostCSS 的作用和常用插件。
- 什么是
Monorepo 和 Polyrepo?它们各自的优缺点和适用场景?
- 解释
Rollup 的特点和适用场景,它与 Webpack 有何不同?
- 什么是
Browserslist?它的作用是什么?
- 解释
Source Map 的作用和生成原理。
- 如何实现一个自动化部署流程?
- 解释
Service Worker 在 PWA (Progressive Web App) 中的作用。
- 什么是
Lighthouse?它在前端性能优化中的作用?
- 解释
Web Vitals 指标及其优化方法。
- 如何进行前端项目的版本管理和发布?
- 解释
Pre-commit 和 Post-merge Hook 在 Git 工作流中的应用。
- 什么是
CDN?它在前端性能优化中的作用?
- 解释
HTTP/2 和 HTTP/3 对前端性能的影响。
- 如何实现前端项目的国际化(i18n)?
- 解释
Docker 在前端部署中的作用。
- 什么是
Micro-frontends?它解决了什么问题?有哪些实现方案?
- 如何进行前端项目的组件化和模块化管理?
五、 性能优化 (30 题)
- 解释前端性能优化的常见指标(如 FCP, LCP, CLS, TBT)。
- 如何优化首次内容绘制(FCP)和最大内容绘制(LCP)?
- 如何优化累计布局偏移(CLS)?
- 如何优化长任务(Long Task)和总阻塞时间(TBT)?
- 解释关键渲染路径(Critical Rendering Path)及其优化策略。
- 如何优化 JavaScript 的执行性能?
- 如何优化 CSS 的加载和渲染性能?
- 如何优化图片的加载和显示性能?(懒加载、响应式图片、WebP/AVIF、CDN)
- 解释浏览器缓存机制(HTTP 缓存、Service Worker 缓存、IndexedDB)及其应用。
- 什么是预加载(Preload)、预连接(Preconnect)、预取(Prefetch)?它们在性能优化中的作用?
- 如何进行前端资源的压缩和打包优化?
- 解释
requestAnimationFrame 和 requestIdleCallback 在性能优化中的应用。
- 如何避免和解决内存泄漏问题?
- 解释
Web Workers 在性能优化中的作用。
- 如何使用
Intersection Observer API 实现懒加载和无限滚动?
- 解释
CDN 在前端性能优化中的作用。
- 什么是
SSR 和 SSG?它们对性能有何影响?
- 如何优化字体文件的加载?
- 解释
Tree Shaking 和 Code Splitting 对性能的影响。
- 如何分析和定位前端性能问题?(使用 Chrome DevTools)
- 解释
Virtual List / Windowing 的原理和应用场景。
- 如何优化动画和交互的流畅性?
- 解释
FLIP 动画原理。
- 如何处理第三方脚本对页面性能的影响?
- 什么是
PRPL 模式?
- 解释
Long Task 的概念以及如何识别和优化它们。
- 如何优化
Web Font 的加载和渲染?
- 解释
Resource Hints(dns-prefetch, preconnect, preload, prefetch, prerender)的作用。
- 如何使用
Performance API 进行性能监控?
- 解释
Paint 和 Composite 阶段的优化。
六、 网络与安全 (25 题)
- 解释 HTTP/1.1、HTTP/2 和 HTTP/3 的区别和各自的特性。
- 解释 HTTPS 的工作原理,包括 SSL/TLS 握手过程。
- 什么是 CORS (跨域资源共享)?它如何工作?如何解决跨域问题?
- 解释 XSS (跨站脚本攻击) 的原理和防御方法。
- 解释 CSRF (跨站请求伪造) 的原理和防御方法。
- 解释点击劫持(Clickjacking)的原理和防御方法。
- 什么是同源策略(Same-Origin Policy)?它限制了什么?
- 解释
localStorage, sessionStorage, cookie 的区别和适用场景。
- 解释
JWT (JSON Web Token) 的工作原理和安全性考虑。
- 什么是
OAuth 2.0?它在前端认证中的作用?
- 解释
WebSocket 的工作原理和应用场景。它与 HTTP 有何区别?
- 解释
TCP 三次握手和四次挥手过程。
- 什么是
DNS?DNS 解析过程是怎样的?
- 解释
CDN 的工作原理和优势。
- 什么是
Service Worker?它如何拦截网络请求?
- 解释
Content Security Policy (CSP) 的作用和配置。
- 什么是
SRI (Subresource Integrity)?它的作用是什么?
- 解释
HSTS (HTTP Strict Transport Security) 的作用。
- 如何防止中间人攻击(Man-in-the-Middle Attack)?
- 解释
HTTP 状态码的含义(如 200, 301, 302, 304, 401, 403, 404, 500, 502)。
- 什么是
HTTP 长连接和短连接?
- 解释
WebRTC 的工作原理和应用场景。
- 什么是
WebAuthn?它如何实现无密码认证?
- 解释
HTTP Only 和 Secure 属性在 Cookie 安全中的作用。
- 如何在前端进行敏感数据加密和解密(例如使用 Web Cryptography API)?
七、 架构与设计模式 (25 题)
- 解释 MVC、MVP、MVVM 模式在前端框架中的应用和区别。
- 解释组件化(Componentization)的设计思想和实践。
- 什么是微前端(Micro-Frontends)?它的优缺点和适用场景?有哪些实现方案?
- 解释前端状态管理的设计模式和常见解决方案(如 Redux, Vuex, MobX, Recoil, Zustand)。
- 什么是单向数据流和双向数据绑定?各自的优缺点?
- 解释响应式编程(Reactive Programming)的概念,以及 RxJS 在前端的应用。
- 什么是依赖注入(Dependency Injection)?它在前端框架中的应用?
- 解释工厂模式(Factory Pattern)和单例模式(Singleton Pattern)在前端的应用。
- 解释观察者模式(Observer Pattern)和发布/订阅模式(Publish/Subscribe Pattern)的区别和应用。
- 什么是适配器模式(Adapter Pattern)和装饰器模式(Decorator Pattern)?
- 如何设计一个可扩展、可维护的前端项目结构?
- 解释领域驱动设计(DDD)在前端架构中的应用。
- 什么是 BFF (Backend For Frontend) 层?它的作用和优缺点?
- 如何进行前端项目的模块化设计?
- 解释插件化(Plugin Architecture)的设计思想。
- 什么是无头 UI (Headless UI) 组件?它解决了什么问题?
- 解释函数式组件和类组件的设计哲学差异。
- 如何设计一个可复用的组件库?
- 什么是高阶函数(Higher-Order Functions)和高阶组件(Higher-Order Components)?
- 解释策略模式(Strategy Pattern)在前端中的应用。
- 如何进行前端项目的错误监控和日志上报?
- 解释 A/B 测试在前端中的实现和架构考虑。
- 什么是设计系统(Design System)?它对前端开发有何影响?
- 如何在大型前端项目中进行代码审查(Code Review)?
- 解释渐进式 Web 应用(PWA)的架构和核心技术。
八、 测试与调试 (15 题)
- 解释前端测试的分类(单元测试、集成测试、端到端测试)及其各自的适用场景。
- 解释 Jest 和 React Testing Library 在 React 测试中的作用和区别。
- 解释 Vue Test Utils 在 Vue 测试中的作用。
- 如何进行单元测试?请举例说明。
- 如何进行集成测试?请举例说明。
- 如何进行端到端测试(E2E Testing)?常用的工具有哪些?
- 什么是测试驱动开发(TDD)?它在前端开发中的实践?
- 什么是行为驱动开发(BDD)?它与 TDD 有何区别?
- 如何进行前端性能测试?常用的工具和指标有哪些?
- 如何进行前端兼容性测试?
- 解释
Mock 和 Stub 在测试中的作用。
- 如何使用 Chrome DevTools 进行性能分析和调试?
- 如何使用 Chrome DevTools 进行内存泄漏分析?
- 解释前端错误监控和上报的实现方式。
- 如何调试生产环境的 JavaScript 代码?
九、 编程范式与算法 (10 题)
- 解释面向对象编程(OOP)在 JavaScript 中的实现(封装、继承、多态)。
- 解释函数式编程(FP)的核心概念(纯函数、不可变性、高阶函数、函数组合)。
- 比较 OOP 和 FP 在前端开发中的优缺点和适用场景。
- 如何在前端实现一个简单的路由(Router)?
- 如何在前端实现一个简单的状态机?
- 解释常见的排序算法(如冒泡、选择、插入、快速、归并)及其时间复杂度。
- 解释常见的搜索算法(如二分查找、深度优先搜索 DFS、广度优先搜索 BFS)。
- 如何在前端处理大量数据(例如几万条数据)的展示和性能优化?
- 解释动态规划(Dynamic Programming)在前端算法题中的应用。
- 如何实现一个简单的图片懒加载功能?
十、 软技能与项目管理 (10 题)
- 你如何学习和掌握新的前端技术?
- 你在项目中遇到过最大的技术挑战是什么?你是如何解决的?
- 你如何保证代码质量和可维护性?
- 你对团队协作和代码审查有什么看法?
- 你如何处理技术债务?
- 你如何平衡技术选型和业务需求?
- 你对未来前端技术发展趋势有什么看法?
- 你在项目中如何进行需求分析和技术方案设计?
- 你如何进行跨团队协作和沟通?
- 你如何评估和提高自己的技术水平?