以下是前端面试中常见的50个高频问题及其简要解答:
HTML
-
HTML5 有哪些新特性?
- 语义化标签(如
<header>、<footer>)、多媒体支持(如<audio>、<video>)、本地存储(如localStorage、sessionStorage)、Canvas、WebSocket 等。
- 语义化标签(如
-
什么是语义化标签?为什么重要?
- 语义化标签是指用有意义的标签来描述内容结构(如
<article>、<section>),便于搜索引擎理解和提高可访问性。
- 语义化标签是指用有意义的标签来描述内容结构(如
-
<meta>标签的作用是什么?- 用于定义文档的元数据,如字符集、视口设置、页面描述等。
-
如何实现跨域请求?
- 使用 JSONP、CORS、代理服务器或 WebSocket 等技术。
-
HTML 中的
data-*属性有什么作用?- 用于存储自定义数据,可以通过 JavaScript 访问。
CSS
-
CSS 盒模型是什么?
- 盒模型由内容(content)、内边距(padding)、边框(border)和外边距(margin)组成。
-
如何实现垂直居中?
- 使用 Flexbox(
display: flex; align-items: center;)或 Grid(display: grid; place-items: center;)。
- 使用 Flexbox(
-
什么是 BFC(块级格式化上下文)?
- BFC 是一个独立的渲染区域,内部元素不会影响外部元素,常用于解决浮动和边距重叠问题。
-
CSS 选择器的优先级如何计算?
- 优先级从高到低:
!important> 内联样式 > ID 选择器 > 类选择器 > 标签选择器。
- 优先级从高到低:
-
如何实现响应式布局?
- 使用媒体查询(
@media)、Flexbox 或 Grid 布局。
- 使用媒体查询(
-
Flexbox 和 Grid 布局的区别是什么?
- Flexbox 是一维布局(行或列),Grid 是二维布局(行和列)。
-
如何实现 CSS 动画?
- 使用
@keyframes定义动画,通过animation属性应用。
- 使用
-
什么是 CSS 预处理器?你用过哪些?
- CSS 预处理器扩展了 CSS 功能,如变量、嵌套、混合等,常见的有 Sass、Less。
-
如何优化 CSS 性能?
- 减少选择器复杂度、使用压缩工具、避免过度使用
@import。
- 减少选择器复杂度、使用压缩工具、避免过度使用
-
如何实现一个三角形?
- 使用
border属性,如width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid red;。
- 使用
JavaScript
-
JavaScript 的数据类型有哪些?
- 基本类型:
string、number、boolean、null、undefined、symbol、bigint;引用类型:object。
- 基本类型:
-
let、const和var的区别是什么?let和const是块级作用域,var是函数作用域;const用于声明常量。
-
什么是闭包?
- 闭包是指函数可以访问其词法作用域中的变量,即使函数在其词法作用域外执行。
-
如何实现继承?
- 使用原型链、构造函数、组合继承或 ES6 的
class和extends。
- 使用原型链、构造函数、组合继承或 ES6 的
-
什么是原型链?
- 每个对象都有一个原型对象,通过
__proto__连接,形成链式结构,用于实现继承。
- 每个对象都有一个原型对象,通过
-
this的指向问题?this指向调用它的对象,可通过call、apply、bind改变指向。
-
什么是事件循环(Event Loop)?
- 事件循环是 JavaScript 处理异步任务的机制,通过调用栈、任务队列和微任务队列实现。
-
Promise 和 async/await 的区别?
Promise是异步编程的解决方案,async/await是基于Promise的语法糖,使代码更易读。
-
如何实现深拷贝?
- 使用
JSON.parse(JSON.stringify(obj))或递归实现。
- 使用
-
什么是防抖和节流?如何实现?
- 防抖:多次触发只执行最后一次;节流:多次触发按固定频率执行。
-
如何判断一个变量是数组?
- 使用
Array.isArray()或Object.prototype.toString.call()。
- 使用
-
==和===的区别?==会进行类型转换,===不会。
-
如何实现一个简单的 AJAX 请求?
- 使用
XMLHttpRequest或fetchAPI。
- 使用
-
什么是跨域?如何解决?
- 跨域是指浏览器限制不同源的请求,可通过 CORS、JSONP、代理服务器解决。
-
如何实现一个简单的单页应用(SPA)?
- 使用前端路由(如 React Router、Vue Router)和 AJAX 动态加载内容。
框架与库
-
React 和 Vue 的区别是什么?
- React 使用 JSX,Vue 使用模板语法;React 更灵活,Vue 更易上手。
-
React 的生命周期方法有哪些?
componentDidMount、componentDidUpdate、componentWillUnmount等。
-
什么是虚拟 DOM?
- 虚拟 DOM 是真实 DOM 的轻量级副本,用于提高渲染性能。
-
Vue 的双向绑定原理是什么?
- 通过
Object.defineProperty或Proxy实现数据劫持和监听。
- 通过
-
React Hooks 的作用是什么?
- 用于在函数组件中使用状态和生命周期特性。
-
如何优化 React 组件的性能?
- 使用
React.memo、useMemo、useCallback或shouldComponentUpdate。
- 使用
-
Vuex 和 Redux 的区别是什么?
- Vuex 是 Vue 的状态管理库,Redux 是 React 的状态管理库。
-
如何实现路由懒加载?
- 使用
React.lazy或 Vue 的() => import()。
- 使用
-
什么是高阶组件(HOC)?
- 高阶组件是一个函数,接收组件并返回新组件,用于复用逻辑。
-
如何在 React 中处理表单?
- 使用受控组件(
value和onChange)或非受控组件(ref)。
- 使用受控组件(
工具与构建
-
Webpack 的作用是什么?
- Webpack 是一个模块打包工具,用于将多个文件打包成一个或多个文件。
-
如何优化 Webpack 打包速度?
- 使用
cache、thread-loader、splitChunks等。
- 使用
-
Babel 的作用是什么?
- Babel 是一个 JavaScript 编译器,用于将 ES6+ 代码转换为 ES5。
-
什么是 Tree Shaking?
- Tree Shaking 是移除未使用代码的优化技术。
-
如何实现代码分割?
- 使用
import()动态导入或 Webpack 的splitChunks。
- 使用
-
什么是 CI/CD?
- CI/CD 是持续集成和持续交付的实践,用于自动化构建、测试和部署。
-
如何实现自动化测试?
- 使用 Jest、Mocha、Cypress 等测试框架。
-
什么是 ESLint?如何使用?
- ESLint 是一个 JavaScript 代码检查工具,用于统一代码风格和发现错误。
-
如何实现前端性能监控?
- 使用
Performance API或第三方工具(如 Google Analytics、Sentry)。
- 使用
-
如何实现前端安全防护?
- 防止 XSS(输入过滤、转义)、CSRF(使用 Token)、点击劫持(
X-Frame-Options)等。
- 防止 XSS(输入过滤、转义)、CSRF(使用 Token)、点击劫持(
2217

被折叠的 条评论
为什么被折叠?



