高级前端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 题)
- 你如何学习和掌握新的前端技术?
- 你在项目中遇到过最大的技术挑战是什么?你是如何解决的?
- 你如何保证代码质量和可维护性?
- 你对团队协作和代码审查有什么看法?
- 你如何处理技术债务?
- 你如何平衡技术选型和业务需求?
- 你对未来前端技术发展趋势有什么看法?
- 你在项目中如何进行需求分析和技术方案设计?
- 你如何进行跨团队协作和沟通?
- 你如何评估和提高自己的技术水平?