# 题目
### 1.路由的hash模式和history模式有什么区别?
是前端路由匹配的两种模式,不涉及服务器,是利用浏览器的hash和history来实现,两者都是利用浏览器的自身特性,通过客户端来进行路由匹配,不会触发完整的http请求。hash是url的#添加hash来作为标识;history的url比较完整,符合规范。
Hash模式:hash不在http请求中。通过onhashchange来监听hash变化。只有当hash后面的值不同时,才会触发onhashchange事件。
History模式:通过HTML5的history对象,使用pushState、replaceState、popState(前进后退时触发)来监听url的变化,通过修改历史记录来修改url。在二级目录刷新时,在客户端找不到对应的路由,会进行http请求,报错404,所以需要后端配合,配置所有的入口文件为index.html。pushState可添加任意类型的数据,也可与当前url一致,还可设置title。
### 2.QPS:
每秒数万次的高并发场景
QPS=并发量/平均响应时间
实际上,平均响应时间会变高。
出现高并发的情况:
1. 某个业务请求接口出现问题,响应时间及慢,将Web服务器的可用连接数占满,导致无连接进程可用,影响其他业务。
2. 用户行为,系统不可用,用户点击越频繁。在负载均衡中,一台服务器挂了,分流到其他服务器,其他服务器也挂。
3. 大量CC攻击或者DDOS攻击。
处理高并发状况:
1. 重启服务
2. 过载保护,如果检测到系统超负载状态,拒绝请求。将过载保护设置在CGI入口层。
高并发解决方案:
1. 应用层面:读写分离、缓存、队列、集群、令牌、系统拆分、隔离、系统升级。
2. 时间换空间:降低单次请求时间。
3. 空间换时间:拉长整体处理业务时间。
优化提升QPS:
1. 调整服务器的最大连接数。
2. 内存操作级别的存储Redis。
3. 增加服务器配置,如更好的CPU,加大网络带宽。
4. 使用cdn,高防cdn和高防IP。
5. 负载均衡。
### 3.前端如何表示一个超大数字?
使用es10中的Bigint来表示。Bigint(9007199254740991)或者10n。Bigint不是构造函数。
### 4.OSI的七层模型和TCP/IP的四层模型?
OSI七层模型:
1.物理层
功能:
1.比特同步
2.比特率控制
3.物理拓扑
4.传输模式(单工、半双工、全双工)
2.数据链路层
分为两个子层:
1.逻辑链路控制(LLC)
2.媒体访问控制(MAC)
功能:
1.封装成帧
2.物理寻址
3.错误控制
4.流控制
5.访问控制
3.网络层
功能:
1.路由
2.逻辑寻址
4.传输层
功能:
1.分段和重组
2.服务点寻址
5.会话层
功能:
1.建立、维护、终止会话
2.同步
3.对话控制
6.表示层
功能:
1.转换
2.加密、解密
3.压缩
7.应用层
功能:
1.网络虚拟终端
2.FTAM-File传输的访问和管理
3.邮件服务
4.目录服务
TCP/IP四层模型:
1.网络接口层
2.网络层
3.传输层
4.应用层
### 5.浏览器输入url到显示页面的过程
1.浏览器根据url,交给DNS服务器解析域名,找到IP地址,向服务器发送请求。
2.服务器响应请求返回数据,浏览器接收文件(html|js|css|img等)。
3.浏览器解析资源,建立DOM树和CSSDOM树,合并成render树。
4.浏览器渲染页面。
### 6.let/const/var的区别
let和const是ES6提出的,是块级作用域,没有变量提升,需要先声明再使用,不能重复声明。
const如果声明的是简单数据类型,则不可修改。
const如果声明的是复杂数据类型,可修改属性,不可完全替换。
var是函数作用域,有变量提升,会添加到全局对象window上,可重复声明,会被覆盖。
var和函数声明有提升,即声明后,变量会在代码执行之前被移动到其作用域的顶部,并初始化为undefined。