前端面试QA设计
· 阅读需 14 分钟
面试流程:自我介绍-》技术问答-》对方提问-》结束
HTML/CSS 基础
- HTML 语义化标签的含义和作用 :例如 <header> <section> <article> <footer> 等,语义化标签有助于提升可读性、搜索引擎优化(SEO)和辅助技术的使用。
- CSS 布局方式有哪些 :包括浮动布局(Float)、弹性盒子布局(Flexbox)、网格布局(Grid)、绝对 / 相对定位布局等,每种布局方式的适用场景和优缺点。
- 如何实现一个圆形按钮 :可以使用 CSS 的 border-radius 属性将按钮四角设置为 50% 的圆角,结合宽度和高度相等的设置。
- CSS3 新增的动画属性和方法 :如 transition 和 animation,@keyframes 用于自定义动画效果,transition-delay 控制动画延迟等。
JavaScript 基础
- 作用域和闭包的概念 :JavaScript 的作用域分为全局作用域、函数作用域和块级作用域等,闭包是一个可以访问自由变量的函数,即使自由变量的作用域已经销毁,它可以保持对外部变量的引用。
- 事件循环和异步编程 :
- 什么是事件循环?事件循环是 JavaScript 的核心特性之一,负责协调同步代码和异步任务的执行,包括宏任务(如 setTimeout)和微任务(如 Promise)的处理机制。
- 异步编程的常用方式,如回调函数、Promise 和 async/await 的使用。
- 原型链和继承 :JavaScript 中没有传统的类继承机制,而是通过原型链实现继承,理解原型(prototype)、constructor、proto 之间的关系。
- this 的指向问题 :不同上下文环境下 this 的指向,例如在函数、对象方法、事件绑定等场景中的表现。
前端框架
- React 或 Vue 的生命周期 :以 React 为例,组件从挂载到更新再到卸载的各个阶段的生命周期方法及其作用,如 componentDidMount componentDidUpdate componentWillUnmount。
- Vue 的 Vue Router 和 Vuex :Vue Router 是 Vue 的官方路由管理器,掌握动态路由、嵌套路由、路由守卫等的使用;Vuex 是 Vue 的状态管理工具,理解其核心概念如状态(state)、动作(actions)、突变(mutations)和模块(modules)。
工程化和工具
- Webpack 的配置和优化 :如何配置 Webpack 模块打包器,实现代码拆分、Tree Shaking 等优化策略,以提升构建和运行时性能。
- npm 和 yarn 的区别 :npm 是官方的包管理器,而 yarn 提供了更快的安装速度、更可靠的依赖版本管理和离线模式等功能。
- Babel 的作用和配置 :Babel 是一个用于将现代 JavaScript 转换为广泛兼容的 JavaScript 的工具,支持 ES6+ 的语法转换,可以结合 Webpack 或 Parcel 等打包工具使用。
浏览器相关
- 浏览器渲染过程 :从 HTML 到页面呈现的整个流程,包括 DOM 树和 CSSOM 树的建立、渲染树的生成、布局计算(reflow)和绘制(repaint)等过程。
- 跨域问题的解决方案 :包括服务器端的 CORS 配置、JSONP、proxy 代理等方式,解决前后端分离时不同域之间的数据交互问题。
- 浏览器的同源策略 :同源策略限制了来自不同源的 “document” 或脚本,对当前 “document” 读取或设置某些属性的操作,是浏览器安全机制的核心。
性能优化和常见问题
- 前端性能优化的方法 :包括减少 HTTP 请求、使用 CDN、图片压缩、懒加载、缓存策略等。
- Event Loop 的理解:前端面试中的重要知识点之一,JavaScript 是单线程语言,Event Loop 是用来协调 JS 的同步代码和异步任务执行的方案。
调试和工具
- 常用调试工具和技术 :包括浏览器开发者工具(如 Chrome DevTools)、调试器(debugger 关键字)、日志打印等。
- 如何分析和优化前端代码的性能问题 :能通过开发者工具的性能面板,分析时间线、调用栈等数据,找到性能瓶颈并优化,比如减少阻塞 DOM 的 JavaScript、合理利用事件委托等。
面向对象编程
面向对象的特征 :包括封装、继承和多态,了解如何在 JavaScript 中通过 ES6 的类语法或原型链来实现这些面向对象的特性。
其他
- 如何保证代码的可读性和可维护性 :包括按照规范的编码标准,如缩进、命名规范等;良好的注释风格,以及遵循最佳实践(如 KISS 和 DRY 原则)。
- 在前端开发中遇到的挑战和解决方案 :例如如何处理浏览器兼容性问题、如何优雅地处理用户输入错误等。
开放性问题
- 如何看待前端技术的发展趋势 :可以讨论 WebAssembly、Serverless、PWA 等前沿技术对前端开发的影响。
- 请描述一个你遇到过的前端开发难题是如何解决的 :考察解决问题的能力和思考过程。
前端基础
html/css/js
- 在我们前端技术层面,怎么做一些SEO优化?
- flex布局常用属性有哪些?
- 如何实现一个圆形按钮?
- JavaScript 作用域有哪些?箭头函数的 this 指向是什么?
- 闭包有什么特点?
- 事件循环是什么?
- 你怎么看待 JavaScript 的原型链设计的?
- ts 适合什么场景下使用?(开放)
框架技术
- react 和 vue 有什么区别?
React
基础概念
- React 的hooks有哪些?为什么要改成 hooks 呢?
- 你能说一下虚拟 DOM 的原理吗?
- React 的生命周期方法有哪些?它们分别在什么时机被调用?
组件相关
- 什么是受控组件和非受控组件?分别适用于什么场景?
- 如何在 React 中实现组件的条件渲染?
- 如何在 React 中实现列表渲染?
- 什么是高阶组件(HOC)?它的作用是什么?
- React 中的 props 和 state 的区别是什么?
状态管理
- 如何在 React 中使用 useState?它有哪些注意事项?
- useEffect 的作用是什么?它如何处理副作用?
- 什么是 Context API?它如何用于在组件之间共享状态?
- React 中的 Hook 有哪些?它们分别适用于哪些场景?
- 你用什么状态管理工具?(开放)
优化与性能
- 如何优化 React 应用的性能?
- 什么是“reconciliation”?
- React 中的 memo 和 useCallback 的作用是什么?
- 什么是服务器端渲染(SSR)?它如何在 React 中实现?
路由相关
- React Router 是什么?它的基本使用方式是什么?
- 如何使用 React Router 实现页面跳转和参数传递?
- 什么是嵌套路由?如何实现?
高级话题
- 什么是反向代理(Proxy)在 React 开发中的作用?
- 如何在 React 中处理表单验证?
- 如何在 React 中实现 SSR?
- 如何使用 Redux 或 MobX 等状态管理库?
- React 中的“props drilling” 问题是什么?如何解决?
工具和生态系统
- 如何使用 ESLint 和 Prettier 提高代码质量?
- 如何使用 React DevTools 调试 React 应用?
- 什么是 Webpack?React 应用中如何配置?
- 如何使用 Storybook 开发 React 组件?
React Native
- React Native 是在哪个版本开始改变架构的?变化有哪些?(开放)
- 你做过哪些React Native 性能优化?(开放)
vue
基础知识
- 什么是 Vue.js?它的核心理念是什么?
- Vue.js 是一个用于构建用户界面的渐进式框架,核心理念是渐进式开发,即可以根据项目需求逐步引入 Vue.js 的功能。
- Vue 的数据绑定是如何工作的?
- Vue 通过双向数据绑定实现数据和视图的同步更新,使用 v-model 指令可以实现表单输入和应用数据之间的双向绑定。
- Vue 的生命周期是什么?
- Vue 实例从创建到销毁的过程就是生命周期,主要包括 beforeCreate、created、beforeMount、mounted、beforeUpdate、updated、beforeDestroy、destroyed 等阶段。
核心概念
- v-show 和 v-if 有什么区别?
- v-show 是通过 CSS 的 display 属性来控制元素的显示和隐藏,而 v-if 是通过条件判断来决定元素是否渲染到 DOM 中。v-show 更适合频繁切换的场景,而 v-if 更适合条件较少的场景 。
- 为什么 v-for 要用 key?
- 使用 key 可以帮助 Vue 更快地更新列表,通过 key 来追踪每个节点的身份,从而减少不必要的 DOM 操作,提高渲染性能 。
- 描述 Vue 的响应式原理
- Vue 通过 Object.defineProperty 对数据进行劫持,当数据发生变化时,会通知相关的视图进行更新。对于数组,Vue 通过重写部分数组方法来实现响应式。
组件
- Vue 组件是如何定义的?
- Vue 组件通过 Vue.extend 方法或者直接在 components 选项中定义,组件可以包含模板、脚本和样式等部分。
- Vue 组件之间如何传值?
- 父组件可以通过 props 向子组件传递数据,子组件可以通过事件向父组件传递数据。兄弟组件之间可以通过事件总线或者 Vuex 进行通信。
- 什么是 Vue 的插槽(slots)?
- 插槽是 Vue 提供的一种内容分发机制,用于在组件内部定义可以插入内容的位置,可以是具名插槽、作用域插槽等。
路由
Vue Router 是什么?
- Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用,可以实现页面的切换和导航。 Vue Router 中的路由懒加载是什么?
- 路由懒加载是指在路由被访问时才加载对应的组件,可以提高应用的加载速度,通过 import 语法或者 require 方法实现。 状态管理 Vuex 的核心概念有哪些?
- Vuex 是 Vue.js 的状态管理工具,核心概念包括 state(状态)、mutations(提交状态变更)、actions(异步操作)、getters(获取状态的派生状态)。 Vuex 中 action 和 mutation 有何区别?
- mutation 是同步操作,用于直接修改状态,而 action 是异步操作,可以在 action 中调用 mutation 来提交状态变更 。 其他 如何优化 Vue 项目的性能?
- 可以通过合理使用 v-if 和 v-show、使用 computed 属性、在 v-for 中使用 key、使用异步组件、使用 keep-alive 等方式来优化性能 。 Vue 和 React 有什么区别?
- Vue 和 React 都是前端框架,Vue 更注重渐进式开发,而 React 更注重组件化和函数式编程。Vue 的模板语法更接近 HTML,而 React 使用 JSX 语法。