面试自我介绍:
1、我叫什么,我来自哪里
2、上家公司在哪,担任的角色是什么?
3、最近辅助的一个项目是哪个?主要负责的模块是哪些?
4、项目的难点与亮点
1、token验证的流程
答:
1、用户向服务器发送用户名和密码。
2、服务端收到请求,去验证用户名与密码
3、验证成功后,服务端会签发一个Token,再把这个Token发送给客户端。
4、客户端收到Token以后可以把它存储起来,比如放在Cookie里或者Local Storage里
5、用户随后的每一次请求,都会通过Cookie,将token传回服务器
6、服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据
2、说一下什么是同源策略,以及常用解决跨域的方案
答:
同源策略:同源指的是域名、协议、端口号相同。
同源策略规定了js代码的访问权限,只能访问和自己同源的页面
同源策略是一种约定,它是浏览器最核心也是最基本的安全功能
常用解决跨域的方案:
1、跨域资源共享(CORS)
2、jsonp
3、nginx反向代理
4、服务器代理
3、如何通过css设置超出部分?
答:
1、white-space:nowrap =>设置内容抵达容器边界会自动转到下一行
2、overflow:hidden =>不显示超出对象尺寸的内容
3、text-overflow:ellipsis =>将被隐藏的部分用省略号代替
4、请说一下微任务和宏任务的区别
答:
微任务(miscrotask)
宏任务(macrotask)
表示异步任务的两种分类
微任务和宏任务之间的关系:
(此处内容过多,未完,详情请翻阅文档)
5、说一下JS的预编译
答:
把var和function定义的变量提升到script的最上方
赋值语句不会被提升,哪怕等号后面是一个function
6、原生JS的兼容性问题例举5个
答:
1、获取滚动条滚动的距离
var sTop = document.documentElement.scrollTop||document.body.scrollTop
2、获取事件对象
var e = e || event
3、阻止浏览器默认行为
function prevent(e){
if(e.preventDefault){
e.preventDefault()
}else{
e.returnValue = false
}
}
4、阻止事件冒泡
e.stopPropagation?e.stopPropagation():e.cancelBubble=true
5、事件监听
addEventListener()
attachEvent()
6、获取事件源
e.target||e.srcElement
7、ajax兼容
var xhr = new XMLHttpRequest()||new ActiveXObject("Microsoft,XMLHTTP")
7、IE的事件机制与火狐的事件机制有什么不同
答:
事件处理机制:
IE是事件冒泡
火狐是事件捕获
8、for in 与Object.keys的区别
答:
for in:
一般用于遍历对象的属性
作用于数组的for in 除了会遍历数组元素外,还会遍历自定义可枚举的属性,以及原型链上可枚举的属性;
作用于数组的for in 的遍历结果是数组的索引,且都为字符串型,不能用于运算
某些情况下,可以按照随机顺序遍历数组元素;
Object.keys()
遍历结果为由对象自身可枚举 属性组成的数组,数组中的属性名排列顺序与使用for in 循环遍历该对象是返回的顺序一致
与for in 区别爱与不能遍历出原型链上的属性
9、map与forEach的区别
答:
相同点:
1、都是循环遍历数组中的每一项
2、每一次执行匿名函数都支持三个参数,数组中的当前项item,当前项的索引index,原始数组input
3、匿名函数中农的this都是指向window
4、只能遍历数组
不同点:
forEach没有返回值!!!
map有返回值,可以return出来
10、如何准确的判断一个数据的类型
答:
1、typeof:只能判断基本数据类型,不能判断引用数据类型,判断出来的都是Object
2、instanceof:只能进行类型对比,不能进行类型判断
3、constructor:是prototype对象上的属性,指向构造函数
4、可以通过toString()来获取每个对象的类型