2020 前端面试问题总结

该总结分为 CSS、JS、ES5/6、通用经验、程序设计、JS库、前端测试、React、Vue、Webpack、Node 进行总结。

CSS

  1. BFC:www.cnblogs.com/libin-1/p/7…
  2. Flex:www.runoob.com/w3cnote/fle…
  3. Grid:segmentfault.com/a/119000001…
  4. 选择器
    • 权重:important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 > 伪对象 > 继承 > 通配符
    • 用法
    • 伪类:LVHA(LV哈,简单明了)、focus、before、after、checked、disabled、last-child、first-child......
  5. 行内元素和块级元素有哪些?区别是什么?:不知道的童鞋前往前方
  6. 你理解的盒子模型?:围绕css3新属性 box-sizing 的两个值 content-box 和 border-box。
  7. 实现三列布局,左右固定宽度,中间响应式。兼容性尽量好?:常见的两列布局、三列布局实现要知道,知道2-3种实现方式为上策。而且兼容性方面也要知道,比如用了flex的话就兼容IE10+。
  8. 单位:vh、vw
  9. rem:www.cnblogs.com/phoebewang0…
  10. em:基于父元素
  11. offsetLeft 和 left 区别
  12. 手机屏幕展示缩放:
  13. 移动端适配页面
  14.  前端安全知识?怎么预防?怎么测试?:前端安全XSS、CSRF、SQL注入。什么场景会产生这些问题。预防和测试手段,测试手段比较少问。   

JavaScript

  1. 闭包(内存)www.jianshu.com/p/26c81fde2…       https://www.jb51.net/article/188763.htm
    • 栈内存:存变量
    • 堆内存:存对象
    • 内存泄露
    • 深、浅拷贝
  2. setTimeout / setInterval / requestAnimationFrame
  3. this:www.cnblogs.com/snandy/p/47…
    • this
    • global
  4. 作用域
  5. 原型链
  6. 数据类型
    • 数据类型转换
    • 数据类型判断
      • typeof
      • instanceof
      • constructor
      • Object.prototype.toString.call('')
  7. 事件
  8. 实现链式调用
  9. 类数组对象(过时)
    • 只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为他是类数组对象
    • push方法实现
  10. 算法
    • 排序
    • 斐波那契数列
    • 树的转换
  11. 上下文
  12. 严格模式 "use strict"
  13. 循环:map、foreach、for in、for of
  14. 前端模板引擎 www.cnblogs.com/jingwhale/p…

ECMAScript

  1. Promise
    • 状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)
    • 实现过程:www.jianshu.com/p/b4f0425b2…
    • then 传递 promise(执行过程)
    • 使用promise模拟一个解决多级回调嵌套问题。
  2. 定义:var let const
    • 定义
    • 定义过程的内存变化
  3. 箭头函数
    • this 指向
    • arguments 替代方案
  4. reducer (实现map)
  5. fiter
  6. async/await
  7. for in 和 for of
  8. set 数组去重
  9. 函数稀释
  10. Class
    • 实现继承 - function和class的实现方法
    • proto、construct
  11. generator
  12. require、import差别
  13. map 和 set 差别
    • map 键值对
    • set 单一
  14. Iterator
    • foreach()

通用经验

  1. 性能优化
  2. 前端路由:www.jianshu.com/p/d2aa8fb95…
    • hash
    • history API
  3. 跨域方案
    • cros (主要)
    • jsonp
    • ...
  4. cookie 大小、子域跨域、设置domin
  5. storage、浏览器缓存
  6. 安全相关
    • XSS
    • CSRF
  7. HTTP 1/1.1/2
    • 传输方式
    • 握手
  8. HTTPS
    • 端口
    • 安全原理
    • 中间人攻击
  9. HTTP状态码?常见的状态码和说明必须知道。200、204、206、301、302、304、307、400、401、403、404、500、503;304是怎么产生的还是要知道的。
  10. PWA segmentfault.com/a/119000001…
    • service worker
    • manifest.json
    • navigator.serviceWorker.register()
  11. fetch、axios、ajax
    • 特点、区别、使用

程序设计

  1. 从URL输入到页面加载过程
    • 流程:缓存 -> DNS解析 -> TCP三次握手 -> HTTP请求 -> 数据响应 -> 页面渲染 -> TCP四次挥手
    • 浏览器渲染:创建DOM树—创建StyleRules—创建Render树—布局Layout—绘制Painting
    • 参考:www.cnblogs.com/daijinxue/p…
  2. DSL:针对特定应用领域而设计使用的计算机语言
    • 外部DSL
    • 内部DSL
  3. GPL:指的是针对跨应用领域而设计使用的计算机语言
  4. 静态语言 & 动态语言
  5. V8引擎 vs JavaScript Core
  6. MVC、MVVM、单向数据流、双向数据流
  7. 模块化定义
    • AMD:异步模块定义
    • CMD:同步模块定义
    • CommonJS规范:通过module.exports定义,基于Node
    • ES6特性:模块化-export/import对模块进行导出导入的
    • 参考:www.cnblogs.com/chenguangli…
  8. EventLoop
  9. 事件:宏任务(macro-task) 和 微任务 (micro-task)
    • 宏任务:包括整体代码script,setTimeout,setInterval
    • 微任务:Promise.then(非new Promise),process.nextTick(node中)
    • 事件的执行顺序,是先执行宏任务,然后执行微任务,这个是基础,任务可以有同步任务和异步任务,同步的进入主线程,异步的进入Event Table并注册函数,异步事件完成后,会将回调函数放入Event Queue中(宏任务和微任务是不同的Event Queue),同步任务执行完成后,会从Event Queue中读取事件放入主线程执行,回调函数中可能还会包含不同的任务,因此会循环执行上述操作。
  10. GWT:Google web Toolkit,是Google公司发布的基于Java语言开发AJAX应用的开发工具包。
  11. 函数式编程 www.cnblogs.com/tjyoung/p/8…
    • 纯函数
    • 柯里化
    • 函数组合
    • Point Free
    • 声明式与命令式代码
    • 高阶函数
  12. 递归与尾递归 www.ruanyifeng.com/blog/2015/0…
  13. AOP & OOP
  14. 观察者模式
    • 观察者模式
    • 发布/订阅模式
  15. JS编程模式:www.cnblogs.com/xianyulaodi…
  16. BFF架构:segmentfault.com/a/119000000…
  17. SSR
    • 优势、劣势
    • 实现
  18. 多端开发(实现原理)

JS库

  1. lodash:blog.csdn.net/qq_35414779…
  2. axios:www.jianshu.com/p/7a9fbcbb1…
    • 拦截器:axios.interceptors.request.use(func(), func(err))
  3. bable:www.jianshu.com/p/cbd48919a…
    • @babel/cli
    • @babel/core
    • @babel/preset-env:环境包
    • @babel/polyfill :垫平不同浏览器或者不同环境下的差异
    • @babel/runtime:提供统一的模块化的helper插件
    • @babel/plugin-transform-runtime:插件
    • @babel/plugin-transform-xxx
    • .babelrc
    • presets
    • plugin
    • babel-stage-* (0覆盖1覆盖2覆盖3)
    • babel7升级内容
  4. eslint / jshint / csslint
  5. IndexDB

前端测试

  1. jest
  2. mocha
  3. chai

React

  1. 生命周期
    • 16版本新生命周期
    • 废除生命周期原因(涉及fiber)
  2. state、setState的原理
  3. hooks
  4. provider、connet、基于context
  5. 中间件
  6. redux-thunk
  7. redux-saga
  8. 高阶组件和受控组件
  9. 虚拟DOM
  10. Fiber
  11. render / commit
  12. react-router
  13. Redux
  14. Mobx
    • 与redux对比
    • 使用方式
  15. Dva(如用过)
    • 设计思路
    • 包含技术

Vue

  1. 双向绑定
    • Object.defineProperty
  2. 生命周期
  3. 虚拟dom
    • diff算法
  4. keep-alive
  5. vue的渲染流程
  6. vue-router
  7. Vuex
    • 应用方法
    • 实现原理
    • 数据流
  8. vue的源码看过没?说说基本的实现?实现双向绑定的原理?

    即使没有实际地阅读过源码,也要找别人分享的博客去了解其中的原理。

    推荐博文

  9. react和vue你都使用过,说说它们的区别?推荐这篇文章
  10. 说说你理解的虚拟dom?diff算法是怎么做的?
    • 用JS对象模拟DOM树
    • 比较两棵虚拟DOM树的差异
    • 把差异应用到真正的DOM树上

    推荐《深度剖析,如何实现一个Virtual Dom算法》

  11. redux和vuex的区别?

    摘取尤大的知乎回答:

    Vuex 其实是一个针对 Vue 特化的 Flux,主要是为了配合 Vue 本身的响应式机制。当然吸取了一些 Redux 的特点,比如单状态树和便于测试和热重载的 API,但是也选择性的放弃了一些在 Vue 的场景下并不契合的特性,比如强制的 immutability(在保证了每一次状态变化都能追踪的情况下强制的 immutability 带来的收益就很有限了)、为了同构而设计得较为繁琐的 API、必须依赖第三方库才能相对高效率地获得状态树的局部状态等等(相比之下 Vuex 直接用 Vue 本身的计算属性就可以)

    所以 Vue + Vuex 会更简洁,也不需要考虑性能问题,代价就是 Vuex 只能和 Vue 配合。Vue + Redux 也不是不可以,但是 Redux 作为一个泛用的实现和 Vue 的契合度肯定不如 Vuex。


Webpack

  1. 模块化打包工具
  2. loader执行顺序
    • 从下而上
    • 从右而左
  3. plugin
  4. loader
  5. rollup
  6. 打包性能优化
    • 缓存
    • 多进程
    • 插件

Node.js

  1. Node 常用包
  2. 线程与进程
  3. 运维与部署
    • 守护进程
  4. 性能优化方案
  5. 项目设计
原文地址:https://www.cnblogs.com/evaxtt/p/14545175.html