小米前端日常实习 一面二面面经
一面(40min)
①介绍项目,会的技术
②作用域类型。var a和a = 10的区别
③原型链及其作用
④this指向(绑定this的方法bind、call、apply及其区别)
⑤闭包原理;作用
⑥null和undefined区别
⑦ES6常用方法
⑧BFC
⑨CSS盒模型
代码题:
手写一个new方法;数组中重复最多的元素。
二面(50min)
1. 自我介绍
2. 什么时候开始学习前端?怎么学习前端?看过哪些书?最近学习的新技术?
3. 项目中困难的地方
4. js基本数据类型(ES7 BigInt)
5. 代码输出结果
var a = 1;
(function a() {
a = 2;
console.log(a);
})();
首先,不存在变量提升和函数提升的问题,因为 (function (){}){} 是自执行函数,(function (){})是表达式;
这里的重点很明显是 a=2; 这行代码,
因为 {} 就是作用域,那么 a=2 执行的不是给全局变量 a 赋值为 2,
而是想要将自执行函数的name 'a', 更改为 2,
但这句话在 console.log 后证实未执行,即这句代码被忽略了。
忽略了?没错。在第一行加一句代码 "use strict"; 在严格模式下执行就能看到报错 :
Uncaught TypeError: Assignment to constant variable (常数变量赋值),
而这个错误在正常模式下是不会执行的,也就是静默错误,直接忽略执行。
所以打印的结果是 f a(){...}
为什么严格模式下报错,因为 Function.name 的 Writable 属性默认是不可写的。(但可通过 Object.defineProperty() 更改)
6. 箭头函数和普通函数区别?
7. 说一下闭包缺点和应用场景?
8. typeof和instanceof的区别?手写instanceof?
9. CSS定位方式有哪些
10. CSS权重?每种选择器的具体权重比例?
11. 伪类和伪元素
12.http状态码?401状态码?
13.http缓存。强缓存的主要标志?
14.浏览器缓存?Cookie,localstorage,sessionStorage区别
15. tcp三次握手?为什么不是2次或4次
16. 介绍https?怎么破解?
17.前端相关的安全问题?
18. 前端跨域
19. 手写题:数组去重;防抖函数(接收参数的防抖函数怎么写);二分查找
20. 发布订阅模式
21.还问了一些hr面常问的问题