面试经验-盈立证券-实习-3.7k
盈立证券面试问题
面试问答
1. 输入url后发什么了什么
- 浏览器输入URL并按下回车
- 浏览器查找当前URL是否存在缓存
查找缓存是如何查找的- 浏览器会检查缓存中有没有域名对应的ip地址,这个缓存是有过期时长的,一般是几分钟到几小时不等。
- 如果浏览器缓存没有,那么就检查操作系统的hosts文件,比如windows就是
C:\Windows\System32\drivers\etc\hosts
文件,linux在/etc/hosts
文件中配置。 - 如果本地也没有配置那么就会根据向本机配置的本地区DNS域名服务器(LDNS)发起请求,如果你是通过学校连接互联网的一般是你学校的DNS服务器,如果你是在小区连接互联网的一般是网络提供商比如电信,联通的DNS服务器,DNS服务器通常不会太远。如何查看本机的域名服务器
- 如果LDNS也不能解析,那么就直接到根域名服务器请求解析。
- 根域名服务器会给本地域名服务器LDNS一个所查询的主域名服务器(gTLD)地址,gTLD是国际顶级域名服务器,比如
.com
,.cn
,.org
等。 - 本地域名服务器LDNS再向上一步返回的gLTD服务器发送请求。
- gLTD服务器查询并返回域名对应的Name Server域名服务器的地址,通常是你注册的域名服务器,例如你在某个域名服务器提供商申请的域名,那么这个域名解析任务就由这个域名服务提供商来完成。
- Name Server域名服务器会查询存储的域名和ip的映射关系表,将ip连同一个TTL值返回给DNS Server域名服务器。
- LDNS拿到ip和TTL会缓存起来,缓存时间由TTL值控制。
- 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
- 解析DNS域名为对应ip
- 根据ip建立TPC连接,三次握手
- 向服务器发送HTTP请求
- 服务器返回请求,返回响应结果
- 渲染界面,建立DOM树
- 关闭TPC连接 四次挥手
2. DNS解析,解析了什么
- 客户机先去查找本机的/etc/hosts 文件,看文件中是否存在该域名和IP地址的映射记录。如果有就调用,没有就进行下一步。
客户机请求本地域名服务器(LDNS)来解析这个域名,主机要求本地域名服务器直接返回最终结果。在返回结果之前,客户机将完全处于等待状态,不再二次请求。统一由本地域名服务器向各级域名服务器转发请求。
本地域名服务器收到客户机的请求后,先查询自己的缓存信息,如果有这个域名的映射记录则返回结果,没有则进行下一步。
本地域名服务器请求根域名服务器解析这个域名,根域名告诉本地域名服务器去找对应的一级域名服务器。
本地域名服务器请求一级域名服务器解析这个域名,一级域名服务器告诉它去找对应的二级域名服务器。
本地域名服务器请求二级域名服务器解析这个域名,二级域名服务器告诉它去找对应的子域名服务器。
本地域名服务器请求子域名服务器解析这个域名,子域名服务器返回对应的IP地址。
本地域名服务器将IP地址记录到缓存中,并返回给客户机。客户机根据收到的IP地址访问该网站。
3. 什么是强缓存和协商缓存
强缓存
在浏览器中,强缓存分为Expires
(http1.0规范)、cache-control
(http1.1规范)两种。
Expires
Expires
是http1.0
的规范,用于表示资源的过期时间的请求头字段,值是一个绝对时间,是由服务器端返回的。
在浏览器第一个请求资源时,服务器端的响应头会附上Expires
这个响应字段,当浏览器在下一次请求这个资源时会根据上次的expires
字段是否使用缓存资源(当请求时间小于服务端返回的到期时间,直接使用缓存数据)
expires是根据本地时间来判断的,假设客户端和服务器时间不同,会导致缓存命中误差
Cache-control
上面我们提到了Expires
有个缺点,当客户端本地时间和服务器时间不一致时会产生误差,浏览器会直接向服务器请求新的资源,为了解决这个问题,在http1.1
规范中,提出了cache-control
字段,且**这个字段优先级高于上面提到的Expires
**,值是相对时间。
在cache-control
中有常见的几个响应属性值,它们分别是
属性值 | 值 | 备注 |
---|---|---|
max-age | 3600 | 例如值为3600,表示(当前时间+3600秒)内不与服务器请求新的数据资源 |
s-maxage | 和max-age一样,但这个是设定代理服务器的缓存时间 | |
private | 内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存) | |
public | 所有内容都将被缓存(客户端和代理服务器都可缓存) | |
no-store | 不缓存任何数据 | |
no-cache | 储存在本地缓存区中,只是在与原始服务器进行新鲜度再验证之前,缓存不能将其提供给客户端使用 |
协商缓存
上面提到的强缓存都是由本地浏览器在确定是否使用缓存,当浏览器没有命中强缓存时就会向浏览器发送请求,验证协商缓存是否命中,如果缓存命中则返回304状态码,否则返回新的资源数据。
协商缓存(也叫对比缓存)是由服务器来确定资源是否可用,这将涉及到两组字段成对出现的,在浏览器第一次发出请求时会带上字段(Last-Modified或者Etag
),则后续请求则会带上对于的请求字段(if-modified-since
或者if-none-Match
),若响应头没有Last-Modified
或者Etag
,则请求头也不会有对应的字段
Last-modified
表示本地文件最后修改时间,由服务器返回if-modified-since
是浏览器在请求数据时返回的,值是上次浏览器返回的Last-modifiedETag
是一个文件的唯一标识符,当资源发生变化时这个ETag
就会发生变化。弥补了上面last-modified
可能出现文件内容没有变化但是last-modified
发生了变化出现重新向服务器请求资源情况。这个值也是又服务器返回的if-none-match
是浏览器请求数据时带上的字段,值是上次服务器返回的ETag
4. 在判断缓存的是如何判断的
浏览器是如何查找缓存的
11. 缓存之后的作用是什,缓存了什么
5. 单线程与多线程是什么,区别是什么
JS是单线程还是多线程,JS的事件处理机制
浏览器是单线程还是多线程
6. JS如何实现多线程
7. typescript中泛型是什么
8. vue2与vue3的区别是什么
9. 什么时候会用到全局状态管理
10. 什么时候不会发送DNS域名解析
12. webpack的loder与插件有什么区别
loader是解析,转换器
由于webpack 本身只能打包commonjs规范的js文件,所以,针对css,图片等格式的文件没法打包,就需要引入第三方的模块进行打包。
对于其他格式的文件,webpack通过loader将其转化为commonJS规范的文件后,webpack才能解析到。
loader作用
loader只专注于转化文件(transform)这一个领域,完成压缩,打包,语言翻译。
loader是运行在NodeJS中。
让webpack能够处理非js模块,然后使用webpack的打包,编译能力去输出一个让浏览器可识别的文件内容。
plugins
Plugin直译为插件, plugin可以扩展webpack的功能,plugin完成的是loader不能完成的功能。让webpack具有更多的灵活性,
在webpack运行的生命周期中会广播出很多事件,在webpack打包编译过程里,plugin监听这些事件,在对应的事件节点里执行自定义操作,通过webpack通过的API改变输出结果.比如资源管理、bundle文件优化等操作.
plugin作用
- plugin也是为了扩展webpack的功能,但是 plugin 是作用于webpack本身上的。
- 而且plugin不仅只局限在打包,资源的加载上,它的功能要更加丰富。从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务
loader与plugin区别
- 功能角度:loader是转换器, plugin是扩展器
- 运行角度:loader运行在打包文件之前(loader为在模块加载时的预处理文件),plugins在整个编译周期都起作用。
代码题
由扁平结构转换成树结构
1 | function arrToMap(arr) { |
面试经验-盈立证券-实习-3.7k