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 节点:创建节点,设置属性

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

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

构建完成后的 是一个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;
}
全部评论
这问题,感觉像同一个面试官
点赞 回复 分享
发布于 09-23 18:23 重庆
url不合法是不是直接用搜索引擎去搜索输入的网址
点赞 回复 分享
发布于 10-12 14:21 贵州
佬 这个是实习转正还是秋招
点赞 回复 分享
发布于 11-01 21:41 重庆

相关推荐

8 44 评论
分享
牛客网
牛客企业服务