一些前端面试的知识点(部分,无序)

本文详细介绍了浏览器的渲染过程,包括DOM树、CSSOM树、渲染树的构建,以及页面布局和绘制。同时,阐述了JavaScript引擎线程、计时器线程和其他相关线程的工作原理。此外,讨论了TCP的三次握手和四次挥手过程,以及同源策略在网络安全性中的作用。最后,对比了Cookie、sessionStorage和localStorage的存储差异,并分析了MVC和MVVM设计模式的区别和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、浏览器渲染原理和步骤?

以Chrome 浏览器为例子,页面加载时候的进程主要是,

1.浏览器的主进程,

2.GPU进程,

3.网络进程,

4.渲染进程,

5.插件进程,

这些进程里面浏览器的渲染进程又可以分为,

1.DOM树的构建 渲染引擎使用HTML解析器(调用XML解析器)解析HTML文档,将各个HTML元素逐个转化成DOM节点,从而生成DOM树

2.CSSOM树的构建CSS解析器解析CSS,并将其转化为CSS对象,将这些CSS对象组装起来,构建CSSOM树;

3.渲染树构建:DOM 树和 CSSOM 树都构建完成以后,浏览器会根据这两棵树构建出一棵渲染树

4.页面布局:渲染树构建完毕之后,元素的位置关系以及需要应用的样式就确定了,这时浏览器会计算出所有元素的大小和绝对位置;

5.页面绘制:页面布局完成之后,浏览器会将根据处理出来的结果,把每一个页面图层转换为像素,并对所有的媒体文件进行解码。

对于这五个流程,每一阶段都有对应的产物:DOM树、CSSOM树、渲染树、盒模型、界面。

6.JS引擎线程:一个tab页中只有一个JS引擎线程(单线程),负责解析和执行JS,处理页面中用户的交互,以及操作DOM树、CSS样式树。它GUI渲染线程不能同时执行,只能一个一个来,如果JS执行过长就会导致阻塞掉帧 GUI渲染线程与JS引擎线程互斥

7.计时器线程:指 setInterval 和 setTimeout,因为JS引擎是单线程的,所以如果处于阻塞状态,那么计时器就会不准了,所以需要单独的线程来负责计时器工作

8.异步http请求线程: XMLHttpRequest连接后浏览器开的一个线程,比如请求有回调函数,异步线程就会将回调函数加入事件队列,等待JS引擎空闲执行

9.事件触发线程:主要用来控制事件循环,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,由于JS的单线程关系所有这些事件都得排队等待JS引擎处理。

二、TCP的三次握手和四次挥手?

三次握手

1)第一次握手就是客户端向服务端发送SYN报文,并且携带着自己的初始化序列号。

2)第二次握手就是服务器收到客户端的SNY报文之后,服务器也生成自己的初始化序号,同时会把客户端的序号+1作为自己的ACK,表示自己已经收到客户端的SYN报文

3)第三次握手,客户端收到SYN报文之后,会将服务器的序号+1作为自己ACK的值,表示已经收到服务器发过来的数据了,这时候客户端才和服务器进行连接了;

四次挥手

1)客户端首先给服务器发送FIN报文和ACK(序号)

2)服务器收到FIN报文之后 会发送ACK报文 并且把客户端的序号加一,表明已经收到客户端的报文了,服务器此时可能还有些未传输完的数,。

3)这是服务端会再次发送一个FIN+ACK进行最后的确认,此时序号和确认号都不变

4)最后客户端得到最终的结束确认以后会发送ACK来进行确认,此时把服务器的序号+1作为自己的ACK报文的我序列号值。

三、同源策略:

 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;如果缺少了同源策略浏览器的安全使用会受到很大的影响。可以说web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

四、如何让UDP协议变得可靠?

RUDP

RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下, RTP 客户机(实时位置)面前呈现的就是一个高质量的 RTP 流。在不干扰协议的实时特性的同时,可靠 UDP 的拥塞控制机制允许 TCP 方式下的流控制行为

RTP

实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。

RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于底层服务去实现这一过程。 RTP 并不保证传送或防止无序传送,也不确定底层网络的可靠性。 RTP 实行有序传送, RTP 中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,例如:在视频解码中,就不需要顺序解码。

UDT

基于 UDP 的数据传输协议(UDP-basedData Transfer Protocol,简称UDT)是一种互联网数据传输协议。UDT的主要目的是支持高速广域网上的海量数据传输,而互联网上的标准数据传输协议 TCP 在高带宽长距离网络上性能很差。顾名思义,UDT 建于 UDP 之上,并引入新的拥塞控制和数据可靠性控制机制。UDT 是面向连接的双向的应用层协议。它同时支持可靠的数据流传输和部分可靠的数据报传输。由于 UDT 完全在 UDP 上实现,它也可以应用在除了高速数据传输之外的其它应用领域,例如点到点技术(P2P),***穿透,多媒体数据传输等等。

五、Cookie、sessionStorage、localStorage 的区别

相同点:

存储在客户端

不同点:

cookie数据大小不能超过4k;sessionStorage和localStorage的存储比cookie大得多,可以达到5M+cookie设置的过期时间之前一直有效;localStorage永久存储,浏览器关闭后数据不丢失除非主动删除数据;sessionStorage数据在当前浏览器窗口关闭后自动删除cookie的数据会自动的传递到服务器;sessionStorage和localStorage数据保存在本地

六、MVC和MVVM的区别:

MVC的特点:实现关注点分离,即应用程序中的数据模型与业务和展示逻辑解耦。就是将模型和视图之间实现代码分离,松散耦合,使之成为一个更容易开发、维护和测试的客户端应用程序。

MVC的优点:

耦合度低,视图层和业务层分离

重用度高

生命周期成本低

可维护性高

部署快

MVC的缺点:

不适合小型项目的开发

视图与控制器间的过于紧密的连接,视图与控制器是相互分离,但却是联系紧密的部件,妨碍了他们的独立重用

降低了视图对模型数据的访问,依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

它有两个方向:

一是将模型转化成视图,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。

二是将视图转化成模型,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。

这两个方向都实现的,就是数据的双向绑定。

MVVM的特点: 在MVVM的框架下,视图和模型是不能直接通信的,它们通过ViewModal来通信,ViewModel通常要实现一个observer观察者,当数据发生变化,ViewModel能够监听到数据的这种变化,然后通知到对应的视图做自动更新,而当用户操作视图,ViewModel也能监听到视图的变化,然后通知数据做改动,这实际上就实现了数据的双向绑定。并且MVVM中的View 和 ViewModel可以互相通信。

MVVM的优点:

MVVM模式的主要目的是分离视图(View)和模型(Model),有几大优点:

低耦合,视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

可重用性,可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

独立开发,开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xml代码。

可测试,界面向来是比较难于测试的,而现在测试可以针对ViewModel来写

双向数据绑定,它实现了View和Model的自动同步,当Model的属性改变时,不需要手动操作Dom元素,来改变View的显示,而是改变属性后该属性对应View层显示会自动改变

MVVM适用场景: 适合数据驱动的场景,数据操作比较多的场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值