1、 什么是重绘(Repaint)和回流(Reflow)?

哪些动作可能会导致重绘(Repaint)和回流(Reflow)的发生?

重绘(Repaint)和回流(Reflow)和Event loop的关系?

如何减少重绘(Repaint)和回流(Reflow)?

答: 重绘和回流是渲染步骤中的一小节,但是这两个步骤对于性能影响很大。 1. 重绘是当节点需要更改外观而不会影响布局的,比如改变 color 就叫称为重绘 2. 回流是布局或者几何属性需要改变就称为回流。

回流必定会发生重绘,重绘不一定会引发回流。回流所需的成本比重绘高的多,改变深层次的节点很可能导致父节点的一系列回流。 所以以下几个动作可能会导致性能问题:

  • 改变 window 大小
  • 改变字体
  • 添加或删除样式
  • 文字改变
  • 定位或者浮动
  • 盒模型

很多人不知道的是,重绘和回流其实和 Event loop 有关。

  • 当 Event loop 执行完 Microtasks 后,会判断 document 是否需要更新。因为浏览器是 60Hz 的刷新率,每 16ms 才会更新一次。
  • 然后判断是否有 resize 或者 scroll ,有的话会去触发事件,所以 resize 和 scroll 事件也是至少 16ms 才会触发一次,并且自带节流功能。
  • 判断是否触发了 media query
  • 更新动画并且发送事件
  • 判断是否有全屏操作事件
  • 执行 requestAnimationFrame 回调
  • 执行 IntersectionObserver 回调,该方法用于判断元素是否可见,可以用于懒加载上,但是兼容性不好
  • 更新界面
  • 以上就是一帧中可能会做的事情。如果在一帧中有空闲时间,就会去执行 requestIdleCallback 回调。

少重绘和回流 使用 translate 替代 top

  • 使用 visibility 替换 display: none ,因为前者只会引起重绘,后者会引发回流(改变了布局)
  • 把 DOM 离线后修改,比如:先把 DOM 给 display:none (有一次 Reflow),然后你修改100次,然后再把它显示出来
  • 不要把 DOM 结点的属性值放在一个循环里当成循环里的变量

for(let i = 0; i < 1000; i++) { // 获取 offsetTop 会导致回流,因为需要去获取正确的值 console.log(document.querySelector('.test').style.offsetTop) }

不要使用 table 布局,可能很小的一个小改动会造成整个 table 的重新布局

  • 动画实现的速度的选择,动画速度越快,回流次数越多,也可以选择使用 requestAnimationFrame
  • CSS 选择符从右往左匹配查找,避免 DOM 深度过深
  • 将频繁运行的动画变为图层,图层能够阻止该节点回流影响别的元素。比如对于 video 标签,浏览器会自动将该节点变为图层。

2、 https抓包的原理是什么?平时你用什么工具?如何抓包?

3、什么是无头浏览器?它的作用是什么?

4、请说一下V8下的垃圾回收机制

答:V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制。因此,V8 将内存(堆)分为新生代和老生代两部分。 新生代算法 新生代中的对象一般存活时间较短,使用 Scavenge GC 算法。 在新生代空间中,内存空间分为两部分,分别为 From 空间和 To 空间。在这两个空间中,必定有一个空间是使用的,另一个空间是空闲的。新分配的对象会被放入 From 空间中,当 From 空间被占满时,新生代 GC 就会启动了。算法会检查 From 空间中存活的对象并复制到 To 空间中,如果有失活的对象就会销毁。当复制完成后将 From 空间和 To 空间互换,这样 GC 就结束了。 #老生代算法

老生代算法 老生代中的对象一般存活时间较长且数量也多,使用了两个算法,分别是标记清除算法和标记压缩算法。 在讲算法前,先来说下什么情况下对象会出现在老生代空间中: 新生代中的对象是否已经经历过一次 Scavenge 算法,如果经历过的话,会将对象从新生代空间移到老生代空间中。 To 空间的对象占比大小超过 25 %。在这种情况下,为了不影响到内存分配,会将对象从新生代空间移到老生代空间中。 老生代中的空间很复杂,有如下几个空间

    enum AllocationSpace {
复制代码

// TODO(v8:7464): Actually map this space's memory as read-only. RO_SPACE, // 不变的对象空间 NEW_SPACE, // 新生代用于 GC 复制算法的空间 OLD_SPACE, // 老生代常驻对象空间 CODE_SPACE, // 老生代代码对象空间 MAP_SPACE, // 老生代 map 对象 LO_SPACE, // 老生代大空间对象 NEW_LO_SPACE, // 新生代大空间对象

FIRST_SPACE = RO_SPACE, LAST_SPACE = NEW_LO_SPACE, FIRST_GROWABLE_PAGED_SPACE = OLD_SPACE, LAST_GROWABLE_PAGED_SPACE = MAP_SPACE }; 在老生代中,以下情况会先启动标记清除算法:

  • 某一个空间没有分块的时候
  • 空间中被对象超过一定限制
  • 空间不能保证新生代中的对象移动到老生代中

在这个阶段中,会遍历堆中所有的对象,然后标记活的对象,在标记完成后,销毁所有没有被标记的对象。在标记大型对内存时,可能需要几百毫秒才能完成一次标记。这就会导致一些性能上的问题。为了解决这个问题,2011 年,V8 从 stop-the-world 标记切换到增量标志。在增量标记期间,GC 将标记工作分解为更小的模块,可以让 JS 应用逻辑在模块间隙执行一会,从而不至于让应用出现停顿情况。但在 2018 年,GC 技术又有了一个重大突破,这项技术名为并发标记。该技术可以让 GC 扫描和标记对象时,同时允许 JS 运行,你可以点击 该博客 详细阅读。

清除对象后会造成堆内存出现碎片的情况,当碎片超过一定限制后会启动压缩算法。在压缩过程中,将活的对象像一端移动,直到所有对象都移动完成然后清理掉不需要的内存。

5、线性顺序存储结构和链式存储结构有什么区别?以及优缺点。

答: 顺序存储结构和链式存储结构的区别 链表存储结构的内存地址不一定是连续的,但顺序存储结构的内存地址一定是连续的; 链式存储适用于在较频繁地插入、删除、更新元素时,而顺序存储结构适用于频繁查询时使用。

顺序存储结构和链式存储结构的优缺点: 空间上 顺序比链式节约空间。是因为链式结构每一个节点都有一个指针存储域。 存储操作上: 顺序支持随机存取,方便操作 插入和删除上: 链式的要比顺序的方便(因为插入的话顺序表也很方便,问题是顺序表的插入要执行更大的空间复杂度,包括一个从表头索引以及索引后的元素后移,而链表是索引后,插入就完成了) 例如:当你在字典中查询一个字母j的时候,你可以选择两种方式,第一,顺序查询,从第一页依次查找直到查询到j。第二,索引查询,从字典的索引中,直接查出j的页数,直接找页数,或许是比顺序查询最快的。

转载于:https://juejin.im/post/5b911a635188255c652d1c3b

八月面试题(2) 2018-9-6相关推荐

  1. Android 面试题总结2018(一)

    了解了10多家公司的Android面试题,无非都是问上面这些问题. 聘请中高级的安卓开发会往深的去问,并且会问一延伸二. 以下我先提出几点重点,感兴趣的去了解下. 参考链接:https://blog. ...

  2. 第二届全国计算机安全技能比赛,第2届网络安全技能大赛试题(2018年).PDF

    第2届网络安全技能大赛试题(2018年) 第2 届网络安全技能大赛试题(2018 年) 一.选择题(每题1 分,共50 分) 1.网络的链路层中,以( )作为数据的传输单位. A. 比特 B.数据帧 ...

  3. 浦发银行计算机笔试题库,2018浦发银行校园招聘笔试试题库

    原标题:2018浦发银行校园招聘笔试试题库 银行招聘网(http://www.jinrongren.net/)提醒:2018浦发银行校园招聘公告已经发布啦,共招聘2152人,公告中明确表明柜员岗专科以 ...

  4. 2018安徽省计算机一级试题答案,2018年计算机等一级考试试题100题及参考答案.docx...

    2018年计算机等一级考试试题100题及参考答案.docx 文档编号:395397 文档页数:14 上传时间: 2018-09-03 文档级别:精品资源 文档类型:docx 文档大小:28.84KB ...

  5. 2018年4月计算机组成原理试题,全国2018年4月自考(02318)计算机组成原理试题及答案.pdf...

    绝 密 ★ 考 试 结 束 前 全 国 2018 年 4 月 高 等 教 育 自 学 考 试 计 算 机 组 成 原理 试 题 课 程 代 码 :02318 请考生按规定用笔将所有试题的答案涂.写在答 ...

  6. android 笔试题大全,2018年Android面试题大全

    许多学习Android开发的同学毕业了,大家要开始面临着工作的难题了,最火软件小编准备了一些非常不错的android面试题目,是word文档(doc格式),希望2018年android面试题目及其答案 ...

  7. 2018年单招考试计算机试题答案,2018年单招语文模拟试题及答案.doc

    文档介绍: 2018年单招语文模拟试题及答案,2018年单招语文试题,2016年体育单招语文,2018年单招考试语文卷纸,2017年体育单招语文,2018年高职单招语文,2015年江苏省单招语文,20 ...

  8. 对口升学2018计算机试题,河南省2018年计算机类基础课 对口升学考试题

    <河南省2018年计算机类基础课 对口升学考试题>由会员分享,可在线阅读,更多相关<河南省2018年计算机类基础课 对口升学考试题(6页珍藏版)>请在人人文库网上搜索. 1.计 ...

  9. 2018全国计算机网络竞赛试题,全国2018年10月04741计算机网络原理真题以及答案解析...

    <全国2018年10月04741计算机网络原理真题以及答案解析>由会员分享,可在线阅读,更多相关<全国2018年10月04741计算机网络原理真题以及答案解析(8页珍藏版)>请 ...

  10. 山东省2018春考计算机网页试题,山东省2018年春季高考英语试题(精校版)

    山东省2018年普通高校招生(春季)考试 英语试题 本试卷分卷一(选择题)和卷二(非选择题)两部分,满分80分,考试时间60分钟,考生请在答题卡上答题,考试结束后,请将本试卷和答题卡一并交回. 卷一( ...

最新文章

  1. zabbix学习笔记(5)
  2. 【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
  3. imwrite()函数
  4. 【Linux】一步一步学Linux——whoami命令(96)
  5. No module named yum错误的解决办法
  6. 【转载】什么是C++虚函数、虚函数的作用和使用方法
  7. mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数
  8. C++ 对象的初始化和清理
  9. python 贴吧自动回复_利用Python实现微信自动回复!我打游戏再也不怕女朋友发信息了...
  10. C#中委托和事件的区别
  11. duilib消息类型
  12. Axure 元件 模板 MES系统 全套(带下载地址)
  13. 低压电力线宽带载波通信互联互通技术规范第4-2部分:数据链路层通信协议
  14. ppt插入html(用office而不是wps)
  15. 【软件工程】——详细设计说明书
  16. 将文件按照文件名分类到文件夹
  17. HTML语言标记详解
  18. Linux 运维职业困惑?给你史上最全互联网 Linux 工作规划!
  19. 回调是什么?我对编程里回调函数callback的理解
  20. 这些免费的IT自学网站,你用过几个

热门文章

  1. 如何通过c语言获取ipv6邻居表,急求在vc++6.0中获取IPV6地址的方法,高手请进,谢谢!!...
  2. pandas describe函数_SQL和Pandas同时掉到河里,你先救谁?
  3. imu与gps之间的时间戳_一个时间戳精度问题,引发了一个MySQL血案
  4. greenplum 查询出来的数字加减日期_mysql与时间有关的查询
  5. sprintf函数的格式化字符串_尚学堂百战程序员:Python 字符串处理
  6. GridSearchCV与RandomizedSearchCV
  7. 小波变换输出变量详解
  8. mesh和wifi中继的区别_什么是MESH WIFI?通俗易懂告诉你为什么需要它
  9. 小米云能导入到华为云吗_小米11值得买吗?小米11和华为Mate40、iPhone 12相比,哪款性价比最高?...
  10. python raise函数_Python raise用法