1.url的组成和长度
协议、域名、端口号、资源路径、查询参数
2.浏览器地址栏输入url,到页面渲染经历哪些过程
- 域名解析为ip地址
- 主机向IP地址发送tcp请求,连接上主机
- 发送http请求
- 收到响应,把解析的结果渲染到浏览器页面上
3.js与css在页面加载过程中如何阻塞页面的渲染
(1)请求html资源 (2)解析html生成DOM树 (3)遇到js则去下载,并执行 (4)遇到css则去下载,并解析css文件生成cssOM(5)根据DOM树和CSSOM生成渲染树让GPU渲染
*js会阻塞DOM树的解析过程,一旦遇到js脚本,则终止DOM树解析,去下载js脚本,之后立即执行js,最后继续DOM树解析
*css并不会阻塞DOM树的解析过程,遇到css文件,网络进程会下载css文件,不影响DOM树的解析,但会阻塞页面渲染
*css虽然不会直接阻塞dom树的解析过程,但如果在执行js脚本前,之前的css文件还没有加载完成,则会等待其加载完成后执行js,由于css下载较慢间接阻塞DOM解析过程
4.defer和async的区别
当浏览器碰到script脚本的时候:没有defer或async,浏览器会立即加载并执行指定的脚本
有async,加载和渲染后续文档元素的过程将和.js的加载与执行并行进行
有defer,加载后续文档元素的过程将和,js的加载并行进行,但是.js的执行要在所有元素解析完成之后,DOMContentLoaded事件触发之前完成。
5.进程和线程的几种通信方式
进程:1.管道:是内核里面的一串缓存
2.消息队列:例如:A进程给B进程发送消息,A进程把数据放在对应的消息队列后就可以正常的返回了,B进程需要的时候再进行读取数据。
消息队列是保存在内存中的消息链表,在发送数据的时候,会分成一个独立的数据单元,消息体是用户自定的数据类型,消息的发送方和接收方约定好消息体的数据类型,所以每个消息体都是固定大小的存储块,不像管道的无格式的字节流数据,注意就是,消息队列中读取了消息体的话,内核就会把这个消息体删除
3.共享内存:消息队列中的读取和写入的过程,都会有用户态和内核态之间的消息拷贝过程。共享内存的机制就是拿出一块虚拟化的地址空间来,映射到相同的物理内存中。这样这个进程写入东西,另外一个进程就可以看到了,大大提高了进程间通信的速度。
4.信号量机制:用共享内存通信方式,带来新的问题,就是如果多个进程同时修改同一个共享内存,很有可能就冲突了。为了防止多进程竞争共享资源,而造成数据错乱,所以需要保护机制,使得共享的资源,在任意时刻只能被一个进程访问。信号量就实现了这一保护机制。
信号量其实是一个整形的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间通信的数据。信号量表示资源的数量,控制信号量的方式有两种原子操作:一个是P操作,这个操作
标签:DOM,js,途虎,面试,养车,进程,解析,css,加载 From: https://www.cnblogs.com/baller-coder/p/16986245.html