• 腾讯2019春招一面(电话面试)


     

    腾讯2019春招一面

    最近有许多事情,导致博客许久没更,所以先更个一面压压惊

    这件事情的起源有些曲折,所以先做个背景介绍(推销自己一波)

    本人在读大三学生一名(非985,211),前段时间不少的互联网巨头们开启了新一轮的春招,本人也去凑了热闹。

    我当时投简历的时候没注意,直接投了校园招聘,但是我发现我的简历直接就灰掉了,意思就是没有进入下一轮。

    这时我才发现今年的校招没开,开的是暑期实习(望大家注意),然后我就没报希望了。

    但是事情的发展出乎了意料,突然前两天打电话给我要面试,但是在官网上又查不到,这应该就是大家说的不走流程的面试。

    话不多说,进入面试内容环节

    面试内容:

    • cookie的作用
    • cookie安全
    • domain跨域
    • 实现跨域
    • http2
    • Tcp连接过程(3次握手,4次挥手)
    • DNS解析
    • promise
    • DOM事件流
    • 事件循环

      

    接下来一点一点来讲:

     

    Cookie作用:

    首先Cookie是什么?

    “Cookie”是小量信息,由网络服务器发送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie
    一般来说Cookie在如图所示的地方

    这是百度的一个http请求所设置的Cookie

    通常来说Cookie保存的数据应该是使用频繁,但却不机密的内容

    因为Cookie的安全性不太好

    为什么呢?因为我们能够很轻易地获取Cookie中的内容,甚至连抓包都不用,浏览器中就能获取到

    如下所示

    由于Cookie和Session都存在跨域问题,自然面试官的第二个问题,就是跨域了

    跨域

    首先是跨域的方法:

    1. CORS 
    2. Jsonp
    3. Hash
    4. Domain
    5. PostMessage H5新增
    6. Websocket

    下面对这些方法做一个简单的介绍,具体步骤不过多阐述,希望详细了解的朋友请自行百度

    1. CORS
      • 由后端控制,需添加一系列的允许跨域的http头
      • 一般用于Ajax、Fetch等异步请求的跨域
    2. Jsonp  
      • 需要后端配合,将前端所需的数据传入回调函数
      • 前端在访问Jsonp的接口时需要传递一个回调函数的函数名
      • 该回调函数需在发送请求前就定义完成
      • 由于是通过JS传输数据实现,所以当后台返回值的时候就会将值传入回调函数并执行
    3. Hash
      • 将数据拼接在 url 的 # 部分,也就是 location.hash
    4. Domain
      • 这种跨域方式需要跨域的两个域存在父域子域的关系
      • 通过设置document.domain来让两个域处于同一个域消除跨域
    5. PostMessage
      • 这种方式是H5新增
      • 通过window.postMessage来发送数据
      • 然后通过 message 事件来监听
    6. Websocket
      • websocket属于长连接
      • 通过websocket可以跨域访问数据

    聊完了跨域,话题自然就落到了造成跨域问题的 http 协议上

    HTTP2.0

    首先问的问题是,对HTTP2.0有什么了解?

    这里给出百度百科的答案:

    多路复用请求;
    对请求划分优先级;
    压缩HTTP头;
    服务器推送流(即Server Push技术);
     
    以上四点就是HTTP2.0主要改进的地方
     
    HTTP作为TCP的一部分,TCP的内容当然少不了
    但是这一部分网上相关的内容已经很多了,这里就不再描述
     

    DNS解析

    这里面试官问了 DNS 相关的问题

    如果有自己的服务器的小伙伴应该或多或少的有一定的了解。

    一般来说服务器是通过IP来访问的,那么我们希望访问一个域名(网址)就是访问某个服务器,必不可少的步骤就是域名解析;

    也就是说将网址和IP建立一个映射关系,这一过程就叫做DNS解析

    至于解析的大致过程如下:

    1.现在我有一台计算机,通过ISP接入了互联网,那么ISP就会给我分配一个DNS服务器,这个DNS服务器不是权威服务器,而是相当于一个代理的dns解析服务器,他会帮你迭代权威服务器返回的应答,然后把最终查到IP返回给你。

    2.现在的我计算机要向这台ISPDNS发起请求查询www.baidu.com这个域名了,(经网友提醒:这里其实准确来说不是ISPDNS,而应该是用户自己电脑网络设置里的DNS,并不一定是ISPDNS。比如也有可能你手工设置了8.8.8.8)

    3.ISPDNS拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话就直接返回。这个时候拿到的ip地址,会被标记为非权威服务器的应答

    4.如果缓存中没有的话,ISPDNS会从配置文件里面读取13个根域名服务器的地址(这些地址是不变的,直接在BIND的配置文件中),

    5.然后像其中一台发起请求。

    6.根服务器拿到这个请求后,知道他是com.这个顶级域名下的,所以就会返回com域中的NS记录,一般来说是13台主机名和IP。

    7.然后ISPDNS向其中一台再次发起请求,com域的服务器发现你这请求是baidu.com这个域的,我一查发现了这个域的NS,那我就返回给你,你再去查。

    (目前百度有4台baidu.com的顶级域名服务器)。

    8.ISPDNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下有www的这台主机,就把这个IP返回给你了,

    9.然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中

    Promise

    ES6作为前端发展的趋势,当然会被问到

    其中着重问的就是 Promise

    自从出现异步请求开始,现在的页面基本上都会有异步的操作

    那么Promise作为一个标准的解决异步操作的方案,其重要性自然不言而喻。

    首先第一个问题是:

    Promise是怎么实现将异步转为同步的?

    这里说一下我个人的看法,欢迎各位大牛指正。

    首先 Promise 并不会将原本异步的操作转换为同步操作

    Promise只是用同步的流程来控制异步操作,从而避免回调地狱

    这个过程大致如下:

    1. 创建Promise对象
    2. 立即执行 Promise 中的代码
    3. 当Promise中的 resolve 方法调用时将 结果和 .then 的回调函数放入JS的异步队列
    4. 执行 Promsie 后面的同步代码
    5. 同步代码执行完成后,异步队列将刚才Promise.then的回调函数出队并执行

    第二个问题:Promise.then 中的 Promise对象和之前新建的 Promise 的关系?

    then方法是定义在原型对象Promise.prototype上的

    它的作用是为 Promise 实例添加状态改变时的回调函数。

    then方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。

    then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)

    DOM

    这里的问题就是比较基础的常见问题了

    首先什么是Dom事件流,由于本人前不久还在更这方面的文章所以答起来也算是得心应手。

    这一部分感兴趣的朋友可以看我之前的文章,点这里前往

    然后的问题就是 事件循环了,这个问题算是一个很重要的问题,因为事件循环基本上就是JS的运行机制了

    由于,JS是单线程的,所以不存在真正意义上的异步操作,只是通过特殊的实现手段来达成异步的效果。

    1. JS运行时会维护两个队列,一个是同步队列,一个是异步队列
    2. 顾名思义,同步队列中存放着同步操作,异步队列放着一些异步操作
    3. 代码运行时,JS会首先运行同步队列中的内容
    4. 当同步队列中的内容运行完成后,就会从异步队列中出队一个操作并将其放入同步队列
    5. 由于此时同步队列中只有该异步操作,所以该操作此时会执行(定时器实际上就是过了指定时间后将操作放入异步队列,这也是当异步操作较多时定时器不太准的原因)
    6. 此外当JS中的事件触发时,实际上也就是是将事件的回调操作放入了异步队列(故此这一运行机制称为“事件循环’”)

    整个面试过程大概耗时1小时,如果大家有什么问题欢迎留言探讨。

    此外,本人找实习中,欢迎大牛们以白菜价将我批发带走

    联系方式:luohaoyu0920@foxmail.com

  • 相关阅读:
    自动化测试-appium常用元素
    自动化测试-微信小程序
    自动化测试-环境搭建appium for windows
    安全测试-docker搭建sonar完成代码质量检测
    工具安装-pycharm使用已配置的虚拟环境
    安全测试-sonarscanner扫描代码
    工具安装-java集成到maven
    iOS 提升代码的安全性,可以做哪些措施???
    iOS 绘制一个表盘时钟,秒针效果可以“扫秒/游走”
    iOS 关于BTC 一些知识点
  • 原文地址:https://www.cnblogs.com/lhyxq/p/10736490.html
Copyright © 2020-2023  润新知