前端面试题及答案2019
📚 互联网大厂前端开发面试真题汇总 · 涵盖HTML/CSS/JavaScript/React/Vue等核心技术 · 持续更新中
📚 互联网大厂前端开发面试真题汇总 · 涵盖HTML/CSS/JavaScript/React/Vue等核心技术 · 持续更新中
2019年,前端面试题及答案2019领域发生了显著变化。随着React、Vue等框架的普及,以及TypeScript、WebAssembly等新技术的兴起,前端开发者的技术栈越来越丰富。面试不再仅仅考察HTML和CSS的基础知识,而是更加注重对JavaScript核心原理、框架底层机制以及工程化能力的理解。
| 难度等级 | 占比 | 典型知识点 | 代表企业 |
|---|---|---|---|
| ⭐ 基础题 | 30% | HTML语义化、CSS布局、JS基本语法 | 中小型企业 |
| ⭐⭐ 进阶题 | 35% | 闭包、原型链、Promise、Flex布局 | 中型互联网企业 |
| ⭐⭐⭐ 高难题 | 25% | 框架源码、性能优化、架构设计 | BAT等大厂 |
| ⭐⭐⭐⭐ 专家题 | 10% | 编译器原理、浏览器内核、系统架构 | 顶级科技公司 |
HTML作为前端开发的基础,虽然在高级面试中占比相对减少,但仍然是考察开发者基本功的重要环节。以下精选了2019年高频出现的HTML面试题,并附带详细解答。
HTML5引入了大量语义化标签,使网页结构更加清晰,有利于SEO和无障碍访问。常见的语义化标签包括:
DOCTYPE是Document Type的缩写,用于声明文档使用的HTML版本。它告诉浏览器使用哪种HTML规范来解析页面。
在HTML5中,<!DOCTYPE html>是最简洁的声明方式。它的作用是触发浏览器的标准模式(Standards Mode),避免浏览器进入怪异模式(Quirks Mode),怪异模式下浏览器的渲染行为会遵循旧版IE的不规范行为,导致布局不一致。
| 特性 | localStorage | sessionStorage | Cookie |
|---|---|---|---|
| 存储大小 | 约5MB | 约5MB | 约4KB |
| 生命周期 | 永久(手动清除) | 会话结束 | 可设置过期时间 |
| 与服务端交互 | 不参与 | 不参与 | 每次请求自动携带 |
| API | getItem/setItem | getItem/setItem | document.cookie |
| 数据类型 | 仅字符串 | 仅字符串 | 仅字符串 |
语义化是指使用正确的HTML标签来表达内容的含义,而不是仅仅用<div>来构建布局。语义化的好处包括:
CSS是前端开发中不可或缺的一部分,2019年的CSS面试不仅考察基础语法,还深入考察布局模型、动画、响应式设计等高级主题。
Flexbox(弹性盒子布局)是CSS3引入的强大布局模型,2019年已成为前端面试的必考内容。
Grid是二维布局系统,而Flexbox是一维布局系统。Grid适合整体页面布局,Flexbox适合组件内布局。两者可以结合使用:
2019年面试中,CSS动画是高频考点,主要考察以下三种方式:
transition用于属性值的平滑过渡,需要触发条件(如hover)。
animation可以定义多关键帧的复杂动画,无需触发条件。
transform用于元素的旋转、缩放、移动和倾斜,性能优于top/left定位。
| 操作 | 触发重排 | 触发重绘 | 说明 |
|---|---|---|---|
| 改变元素尺寸 | ✅ | ✅ | width、height、margin、padding等 |
| 改变内容 | ✅ | ✅ | innerHTML、textContent |
| 改变字体 | ✅ | ✅ | font-size、font-family |
| 改变背景色 | ❌ | ✅ | background-color |
| 改变颜色 | ❌ | ✅ | color |
| 使用transform | ❌ | ❌ | 由GPU加速,仅触发合成 |
| 使用opacity | ❌ | ❌ | 由GPU加速,仅触发合成 |
响应式设计(Responsive Web Design)是2019年前端开发的核心技能之一,主要通过以下方式实现:
| 特性 | rem | em |
|---|---|---|
| 基准 | 相对于根元素(html)的font-size | 相对于父元素的font-size |
| 继承性 | 全局一致 | 嵌套时可能累积变化 |
| 推荐场景 | 字体大小、整体布局 | 组件内部间距 |
| 计算复杂度 | 简单 | 嵌套时复杂 |
JavaScript是前端面试中最核心的部分,2019年的JS面试涵盖了从基础语法到高级概念的广泛内容。ES6+的新特性更是考察重点。
闭包(Closure)是指一个函数能够"记住"并访问其定义时的词法作用域,即使该函数在其作用域之外执行。闭包的形成条件是:函数嵌套 + 内部函数引用外部函数的变量 + 外部函数返回内部函数。
原型链是JavaScript实现继承的核心机制。每个JavaScript对象都有一个内置的[[Prototype]]属性(可通过__proto__访问),指向其原型对象。当访问对象的属性时,如果对象本身没有该属性,JavaScript会沿着原型链向上查找,直到找到该属性或到达原型链末尾(null)。
2019年面试中,ES6+新特性是必考内容,以下是最重要的特性:
Promise是异步编程的重要解决方案,避免了回调地狱。
事件循环是JavaScript单线程执行模型的核心机制。JavaScript将任务分为同步任务和异步任务,异步任务又分为宏任务(MacroTask)和微任务(MicroTask)。
async/await是ES2017引入的异步编程语法糖,基于Promise实现,使异步代码看起来像同步代码,提高了可读性。
| 特性 | 宏任务(MacroTask) | 微任务(MicroTask) |
|---|---|---|
| 来源 | setTimeout、setInterval、I/O、UI渲染 | Promise.then/catch/finally、MutationObserver、queueMicrotask |
| 执行时机 | 每次事件循环取一个执行 | 当前宏任务执行完毕后立即执行 |
| 执行次数 | 每次循环只执行一个 | 执行完所有微任务 |
| 优先级 | 较低 | 较高 |
2019年,React和Vue是前端面试中最常考察的两个框架。以下分别列出两个框架的高频面试题。
React组件的生命周期分为三个阶段:挂载、更新、卸载。
React Hooks是React 16.8引入的新特性,允许在函数组件中使用状态和其他React特性。
Vue 2.x使用Object.defineProperty()实现响应式系统,Vue 3.x使用Proxy。核心原理如下:
| 对比项 | Vue | React |
|---|---|---|
| 数据流 | 双向绑定(v-model) | 单向数据流 |
| 模板 | HTML模板 | JSX |
| 响应式 | Object.defineProperty / Proxy | 不可变数据 + 虚拟DOM Diff |
| 学习曲线 | 较低 | 较高 |
| 生态 | Vue Router / Vuex | React Router / Redux |
| 性能 | 编译时优化 | 运行时优化(Concurrent Mode) |
性能优化是2019年前端面试中的高频考点,考察开发者对Web性能指标的理解和实际优化能力。
| 指标 | 全称 | 说明 | 目标值 |
|---|---|---|---|
| FCP | First Contentful Paint | 首次内容绘制时间 | < 1.8s |
| LCP | Largest Contentful Paint | 最大内容绘制时间 | < 2.5s |
| FID | First Input Delay | 首次输入延迟 | < 100ms |
| CLS | Cumulative Layout Shift | 累积布局偏移 | < 0.1 |
| TTFB | Time to First Byte | 首字节时间 | < 800ms |
代码压缩(UglifyJS/Terser)、Tree Shaking、代码分割(Code Splitting)、懒加载、图片压缩(WebP格式)、字体子集化。
资源加载Service Worker缓存、HTTP缓存(Cache-Control/ETag)、CDN加速、浏览器缓存、localStorage缓存。
缓存减少重排重绘、使用transform代替top/left、虚拟列表、防抖节流、requestAnimationFrame、CSS动画代替JS动画。
渲染HTTP/2、Gzip/Brotli压缩、预加载(preload/prefetch/preconnect)、减少HTTP请求、合并资源、DNS预解析。
网络避免内存泄漏、Web Worker异步计算、减少主线程阻塞、使用requestIdleCallback、优化算法复杂度。
JavaScript触摸事件优化、viewport设置、懒加载图片、减少DOM节点数、使用CSS硬件加速、PWA支持。
移动端防抖和节流都是控制函数执行频率的技术,适用于高频触发的事件(如scroll、resize、input)。
2019年,前端工程化成为面试的重要考点,考察开发者对构建工具、模块化管理、代码规范等方面的理解。
Webpack构建的起点,可以是单个文件或文件数组。配置entry指定从哪个文件开始打包。
入口配置打包后文件的输出位置和命名规则。配置output指定打包文件的输出路径和文件名。
输出配置处理非JS文件的工具,如babel-loader处理JSX/ES6,css-loader处理CSS,file-loader处理图片。
文件处理扩展Webpack功能的工具,如HtmlWebpackPlugin生成HTML、MiniCssExtractPlugin提取CSS、TerserPlugin压缩代码。
功能扩展Webpack将一切视为模块,包括JS、CSS、图片、字体等。通过模块依赖图管理模块间的关系。
模块系统Webpack将代码分割成多个代码块,支持代码分割和懒加载,优化首屏加载性能。
代码分割Babel是一个JavaScript编译器,主要作用是将ES6+代码转换为向后兼容的ES5代码,使新语法能在旧浏览器中运行。
ESLint是一个JavaScript代码质量检查工具,用于发现代码中的错误、不一致和潜在问题。
以下是网友们最常搜索的前端面试相关问题,我们整理了详细的解答,帮助您更好地准备面试。
前端面试的基础知识主要包括以下几个方面:HTML(语义化标签、HTML5新特性、SEO基础)、CSS(盒模型、Flexbox、Grid、响应式设计、CSS3动画)、JavaScript(数据类型、作用域、闭包、原型链、异步编程、ES6+新特性)、浏览器原理(渲染流程、事件循环、性能优化)、网络知识(HTTP/HTTPS、缓存策略、跨域)、框架(React或Vue的核心概念和API)。建议按照HTML→CSS→JavaScript→框架→工程化的顺序系统复习,每个知识点都要理解原理而不仅仅是会用。
根据2019年的面试数据,最容易挂人的环节包括:JavaScript核心概念(闭包、原型链、this指向、事件循环),这是区分初级和中级开发者的关键;框架原理(React的生命周期和Hooks、Vue的响应式系统),考察对框架底层机制的理解;性能优化(具体的优化手段和实际案例),需要结合项目经验;算法题(虽然前端算法要求低于后端,但大厂必考);项目经验(能否清晰描述项目架构、技术选型理由、遇到的问题和解决方案)。建议在复习时重点突破这些薄弱环节。
前端面试中的算法题难度因公司而异。中小型企业通常只考察简单的数组和字符串操作,如排序、去重、反转等。大厂(BAT、字节等)则会考察中等难度的算法题,如二叉树遍历、动态规划、贪心算法等。建议刷LeetCode上的高频题,重点掌握数组、字符串、链表、树、动态规划等题型。中级岗位建议刷100-200题,高级岗位建议刷300题以上。不需要追求难题,重点是掌握解题思路和代码实现能力。
回答这个问题的关键在于真实但不致命。可以选择一个不影响核心工作的缺点,并说明你正在如何改进。例如:"我有时候会过于追求代码的完美,导致开发速度较慢,现在我学会了在时间和质量之间找到平衡,使用敏捷开发的方法先完成核心功能,再逐步优化。"避免说"我没有缺点"或说一个致命缺点(如"我不擅长沟通")。重点展示你的自我认知和改进能力。
2019年前端开发必备工具包括:代码编辑器(VS Code推荐,配合Prettier、ESLint插件)、版本控制(Git/GitHub)、构建工具(Webpack/Vite)、包管理(npm/yarn)、调试工具(Chrome DevTools)、测试工具(Jest/Mocha)、API调试(Postman)、设计协作(Figma/Sketch)、性能分析(Lighthouse/WebPageTest)。此外,了解Docker、CI/CD等运维工具也是加分项。
展示项目经验时,建议使用STAR法则(Situation情境、Task任务、Action行动、Result结果)来组织回答。具体包括:项目背景(项目规模、业务目标)、技术选型(为什么选择这个技术栈,对比过哪些方案)、个人贡献(你在项目中负责什么,解决了什么技术难题)、量化成果(性能提升了多少、用户增长了多少、Bug率降低了多少)。准备2-3个深入的项目案例,能够详细回答面试官关于技术细节的追问。
前端手撕代码题主要包括:数组操作(扁平化、去重、排序、合并)、字符串处理(反转、回文判断、字符统计)、函数实现(防抖、节流、柯里化、深拷贝、Promise.all/promise.race)、数据结构(链表反转、二叉树遍历、LRU缓存)、设计模式(观察者模式、发布订阅模式)。建议平时多练习这些经典题目,熟悉常用算法的实现,面试时注意先说思路再写代码,边写边解释。
回答离职原因时,应保持积极正面的态度。可以从个人发展角度回答,如"希望在更大的平台接触更复杂的技术挑战"、"希望在前端领域有更深入的发展"等。避免抱怨前公司、前领导或同事。如果是因为公司裁员,可以坦诚说明,并强调自己在这段期间的收获和成长。重点是展示你对新机会的期待和热情,而不是对过去的负面情绪。
本文全面梳理了前端面试题及答案2019的核心内容,涵盖了HTML、CSS、JavaScript、框架、性能优化、工程化等多个方面。希望通过本文的整理和解析,能够帮助正在准备前端面试的开发者系统地复习知识点,提升面试通过率。