【面试八股】2023高频前端面试题、上千条问题与答案

3,441 阅读41分钟

HTML +CSS

  1. 说下你对WEB标准以及W3C的理解与认识?
  2. DOCTYPE 作用?严格模式与混杂模式如何区分?它们有何意义?
  3. 什么是 DTD ?
  4. 知道XHTML吗?说一下XHTML的局限性?
  5. xhtml 和 html 的区别?
  6. JSON 和 XML 的区别?
  7. 前端页面由哪三层构成,分别是什么?作用是什么?
  8. 标签上 title 与 alt 属性的区别是什么?
  9. 对HTML语义化标签的理解?
  10. 说一下html头部属性 mate?
  11. 常见 MIME 类型列表
  12. src 和 href 的区别?
  13. 说一下a标签中rel的nofollow、noopener 和 noreferrer属性是做什么用的?
  14. 设计中使用了非标准的字体,该如何处理?
  15. 什么是BFC?如何触发?有何特点如何解决margin“塌陷”?      
  16. HTML和CSS有什么规范需要遵循?从命名、结构上谈谈
  17. CSS 什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?
  18. CSS如何出来溢出?说一下overflow 不同值的区别。  
  19. css calc属性作用是什么?主要用于解决什么问题?    
  20. 描述一下渐进增强(progressive enhancement)和优雅降级(graceful degradation)    
  21. iframe 有哪些优点?哪些缺点?用它来解决过什么问题?      
  22. html页面引入另一个html页面?
  23. 如何 Chrome 浏览器支持小于12px的文字?
  24. 如何画一条0.5px的线
  25. 用CSS画一个三角形,有哪些办法?
  26. 简述一下css盒子模型
  27. HTML5有哪些特性?
  28. CSS3的特性有哪些?
  29. 如何实现水平居中?
  30. 如何实现垂直居中?
  31. 如何实现在某个容器中居中的?
  32. 有一个固定长宽div,怎么实现在屏幕上垂直水平居中    
  33. 如何实现双圣杯布局?
  34. 三栏布局有什么实现方式?  
  35. 自适应式布局实现方案响应式网站开发你知道哪些方案?
  36. 什么是弹性盒子flex布局?
  37. multi-column多列布局实现瀑布流
  38. 怎么使用使用 display: box 盒子属性布局?
  39. 怎么使用使用 display:flex 容器项目布局?
  40. 怎么使用使用 display:grid 网格布局(Grid) ?
  41. CSS中选择器的优先级?
  42. CSS权重如何计算?
  43. CSS自动换行、强制不换行、强制断行、超出显示省略
  44. HTML5 input元素type 属性有哪些?
  45. 隐藏一个元素有哪些方法?元素隐藏的多种方法
  46. display: none 与 visibility:hidden 与opacity:0之间的区别?
  47. inline-block、inline和block的区别?
  48. 行内元素怎么变块级元素、行内块元素?
  49. line-height 和 height的区别?
  50. 设置一个元素的背景颜色,背景颜色会填充哪些区域?
  51. 为什么img是inline还可以设置宽高?
  52. 如何让文档脱离文档流?
  53. position的值有哪些,分别有什么特点?
  54. 相对布局和绝对布局,position:relative和obsolute
  55. box-sizing的作用,如何使用?
  56. 什么是浮动,浮动会引起什么问题,有何解决方案,如何实现清除浮动?
  57. 如何改变一个DOM元素的字体颜色?
  58. CSS 选择符有哪些?
  59. CSS中哪些属性可继承,哪些不可以
  60. ::before 和 ::after 中双冒号和单冒号的区别?
  61. CSS3新增伪类,以及伪元素
  62. nth-child 和 nth-of-type的区别?
  63. css 的 tabindex 属性是用来做什么的?
  64. link 标签和import标签的区别?
  65. 说下css预编译器?
  66. lessscss 有什么区别
  67. 说一下块元素行元素置换元素
  68. 多行元素的文本省略号如何实现?
  69. 静态、动态、伪静态的URL结构到底哪种更利于SEO
  70. 网站伪静态和静态的区别?
  71. 做过网站支持国际化多语言吗?你是怎么去实现的?
  72. JavaScript 动画和CSS3动画有什么区别?
  73. css 动画如何实现
  74. transitionanimation区别
  75. 简述下SVG样式?怎么使用SVG
  76. 讲一下 canvas 的使用吧?
  77. canvas和SVG 的区别?
  78. 怎么实现换肤?
  79. 什么是CSS工程化?
  80. 为什么要做样式初始化?
  81. CSS有哪些优化手段?
  82. 怎么调用QQ聊天、打电话、发短信?
  83. 不希望产生 favicon.ico 的请求,该怎么做?

JavaScript

  1. 说说你所知道的JS语言特性?
  2. 请说几条书写 JavaScript语句的基本规范
  3. javascript的数据类型(datatypes)有哪些?
  4. javascript 有哪些引用类型?
  5. 如何判断javascript的数据类型?
  6. 强制类型转换、隐式类型转换分别是什么,列举场景说明。
  7. JS 字符串转数字的方法?JS 数字转字符串的方法?
  8. 如何在 JavaScript中将base字符串转换为 integer? 答案:parseInt
  9. 简述Number() 的存储空间是多大?如果后台发送了一个超过最大自己的数字怎么办 ?
  10. typeof 和 instanceof 区别?
  11. 说一下instanceof操作符的局限性?
  12. 说下 instanceof 和 in 的区别?
  13. instance 的原理,能手写一个吗?
  14. 怎么判断两个对象相等?如何判断空对象?
  15. 如何判断对象为空?答案:Reflect.ownKeys
  16. 0.1+0.2为什么不等于0.3?(解释原理)
  17. 说下运算符的分类有哪些?
  18. 什么是条件运算符?
  19. Javascript 什么是三元表达式?“三元”表示什么意思?
  20. 你能链接条件运算符吗?
  21. JavaScript中常用的逻辑运算符有哪些?
  22. JavaScript中的循环结构都有哪些?
  23. 那为什么typeof判断null为object?
  24. 对象的特性有哪些?简述面向对象编程的三大特点 ?
  25. 哪些方法可以访问对象属性?怎么删除对象的属性?
  26. JavaScript如何获取对象的键列表?
  27. javascript 创建对象的几种方式?
  28. 列举宿主对象、内置对象、原生对象并说明其定义。
  29. 造成 NAN 和 Infinity 的原因?
  30. Object.is 和 === 的区别?Object.is实现的原理是什么?说一下isNaN?
  31. === 和 == 的区别?
  32. null == undefined 输出什么?null === undefined呢?
  33. 判断 []==0? [] == [] ?
  34. javascript中奇葩的类型判断与转换有哪些?
  35. {} 和 [] 的valueOf和toString的结果是什么?
  36. 判断是否是整数?
  37. null, undefined 的区别
  38. 什么情况下会返回 undefined值?
  39. 怎么获取当前日期(年-月-日 时:分:秒)?  知道 moment 这个包是用来干什么的吗?
  40. 如何区分数组和对象?
  41. 数组常用方法有哪些?有哪些原生方法?
  42. 多维数组如何降维?数组扁平化 flat
  43. 如何实现数组的随机排序?
  44. 数组去重有哪些方法?
  45. 什么是稀疏数组?
  46. 如何判断一个数组?
  47. 什么是类数组(伪数组),如何将其转化为真实的数组?
  48. 创建函数的几种方式?
  49. js 函数中 arguments 是什么?接收的是实参还是形参?
  50. 变量提升(hoisting) 是什么?与函数提升的区别?
  51. JavaScript如何为变量分配默认值?
  52. 简述 JavaScript 中的高阶函数是什么?
  53. 解释什么是JavaScript立即执行函数(IIFE)?
  54. 封装 JavaScript源文件内容到一个函数块有什么意义?
  55. 在 JavaScript中,为什么说函数是第一公民、第一类对象?
  56. 解释 javascript: void (0): 的作用是什么?
  57. noscript 标签有什么作用?
  58. 数组遍历的方法有哪些,分别有什么特点,性能如何?
  59. 如何给一个按钮绑定两个 onclick 事件?
  60. 什么是作用域链?如何延长
  61. document.write和 innerHTML的区别?
  62. 简述为什么不建议在 JavaScript中使用 innerHTML?
  63. innerText 和 innerHTML 的区别?
  64. dom 中 nodetype 的类型?
  65. dom结构操作怎样添加、移除、移动、复制、创建和查找节点?
  66. DOM节点的Attribute和Property有何区别?
  67. 讲一下什么是事件捕获,它是如何工作的?
  68. 讲一下什么是事件冒泡,它是如何工作的
  69. 如何阻止事件冒泡?
  70. 如何让事件先冒泡后捕获?(Chrome 89.0.4363.0更新后 这题过时了)
  71. 对事件委托的理解
  72. dom的事件模型,三种事件模型是什么?
  73. 说说事件流顺序是?
  74. 事件三要素是什么?
  75. mouseover 和mouseenter的区别?
  76. 获取元素位置?
  77. JS的各种位置,比如clientHeight,scrollHeight,offsetHeight,以及clientTop,scrollTop,offsetTop的区别?
  78. 谈谈 getBoundingClientRect 是干什么用的?
  79. 谈谈 IntersectionObserver 是干什么用的?
  80. 谈谈 requestIdleCallback 是干什么用的?
  81. 谈谈 requestAnimationFrame 的作用?
  82. 如何绑定事件,如何解除事件?
  83. 解释 JavaScript中定时器的工作,并说明使用定时器的缺点
  84. setTimeout 和setInterval的区别及用法是什么?
  85. 用setTimeout 来实现 setlnterval
  86. 什么是内存泄漏?哪些情况会导致内存泄漏?
  87. 继承有哪些方法?继承的优缺点
  88. 说一下重写和重栽?它们的区别?
  89. 说一下类的创建和继承,列举一下你所知道的继承方式
  90. ES6的继承和ES5的继承有什么区别?
  91. class、extends 是什么,有什么作用?
  92. class 和 ES5 构造函数的不同点?
  93. 如何实现sleep的效果s5或者es6
  94. ES5和ES6的区别有哪些?ES6新增了什么
  95. 如果没有第三个变量,如何交换两个变量?答案: [a, b] = [b, a]
  96. 知道哪些ES6,ES7的语法?
  97. 解释JavaScript 中的展开运算符是什么?
  98. 知道 WeakMap 吗?它的作用和应用场景?
  99. 知道 WeakSet 吗?它的作用和应用场景?
  100. object.assign和扩展运算法是深拷贝还是浅拷贝,两者区别?
  101. var、 let、 const之间的区别?
  102. 什么是Javascript 暂时性死区、时间死区?
  103. let和const的优点?
  104. 什么是JS闭包?
  105. Javascript中callee和caller作用?
  106. 什么是尾调用?
  107. 如何解决异步回调地狱?
  108. 讲一下你对JS异步的理解?答案:callback -> Promise -> async/await
  109. 谈谈为什么要把API给 promisify 化?
  110. Promise 构造函数是同步执行还是异步执行,那么 then 方法呢 ?
  111. 介绍一下promise,及其底层如何实现
  112. 说一下 Promise.all(),知道其中的原理吗?能手写一个?
  113. 说一下 Promise.race(),知道其中的原理吗?能手写一个?
  114. 说一下 Promise.allSettled()?
  115. Promise 的 finally 怎么实现的?
  116. promise+Generator+Async的使用
  117. promise 和await/async的关系? async/await 原理 & 实现?
  118. async、await 怎么串行处理?怎么并行处理?怎么错误处理?
  119. 什么是迭代器?什么是可迭代对象?什么是生成器?yeild是用来做什么的?
  120. new操作符做了哪些事情?
  121. new 一个构造函数,如果函数返回 return {} 、 return null , return 1 , return true 会发生什么情况?
  122. 什么是构造函数?它与普通函数有什么区别?
  123. 改变函数内部 this 指针的指向函数(bind,apply,call的区别),内在分别是如何实现的?
  124. 如果一个构造函数,bind了一个对象,用这个构造函数创建出的实例会继承这个对象的属性吗?为什么?
  125. 谈谈执行上下文(EC)的理解?
  126. 简述下JavaScript中this是如何工作的?
  127. 说下使用箭头函数的注意事项?
  128. 箭头函数的格式有哪些?
  129. 箭头函数中this指向
  130. 箭头函数和普通函数的区别有哪些?
  131. 谈一下 "use strict" 严格模式的限制
  132. 在严格模式"use strict"下,函数中的this是?
  133. 什么是eval()函数?eval的作用是什么?
  134. 如何安全的获取 undefined 的值?答案:void 0 或 void (0)
  135. 平时是怎么调试JS的
  136. 实现一个once函数,传入函数参数只执行一次
  137. 如何实现一个私有变量,用getXXX 可以访问,不能直接访问
  138. 说出 JavaScript无阻塞加载的方式有哪些?
  139. 异步加载JS的方法
  140. 延迟加载的方式有哪些?
  141. 简述script标签中 defer和 async属性的区别 ?
  142. 如何在页面加载后执行 JavaScript 代码?答案:onload
  143. 说一下图片的 懒加载预加载
  144. 怎么控制一次加载一张图片,加载完后再加载下一张
  145. 如何去除字符串首尾空格
  146. 简单介绍一下symbol
  147. Symbol有哪些使用场景?
  148. JS原型链,原型链的顶端是什么?Object 的原型是什么?Object的原型的原型是什么?
  149. Function._proto_是什么? Object.getPrototypeOf(Function.proto)是什么?
  150. JavaScript中对象有一个函数,执行直接对象查找时,它始终不会查找原型,这个函数是什么?
  151. 对象 hasOwnProperty() 和 in 的区别?
  152. Object对象中原型prototype上的方法?freezedefinedPropertyseal
  153. JavaScript对象的key可以为数字吗?
  154. 怎么获得对象上的属性如何遍历对象的属性?
  155. JS中string的 startwithindexof 两种方法的区别
  156. indexOf ()、includes()有何异同?
  157. async和await具体该怎么用?
  158. JS加载过程阻塞,解决方法。
  159. Localstorage、sessionStorage、 cookie的区别
  160. 怎么删除cookie?
  161. cookie 怎么读取/写入
  162. 了解IndexedDB吗?
  163. 你有几种获取URL参数的方法?知不知道最新的 url 参数获取的 api
  164. 写一个通用的方法来获取地址栏的某个参数对应的值,不能使用正则表达式。
  165. 原生时间戳转换规范格式 ,转化成 “YYYY-MM-DD hh:mm:ss” 格式
  166. 什么是模板文字?
  167. 什么是正则表达式?
  168. 说说JavaScript中转义字符是用来做什么的?
  169. 说一下字符编码有哪些?
  170. 简述Javascript gb2312转utf8 ?
  171. 说一下uft-8是怎么实现可以变可变长度的字符存储的?
  172. 字符中如果有表情emoji,或者有一些复杂文字繁体字,截取后成乱码了怎么处理?
  173. 谈谈JS的运行机制
  174. 什么是堆栈?
  175. 解释一下JS的事件循环
  176. 讲一下你对EventLoop的理解吧
  177. 垃圾回收机制有哪些?具体怎么如何执行?讲一下浏览器的垃圾回收机制
  178. 介绍一下V8隐藏类
  179. 元素拖动如何实现,原理是怎样?
  180. 解释一下HTML5 拖拽 Drag API
  181. 怎么实现本地文件拖拽上传和复制上传?
  182. 条形码和二维码的解析和生成有没有做过?如果识别率低下,我们可以采取哪些办法?
  183. 轮播的实现原理?假如一个页面上有两个轮播,你会怎么实现
  184. 知道js的二进制吗?Blob、ArrayBuffer、Buffer了解多少?
  185. 如果网页文字不想被复制,可以使用哪些方法? 答案:css禁止选择监听 copy 复制事件
  186. 怎么让网站全部元素变灰色,怎么让一切元素可以编辑?
  187. JavaSctipt怎么让网页上的元素可以编辑?
  188. JavaScript中如何处理异常?说下 try、catch、finally
  189. JavaScript中不同类型的错误有几种?
  190. JavaScript中读取文件的方法是什么?答案:new FileRender()
  191. 知道 BlobArrayBuffer 吗?
  192. JavaScript如何检测客户端机器上的操作系统? 答案:navigator
  193. 如何强制页面加载 JavaScript中的其他页面?答案:location
  194. 讲一下你所知道的设计模式有哪些?答案:工厂模式、 单例模式、 建造者模式、 适配器模式、 装饰器模式、 解释器模式、 代理模式、 桥接模式、 组合模式、 策略模式 Java的23中设计模式
  1. 工厂方法模式(Factory Method)
  2. 抽象工厂模式(Abstract Factory)
  3. 单例模式(Singleton)
  4. 建造者模式(Builder)
  5. 原型模式(Prototype)
  1. 适配器模式(Adapter)
  2. 装饰模式(Decorator)
  3. 代理模式(Proxy)
  4. 外观模式(Facade)
  5. 桥接模式(Bridge)
  6. 组合模式(Composite)
  7. 享元模式(Flyweight)
  1. 策略模式(strategy)
  2. 模板方法模式(Template Method)
  3. 观察者模式(Observer)
  4. 迭代子模式(Iterator)
  5. 责任链模式(Chain of Responsibility)
  6. 命令模式(Command)
  7. 备忘录模式(Memento)
  8. 状态模式(State)
  9. 访问者模式(Visitor)
  10. 中介者模式(Mediator)
  11. 解释器模式(Interpreter)

JavaScript 代码编程实战

  1. 了解JavaScript中的this指向吗?下面的this 指向哪里?
setTimeout(function () {
  console.log(this)
}, 1000);


/*  浏览器中
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
*/

/* node中 
Timeout {
  _idleTimeout: 1000,
  _idlePrev: null,
  _idleNext: null,
  _idleStart: 68,
  _onTimeout: [Function],
  _timerArgs: undefined,
  _repeat: null,
  _destroyed: false,
  [Symbol(refed)]: true,
  [Symbol(asyncId)]: 2,
  [Symbol(triggerId)]: 1
}
*/

下面输出的是什么,为什么?this应该如何输出正确的指向?

var counter = {
  count: 0,
  addCount() {
    // setTimeout()的匿名函数中的this,指向的是宿主对象(浏览器:window|node:Timeout)
    setInterval(function () {
      console.log(this);
      console.log(++this.count);
    }, 1000)
  }
}
counter.addCount()
/* 
Timeout {
  _idleTimeout: 1000,
  _idlePrev: null,
  _idleNext: null,
  _idleStart: 1026,
  _onTimeout: [Function],
  _timerArgs: undefined,
  _repeat: 1000,
  _destroyed: false,
  count: NaN,
  [Symbol(refed)]: true,
  [Symbol(asyncId)]: 2,
  [Symbol(triggerId)]: 1
}
NaN
...
*/

/* 改善 */
var counter = {
  count: 0,
  addCount() {
    setInterval(function () {
      console.log(++this.count);
    }.bind(this), 1000)

    let self = this
    setInterval(function () {
      console.log(++self.count);
    }, 1000)

    setInterval(() => {
      console.log(++this.count);
    }, 1000)
  }
}
  1. 块级作用域:下面sum和i是多少?
var arr = [1, 2, 3, 4]
var i = 100;

for (var i = 0; i < arr.length; i++) {
  if (i == 0) { sum = 0 }
  sum += arr[i]
}

console.log(sum,i); 
/* 
// 因为JavaScript没有块级作用域,因此能在for语句外部访问变量 i 和 sum
console.log(sum);  // 10
console.log(i);    // 4 
*/
  1. 说一下 1|2|4 等于多少,原理是什么?
const a = 1
const b = 2
const c = 4
console.log(a | b | c); 
  1. 递归循环引用该怎么解决?
// 对传入的 subject 对象内部存储的所有内容执行回调
function execRecursively(subject, fn) {
  fn(subject);
  if (typeof subject === "object") {
    for (const key in subject) {
      execRecursively(subject[key], fn);
    }
  }
}

const foo = { foo: "Foo", bar: { bar: "Bar", }, };
foo.bar.baz = foo; // 循环引用!
execRecursively(foo, (obj) => console.log(obj));

let obj1 = { name: "ken" }
let obj2 = { name: "一缕清风" }
obj1.obj2 = obj2
obj2.obj1 = obj1
execRecursively(obj1, (obj) => console.log(obj));

/*
    const constructorName = getCtxStyle(value, constructor, tag).slice(0, -1);
RangeError: Maximum call stack size exceeded
*/
  1. 事件循环中,下面题目输出什么,为什么?
console.log(1);

Promise.resolve().then(() => {
  console.log(2);
  setTimeout(() => {
    console.log(3);
  }, 0);
});
setTimeout(() => {
  console.log(4);
  new Promise((resolve) => {
    console.log(5)
    resolve();
  }).then(() => { console.log(6); });
}, 0);

console.log(7);

/* 
1
7
2
4
5
6
3
*/
  1. 当a=?,下面条件成立
if (a == 1 && a == 2 && a == 3) {
console.log("Hello word");
}

// 答案
var a = {
  value: 1,
  valueOf: function () {
    return this.value++;
  },
  [Symbol.toPrimitive]() {
    return this.value++;
  }
}
  1. 函数柯里化,实现一个 add函数,能满足一下能力:
add(123)()=>输出6
add(1)(2)(3)()=>输出6
add(1,2)(3)(4,5,6)(7,8)()=>输出 36
add(1,2)(3,4,5,6)()=>输出 21
function add() {}
  1. ["1,", 2, 3].map(parseInt) 的执行结果是多少?
console.log(["1,", 2, 0, 3].map(parseInt));  // [ 1, NaN, 0, NaN ]


/*
[ 1, NaN, 0, NaN ]
console.log(parseInt("1", 0));  // 1
console.log(parseInt(2, 1));    // NaN
console.log(parseInt(0, 2));    // 0
console.log(parseInt("3", 2));  // NaN


因为 parseInt需要两个参数(val, radix),
其中 radix表示解析时用的基数(进制);
map传递了3个参数(item, index,aray),对应的radix不合法导致解析失败。
*/
  1. 用户需要上传一个文件,你需要根据文件的后缀来做限制一些操作?下面获取后缀的方法有什么缺陷?你有什么办法解决吗?答案:后缀名字容易被魔改后绕过判断鉴定。解决:我们可以根据二进制前几位特定的字节来判断后缀
function getSuffix(filePath) {
  //文件路径
  var index = filePath.lastIndexOf(".");  //获取最后一个.的位置
  var ext = filePath.slice(index + 1);    //获取后缀
  console.log(ext);                       // 输出:png
}

let suffix = getSuffix("file://upload/test.png")
if (suffix = "png") {
  // 上传服务器
}
  1. 写个匹配电话号码的正则表达式
  2. 写个匹配邮箱的正则表达式
  3. 手写防抖、节流,防抖(debounce)与节流(throttle)的区别 ?
  4. 实现转化下划线命名到驼峰命名。
  5. 实现对象简易深拷贝
  6. 实现JS中所有对象的深度克隆(包装对象,Date对象,正则对象)
  7. JS 监听对象属性的改变
  8. 如果已经有三个promise,A、B和C,想串行执行,该怎么写?
  9. 假设前端需要发n个请求(n很大),写一个方法同时只并发10个请求,直到n个请求完成。答案:Promise.race()+队列
  10. 能不能实现数组map方法?
  11. 能不能实现数组reduce方法?
  12. 能不能实现数组 push、pop 方法?
  13. 能不能实现数组filter方法?
  14. 能不能实现数组splice方法?
  15. 能不能实现数组sort方法?
  16. 能不能写一个完整的深拷贝?
  17. 能不能模拟实现一个new的效果?
  18. 能不能模拟实现一个 bind 的效果?
  19. 能不能实现一个 call/apply 函数?
  20. 实现 Object.create
  21. 实现 Object.assign

TypeScript

  1. TS有什么优缺点?为什么要用TS?
  2. 什么是泛型,有什么作用?
  3. 类型别名type和接口interface有什么区别?
  4. 什么是装饰器?
  5. 什么是类型体操,有哪些应用?
  6. any用的多吗,有什么弊端?
  7. 你知道哪些工具类型,怎么用?
  8. TS里怎么处理第三方库类型,怎么给第三方库编写类型文件?
  9. React项目怎么使用TS?Vue项目怎么使用TS?

浏览器

  1. 你现在常用哪些浏览器?它们有哪些内核(Layout Engine)?
  2. 一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?
  3. window.onload和DOMContentLoaded的区别?
  4. 说说完整的HTTP事务是怎样的一个过程?
  5. 讲一下浏览器的渲染流程
  6. DOM树和渲染树的区别
  7. 浏览器发送HTTP请求时候缓存的流程
  8. 谈谈你对浏览器架构的理解
  9. 讲一下浏览器多进程的优势
  10. 知道进程调度策略吗?
  11. 什么是重绘(repaint)?什么是回流(reflow)?如何最小化重绘和回流?
  12. 如何实现浏览器内多个标签页之间的通信?

计算机网络

  1. 什么是URI?如何理解URI?URI的结构是?
  2. 请介绍一下XMLHTTPrequest对象及常用方法和属性
  3. 什么是Ajax,Ajax都有哪些优点和缺点?
  4. Ajax的实现流程是怎样的?
  5. Ajax 接收到的数据类型有哪些,数据如何处理?
  6. 封装好的Ajax里的常见参数及其代表的含义
  7. Ajax 注意事项及适用和不适用场景
  8. Ajax解决浏览器缓存问题
  9. 将原生的xhr 封装成 promise
  10. 一个图片url访问后直接下载怎样实现?
  11. 前端实现访问一个图片URL直接下载该图片?
  12. 谈谈你理解的RESTFUL 规范
  13. http状态码有那些?
  14. 常见的 HTTP状态码 以及代表的意义
  15. 301、302、303状态码的区别?
  16. 补充400和401、403状态码
  17. 谈谈304状态码
  18. 什么是同源策略?
  19. fetch发送2次请求的原因?
  20. 谷歌浏览器的option预检请求?
  21. 简述下什么时候会发送非简单请求?
  22. 知道 cors 与 jsonp 吗 ,他们的区别?
  23. 能详细说一下cors吗?
  24. 为什么会有跨域的问题出现,如何解决跨域问题?
  25. 什么是四层、七层网络模型?
  26. 说一下你知道的网络各种协议?
  27. TCP和UDP分别是什么?
  28. 什么是UDP?
  29. DNS 是什么
  30. 什么是CDN,以及如何优化?
  31. 你知道的HTTP请求方式有几种
  32. Get 和 Post 的区别以及使用场景
  33. GET 和 POST 方法都是安全和幂等的吗?
  34. jsonp了解嘛?解释原理以及优缺点?
  35. HTTP与HTTPS的区别?
  36. 说下HTTP1.0的队头阻塞,HTTP1.1是怎么改进的?
  37. 说说 HTTP1.1 相比 HTTP1.0 提高了什么性能?
  38. HTTP1.1 的缺陷?它的性能如何?
  39. 关于HTTP2.0 的概念和描述以及实现?
  40. HTTP2 做了什么优化?
  41. HTTP2 相比 HTTP1.1 的优点
  42. HTTP2 有哪些缺陷?HTTP3 做了哪些优化?
  43. 解释一下三次握手是什么,具体流程。变为二次握手会发生什么问题
  44. TCP 四次挥手终止连接?
  45. HTTPS 是如何建立连接的?其间交互了什么?
  46. RSA 握手过程?
  47. 知道RSA 和 ECDHE吗?
  48. RSA、DH 密钥交换原理
  49. 说一下什么是长连接?
  50. Cookie 和 Session的区别?
  51. ViewState和SessionState有什么区别?
  52. 知道JWT吗?它的原理?和Session的区别是什么?
  53. 简述web前端Cookie机制,并结合该机制说明会话保持原理
  54. 强缓存协商缓存 本质和区别?什么时候用哪个?
  55. cache-control的值有哪些
  56. Last-Modified/ETag与Cache-Control/Expires
  57. 常见的请求头和响应头有哪些?
  58. http 常见的请求头字段有哪些?
  59. 对于定长和不定长的数据,HTTP 是怎么传输的?答案:Transfer-Encoding: chunked
  60. HTTP 如何处理大文件的传输?
  61. Http分块下载、分片下载
  62. 大文件分切片上传+断点续传?
  63. Javascript 图片/文件上传到后台是什么类型?
  64. 网络请求怎么监控上传/下载,实现进度状况?
  65. HTTP请求中,几种常见的Content-Type类型
  66. HTTP 中如何处理表单数据的提交?
  67. web-garden 和 web-farm 有什么不同?
  68. 保持前后端通信有哪些方法?
  69. Web应用从服务器主动推送Data到客户端有那些方式?
  70. WebSocket的实现和应用
  71. 说一下webworker,它的作用是什么?
  72. PWA使用过吗?简述下 Service Worker的使用实现原理是什么?
  73. 知道 WebAssembly(wasm) 吗?是用来干什么的

网络安全

  1. 什么是xss攻击及如何防范?
  2. 什么是csrf攻击及如何防范?
  3. 什么是ddox攻击及如何防范?

React生态

  1. 知道 react 的 fiber,谈谈它的作用和实现?
  2. 述说 React 和 Vue 的区别
  3. redux主要解决什么问题?有什么优缺点?
  4. 如何划分业务组件和技术组件?
  5. React生命周期函数
  6. React 性能优化方案有哪些?和哪个周期函数关联性较大?
  7. 为什么虚拟dom会提高性能?
  8. DOM Diff 算法? react 的 diff 算法?
  9. 简述Virtual DOM 真的比操作原生 DOM 快吗 ?
  10. 简述 flux 思想
  11. React 项目用过什么脚手架?
  12. React 解决了什么问题?
  13. React的工作原理?
  14. 使用React有何优点?
  15. 展示组件(Presentational component)和 容器组件(Container component)之间有何
  16. 类组件(Class component)和 函数式组件(Functional component)之间有何不同?
  17. 状态(state)和 属性(props)之间有何不同?
  18. 应该在React组件的何处发起 Ajax请求?
  19. 在React中,refs的作用是什么?
  20. 何为高阶组件(higher order component)?
  21. setState发生了什么?是同步还是异步?
  22. 为什么建议传递给setState的参数是一个callback而不是一个对象?
  23. 除了在构造函数中绑定this,还有其它方式吗?
  24. 怎么阻止组件的渲染?
  25. 当渲染一个列表时,何为key?设置 key 的目的是什么?
  26. 为什么要设计 React hook,它解决了什么问题?
  27. react中的hooks为什么不能写在判断代码块中?为什么React的Hooks不能在if里面调用呢?

Vue生态

  1. 简述Vue的MVVM模式?
  2. 间述MVC和MVVM的区别?
  3. 说一下Vue2中的路由守卫?
  4. 说说你对Proxy的理解。
  5. 说一下 proxy 中的 receiver 是做什么用的?
  6. 说说你对Vue的理解,有何优缺点?
  7. Vue和React有什么不同?
  8. 什么是虚拟 DOM?
  9. 描述下vue的生命周期有哪些?分别做了什么事情?
  10. watch怎么深度监听对象变化
  11. 删除数组用delete 和Vue.delete 有什么区别?
  12. watch 和computed有什么区别?
  13. v-for 没有key会发生什么问题?
  14. 你讲一下vue双向绑定的原理
  15. v-model是什么?有什么用呢?
  16. 在vue项目中如何引入第三方库?有哪些具体操作方法?
  17. Vue3.0里为什么要用Proxy API替代 defineProperty API?
  18. Vue3.0编译做了哪些优化?
  19. Vue3.0新特性--Composition API与 React.js中Hooks的异同点
  20. vue 要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
  21. vue 在created和mounted这两个生命周期中请求数据有什么区别呢?
  22. Vue3.0性能提升主要是体现在哪些方面?
  23. vue3有哪些新特性?
  24. vue3有哪些新的组件?
  25. Vue2.0和Vue3.0有什么区别?
  26. Composition Api 与 Options Api有什么不同?
  27. 对Vue项目你做过哪些性能优化?
  28. Vue组件通信的方式有哪些?
  29. Vue常用的修饰符有哪些?
  30. Vue中的$nextTick有什么作用?底层如何实现?
  31. v-show和v-if有什么区别?
  32. 有用过keep-alive吗?它有什么作用?
  33. 如何实现一个虚拟DOM吗?
  34. 为什么data属性是一个函数而不是一个对象,具体原因是什么?
  35. Vue2的初始化过程你有过了解吗,做了哪些事情?
  36. Vue3初始化的一个大概流程?
  37. vue3响应式api如何编写?
  38. 在Vue项目中你是如何做的SSR渲染
  39. 说一下最长递增子序列?
  40. 讲一下vue3相比vue2有哪些提升
  41. 讲一下vue3相比vue2,它在diff算法上做了哪些优化?
  42. vue3.0 是如何变得更快的?dom diff 算法有何优化?
  43. vue2为什么要对数组的常用方法进行重写?

混合开发面试题

  1. 知道 PWA 吗?
  2. Native App,Web App,Hybrid App,微信小程序、PWA的区别?

移动web开发

  1. 移动布局方案
  2. 讲讲viewport和移动端布局
  3. 什么是rem布局?
  4. Rem布局及其优缺点
  5. CSS单位中px、em和rem的区别?配合font-size如何计算?(移动端适配方案)
  6. 说一下CSS长度单位?
  7. px、em、rem、%、vw、vh、vm这些单位的区别
  8. 2X图、3X图适配
  9. 移动端适配1px的问题
  10. 移动端性能优化相关经验
  11. 移动端兼容性
  12. 小程序
  13. 图片在安卓上,有些设备模糊问题
  14. 固定定位布局键盘挡住输入框内容
  15. click的300ms延迟问题和点击穿透问题
  16. 防止手机中页面放大和缩小
  17. 移动端适配-dpr 浅析
  18. 移动端扩展点击区域
  19. 上下拉动滚动条时卡顿、慢
  20. 长时间按住页面出现闪退
  21. webkit mask 兼容处理
  22. transiton 闪屏

微信小程序

  1. 简单描述下微信小程序的相关文件类型?请简述微信小程序主要目录和文件的作用?
  2. 请简述wxss和css的异同?
  3. 你是怎么封装微信小程序的数据请求的?
  4. 有哪些参数传值的方法?
  5. 你使用过哪些方法,来提高微信小程序的应用速度?
  6. 小程序与原生App哪个好?
  7. 简述微信小程序原理?
  8. 分析下微信小程序的优劣势?
  9. 微信小程序与H5的区别?
  10. 怎么解决小程序的异步请求问题?
  11. 小程序的双向绑定和vue哪里不一样?
  12. 哪些方法可以用来提高微信小程序的应用速度
  13. 如何实现下拉刷新
  14. bindtap 和 catchtap 的区别是什么
  15. 简述下 wx.navigateTo(), wx.redirectTo(), wx.switchTab(),wx.navigateBack(), wx.reLaunch()的区别
  16. js文件怎么在 wxml 中使用
  17. 讲一下小程序的双线程实现原理?

flutter

  1. JS和WebView之间通信有哪些方式?
  2. Hybrid、React Native和Flutter原理有什么区别,怎么做技术选型?
  3. 什么是热重载,有什么好处,Flutter热重载是怎么实现的?
  4. 什么是热修复,Flutter有哪些热修复方案?
  5. Flutter和原生之间如何通信?
  6. 怎么开发一个Flutter插件?
  7. Flutter怎么做屏幕适配?
  8. Flutter怎么做性能优化?

兼容性问题

  1. 列出不同浏览器中关于 JavaScript兼容性的两个常见问题
  2. 你常见的常见前端开发测试兼容性问题?你是怎么解决的
  3. 遇到过ios时间转换异常吗,你是怎么兼容处理的?
  4. ios滚动时卡顿怎么解决?
  5. 部分安卓机input得焦时输入框被键盘覆盖,你怎么处理
  6. 用户修改微信字体大小导致网页布局错乱
  7. 有没有遇到过处理字符串emoji出错问题

性能优化

  1. 知道 RAIL 吗?
  2. 解释一下,性能指标FP、FCP、FMP、LCP、TTI、TBT是什么意思?
  3. 如何衡量站点性能?性能指标如何计算
  4. 谈谈你是如何判断网站的性能的?
  5. 什么是SPA单页面应用,SPA首屏为什么加载慢?
  6. 首屏加载你是如何优化的?
  7. seo优化有了解过吗?讲一下你的见解?在seo优化方面,前端要从哪些点去考虑?
  8. 什么是按需加载?
  9. 做过哪些前端性能优化相关的事情?
  10. 要加载大量图片,你有哪些方法优化方案?
  11. 列表无限滚动,数据越来越多,页面卡顿,如何解决?怎么做长列表优化?
  12. for (let i=0;i<1000000;i++){console.log(i)}如何优化?
  13. 怎么实现页面阻塞3秒?

前端模块工程化

  1. 你平常包管理器用的哪个?
  2. 打包工具了解哪些?简要说下Webpack、Rollup、Parcel等有什么区别?
  3. 简述前端自动化构建工具? 答案:WebpackViteParcelRollup、 esbuild、 Gulp、 swc、Rome、 Turbopack、 Snowpack、 Nx、 WMR、 Rspack
  4. 有用过Vite吗,为什么Vite会那么快?
  5. 微前端适用于什么场景?设计一个微前端框架要怎么考虑?微前端适用于什么场景?设计一个微前端框架要怎么考虑?
  6. 简述前端模块化开发的认识理解?
  7. 简述模块化的JavaScript开发的优势?  模块化开发的好处是什么?
  8. 简述require.js解决了什么问题?
  9. 说一下 CommonJS、AMD和 CMD?
  10. commonJS中的require/exports和 ES6中import/export的区别是什么
  11. 简述CMD(Common module Definition,通用模块定义)规范的理解?
  12. 讲一下你了解哪些前端模块化规范?
  13. AMD 和 CMD 的区别?
  14. 简述CommonJS规范?
  15. 简述EMAScript 6模块规范?
  16. 前端模块化是否等同于JavaScript模块化?
  17. 如何理解前后端分离
  18. dependencies 和devDependencies 两者区别?

babel

  1. 讲一下AST抽象语法树
  2. 讲一下Babel的原理是什么?
  3. 如何写一个babel插件?

webpack

  1. 简述对webpack的理解?

  2. 有自己配置过webpack吗?如果需求是多页面与单页面并行,需要如何配置?

  3. Webpack的优点是什么?

  4. Webpack的构建流程是什么?从读取配置到输出文件这个过程尽量说全

  5. 讲一下webpack的打包原理、流程

  6. 说一下Webpack的热更新原理 监控文件改变监控文件改变 watchFile image.png

  7. 如何利用Webpack来优化前端性能

  8. 使用Webpack开发时,你用过哪些可以提高效率的插件?

  9. 如何提高Webpack的构建速度?

  10. 什么是长缓存?在Webpack中如何做到长缓存优化?

  11. 怎么实现Webpack的按需加载?什么是神奇注释?

  12. 有哪些常见的Loader?他们是解决什么问题的

  13. Loader 和Plugin的不同?

  14. 是否写过Loader 和Plugin?描述一下编写 loader 或 plugin的思路?

  15. webpack和vite区别(模块化与流的区别)

  16. webpack文件指纹策略:hash chunkhash contenthash

  17. 讲一下你对webpack5模块联邦的理解?

  18. 简述下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块 ?

常用框架的

  1. echarts的基本用法?
  2. 如何在vue中引入?
  3. 如何绘制条形图?
  4. 切换时卡顿如何解决?
  5. echarts图表自适应div resize问题?
  6. 你有开发过不用脚手架的项目吗?你封装过哪些脚手架,其他同事怎么用你封装的脚手架?

Nodejs

  1. 对Node.js有没有了解,它有什么特点,适合做什么业务或场景
  2. Node的优点是什么?缺点是什么
  3. 说一下前端前端解决的方法?后端node是怎么解决跨域的
  4. 怎么解决express跨域的?解决案例
  5. 简述同步和异步的区别,如何避免回调地狱,Node的异步问题是如何解决的?
  6. node的stream(流)?
  7. 说说 Buffer 与字符编码?
  8. 能说一下什么是中间件吗?
  9. 谈谈你对Express和Koa的理解,二者的区别是?
  10. 谈谈对egg和nest.js的理解,二者的区别是?
  11. 什么是BFF?答案:中间层,像SSR用来解决SEO问题,GraphQL用来聚合数据,解决API查询的问题
  12. 什么是ORM?Nodejs的ORM框架有哪些?答案 Sequelize、TypeORM
  13. SQLite是什么?
  14. 有没有了解过Redis?
  15. 有没有做过数据库优化?
  16. 有了解过分布式和微服务吗?
  17. 描述一下从接到url开始,到逻辑处理,到DB查询,到返回结果,整个过程是怎么处理的?

Mysql

  1. mysql和mongoDB有什么区别

算法

  1. 检查一个数字是否为质数
  2. 写一个JS的全排列
  3. 写一个笛卡尔数组
// 把下面变成以下格式:
var data = [
  ['A1', 'A2'],
  ['B1', 'B2', 'B3'],
  ['C1', 'C2'],
];

/* 
[
  ['A1', 'B1', 'C1'],
  ['A1', 'B1', 'C2'],
  ['A1', 'B2', 'C1'],
  ['A1', 'B2', 'C2'],
  ['A1', 'B3', 'C1'],
  ['A1', 'B3', 'C2'],
  ['A2', 'B1', 'C1'],
  ['A2', 'B1', 'C2'],
  ['A2', 'B2', 'C1'],
  ['A2', 'B2', 'C2'],
  ['A2', 'B3', 'C1'],
  ['A2', 'B3', 'C2']
] 
*/
  1. 说一下你知道哪些排序,各有什么特点?说下他们的空间复杂度和时间复杂度
  2. 能否手写一个快速排序
  3. 写个直接插入排序
  4. 写一个归并排序
  5. 手写一个LRU缓存算法
  6. 深度优先遍历(DFS)和广度优先遍历(BFS)
  7. 如何把斐波那契数列优化成O(n)? 优化时间复杂度**采用公式算法,查看 **复杂度为O(log2n)的代码案例 image.png
function Fibonacci(n) {
  var sqrt = Math.sqrt(5);
  var phi = (1 + sqrt) / 2.0;
  var fn = (Math.pow(phi, n) - Math.pow(1 - phi, n)) / sqrt;
  return fn;
}

console.log(Fibonacci(5))

**采取空间换时间的方法,**查看 闭包 + 记忆函数 的案例

class XXX {
  public static void main(String[] args) {
    System.out.println(new XXX().Fibonacci(12)); // 144
    System.out.println(new XXX().Fibonacci2(12)); // 144
  }

  public int Fibonacci(int n) {
    if (n <= 1)
      return n;
    else {
      int[] f = new int[n + 1];
      f[0] = 0;
      f[1] = 1;

      for (int i = 2; i <= n; i++) {
        f[i] = f[i - 1] + f[i - 2];
      }

      return f[n];
    }
  }

  public int Fibonacci2(int n) {
    if (n <= 1)
      return n;
    else {
      int iter1 = 0;
      int iter2 = 1;
      int f = 0;

      for (int i = 2; i <= n; i++) {
        f = iter1 + iter2;
        iter1 = iter2;
        iter2 = f;
      }

      return f;
    }
  }
}

项目管理

团队成员线上出现p0级 bug,你会怎么处理?

  1. **紧急响应:**立即响应并确认该问题的严重性和紧急程度。P0级别的bug通常表示系统的重要功能受到了严重影响,可能导致系统崩溃、数据丢失或用户无法正常使用。
  2. **集中资源:**我会与团队成员紧密合作,集中所有可用的资源和专业知识来解决这个问题。这可能包括开发人员、测试人员、运维人员和其他相关人员。
  3. 确定根本原因:我们会对该问题进行深入分析,以确定导致P0级别bug的根本原因。这可能涉及代码审查、日志分析、排查线上环境等。目标是快速而准确地找到问题所在,并采取措施解决它。
  4. **实施临时修复:**在查找根本原因和解决方案的过程中,我们会优先考虑实施临时修复措施,以尽快恢复系统的正常功能。这可以是一种临时性的解决方案,用于减轻问题的影响并确保系统的稳定性。
  5. **持续沟通:**我会与相关利益相关者保持密切沟通,包括产品经理、项目经理、客户和其他相关团队。我会及时向他们报告问题的进展、解决方案和预计的时间表,以便他们了解问题的状态并采取适当的措施。
  6. **彻底解决问题:**一旦临时修复措施实施成功,我会确保团队致力于彻底解决该问题,以防止类似问题的再次发生。这可能包括代码重构、流程改进、自动化测试增加等,以提高系统的稳定性和质量。
  7. **审查和总结经验:**一旦问题解决,我会与团队一起审查该事件,总结经验教训,并提出改进意见。这有助于我们识别潜在的改进机会,以及避免类似问题在未来的发生。

总的来说,处理P0级别的bug需要快速响应、紧密合作和专注于解决问题。我会确保团队充分投入,并采取适当的措施来最大限度地减轻问题的影响,并确保系统的正常运行。同时,我也会注重预防措施,以避免类似问题的再次发生。

如果团队的人不服你,你会怎么处理?

  1. **倾听和理解:**首先,我会倾听他们的观点和不满,努力理解他们的立场和关注点。这可以通过开放的对话和沟通来实现,以确保每个人都有机会表达自己的意见和观点。
  2. **解决冲突:**如果存在团队成员之间的冲突或分歧,我会努力促成解决方案。这可能包括组织团队会议、提供调解或引入其他解决冲突的方法,以便找到双方都可以接受的共同点和妥协方案。
  3. **透明和开放:**我会保持透明和开放的沟通方式,与团队成员分享决策背后的原因和依据,以便让他们了解决策的合理性和目标。这可以帮助建立信任和理解,减少不满和猜测。
  4. **激励和赋能:**我会努力激励团队成员,帮助他们理解自己的价值和贡献,以及他们在团队中的重要性。我会提供支持和资源,使他们能够充分发挥自己的能力,并参与到决策和解决问题的过程中。
  5. **持续改进:**我会积极寻求反馈和建议,不断改进我的领导方式和团队管理策略。我相信通过反思和学习,我可以提高自己的领导能力,并与团队成员建立更加积极和有效的工作关系。

总的来说,我会致力于建立开放、包容和积极的团队文化,促进良好的团队合作和共同目标的实现。如果团队成员不服从,我会尽力采取适当的措施来解决问题,并确保每个人都感到被尊重和重视。 前端开发团队开发宫格流程图Snipaste_2023-11-09_18-57-23.png

研发流程

技术设计

  1. 你知道有哪些互联网专业术语?
  2. 设计文档需要涵盖哪些部分?

代码规范

  1. 谈谈eslint,ESLint有什么用?你有用它来规范过团队代码吗?

研发协同 (Git)

  1. git 的基本使用方法
  2. 讲一下你最常用的git命令,你们团队的git提交规范是什么?
  3. 我们在本地工程常会修改一些配置文件,这些文件不需要被提交,而我们又不想每次执行git status时都让这些,文件显示出来,我们该如何操作?
  4. git fetch 和git merge 和git pull的区别。
  5. 如何把本地仓库的内容推向一个空的远程仓库
  6. git 工作流程
  7. 需要合并别人代码进来
  8. 需要切换分支
  9. 我们如何使用 git 和开源的码云或github上面的远端仓库的项目进行工作呢
  10. git、github、gitlab 三者之间的联系以及区别
  11. github 和码云的区别
  12. 提交时发生冲突,你能解释冲突是如何产生的吗?你是如何解决的
  13. 如果本次提交误操作,如何撤销
  14. git 修改提交的历史信息
  15. 如何删除github和gitlab上的文件夹
  16. 如何查看分支提交的历史记录?查看某个文件的历史记录呢
  17. rebase与merge的区别?
  18. git reset、git revert 和git checkout 有什么区别?
  19. git 跟svn有什么区别
  20. 谈谈commit message 规范

测试

  1. 单元测试如何做?
  2. 如何解决联调依赖问题?
  3. 提测阶段bug和线上bug解决过程有和区别?

发布上线

  1. 流水线如何搭建
  2. 对Docker理解
  3. pm2与 docker 有何区别?