学习笔记--查漏补缺刷面题😁

25 阅读5分钟
  1. HTML的meta标签有哪些常见用法?请举例说明。
    答案要点:设置字符编码 <meta charset="UTF-8">;适配移动端 <meta name="viewport" content="width=device-width, initial-scale=1.0">;设置页面描述 <meta name="description" content="xxx">(利于SEO);刷新页面 <meta http-equiv="refresh" content="5;url=xxx">

2.CSS中display: nonevisibility: hiddenopacity: 0的区别是什么?
答案要点: - display: none:元素从DOM中移除,不占空间,触发重排重绘; - visibility: hidden:元素隐藏,仍占空间,只触发重绘; - opacity: 0:元素透明,仍占空间,可触发事件,只触发重绘。

3.CSS3有哪些新特性?请列举至少5个。
答案要点:圆角 border-radius、阴影 box-shadow/text-shadow、过渡 transition、变换 transform、弹性盒 flex、网格 grid、媒体查询 @media、渐变 linear-gradient/radial-gradient

4.什么是CSS的浮动?浮动会带来什么问题?如何清除浮动?
答案要点:浮动让元素脱离文档流,向左/右移动,直到碰到父元素或其他浮动元素;问题:父元素高度塌陷;清除方法:父元素设置 overflow: hidden、添加 clearfix 伪元素、父元素也设置浮动。

  1. JavaScript中如何判断一个变量是否为数组?请说出至少3种方法。
    答案要点:-Array.isArray(arr)(最准确); - arr instanceof Array; - Object.prototype.toString.call(arr) === '[object Array]'

  2. JavaScript中nullundefined的区别是什么?
    答案要点:undefined 表示变量声明未赋值,或对象属性不存在;null 表示空对象指针,是人为设置的空值;typeof undefinedundefinedtypeof nullobject

  3. JavaScript中数组有哪些常用方法?请区分改变原数组和不改变原数组的方法。
    答案要点: - 改变原数组:push() pop() shift() unshift() splice() sort() reverse(); - 不改变原数组:map() filter() reduce() forEach() slice() concat() indexOf()

  4. 什么是事件冒泡和事件捕获?如何阻止事件冒泡?
    答案要点:事件冒泡是事件从目标元素向上传播到根元素;事件捕获是事件从根元素向下传播到目标元素;阻止冒泡:event.stopPropagation(),阻止默认行为:event.preventDefault()

  5. JavaScript中如何实现深拷贝?请说出至少2种方法。
    答案要点: - 简易方法:JSON.parse(JSON.stringify(obj))(缺点:无法拷贝函数、正则、循环引用); - 递归方法:手写递归函数,遍历对象/数组,逐层拷贝属性值。

  6. 什么是立即执行函数(IIFE)?它的作用是什么?
    答案要点:IIFE即 (function(){})()(function(){}()),定义后立即执行;作用:创建独立作用域,避免变量污染全局、封装临时逻辑。

  7. Promise的三种状态是什么?Promise有哪些常用方法?
    答案要点:三种状态:pending(进行中)、fulfilled(成功)、rejected(失败),状态一旦改变不可逆;常用方法:then() catch() finally() Promise.all() Promise.race()

  8. async/await的作用是什么?它和Promise的关系是什么?
    答案要点:async/await 是 Promise 的语法糖,用于简化异步代码的书写;async 修饰的函数返回 Promise 对象,await 用于等待 Promise 执行完成,可捕获异步错误。

  9. 浏览器的渲染过程是怎样的?重排和重绘的区别是什么?
    答案要点:渲染过程:解析HTML生成DOM树 → 解析CSS生成CSSOM树 → 结合生成渲染树 → 布局(重排)→ 绘制(重绘);重排是布局改变(如尺寸、位置),消耗性能大;重绘是样式改变(如颜色、透明度),不影响布局,性能消耗小。

  10. Vue中v-for的key作用是什么?为什么不推荐用index作为key?
    答案要点:key 是 Vue 虚拟DOM的标识,用于高效更新DOM;若用 index 作为key,当数组元素顺序变化时,index会跟着变化,导致Vue误判元素已更新,重新渲染DOM,降低性能,甚至引发数据错乱。

  11. Vue中computedwatch的区别是什么?分别适用于什么场景?
    答案要点: - computed:计算属性,依赖其他数据,有缓存,值变化时才重新计算,适用于复杂计算(如拼接字符串、过滤数据); - watch:监听属性,无缓存,数据变化时执行回调,适用于异步操作或复杂逻辑处理(如数据变化请求接口)。

  12. React中setState的特点是什么?它是同步还是异步的?
    答案要点:setState 用于更新组件状态,不能直接修改state;在合成事件和生命周期钩子中是异步的,在原生事件和setTimeout中是同步的;可接收第二个参数(回调函数),在状态更新后执行。

  13. 什么是前端路由?Vue Router的两种模式是什么?区别是什么?
    答案要点:前端路由是通过改变URL,不刷新页面,切换不同组件的技术;两种模式:hash 模式(URL带 #,如 #/home)和 history 模式(URL无 #,如 /home);区别:hash 兼容性好,无需后端配置;history 依赖后端配置,否则刷新页面会404。

  14. 什么是ES6的模块化?exportimport的用法有哪些?
    答案要点:ES6模块化是将JS文件拆分为多个模块,实现按需加载;export 用于导出模块:默认导出 export default、按需导出 export const a = 1import 用于导入模块:导入默认导出 import a from './a'、导入按需导出 import {a} from './a'

  15. 前端常见的存储方式有哪些?它们的区别是什么?
    答案要点: - localStorage:永久存储,容量5MB左右,不随会话清除; - sessionStorage:会话存储,容量5MB左右,关闭页面/浏览器清除; - cookie:容量小(4KB左右),可设置过期时间,随请求发送到服务器。

  16. Git的常见命令有哪些?请说明git pullgit fetch的区别。
    答案要点:常见命令:git init git add git commit git push git pull git clone git branch git checkout;区别:git fetch 是拉取远程分支到本地,不合并git pull = git fetch + git merge,拉取后合并到当前分支。