1.手写冒泡排序
for(var i=1;i<arr.length;i++){
for(var j=0;j<i;j++){
if(arr[i]<arr[j]){
var temp=arr[i]
arr[i]=arr[j]
arr[j]=temp;
}
}
}
for(var i=1;i<arr.length;i++){
for(var j=0;j<i;j++){
if(arr[i]<arr[j]){
[arr[i],arr[j]]=[arr[j],arr[i]]
}
}
}
2.css实现等边三角形
<style>
*{margin:0;padding:0;}
.box{margin:40px auto;
width:0;
height:0;
border-right:10px solid deeppink;
border-top:8.5px solid transparent;
border-bottom: 8.5px solid transparent;
}
</style>
</head>
<body>
<div class="box"></div>
3.给出一个div,里面有若干个不同的标签,点击不同标签打印标签内容,a标签阻止跳转
<div class="box">
<a href="/xx">点击</a>
<span>span</span>
<p>p</p>
</div>
<script>
var box=document.getElementsByClassName('box')[0]
box.onclick=function(e){
if(e.target.nodeName.toLowerCase()=='a'){
console.log('a')
e.preventDefault();
}
if(e.target.nodeName.toLowerCase()=='span'){
console.log('span')
}
if(e.target.nodeName.toLowerCase()=='p'){
console.log('p')
}
}
</script>
4.盒模型(box-sizing)
有三种,标准盒模型(content-box),实际宽度=width(content)+padding+border,ie盒模型(border-box),实际宽度=width=content+padding+border,padding-box,实际宽度=width(content+padding)+border
5.document.cookie
一次只能添加一个键值对,想添加多个就重复设置多个,打印的值和设置的是一样的
6.vue客户端渲染和服务器端渲染各自的优缺点
vue客户端渲染是客户端解析html然后渲染到页面,会出现首屏加载缓慢,有利于前后端分离,减轻服务器的负担
服务器端渲染是在服务器端解析html然后交给客户端渲染,有利于seo优化,首屏加载快,不利于前后端分离,对服务器性能消耗大
7.http强缓存是什么
http通用首部设置cache-control的max-age的值和expires过期时间,客户端在请求资源时会先获取请求的header信息,判断是否命中强缓存,如果命中则返回,此次请求不与服务器通信,如果没命中则看协商缓存,http1.1时如果设置了max-age的值就会忽略掉expires的值,客户端请求时,如果缓存过期时间小于max-age或者expires的话都会返回
http协商缓存是什么
浏览器会发送请求到服务器,请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified/If-Modified-Since和Etag/If-None-Match),由服务器根据请求中的相关header信息来比对结果是否协商缓存命中;若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取;否则返回最新的资源内容
8.了解哪些网络安全
xss(跨站脚本攻击)
通过存在安全漏洞的web注册用户的浏览器内运行非法的html标签或js进行的一种攻击,例如在用户登录的url后面添加js代码,用户登录时,个人信息就会直接发送到攻击者的网站,导致个人信息泄露,攻击者还可以获取用户的cookie,关于cookie的防御,可以设置它的httpOnly为true,还有secure属性,限制web页面仅在https页面时才可以发送cookie
9.koa的洋葱模型(内容太多就不写了)
10.http状态码200什么时候出现
前端请求后端数据成功的时候会出现,面试官说还有,我也不知道还有什么
11.commonjs的加载
CommonJS定义的模块分为: 模块引用(require) 模块输出(exports) 模块标识(module)。
CommonJS是一个更偏向于服务器端的规范。NodeJS采用了这个规范。CommonJS的一个模块就是一个脚本文件。require命令第一次加载该脚本时就会执行整个脚本,然后在内存中生成一个对象。这个对象中有一个exports属性,它是模块导出的接口,它的值也是一个对象,可以用exports.xx导出。以后需要用到这个模块时,就会到exports属性上取值。即使再次执行require命令,也不会再次执行该模块,而是到缓存中取值。由于CommonJS是同步加载模块,这对于服务器端不是一个问题,因为所有的模块都放在本地硬盘。等待模块时间就是硬盘读取文件时间,很小。但是,对于浏览器而言,它需要从服务器加载模块,涉及到网速,代理等原因,一旦等待时间过长,浏览器处于”假死”状态。
还有一些简单的问题就不写了,反正是凉了