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-09-23 18:23 重庆
url不合法是不是直接用搜索引擎去搜索输入的网址
点赞 回复 分享
发布于 2024-10-12 14:21 贵州
佬 这个是实习转正还是秋招
点赞 回复 分享
发布于 2024-11-01 21:41 重庆

相关推荐

会飞的猿:我看你想进大厂,我给你总结一下学习路线吧,java语言方面常规八股要熟,那些java的集合,重点背hashmap八股吧,jvm类加载机制,运行时分区,垃圾回收算法,垃圾回收器CMS、G1这些,各种乐观锁悲观锁,线程安全,threadlocal这些。在进阶一些的比如jvm参数,内存溢出泄漏排查,jvm调优。我这里说的只是冰山一角,详细八股可以去网上找,这不用去买,都免费资源。mysql、redis可以去看小林coding,我看你简历上写了,你一定要熟,什么底层b+树、索引结构、innodb、mvcc、undo log、redo log、行级锁表级锁,这些东西高频出现,如果面试官问我这些我都能笑出来。消息队列rabbitmq也好kafka也好,学一种就行,什么分区啊副本啊确认机制啊怎么保证不重复消费、怎么保证消息不丢失这些基本的一定要会,进阶一点的比如LEO、高水位线、kafka和rocketmq底层零拷贝的区别等等。计算机网络和操作系统既然你是科班应该理解起来问题不大,去看小林coding这两块吧,深度够了。spring boot的八股好好看看吧,一般字节腾讯不这么问,其他的java大厂挺爱问的,什么循环依赖啥的去网上看看。数据结构的话科班应该问题不大,多去力扣集中突击刷题吧。项目的话其实说白了还是结合八股来,想一想你写的这些技术会给你挖什么坑。除此之外,还有场景题、rpc、设计模式、linux命令、ddd等。不会的就别往简历上写了,虽然技术栈很多的话好看些,但背起来确实累。总结一下,多去实习吧,多跳槽,直到跳到一个不错的中厂做跳板,这是一条可行的进大厂的路线。另外,只想找个小厂的工作的话,没必要全都照这些准备,太累了,重点放在框架的使用和一些基础八股吧。大致路线就这样,没啥太多难度,就是量大,你能达到什么高度取决于你对自己多狠,祝好。
点赞 评论 收藏
分享
03-05 19:06
Java
如题ACM/ICPC奖牌有用吗,如果是区域赛银牌作用是多大呢?
KalznAsawind:没用,按照我秋招的感觉,没任何作用,不如实习一根。最大的用处是华为给我免了笔试和一轮面,其他没吊用,最多加个印象分。
点赞 评论 收藏
分享
评论
8
44
分享

创作者周榜

更多
牛客网
牛客企业服务