2020-10-23面试题整理
程序员文章站
2022-07-03 16:42:58
一在地址栏输入敲回车时会发生什么?1非常高频的面试题:① 网络请求:后面的老师会讲解② 页面渲染:浏览器解析数据包(html文档)③ 用户交互:页面是如何渲染的呢?1.浏览器先把文档扫描,把标签代码进行翻译(不是编译)2.把各种类型的节点(12种) 按照顺序,进行实例化3.分类解析:把css里面的代码统统合并到一起 解析为一个超级大对象(css样式结构体)把节点解析为一个具有树关系的DOM树4.把css样式结构体和dom树结合成呈现...
一在地址栏输入敲回车时会发生什么?
1非常高频的面试题:
① 发起网络请求
② 页面渲染:浏览器解析数据包(html文档)
③ 用户交互:
页面是如何渲染的呢?
1.浏览器先把文档扫描,把标签代码进行翻译(不是编译)
2.把各种类型的节点(12种) 按照顺序,进行实例化
3.分类解析:
把css里面的代码统统合并到一起 解析为一个超级大对象(css样式结构体)
把节点解析为一个具有树关系的DOM树
4.把css样式结构体和dom树结合成呈现树(render tree)
呈现树中的节点拥有这个节点所有的信息
window.getComputedStyle
5.绘制引擎按照呈现树进行绘
2盒子模型
1元素的偏移量
(1)offsetParent返回作为该元素带有定位的父级元素 如果父级都没有定位则返回body
(2)offsetTop返回元素相对带有定位父元素上方的偏移
(3)offsetLeft返回元素相对带有定位父元素左边框的偏移
(4)offsetWidth返回自身包括padding 边框 内容区的宽度,返回数值不带单位
(5)offsetHeight返回自身包括padding 边框 内容区的高度,返回数值不带单位
(6)clientTop返回元素上边框(border)的大小
(7)clientLeft返回元素左边框(border)的大小
(8).clientWidth返回自身包括padding,内容区的宽度,不含边框,返回数值不带单位
(9)clientHeight返回自身包括padding,内容区的宽度,不含边框,返回数值不带单位
(10)scrollTop返回被卷去的上侧距离,返回数值不带单位
(11)scrollHeight返回自身实际的高度,不含边框,返回数值不带单位
3js执行机制
- javascript是一门单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这 一核心仍未改变。所以一切javascript版的"多线程"都是用单线程模拟出来的。
- 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
- 如果排队是因为计算量大,CPU忙不过来,倒也算了,但是很多时候CPU是闲着的,因为IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。
- JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去。
- 于是,所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
-
- 同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入Event Table并注册函数
- 当Event Table中指定的事情完成时,会将这个函数移入Event Queue。
- 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行。
- 上述过程会不断重复,也就是常说的Event Loop(事件循环)。
- 我们不禁要问了,那怎么知道主线程执行栈为空啊?js引擎存在monitoring process进程,会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数。
本文地址:https://blog.csdn.net/html_xiaojiu/article/details/109249112
上一篇: 【老九】【Java】小议转义字符
下一篇: 代码质量提升措施