面试经验-盈立证券-实习-3.7k

盈立证券面试问题

面试问答

1. 输入url后发什么了什么

  1. 浏览器输入URL并按下回车
  2. 浏览器查找当前URL是否存在缓存
    查找缓存是如何查找的
    1. 浏览器会检查缓存中有没有域名对应的ip地址,这个缓存是有过期时长的,一般是几分钟到几小时不等。
    2. 如果浏览器缓存没有,那么就检查操作系统的hosts文件,比如windows就是C:\Windows\System32\drivers\etc\hosts文件,linux在/etc/hosts文件中配置。
    3. 如果本地也没有配置那么就会根据向本机配置的本地区DNS域名服务器(LDNS)发起请求,如果你是通过学校连接互联网的一般是你学校的DNS服务器,如果你是在小区连接互联网的一般是网络提供商比如电信,联通的DNS服务器,DNS服务器通常不会太远。如何查看本机的域名服务器
    4. 如果LDNS也不能解析,那么就直接到根域名服务器请求解析。
    5. 根域名服务器会给本地域名服务器LDNS一个所查询的主域名服务器(gTLD)地址,gTLD是国际顶级域名服务器,比如.com,.cn,.org等。
    6. 本地域名服务器LDNS再向上一步返回的gLTD服务器发送请求。
    7. gLTD服务器查询并返回域名对应的Name Server域名服务器的地址,通常是你注册的域名服务器,例如你在某个域名服务器提供商申请的域名,那么这个域名解析任务就由这个域名服务提供商来完成。
    8. Name Server域名服务器会查询存储的域名和ip的映射关系表,将ip连同一个TTL值返回给DNS Server域名服务器。
    9. LDNS拿到ip和TTL会缓存起来,缓存时间由TTL值控制。
    10. 把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
  3. 解析DNS域名为对应ip
  4. 根据ip建立TPC连接,三次握手
  5. 向服务器发送HTTP请求
  6. 服务器返回请求,返回响应结果
  7. 渲染界面,建立DOM树
  8. 关闭TPC连接 四次挥手

2. DNS解析,解析了什么

-   客户机先去查找本机的/etc/hosts 文件,看文件中是否存在该域名和IP地址的映射记录。如果有就调用,没有就进行下一步。
  • 客户机请求本地域名服务器(LDNS)来解析这个域名,主机要求本地域名服务器直接返回最终结果。在返回结果之前,客户机将完全处于等待状态,不再二次请求。统一由本地域名服务器向各级域名服务器转发请求。

  • 本地域名服务器收到客户机的请求后,先查询自己的缓存信息,如果有这个域名的映射记录则返回结果,没有则进行下一步。

  • 本地域名服务器请求根域名服务器解析这个域名,根域名告诉本地域名服务器去找对应的一级域名服务器。

  • 本地域名服务器请求一级域名服务器解析这个域名,一级域名服务器告诉它去找对应的二级域名服务器。

  • 本地域名服务器请求二级域名服务器解析这个域名,二级域名服务器告诉它去找对应的子域名服务器。

  • 本地域名服务器请求子域名服务器解析这个域名,子域名服务器返回对应的IP地址。

  • 本地域名服务器将IP地址记录到缓存中,并返回给客户机。客户机根据收到的IP地址访问该网站。

3. 什么是强缓存和协商缓存

强缓存

在浏览器中,强缓存分为Expires(http1.0规范)、cache-control(http1.1规范)两种。

Expires

Expireshttp1.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-modified
  • ETag是一个文件的唯一标识符,当资源发生变化时这个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作用
  1. plugin也是为了扩展webpack的功能,但是 plugin 是作用于webpack本身上的。
  2. 而且plugin不仅只局限在打包,资源的加载上,它的功能要更加丰富。从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务

loader与plugin区别

  1. 功能角度:loader是转换器, plugin是扩展器
  2. 运行角度:loader运行在打包文件之前(loader为在模块加载时的预处理文件),plugins在整个编译周期都起作用。

代码题

由扁平结构转换成树结构

1
2
3
4
5
6
7
8
9
10
11
function arrToMap(arr) {  
    let rootMap = {0: {child: []}}
    arr.forEach(item => {
        rootMap[item.id] = item
        if (rootMap[item.pid]) {
            rootMap[item.pid].child = rootMap[item.pid].child || []
            rootMap[item.pid].child.push(rootMap[item.id])
        }
    })
    return rootMap[0].child
}
作者

colin-dong

发布于

2023-04-12

更新于

2024-01-12

许可协议

评论