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是同步加载模块,这对于服务器端不是一个问题,因为所有的模块都放在本地硬盘。等待模块时间就是硬盘读取文件时间,很小。但是,对于浏览器而言,它需要从服务器加载模块,涉及到网速,代理等原因,一旦等待时间过长,浏览器处于”假死”状态。

还有一些简单的问题就不写了,反正是凉了