面试题
1. https的密钥是怎样交互的
https是http+tsl/ssl,客户端和服务端在数据传输过程中都会通过ssl/tsl加密,以前是采用的ssl协议,现在采用tsl协议,这是构建在TCP协议之上的加密通道:
https交互分八个过程
(1)客服端发起https请求
(2)服务端配置证书:采用https必须有一套数字证书,可自己制作生成也可以第三方公司的,自己制作的需要客服端受信任操作,所谓数字证书就是一对公钥和私钥
(3)传送证书:就是把数字证书也就是公钥传送给客户端,包含颁发机构信息,过期时间
(4)接收证书:客户端查看证书是否有效,如果有效生成一个随机值(私钥)并用证书对其加密
(5)传送加密信息:就是传送随机值的加密信息
(6)服务端解析加密信息:把加密的随机值解密出来
(7)服务端传送加密的数据:向客服端传送用私钥(随机值)加密的信息
(8)客服端解密信息:用私钥解密服务端传过来的加密数据
2.requestAnimationFrame 和 setTimeout 的区别(宏任务和微任务)
(1)requestAnimationFrame是由系统判断执行时间的,一次间隔只执行一次事件,不会丢帧,而setTimeout是有事件队列决定执行时间,所以容易丢帧,造成动画卡顿
(2)当页面被隐藏或者最小化的时候,setTimeout还在继续执行,而requestAnimationFrame停止执行,requestAnimationFram做个优化
宏任务:script主程序代码,setTimeout, setInterval,setImmediate, I/O,UIrending
微任务:process.nextTick,promise,object.observer,mutationObserver
3.es6和commonjs的区别
(1)es6是值引用,import变量是只读的,
4.['1','2','3','4'].map(parseInt);
['1', '2', '3', '4'].map(function(item,index,arr){
return parseInt(item, index)
})
[1,NAN,NAN,NAN]
5.web攻击方式,dos,crsf,xss,sql注入,如何防护
(1)dos攻击是通过大流量造成网络堵塞的攻击,在网络层进行防护
(2)crsf攻击跨站请求伪造,是引导用户进入第三方网站,向被攻击的网站发起请求,只能使用登录状态不能获取,防护手段token校验
(3)xss攻击跨站脚本攻击,在url上,form表单,img,a植入攻击脚本,当客服端对攻击脚本执行的时候发起攻击,分存储型,反射,dom三种,服务端过滤,html代码转义,纯前端渲染
6. 如何让一个元素左右间距20px,宽度是高度的50%居中
7. Function.prototype.bind
Function.prototype.bind = function(o){
if(typeof this !== 'function') {
console.warn('this is not a function')
}
var self = this;
var args = [];
for (var i=1; i<arguments.lenght;i++){
args.push(arguments[i])
}
var fn = function () {
var params = new Array().slice.call(arguments)
self.apply(this instanceof this ? this:o, args.concat(params))
}
fn.prototype = Object.create(self.prototype)
return fn;
}
8. 如何计数图片中黑点的个数
9. 二叉树的左视图数字
---------1--------
-----2--------3----
--4-----5---6-----7
----------------------8
输出结果是:1,2,4,8
面试二
-
vue组件间的通信
-
vuex的使用
-
前端的内存管理,内存泄漏的处理
-
threejs什么方法可以释放内存,删除对象指针不可取
-
前端使用require,怎么知道a.js依赖b.js,c.js
-
require的动态加载,例如点击按钮的时候才加载js(打包的按需加载)
-
v-for的key的作用
-
http的post请求的报文
-
o = new fn(), o.add(1).add(2).add(3), +o怎么输出结果(考虑的是类型转换的方法重写)
-
输出小于N的素数
-
一个数组,输出相加等于20的三个数字,a+b+c=20,输出a,b,c
-
无限加载列表,太多会出现加载慢的情况,怎么解决
-
滚动到一定位置,导航吸顶怎么好的实现
-
优惠券满10减5,满20减10。。。作为规则rule,rule的数据格式自己定义,实现一个价格total=25,应支付金额pay=
-
canvas怎么实现元素的鼠标事件
-
canvas和svg有什么不同,在不同的场景中如何选择使用哪一个
-
webpack的plugin和loader有什么不一样
-
用require或者import怎么实现动态按需加载,比如当我点击按钮才加载js文件