澎贝科技 前端 秋招面经

全程1h左右,唉,又没录上屏,但是收获了很多有价值的问题。

  1. 自我介绍
  2. 说说你是怎么接触前端的?明明学的是物联网,但为什么选择这个领域?
  3. 大学三年期间,有没有什么课程让你收获最大的
  4. 能说说你在webpack构建上做了什么优化吗
  5. 具体说说Gzip,压缩的什么资源呢?Gzip的原理了解过吗
  6. 了解Websocket实现心跳检测机制原理,能具体说说这个吗
  7. 能具体说说路由权限分配吗,你是怎么做这个东西的呢
  8. Promise怎么处理请求之间的依赖关系呢
  9. 讲一下“用setTimeout包装函数解决同步代码中DOM操作不生效问题”
  10. 0.1+0.2等于什么呢(=0.30000000000000004)

JavaScript中只有一种数值类型Number,是基于64位双精度浮点型实现的。

具体而言,双精度浮点数使用 64 个二进制位来表示一个数值,其中 1 位用于表示符号位,11 位用于表示指数位,剩下的 52 位用于表示尾数位。

0.1和 0.2 在二进制中都表示为无限循环小数

然而双精度浮点数的尾数位只有 52 位,所以只能保留有限的二进制位数。系统会根据规则进行舍入处理,导致会存在舍入误差精度损失的问题。

toFixed(0.1 + 0.2).toFixed(1)保留一位小数

会的。除了 JavaScript,C、C++、Java、Python 等许多编程语言也都采用 IEEE 754 标准的双精度浮点数表示法,同样会存在这个问题。

  1. 了解过ES6+的语法吗
  2. 说说箭头函数(允许用箭头来定义函数

箭头函数和普通函数的区别

  • 写法上的差异,箭头函数相比普通函数写法更简洁,用箭头定义函数即可
  • 箭头函数没有自己的this值
  • 箭头函数没有arguments对象

箭头函数的出现主要是为了解决普通函数中 this 绑定的问题。在普通函数中,this 值的指向在运行时是动态决定的,而箭头函数通过捕获外层作用域的 this 值,使得 this 的行为更加直观和可控。

this 既不指向函数自身也不指向函数的词法作用域。

this 实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。

作用域和作用域链

作用域是程序中定义变量和访问变量的范围。它规定了变量在哪里和如何被访问。

在 JavaScript 中,有以下几种类型的作用域:

  1. 全局作用域:全局作用域是在整个代码文件中定义的变量的最外层作用域。它在程序启动时创建,并在程序执行期间一直存在。
  2. 函数作用域:函数作用域是在函数内部定义的变量的作用域。它仅在函数执行期间存在,并且每次函数调用都创建一个新的函数作用域。
  3. 块级作用域:块级作用域是在块(如 if 语句、for 循环等)内定义的变量的作用域。ES6 引入了 let 和 const 关键字,允许在块级作用域中声明变量。

作用域链是在嵌套的作用域中查找变量的机制。

作用域链是由一系列嵌套的作用域对象组成的。当查找一个变量时,JavaScript 引擎首先在当前作用域中查找,如果找不到,则向上一级作用域继续查找,直到找到匹配的变量或达到全局作用域。如果变量在任何作用域中都没有找到,那么引发 ReferenceError 错误。

作用域链的形成是在函数定义时确定的,而不是在函数调用时。当函数被定义时,它会记住它定义时所处的作用域。当函数被调用时,它会使用保存的作用域链来访问外部变量。

  1. 输入一个url到页面渲染的过程

过程如下:

  • DNS 解析:浏览器首先会对输入的 URL 进行 DNS 解析,将域名解析为对应的 IP 地址。浏览器会查询本地 DNS 缓存,如果找不到缓存记录,则向 DNS 服务器发送请求获取 IP 地址。
  • 建立 TCP 连接:浏览器使用 HTTP 协议与服务器建立 TCP 连接。这个过程涉及三次握手,即客户端发送 SYN(同步)包,服务器返回 SYN+ACK(同步+确认)包,最后客户端发送 ACK(确认)包。
  • 发送 HTTP 请求:TCP 连接建立后,浏览器向服务器发送 HTTP 请求。请求中包含了请求方法(GET、POST 等)、路径、头部信息、Cookie 等。
  • 服务器处理请求:服务器接收到浏览器发送的请求后,根据请求的路径和其他信息进行处理。处理过程可能包括解析动态请求,读取数据库,处理业务逻辑等。
  • 返回 HTTP 响应:服务器生成响应数据并将其打包成 HTTP 响应,包括状态码、头部信息、响应体等。响应中常见的状态码有 200 表示成功,404 表示未找到资源,500 表示服务器内部错误等。
  • 接收响应内容:浏览器接收到服务器返回的 HTTP 响应后,开始接收响应内容。如果响应中包含 HTML 页面,浏览器会根据页面中的字符编码(如 UTF-8)解码响应内容。
  • 解析 HTML 并构建 DOM 树:浏览器将接收到的 HTML 文档解析成 DOM(文档对象模型)树,树中包含了网页的结构和标签信息。
  • 解析 CSS 和构建 CSSOM 树:浏览器解析页面中的 CSS 样式表,并根据样式规则构建 CSSOM(CSS 对象模型)树,用于表示页面的样式信息。
  • 构建渲染树:浏览器将 DOM 树和 CSSOM 树合并,生成渲染树(Render Tree),渲染树只包含需要显示的节点和对应的样式信息。
  • 布局和绘制:浏览器根据渲染树进行布局(Layout)计算,确定每个节点在屏幕中的位置和大小。然后进行绘制(Paint),将页面内容绘制到屏幕上。
  • 加载并执行 JavaScript:如果页面中有 JavaScript 代码,浏览器会加载并执行 JavaScript。JavaScript 可以修改 DOM、处理事件、发送网络请求等操作。
  • 页面完成加载:当所有资源(包括图片、样式表、脚本等)都加载完成,页面渲染完毕后,触发页面加载完成的事件,表示页面已就绪。
  1. 了解过options吗
  2. 给了一道题
let a = function(){console.log(this)};
a();
// this ==> window
  1. 反问

今天需要复盘完的几个重要知识点:

  • 作用域、作用域链和this
  • 从输入url到页面渲染的详细过程
  • 箭头函数
  • 0.1+0.2的问题
#软件开发笔面经#
全部评论

相关推荐

学院本鼠鼠从上个礼拜四开始投简历,一共投了礼拜四,礼拜五两天,沟通290,要简历43,约面6家(不知道是不是现在大部分公司缺实习生,还是因为有竞赛的原因,没想到两天约了这么多),其中五家面试都堆在了礼拜一,一家约到礼拜三,因为时间有冲突,就拒了两家的面试,然后没有再投简历了第一家,杭州一家初创公司,因为日薪有点低,所以成为了鼠鼠的处面,用来练手(已挂)虽然公司很小,但面试质量很高先拷打项目,然后是计网,数据库,自动化框架,用例设计啥的都有涉及到,还有两道SQL手撕,鼠鼠拼尽全力,无法战胜,现在没有消息,估计已挂第二家,上海锦海捷亚,招聘软件上写1000人以上的厂,但不知道是否属实(oc)在面试前,鼠鼠还把时间记错了,以为是十一点半,结果是十一点,迟到了六分钟,但面试官很好,在此再次对面试官表示抱歉,这次是两个人来一起面鼠鼠的,问的问题相对简单,就是项目还有测试相关的东西,聊到还算顺利,最后也是成功oc了,但已拒第三家,北京纷享销客,礼拜一下午面的,鼠鼠专门翘了实验课跑去面试(oc)面试官很专业,先问项目相关的,然后计网,一些开发问题,最后是测试相关以及一些测试场景题,基本上都答出来了,面试体验也很好,最后成功oc第四家,杭州澎贝,今天下午面的,最汗流浃背的一集(oc)这是鼠鼠面四家一来,压力最大的一回,面试难度挺大的,但面试体验很好,首先上来深挖项目,这里鼠鼠已经有点汗流浃背了,因为问的实在有点细,对项目还没好好复盘过,随后又问了mvcc,反射,设计模式,mq等一些相关的较深的开发八股,然后就是测试场景以及一些测试知识鼠鼠都被拷打蒙了,原本以为肯定挂了,没想到面完五分钟后,hr发消息说oc了,纯属是鼠鼠狗运下面就是学院本鼠鼠第一次找实习的过程,没想到比想象中运气好了那么多,后续我把这几次面试复盘一下,会把面经发出来,最后希望大家都能拿到自己满意的offer
码客明:牛的
点赞 评论 收藏
分享
评论
3
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务