360前端一面30min疯狂拷打+解析

前端一面, 被疯狂拷打, 当然也是因为我本来就菜

1. 为什么没有实习

啊?当然是找不到实习(bushi)
大二技术不过关, 大三在搞科研()差不多就这样

2. 简单介绍一下你感觉自己最突出的项目

balabalaba开始吟唱

3.说一下输入url以后发生了什么

看起来很简单的问题, 但是疯狂拷打了()

(3.1)先根据域名,协议,端口检查是否合法

但是反问:如果url不合法会发生什么

当 URL 不合法时,浏览器通常会通过显示错误消息或警告来通知用户。具体的表现形式取决于 URL 的错误类型以及浏览器的实现。 当协议不合法的时候,服务器会返回400错误。当域名不合法的时候,会提示无法找到服务器/DNS解析失败/无效的url。

(3.2)将域名进行dns解析服务,得到ip地址

但是反问:DNS的具体流程

先检查本地缓存:浏览器首先检查本地 DNS 缓存,看看是否已经缓存了该域名的 IP 地址。如果有,直接使用这个地址。

向本地 DNS 服务器查询:如果本地缓存中没有,浏览器会向配置的本地 DNS 服务器(通常由互联网服务提供商提供)发送查询请求。本地 DNS 服务器会检查自己的缓存。如果找到该域名的 IP 地址,则将其返回给浏览器。如果没有找到,继续进行下一步。

递归查询:本地 DNS 服务器开始进行递归查询。它会向根 DNS 服务器发送请求。 通过根服务器, 顶级服务器,域名服务器进行递归查找。 找到域名服务器以后, 本地服务器向这个域名服务器发送请求, 并将结果缓存。最后反馈给浏览器。

(3.3)然后建立tcp链接

但是反问:请说出三次握手的具体情况;

第一次握手:客户端发送报文段, 告知服务端客户端已经准备好

第二次握手:服务端接受到客户端发送过来的报文段以后, 向客户端发送一个报文段, 告知客户端:服务端已经接受到客户端准备好的情况

第三次握手:客户端接受到返回的报文段以后, 向客户端发送最终的确认报文段, 服务端接受以后, 双方建立起稳定的tcp链接。双方都知道彼此的存在, 并且双方确认了对方也知道自己的存在。

(3.4)然后发送http请求

但是反问: http和https有了解吗

(开始吟唱)端口不一样。 明文传递。安全性

(3.5)得到后端发送过来的资源html,css,js

但是反问:浏览器怎么判断资源类型呢?
1. 首先根据http响应头部进行判断
2.根据资源后缀名进行判断
3. 根据请求的形式进行判断
4. 根据文件的具体内容进行判断
5. 在html内部, 根据link标签以及script标签进行判断

(3.6)然后构建dom树, 渲染规则, 合并render树

但是反问:dom树是怎么构建的

解析 HTML:浏览器从 HTML 文档的开头开始逐行读取内容。

构建 DOM 节点:创建节点,设置属性

处理嵌套结构: 父子关系: 当浏览器遇到开始标签时,会将其添加到当前的父节点中。当遇到结束标签时,浏览器会识别出当前节点的结束,从而将其与父节点的关系建立起来。 文本节点: 如果在标签之间有文本内容,浏览器会创建一个文本节点并将其与相应的元素节点关联。

处理特殊情况
    自闭合标签: 对于自闭合标签(如 <img />、<br />),浏览器会直接创建节点而不需要结束标签。
    错误处理: 尽可能修补

构建完成后的 是一个dom树对象

后续处理:样式和脚本: 在 DOM 树构建完成后,浏览器会根据 CSS 和 JavaScript 进行样式计算和脚本执行。这可能会导致 DOM 的进一步变化(如添加、删除节点)。

(3.7)布局, 绘制什么的

但是反问:重排和回流了解吗

但是反问:如何减少回流

1. 尽量减少或者合并dom操作
2. 尽量使用css来表示样式, 减少js样式修改
3. 尽量减少使用表格布局
4. 尽可能缩减dom树的深度
5. 避免频繁读取样式, 使用变量进行缓存

4. 手写js继承, 这个真的没有半点准备,没写出来

原型链继承, 组合继承, 寄生继承

组合集成, 在子类中调用父类的构造函数

//父类对象
function Parent(name) {
    this.name = name;
}

// 子类对象
function Child(name, age) {
    // 调用父类构造函数
    Parent.call(this, name);
    this.age = age;
}

寄生继承,在子类构造函数中创建一个父类对象, 然后给追加东西

//父类对象
function Parent(name) {
    this.name = name;
}

// 子类对象
function Child(name, age) {
    const child=new Parent(name);
    child.age=age;
    return child;
}
全部评论
佬 这个是实习转正还是秋招
点赞 回复 分享
发布于 2024-11-01 21:41 重庆
url不合法是不是直接用搜索引擎去搜索输入的网址
点赞 回复 分享
发布于 2024-10-12 14:21 贵州
这问题,感觉像同一个面试官
点赞 回复 分享
发布于 2024-09-23 18:23 重庆

相关推荐

04-25 17:51
已编辑
天津工业大学 前端工程师
自我介绍,尝试用英语介绍通过&nbsp;2&nbsp;道笔试题考察八股1.&nbsp;表单字段非空校验(空值判断、对象键值的处理、遍历对象的时候如何避免遍历到原型链上的属性)2.&nbsp;代码输出结果(var、闭包、作用域)纯八股1.&nbsp;说说&nbsp;JS&nbsp;的数据类型2.&nbsp;说说&nbsp;Symbol&nbsp;的使用场景,Symbol&nbsp;值作为对象的属性名时如何读取3.&nbsp;说说&nbsp;BigInt,怎么处理大数字运算4.&nbsp;什么是跨域5.&nbsp;webpack/vite&nbsp;如何解决跨域问题5.&nbsp;浏览器地址栏输入&nbsp;URL&nbsp;并且按下回车之后发生了什么6.&nbsp;说说&nbsp;DNS&nbsp;的查询过程7.&nbsp;vue&nbsp;相比原生&nbsp;JS&nbsp;解决了什么问题(MVVM)8.&nbsp;使用&nbsp;vue&nbsp;渲染页面一定更快吗9.&nbsp;vue2、vue3&nbsp;是如何代理数据的实习/项目相关1.&nbsp;实习期间负责哪些业务2.&nbsp;项目用到了&nbsp;web&nbsp;components,为什么要使用&nbsp;web&nbsp;components3.&nbsp;项目是&nbsp;monorepo&nbsp;架构,说说什么是&nbsp;monorepo,其优势和使用场景4.&nbsp;说说性能优化相关指标,如何着手性能优化5.&nbsp;图片相关请求如何优化6.&nbsp;将图片转成&nbsp;base64&nbsp;一定更好吗7.&nbsp;说说大文件上传的设计思路(分片)8.&nbsp;如何高效分片(多线程&nbsp;web&nbsp;worker)9.&nbsp;如何并发控制,并发是否有最大数量限制10.&nbsp;小文件如何上传(分片的&nbsp;chunk&nbsp;大小),20kb&nbsp;的图片如何上传11.&nbsp;axios&nbsp;二次封装做了什么反问1.&nbsp;主要业务2.&nbsp;主要技术栈3.&nbsp;有什么需要提升的点
查看54道真题和解析
点赞 评论 收藏
分享
评论
8
44
分享

创作者周榜

更多
牛客网
牛客企业服务