面试题总结(持续更新)0.2

208 阅读25分钟

HTML

HTML 的字符实体是什么(0.2)

HTML中的实体字符就是html标签中的实体名称 如

    空格            
 <  小于号         &lt; 
 >  大于号         &gt;  
 &  和号           &amp;         
 "  引号           &quot;      
 '  撇号           &apos;
 ¢ 分             &cent;
 £  镑             &pound;       
 ¥  人民币/日元     &yen;          
 €  欧元           &euro;        
 §  小节           &sect;        
 ©  版权           &copy;        
 ®  注册商标       &reg;         
 ™  商标           &trade;       
 ×  乘号           &times;        
 ÷  除号           &divide;       

H5新特性(0.2)

H5的新增标签

主要的
header网页的头部
nav用于浏览器的导航栏
section一个内容块
article一个独立的内容快
aside一个非内容的区域,删除不会影响页面结构,用于侧边菜单等
footer页面的尾部
次要的
video视频
audio音频
canvas图形
datalist数据列表
time时间
mark突出文字
progress进程
address地址

H5新增表单特性

placeholder输入框提示信息
autocomplete是否保存用户输入值On-开启 off-关闭
autofocus指定表单获取输入焦点
list和datalist为输入框构造一个选择列表
required此项必填,不能为空
pattern正则验证 pattern="\d{1,5}"

H5表单验证

ValidityState
badinputfalse输入的
patternMismatchfalse输入的值与pattern特性的正则不匹配
valueMissingfalse验证必填的表单元素值为空
typeMismatchfalse输入值与type类型不匹配
tooLongflase输入的内容超过maxlingth的长度
tooshortfalse
rangeOverflowfalse输入的值大于max特性的值
rangeUnderflowfalse输入的值小于min特性的值。
stepMismatchfalse输入的值不符合step特性所推算出的规则
customErrorfalse使用自定义的验证错误提示信息
checkValidity
setCustomValidity提示词
validtrue验证上边的

canvas

①:canvas是HTML5提供的一种新标签<canvas></canvas>  
②:HTML5 <canvas>标签元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成。  
③:<canvas>标签只是图形容器,必须使用脚本(js)来绘制图形

Canvas是一个矩形区域的画布,可以用JavaScript在上面绘画。控制其每一个像素。---其默认在页面上得的大小是width:300px; height:150px;

svg

svg是可伸缩的矢量图形(Scalable Vector Graphics) 他是基于XML,由W3C联盟进行开发的,诞生于2003年
    可以通过img,背景图,iframe引入
    直接在页面中使用svg标签

拖放事件

1.拖拽元素的事件
    dragstart:用户开始拖拉时,在被拖拉的节点上触发,该事件的target属性是被拖拉的节点。 
    dragend:拖拉结束时(释放鼠标键或按下 ESC 键)在被拖拉的节点上触发,该事件的target属性是被拖拉的节点。 
    drag:拖动开始后触发,在元素拖动期间会持续触发
2.和释放位置接收的事件
    dragenter:拖拉进入当前节点时,在当前节点上触发一次,该事件的target属性是当前节点。 
    dragover:拖拉到当前节点上方时,在当前节点上持续触发,该事件的target属性是当前节点。 
    dragleave:拖拉操作离开当前节点范围时,在当前节点上触发,该事件的target属性是当前节点。 
    drop:被拖拉的节点或选中的文本,释放到目标节点时,在目标节点上触发。

地理位置

HTML5 Geolocation API 用于获得用户的地理位置。 使用此api需要用户同意。 可以使用地理定位实现地图定位当前自己的位置
navigator.geolocation是浏览器暴露的接口,所以该接口必须保证在浏览器环境下使用。并且浏览器版本支持geolocation方法。
navigator.geolocation.getCurrentPosition(请求成功,请求失败,数据收集方式)
请求成功函数 
        经度 : coords.longitude 
        纬度 : coords.latitude 
        准确度 : coords.accuracy 
        海拔 : coords.altitude 
        行进方向 : coords.heading 
        地面速度 : coords.speed 
        时间戳 : new Date(position.timestamp)
 navigator.geolocation 
 多次定位请求 : watchPosition(像setInterval) 移动设备有用,位置改变才会触发 
 关闭更新请求 : clearWatch(像clearInterval)

本地存储

    storage
        
        localStorage
            永久存储(可以手动数据删除)
        sessionStorage
            session临时回话,从页面打开到页面关闭的时间段 
            窗口的临时存储,页面关闭,本地存储消失
         Storage特点
            存储量限制(5M) 
            客户端完成,不会请求服务器处理 
            sessionStorage数据不是共享、localStorage共享
     storage API 
         setltem(): -设置数据,(key,value)类型,类型都是字符串 -可以用获取属性的形式操作 
         getltem(): -获取数据,通过key来获取到相应的value 
         removeltem(): -删除数据,通过key来删除相应的value 
         clear(): -删除全部储存的值
     storage 存储事件
         window.addEventListene((e)=>{e.xxx})
         -key:修改或删除的key值,如果调用clear(),key为null 
         -newValue:新设置的值,如果调用removeStorage(),key为null 
         -oldValue:调用当前改变前的value值 
         -storageArea:当前的storage对象 
         -url:触发该脚本变化的文档的url 
         -注:session同窗口才可以
         

多媒体标签

    标签 audio 、video source格式兼容性标签写法 
        视频 格式:.mp4、.ogv、webM 
        音频 格式:.ogg .mp3 .wav
     编解码器 原始的视频容器非常大,添加需编码,播放需解码 
         音频编解码器 AACMPEG-3Ogg Vorbis 
         视频编解码器 H.264VP8Ogg Theora
      音频标签属性
             autoplay     | 出现该属性自动播放 
             controls     | 出现该属性,则向用户显示控件
             loop         | 出现该属性循环播放
             muted        | 出现该属性静音  
             preload      | 出现该属性时视频在页面加载时进行加载,并预备播放 使用autoplay忽略该属性
             src          | url
             height       | 设置视频的高度
             width        | 设置视频的宽度
             poster       | 出现该属性规定下载时现实的图像(封面) url
      音频标签API
             autoplay     | 设置或返回是否在加载完成后随即播放音频/视频。    true/false
             controls     | 设置或返回音频/视频是否显示控件(比如播放/暂停等)  true/false
             currentSrc   | 返回当前音频/视频的 URL。           
             currentTime  | 设置或返回音频/视频中的当前播放位置(以秒计)。audio|video.currentTime=xx
             duration     | 返回当前音频/视频的长度(以秒计)。        
             ended        | 返回音频/视频的播放是否已结束。          返回rue|false
             loop         | 设置或返回音频/视频是否应在结束时重新播放。     true/false
             muted        | 设置或返回音频/视频是否静音           true|false
             defaultMuted | 设置或返回音频/视频默认是否静音。         
             paused       | 设置或返回音频/视频是否暂停。           true|false
             playbackRate | 设置或返回音频/视频播放的速度。  1.0 正常速度 0.5 半速(更慢) 2.0 倍速(更快) -1.0 向后,正常速度 -0.5 向后,半速        
             volume       | 设置或返回音频/视频的音量,必须是介于  0.01.0 之间的数字。 1.0 是最高音量(默认) 0.5 是一半音量 (50%) 0.0 是静音
       Audio/VideoAPI方法
            play() 播放
            pause() 暂停
            load() 重新加载
         document.fullscreen检测是否全屏
             element.requestFullscreen();进入全屏
             document.exitFullscreen();退出全屏
         

通知管理

HTML5提供了通知管理api,现今各大视频网站,微博等都用到了通知管理。简化了网站或者应用与用户之间的沟通成本(时间成本和开发成本),增强用户黏性(减少了用户离开应用的可能)。
用户权限 - Notification.permission

Notification.permission是一个静态方法,可以获取用户当前的通知权限状态,返回一个String,可以根据返回值判断用户是否授予了通知权限。
    返回值有三种情况: 
        default:用户还未被询问是否授权,所以通知不会被显示。 
        granted:表示之前已经询问过用户,并且用户已经授予了显示通知的权限。 
        denied:用户已经明确的拒绝了显示通知的权限。
在用户允许后也就是granted后可以通过new Notification()创建消息通知
    对象传入两个参数,第一个参数是通知标题,第二个参数是一个对象,
    取值如下 
        dir:设置通知的文字方向,默认是auto。可选ltr为从左到右,rtl为从右向左。 
        lang:设置通知的使用语言,默认为空 body:设置通知内容 
        tag:设置通知的id,用于区别于其他通知。 
        icon:设置通知图标,为图片的url地址
        renotify: 新通知出现是否覆盖旧通知,true则覆盖,永远只显示一条通知。 
        silent:通知是否静音,默认fasle,不静音 
        requireInteraction:是否允许交互,默认false,不允许
  通知钩子函数
          show 当通知显示时触发
          close 当通知关闭时触发
          click 当通知点击时触发
          error 当通知错误是触发
          关闭通知 notification.colse()

窗口失焦聚焦

h5提供了pageVisibility接口,我们可以调用这个接口实现监测当前窗口是否真正隐藏了。
    pageVisibility包含了两个属性一个事件: 
    属性:document.hidden:获取当前页面的隐藏状态,返回一个布尔值 
        document.visibilityState:获取当前页面的可见状态。 
        hidden:页面为非活动标签,或者最小化 
        visible:页面为正在活动状态。 
        事件:document.visibilitychange:页面状态发生改变时会触发这个事件

css

javascript

说一下JS语言的特点 (0.2)

说一下 LHS RHS 是什么(0.2)

LHS 是分配操作的目标。RHS 是赋值操作的来源。
    LHS的意思就是`Left Hand Side` 
        变量赋值的左侧 表示往内存中存储值, 赋值操作的目标是谁(LHS)
        当右侧是个变量进行查询时,会遍历作用域
            如果没能找到这个变量 就会抛出错误 `ReferenceError`
            如果有这个变量但是操作不合理 就会抛出 `TypeError`
    RHS的意思就是`Right Hand Side`
        变量赋值的右侧 表示从内存中取值, 谁是赋值操作的目标 (RHS)
        当左侧是个变量进行查询时,会遍历作用域
            在非严格模式下 如果没能找到就会在全局创建一个变量并指向改变量
            在严格模式下 如果没能找到这个变量会抛出错误 `ReferenceError`

vue

网络

IP协议是在什么层(0.1)

ip协议是在OSI中的网络层 
网络层主要任务是实现网络互连 ,进而实现数据包在各个网络之间的传输

TCP和UDP协议的区别,直播电影类是TCP还是UDP协议(0.1)

1.TCPUDP协议的区别 65535
TCP协议和UDP,这两个协议都是位于传输层的协议

TCP有三次握手和四次挥手 面向连接    只有在确认通信对端存在时才会发送数据
UDP是没有三次握手和四次挥手的 无连接   不管有没有连接都会发送

TCP是可靠的  提供数据包排序和错误校验机制,确保数据的完整性和正确性。
UDP是不可靠的  数据包可能会丢失、重复、或乱序。

TCP是面向字节流  流就是指不间断的数据结构
UDP是面向报文   应用层交给UDP多长的报文,UDP就照样发送

TCP传输效率低 
UDP传输效率高 

TCP慢开始 拥塞避免 快重传 快回复
    1.慢开始 先发少量的数据探探路,摸清当前的`网络拥堵状态`,再决定按照多大的速度传输数据。
    2.堵塞控制 
            少量的丢个包会触发超时重传 三个重复确认  
            大量丢包 会认为堵塞 会进行堵塞控制 在传输数据下出现拥堵(没有收到确认),开始吧拥塞窗口设置为出现堵塞的一半,但不能小于2,如 24出现堵塞就设置为12 
    3.快重传 当数据丢失后 接收方会发送确认 发送方连续接收到三个重复的确认报文后 会立刻进行发送丢失的报文段
    4.快恢复 在旧版本中tcp在快速重传后会进入慢开始 传输值设置为1 
    新版本会进入快恢复-   
    当发送端收到第三个重复确认的报文时,会更新ssthresh的值,然后立即重传丢失的报文段,
    并且设置:cwnd = ssthresh+3*SMSS,进入拥塞避免阶段。 当收到一个重复确认的报文时,
    设置cwnd = cwnd +SMSS。此时发送端可以发送新的TCP报文(如果新的cwnd允许) 当收到
    新数据的确认时,设置cwnd=ssthresh。进入拥塞避免阶段。 这里的新数据表示新的报文,
    而不是丢失的报文。
UDP没有

TCP只有在双方双方确认通信对端存在才会发送数据 从而控制通信流量浪费
UDP不管你有没有都会发送  
 
TCP传输速度慢 
UDP传输速度快 

TCP对效率要求低 对准确要求高
UDP对效率要求高 对准确要求低   

TCP 文件传输 远程终端接入 HTTP 电子邮件
UDP DNS(域名转换) 文件传输  网络管理 远程文件服务器

总结:
       TCP用于在传输层有必要实现可靠传输的情况下
       UDP主要用于一些高速传输 和实时性有较高要求的通信 广播 音频 视频(即时通信)
       
2.一般是UDP

IPV4和IPV6的区别是什么(0.1)

IPV4指的是互联网上 每一个网络和每一台主机分配的一个逻辑地址IP 地址是一个 32 位的二进制数,
当网络中的两台主机要进行通信时,必须知道双方各自的IP地址,TCP/IP协议通过IP地址来识别网络中不同的主机.
如 192.16.13.51
IPv6 是用于替代 IPv4 的下一代 IP 协议  IPv6 地址采用使用以冒号分隔的十六进制数字,共 128 位,分 8 组表示,每组 16 位,每组表示 4 个十六进制数。
1.地址类型 IPv4具有三种不同类型的地址:多播,广播和单播。IPv6还具有三种不同类型的地址:任意广播,单播和多播。

2.数据包大小 对于IPv4,最小数据包大小为576字节。对于IPv6,最小数据包大小为1208字节。

3.header区域字段数。 IPv4具有12个标头字段,而IPv6支持8个标头字段。

4.可选字段 IPv4具有可选字段,而IPv6没有。但是,IPv6具有扩展header,可以在将来扩展协议而不会影响主包结构。

5.配置 在IPv4中,新装的系统必须配置好才能与其他系统通信。在IPv6中,配置是可选的,它允许根据所需功能进行选择。

6.安全性 在IPv4中,安全性主要取决于网站和应用程序。它不是针对安全性而开发的IP协议。而IPv6集成了Internet协议安全标准(IPSec)。IPv6的网络安全不像IPv4是可选项,IPv6里的网络安全项是强制性的。

7.与移动设备的兼容性 IPv4不适合移动网络,因为正如我们前面提到的,它使用点分十进制表示法,而IPv6使用冒号,是移动设备的更好选择。

8.主要功能 IPv6允许直接寻址,因为存在大量可能的地址。但是,IPv4已经广泛传播并得到许多设备的支持,这使其更易于使用。

image.png

Http和Https的区别是什么(0.1)

http是明文传输 数据未加密
https(ssl+http)诗句传输过程是加密的
https需要回去到ca的证书 免费的较少 一般付费
http响应素服比https快  
    http这是tcp的三次握手 交换3个包就可以进行传输
    https除了tcp外还需要ssl的9个包一共是12个包
 http 和 https 使用的是完全不同的连接方式,用的端口也不一样,http是 80,https是 443

http的传输过程

image.png

-   第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
-   第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
-   第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

https的工作原理

image.png

1、客户端发起 HTTPS 请求

就是用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。

2、服务端的配置

采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl 就是个不错的选择,有 1 年的免费服务)。

这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3、传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4、客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5、传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6、服务端解密信息

服务端用私钥解密后,得到了客户端传过来的随机值(对称秘钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7、传输加密后的信息

这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

8、客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。

为什么是三次握手,而不是四次或者两次 讲一下七层协议和三次握手四次挥手的理解 强缓存和协商缓存的区别是什么 (0.1)

1.三次主要是确定发送方和接收方都有发动和接收的能力 四次的话就多余了
2.七层协议
    2.1应用层 http https smtp 等  -
    2.2表示层 SSL TLS 加密 压缩 等  --- 上层数据
    2.3会话层 建立 维护 终止会话   -
    2.4传输层 TCP UDP 协议           数据短:TCP头部 上层数据
    2.5网络层 定义了ip               数据包: ip头部  TCP头部 上层数据
    2.6数据链路层 ppp ca             数据帧 :MAC头部 ip头部 TCP头部 上层数据
            1.这一层主要以帧为单位传输和处理数据 传输主要是点对点 和广播 
                        点对点指的是一对一的点对点通信 从 A---B   ppp协议
                        广播指的是 使用一对多的广播通信方式     CSMA/CDCSMA/CA协议  
                                  必须使用专用的共享通信协议来协调这些主机的数据发送
            2.在数据链路层数据主要通过封装和解封的过程从一个主机传输到另外一个主机,
            在封装的过程中数据链路层将来自网络层的网络层协议数据单元  添加帧头和帧尾  ,
            使其封装成帧,使得数据在链路上以帧为单元传播.
            3.帧在传输过程中可能会出现误码,接收方主机通过检错码发现是否常出现误码也就是帧尾


    2.7物理层 主要是现实中的光纤等 主要作用就是传输比特流bit 就是由0 1组成的二进制数字序列 比特流通过电信号或电磁波的形式进行传输 这层数据叫比特流

3. 四次挥手
 3.1三次握手
 - 第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认 
 - 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态 
 - 第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
 3.2四次挥手
  - 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入`FIN_WAIT_1`状态,这表示Client端没有数据要发送给Server端了。
  - 第二次分手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1Client端进入`FIN_WAIT_2`状态,Server端告诉Client端,我确认并同意你的关闭请求。
  - 第三次分手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入`LAST_ACK`状态。
  - 第四次分手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入`TIME_WAIT`状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待**2MSL**的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了
  
4.强缓存协商缓存
    4.1强缓存
        强缓存 浏览器第一次请求时直接缓存资源,缓存本地,第二次查看资源是否过期,没过期则直接使用资源,过期则重新请求。
        在响应头header中有三个字段Expires / Cache-Control / pragma
        1.Expires的值是服务器返回的到期时间 在下次请求的时候请求时间小于Expires就直接拿缓存数据
            ExpiresHTTP1.0的 现在服务器默认HTTP1.1 
        2.Cache-Control的值有private、public、no-cache、max-age,no-store、immutable
            private 客户端可以缓存 ,代理服务不缓存
            public 客户端和代理服务器都可缓存
            no-cache 跳过设置强缓存,但是不妨碍设置协商缓存
            max-age=xcxxx 缓存的内容将在 xxx 秒后失效
            no-store 不缓存,这个会让客户端、服务器都不缓存,也就没有所谓的强缓存、协商缓存了
            immutable 如果请求该资源就直接读取缓存,即使用户做了刷新操作,也不向服务器发请求
        3.pragma
            值有no-cache 和 no-store,表示意思同 cache-control,优先级高于 cache-control 和 expires,即三者同时出现时,先看 pragma > cache-control> expires。
     4.2协商缓存
         协商缓存 浏览器第一次请求缓存且保存缓存的标识和时间,重复请求,浏览器会去请求服务器验证资源是否更新,服务器根据缓存标识进行判断,没有失效则使用缓存,此时返回的是 304,通知客户端可以使用缓存数据。如果失效则重新发送资源。
         1.Last-Modified
             Last-Modified的值标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。
             当再次请求该资源时,请求头中会带有 `If-Modified-Since` 字段,值是之前返回的 `Last-Modified` 的值,服务端会对比该字段和资源的最后修改时间,若一致则证明没有被修改,
             告知浏览器可直接使用缓存并返回 304;若不一致则直接返回修改后的资源,并修改 Last-Modified 为新的值。
                缺点:只要编辑了,不管内容是否真的有改变,都会以这最后修改的时间作为判断依据,当成新资源返回,从而导致了没必要的请求响应,而这正是缓存本来的作用即避免没必要的请求。
                    If-Modified-Since时间的精确度只能到秒,某些文件修改非常频繁,比如在秒以下的时间内进行修改,(比方说1s内修改了N次),这种修改无法判断。
             
          2.ETag
              每个文件有一个ETag,改动文件了就变了,就是个文件hash,每个文件唯一.
              EEtag :W/"23-14598cr84ef"
              没过期  发请求–>看资源是否过期–>过期–>请求服务器–>服务器对比资源是否真的过期–>没过期–>返回304状态码–>客户端用缓存的老资源。
              过期了  发请求–>看资源是否过期–>过期–>请求服务器–>服务器对比资源是否真的过期–>过期–>返回200状态码–>客户端如第一次接收该资源一样,记下它的cache-control中的max-age、etag、last-modified等。
              主要就是:
                请求资源时,把用户本地该资源的 etag 同时带到服务端,服务端和最新资源做对比。  
                如果资源没更改,返回304,浏览器读取本地缓存。  
                如果资源有更改,返回200,返回最新的资源。
      4.3刷新触发缓存              
        1.标签进入、输入url回车进入、
             这种情况下,会触发强缓存和协商缓存 先出发强缓存看是否过期没过期拿缓存 过期了触发协商缓存
             根据Last-Modified/ETag去服务器对比蓝判断ETag优先高 没变化返回304那缓存 有变化返回200并且更新Last-Modified/ETag
        2.刷新按钮 F5 鼠标右键重新加载
             这种情况下,浏览器将 cache-control 的`max-age 直接设置成了 0,让缓存立即过期,直接走协商缓存路线
        3.ctrl + F5 强制刷新、
             强制刷新的情况下,浏览器会强行设置 no-cache,强制获取最新的资源,就连if-modified-since等其他缓存协议字段都会被吃掉。

七个网络层 image.png

三次握手

image.png 四次挥手

image.png 强缓存协商缓存

image.png

常见的跨域问题,你都是怎么解决的 (0.1)

1.jsonp
2.nginx 
3.vue的peoxy
4.CORS

如何判断网络状态

通过h5的navigator但是只能判断无线和网线是否连接
   
window.addEventListener('online', function(){
  console.log('网络连接恢复!');
})
window.addEventListener('offline', function(){
  console.log('网络连接中断!');
})
 //或者
window.ononline=function(){
  console.log('网络连接恢复!');
}
window.onoffline=function(){
  console.log('网络连接中断!');
}

或者 随便请求个东西来判断

$.ajax({
  url: 'https://sug.so.360.cn/suggest',
  dataType:'jsonp',
  success: function(result){
    console.log('网络正常')
  }, 
  error: function(result){
    console.log('网络异常')
  }
});
    

nodejs

module.export的用途是什么 (0.1)

Node.js中,module.exports 允许你导出模块中的内容以供其他模块使用。通过使用 module.exports,你可以轻松地使函数和数据在不同模块之间共享。虽然 exports 也可以用于导出模块中的内容,但出于一些原因,建议使用module.exports

nodejs如何克服阻塞问题(0.1)

可以用子进程child_process的fock进行处理处理后返回给父

部署

Ngnix是如何实现反向代理和负载均衡的 (0.1)

1.反向代理是nginx自己开了一个服务器通过服务器和服务器之间没有同源策略的方式请求到数据然后在响应为我们
nginx扮演了一个中间人的角色
2.负载均衡
    2.1.轮询请求 对所有请求进行轮询发送 默认分配
    2.2.权重分配 对不同的服务器进行分配权重 会按照权重大小进行响应

XXXX

100T 文件如何遍历里面的信息?

基于 HDFS ,可以实现 百T 数据存储,同时配合 MapReduce ,通过配置几千台服务器并行计算,同时遍历 100 T 数据。1 分钟是可以实现的。