端面试题大汇总二
前端面试题大汇总二
以下是 300 道前端面试题中的后 150 道,涵盖前端工程化、主流框架、性能优化、安全、实战场景等多个重要领域,能帮助你全面检验和巩固前端知识。
目录
- 五、前端工程化(30 题)
- 六、Vue 框架(30 题)
- 七、React 框架(30 题)
- 八、前端性能优化(30 题)
- 九、前端安全(20 题)
- 十、实战场景与综合问题(20 题)
五、前端工程化(30 题)
本章节涵盖构建工具、模块化开发、版本控制、自动化测试等工程化实践知识
-
什么是前端工程化?它包含哪些核心环节(如构建、打包、模块化、规范化)?
-
简述 webpack 的核心概念(如入口 entry、出口 output、 loader、插件 plugin)。
-
webpack 的 loader 和 plugin 有什么区别?分别有哪些常用的 loader 和 plugin?
-
如何配置 webpack 实现代码分割(Code Splitting)?常见的代码分割方式有哪些?
-
webpack 如何处理 CSS 文件?需要哪些 loader 和 plugin(如 css-loader、style-loader、mini-css-extract-plugin)?
-
什么是 Tree Shaking?webpack 如何实现 Tree Shaking?需要满足什么条件?
-
简述 webpack 的热模块替换(HMR)的概念及实现原理。
-
什么是 Vite?它与 webpack 有什么区别(如构建原理、热更新速度)?
-
Vite 的核心优势是什么?它的构建流程(开发环境和生产环境)是怎样的?
-
什么是 npm 和 yarn?它们的区别是什么?如何解决依赖冲突?
-
简述 package.json 文件的作用及常见字段(如 name、version、dependencies、scripts)。
-
什么是 devDependencies 和 dependencies?它们的区别是什么?如何安装依赖到对应的分类?
-
什么是 npm scripts?如何在 package.json 中配置和运行 npm scripts?
-
什么是 ESLint?它的作用是什么?如何在项目中配置 ESLint?
-
什么是 Prettier?它与 ESLint 有什么区别?如何实现两者的配合使用?
-
什么是 Git?简述 Git 的常用命令(如 init、add、commit、push、pull、branch、merge)。
-
Git 的工作区、暂存区、本地仓库、远程仓库之间的关系是什么?
-
如何解决 Git 的冲突?冲突产生的原因是什么?
-
什么是 Git Flow?常见的 Git 分支模型(如 master、develop、feature、hotfix)有哪些?
-
什么是前端模块化?CommonJS、AMD、CMD、ES6 Module 的区别是什么?
-
为什么需要使用模块化?模块化解决了前端开发中的哪些问题(如命名冲突、代码冗余)?
-
什么是 TypeScript?它与 JavaScript 有什么区别?TypeScript 的核心特性(如类型系统、接口、泛型)有哪些?
-
TypeScript 中的基本类型有哪些?如何定义变量的类型(如 let a: number = 1)?
-
TypeScript 中的接口(Interface)的作用是什么?如何定义和使用接口?
-
TypeScript 中的泛型(Generic)是什么?它的作用是什么?举例说明泛型的使用。
-
什么是 PostCSS?它的作用是什么?常见的 PostCSS 插件有哪些(如 autoprefixer、postcss-preset-env)?
-
什么是 CSS Modules?它的作用是什么?如何在项目中使用 CSS Modules?
-
简述前端自动化测试的类型(如单元测试、集成测试、E2E 测试)。
-
常用的前端测试框架有哪些(如 Jest、Mocha、Cypress)?Jest 的核心特性是什么?
-
什么是 CI/CD(持续集成 / 持续部署)?前端项目中如何配置 CI/CD 流程(如使用 GitHub Actions)?
六、Vue 框架(30 题)
本章节涵盖Vue基础概念、组件通信、生命周期、状态管理、路由等框架核心知识
-
简述 Vue 的核心特性(如双向绑定、组件化、虚拟 DOM、生命周期)。
-
Vue 2 和 Vue 3 的主要区别是什么?(如响应式原理、API 风格、性能优化)
-
Vue 的生命周期钩子函数有哪些?Vue 2 和 Vue 3 的生命周期钩子有什么区别?
-
Vue 2 的响应式原理是什么?(基于 Object.defineProperty)它有哪些局限性?
-
Vue 3 的响应式原理是什么?(基于 Proxy)它相比 Vue 2 有哪些优势?
-
什么是 Vue 的虚拟 DOM?虚拟 DOM 的工作原理是什么?它的优势是什么?
-
简述 Vue 的模板语法(如插值、指令、过滤器、计算属性)。
-
Vue 中的 v-bind 指令的作用是什么?如何简写?它可以绑定哪些内容(如属性、样式、类)?
-
Vue 中的 v-on 指令的作用是什么?如何简写?如何传递事件参数?
-
什么是 Vue 的计算属性(computed)和侦听器(watch)?它们的区别是什么?使用场景分别是什么?
-
Vue 中的 v-if 和 v-show 有什么区别?使用场景分别是什么?
-
Vue 中的 v-for 指令如何使用?如何给 v-for 循环的元素添加唯一 key?key 的作用是什么?
-
简述 Vue 的组件化思想,组件的定义方式(Vue 2 和 Vue 3)有哪些?
-
Vue 组件之间的通信方式有哪些?(如 props、emit、emit、emit、parent、$children、Vuex、Pinia、provide/inject)
-
什么是 Vue 的 props?props 如何定义、传递和验证?
-
什么是 Vue 的自定义事件?如何在组件间通过自定义事件传递数据($emit、v-on)?
-
什么是 Vuex?Vuex 的核心概念(state、mutations、actions、getters、modules)有哪些?
-
Vuex 中的 mutations 和 actions 有什么区别?为什么 mutations 必须是同步函数?
-
什么是 Pinia?它与 Vuex 有什么区别?Pinia 的核心特性是什么?
-
简述 Vue 的路由(Vue Router)的概念及核心功能(如路由映射、嵌套路由、编程式导航)。
-
Vue Router 的路由模式(hash 模式和 history 模式)有什么区别?如何配置路由模式?
-
如何定义 Vue Router 的路由规则?如何实现动态路由(如 /:id)?
-
Vue Router 中的嵌套路由如何配置和使用?(如 children 属性、router-view 嵌套)
-
Vue Router 中的编程式导航和声明式导航有什么区别?分别如何实现?
-
如何实现 Vue Router 的路由守卫?(全局守卫、路由独享守卫、组件内守卫)
-
Vue 中的插槽(Slot)是什么?它的作用是什么?有哪些类型的插槽(如默认插槽、具名插槽、作用域插槽)?
-
什么是 Vue 的混入(Mixin)?它的作用是什么?有哪些优缺点?
-
Vue 3 中的 Composition API 和 Options API 有什么区别?Composition API 的优势是什么?
-
Vue 3 中的 setup 函数的作用是什么?它的执行时机是什么?
-
简述 Vue 的性能优化方式(如路由懒加载、组件缓存、虚拟列表、减少重排重绘)。
七、React 框架(30 题)
本章节涵盖React基础概念、组件开发、Hooks、状态管理、路由等React生态系统知识
-
简述 React 的核心特性(如组件化、虚拟 DOM、单向数据流、JSX)。
-
什么是 JSX?JSX 的语法规则是什么?JSX 如何被编译为 JavaScript 代码?
-
React 中的元素(Element)和组件(Component)有什么区别?
-
React 组件的定义方式有哪些?(如函数组件、类组件)它们的区别是什么?
-
什么是 React 的虚拟 DOM?虚拟 DOM 的工作原理(调和过程 Reconciliation)是什么?
-
React 中的 key 属性的作用是什么?为什么列表渲染必须添加 key?
-
简述 React 的生命周期(类组件),常用的生命周期钩子有哪些?
-
React 函数组件中如何使用状态和生命周期?(依赖 Hooks)
-
什么是 React Hooks?常用的 React Hooks 有哪些(如 useState、useEffect、useContext)?
-
useState Hook 的作用是什么?如何使用 useState 管理状态?
-
useEffect Hook 的作用是什么?它的依赖数组(第二个参数)有什么作用?如何模拟生命周期?
-
什么是 React 的单向数据流?它与 Vue 的双向绑定有什么区别?
-
React 组件之间的通信方式有哪些?(如 props、Context、Redux、React Query)
-
什么是 React Context?它的作用是什么?如何创建和使用 Context?
-
什么是 Redux?Redux 的核心概念(store、action、reducer)有哪些?
-
Redux 的工作流程是什么?(dispatch action → reducer 处理 → 更新 store → 组件重新渲染)
-
什么是 React Redux?它的核心 API(Provider、connect)有什么作用?
-
什么是 Redux Toolkit?它相比传统 Redux 有哪些优势?如何使用 Redux Toolkit?
-
什么是 React Router?React Router 的核心组件(如 BrowserRouter、Route、Link、Switch)有哪些?
-
React Router 的 hash 模式和 history 模式有什么区别?如何配置?
-
如何实现 React Router 的动态路由(如 /:id)?如何获取路由参数?
-
React Router 中的嵌套路由如何配置和实现?
-
React Router 中的编程式导航(如 useHistory、useNavigate)如何使用?
-
什么是 React 的受控组件和非受控组件?它们的区别是什么?使用场景分别是什么?
-
如何处理 React 中的表单输入(如文本框、复选框、下拉框)?
-
什么是 React 的性能优化方式?(如 React.memo、useMemo、useCallback、虚拟列表)
-
React.memo、useMemo、useCallback 的作用分别是什么?它们的使用场景是什么?
-
什么是 React 的错误边界(Error Boundary)?它的作用是什么?如何实现?
-
什么是 React Suspense 和 React.lazy?它们如何实现组件的懒加载?
-
简述 React 18 的新特性(如 Concurrent Mode、Automatic Batching、Transitions)。
八、前端性能优化(30 题)
本章节涵盖性能指标、网络优化、资源加载、渲染优化、缓存策略等性能提升技术
-
简述前端性能优化的重要性,性能优化的核心指标有哪些(如 FCP、LCP、FID、CLS)?
-
什么是 FCP(首次内容绘制)、LCP(最大内容绘制)?如何优化这两个指标?
-
什么是 FID(首次输入延迟)、CLS(累积布局偏移)?如何优化这两个指标?
-
如何通过网络层面优化前端性能?(如减少 HTTP 请求、使用 HTTP/2、CDN 加速)
-
什么是资源压缩?如何压缩 HTML、CSS、JavaScript 文件?(如使用 webpack 插件、在线工具)
-
什么是资源合并?资源合并的优势和注意事项是什么?
-
什么是图片优化?图片优化的方式有哪些(如选择合适格式、压缩图片、懒加载、WebP)?
-
不同图片格式(JPG、PNG、GIF、WebP、AVIF)的特点是什么?使用场景分别是什么?
-
什么是图片懒加载?如何实现图片懒加载(原生 loading 属性、IntersectionObserver)?
-
什么是字体优化?字体优化的方式有哪些(如字体子集化、字体预加载、fallback 字体)?
-
如何优化 CSS 性能?(如减少选择器复杂度、避免使用 @import、CSS 压缩、关键 CSS)
-
如何优化 JavaScript 性能?(如减少重排重绘、避免阻塞渲染、代码分割、懒加载)
-
什么是关键渲染路径?如何优化关键渲染路径(如优先加载关键资源、减少渲染阻塞)?
-
什么是缓存?前端缓存的类型有哪些(如 HTTP 缓存、Service Worker 缓存、localStorage)?
-
简述 HTTP 缓存的工作原理,强缓存(Cache-Control、Expires)和协商缓存(ETag、Last-Modified)的区别。
-
如何配置 HTTP 缓存策略?不同资源(如 HTML、CSS、JS、图片)的缓存策略有何不同?
-
什么是 Service Worker?它的作用是什么?如何使用 Service Worker 实现离线缓存(PWA)?
-
什么是 PWA(渐进式 Web 应用)?PWA 的核心特性有哪些(如离线访问、推送通知、添加到桌面)?
-
如何优化 DOM 性能?(如减少 DOM 操作、批量操作 DOM、使用虚拟 DOM、避免强制同步布局)
-
什么是虚拟列表?虚拟列表的作用是什么?如何实现虚拟列表(如固定高度、动态高度)?
-
如何优化前端框架(Vue/React)的性能?(如组件缓存、路由懒加载、减少状态更新、使用 memo)
-
什么是代码分割?代码分割的方式有哪些(如路由分割、组件分割、动态 import)?
-
如何优化首屏加载速度?(如骨架屏、预加载、懒加载、减少首屏资源体积)
-
什么是骨架屏?骨架屏的作用是什么?如何实现骨架屏(手动编写、自动生成)?
-
什么是预加载(Preload)和预连接(Preconnect)?它们的作用是什么?如何使用?
-
如何优化移动端前端性能?(如适配方案、触摸事件优化、避免过度动画)
-
什么是内存泄漏?如何检测和解决前端内存泄漏(如使用 Chrome DevTools、避免全局变量)?
-
如何优化第三方库的加载?(如按需引入、CDN 加载、替换轻量级库)
-
简述前端性能监控的方式(如埋点监控、性能 API、第三方工具)。
-
常用的前端性能分析工具有哪些(如 Chrome DevTools、Lighthouse、WebPageTest)?如何使用?
九、前端安全(20 题)
本章节涵盖常见安全威胁、防御策略、跨域问题、数据保护等Web安全知识
-
什么是 XSS(跨站脚本攻击)?XSS 的类型有哪些(存储型、反射型、DOM 型)?
-
如何防范 XSS 攻击?(如输入过滤、输出编码、CSP、HttpOnly Cookie)
-
什么是 CSRF(跨站请求伪造)?CSRF 的攻击原理是什么?
-
如何防范 CSRF 攻击?(如 Token 验证、SameSite Cookie、Referer 验证)
-
什么是 SameSite Cookie?SameSite 的取值(Strict、Lax、None)有什么区别?
-
什么是 CSP(内容安全策略)?CSP 的作用是什么?如何配置 CSP?
-
什么是 HTTPOnly Cookie 和 Secure Cookie?它们的作用是什么?
-
什么是跨域?跨域产生的原因是什么?浏览器的同源策略是什么?
-
如何解决跨域问题?(如 CORS、JSONP、代理服务器、postMessage)
-
什么是 CORS(跨域资源共享)?CORS 的工作原理是什么?常见的 CORS 响应头有哪些?
-
CORS 中的简单请求和预检请求(Preflight)有什么区别?预检请求的触发条件是什么?
-
什么是 JSONP?JSONP 的工作原理是什么?JSONP 有哪些局限性?
-
什么是 iframe 跨域?如何实现 iframe 之间的跨域通信(如 postMessage、document.domain)?
-
什么是 SQL 注入?前端如何防范 SQL 注入?(如输入过滤、参数化查询)
-
什么是点击劫持(Clickjacking)?如何防范点击劫持?(如 X-Frame-Options、framebusting)
-
什么是敏感数据泄露?前端如何保护敏感数据?(如加密存储、避免明文传输)
-
什么是 DDoS 攻击?前端如何应对 DDoS 攻击?(如 CDN 防护、限流、验证码)
-
什么是前端加密?常用的前端加密算法有哪些(如 MD5、SHA、AES、RSA)?
-
如何防范前端的恶意代码注入?(如过滤危险标签和属性、使用安全的 API)
-
简述前端安全开发的最佳实践(如输入验证、输出编码、最小权限原则、定期更新依赖)。
十、实战场景与综合问题(20 题)
本章节涵盖常见功能实现、性能调优、项目架构、实战经验等综合应用能力
-
如何实现一个防抖函数?并说明其在搜索框输入联想场景中的应用。
-
如何实现一个节流函数?并说明其在滚动加载、按钮防重复点击场景中的应用。
-
如何实现一个深拷贝函数?需要考虑哪些边界情况(如循环引用、特殊类型)?
-
如何实现一个虚拟列表组件?(要求支持动态高度、滚动加载)
-
如何实现一个图片懒加载组件?(分别使用原生 loading 属性和 IntersectionObserver)
-
如何实现一个简易的 AJAX 请求函数?(支持 GET、POST 方法,处理成功和失败回调)
-
如何实现一个简易的路由系统?(支持 hash 模式,实现路由跳转和参数获取)
-
如何实现一个简易的 Vue 响应式系统?(基于 Object.defineProperty 或 Proxy)
-
如何实现一个简易的 TodoList 应用?(使用 Vue 或 React,包含增删改查功能)
-
如何实现一个无限滚动列表?(监听滚动事件,判断是否到达底部,加载更多数据)
-
如何实现一个表单验证组件?(支持必填、邮箱、手机号、密码强度验证)
-
如何实现一个模态框(Modal)组件?(支持显示 / 隐藏、遮罩层、键盘关闭)
-
如何实现一个下拉菜单(Dropdown)组件?(支持 hover 或点击触发、防止点击穿透)
-
如何实现一个日期选择器(DatePicker)组件?(支持选择年月日、禁用过去日期)
-
如何排查和解决前端页面白屏问题?(从网络、代码、资源加载等角度分析)
-
如何排查和解决前端页面卡顿问题?(从 DOM 操作、JS 执行、资源占用等角度分析)
-
如何设计一个大型前端项目的目录结构?(考虑模块化、可维护性、可扩展性)
-
前端项目中如何实现权限管理?(如路由权限、按钮权限、数据权限)
-
前端项目中如何处理接口请求?(如请求拦截、响应拦截、错误处理、请求重试)
-
简述你参与过的前端项目的技术栈选型理由、遇到的难点及解决方案。