面试题-未处理的 (下)

简介: 面试题-未处理的

说说浏览器的内核?


浏览器名称                     内核


谷歌浏览器(chrome)             blink


欧朋浏览器(Opera)              blink


火狐浏览器(firefox)            Gecko


苹果浏览器(safari)            webkit


ps:Blink其实是Webkit的分支


你对浏览器内核的理解?


浏览器内核也就是我们说的渲染引擎。


负责对网页语法进行解释。


如将HTML,JavaScript渲染(显示)为网页。


渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。


不同的浏览器内核对网页编写语法的解释不同


简单介绍一下 V8 引擎的垃圾回收机制 高级


v8 引擎将内存分为了新生代和老生代。


新创建的对象或者只经历过一次的垃圾回收的对象被称为新生代。


经历过多次垃圾回收的对象被称为老生代。


新生的对象容易早死,老生代活得更久


新生代被分为 From 和 To 两个空间。


To 一般是闲置的,当 From 空间满了的时候会执行 Scavenge 算法进行垃圾回收。


这个算法分为三步:


1.首先检查 From 空间的存活对象,


如果判断这个存活对象是否满足晋升到老生代的条件,


满足条件则晋升到老生代,如果不满足条件则移动 To 空间。


2.如果对象不存活,则释放对象的空间。


3.最后将 From 空间和 To 空间角色进行交换


V8 新生代对象晋升到老生代有两个条件:


1.第一个是判断对象否已经经过一次 Scavenge 回收。


若经历过,则将该对象从 From 空间复制到老生代中;


若没有经历,则复制到 To 空间。


2.第二个是 To 空间的内存使用占比是否超过限制。


当对象从 From 空间复制到 To 空间时,若 To 空间使用超过 25%,


则对象直接晋升到老生代中。


设置 25% 的原因主要是因为算法结束后,


两个空间结束后会交换位置,如果 To 空间的内存太小,会影响后续的内存分配。


ps:老生代采用了标记清除法和标记压缩法。


参考的地址:https://juejin.cn/post/6844904200917221389#heading-43


ECMAScript 是什么?


ECMAScript 是编写脚本语言的标准,


这意味着JavaScript遵循ECMAScript的标准规范。


ECMAScript 和 Javascript,本质上都跟一门语言有关,一个是语言的约束条件,一个是语言本身的名字。


只不过发明JavaScript的那个人(网景公司),把东西交给了ECMA,


让ECMA规定一下JavaScript的标准,所以这样一个神奇的东西诞生了,这个东西的名称就叫做ECMAScript。


javaScript = ECMAScript + DOM + BOM(自认为是一种广义的JavaScript)


ECMAScript说什么JavaScript就得做什么!


JavaScript(狭义的JavaScript)做什么都要问问ECMAScript我能不能这样干!如果不能我就错了!能我就是对的!


——突然感觉JavaScript好没有尊严,为啥要搞个人出来约束自己,


那个人被创造出来也好委屈,自己被创造出来完全是因为要约束JavaScript。


面试题之CSS盒模型


css


盒模型


盒模型有两种:标准盒模型和ie盒模型


标准模型 (宽、高)= content 的宽高


ie模型(宽、高)= content 的宽高 + padding 的宽高 + border 的宽高


CSS如何设置这两种模型


标准模型 box-sizing: content-box;


ie 模型 box-sizing: border-box;


浏览器默认是标准盒模型


JS如何设置获取盒模型对应的宽和高


1、内联样式的宽和高:dom.style.width/height


2、渲染后的结果,只有ie支持 : dom.currentStyle.width/height


3、所有浏览器支持,和第二个原理一样,通用性更好些:

window.getComputedStyle(dom).width/height


4、计算一个元素的决定位置(根据视窗-左顶点):

dom.getBoundingClientRect().width/height


BFC的基本概念


BFC就是“块级格式化上下文”的意思.


盒子与盒子之间彼此独立,互不影响。


创建BFC的方式


1.float 除了none以外的值


2.overflow 除了visible 以外的值(hidden,auto,scroll )


3.display (table-cell,table-caption,inline-block, flex, inline-flex)


4.position值为(absolute,fixed)


在以上的情况里可以创建BFC。


BFC的使用场景


1.解决margin叠加问题


2.用于清除浮动,计算BFC高度.


flex布局、两/三栏布局、水平/垂直居中;


清除浮动;


css3动画、H5新特性。2

相关文章
|
8月前
|
Java 程序员 测试技术
我有一个朋友写出了17种触发NPE的代码!避免这些坑
我有一个朋友,写代码的时候常常遭到NPE背刺,痛定思痛,总结了NPE出没的17个场景,哪一个你还没有遇到过?
|
1月前
|
Arthas Java 应用服务中间件
我的程序突然罢工了|深入探究HSF调用异常,从死锁到活锁的全面分析与解决
本文详细记录了作者在处理HSF调用异常问题的过程中,从初步怀疑死锁到最终发现并解决活锁问题的全过程。
403 15
|
3月前
|
存储 安全 Java
如何避免`ArrayStoreException`异常?
`ArrayStoreException`是在Java中尝试将错误类型的对象存储到泛型数组时抛出的异常。要避免此异常,需确保向数组添加的对象类型与数组声明的类型一致,使用泛型和类型检查,以及在运行时进行类型安全的转换和验证。
52 6
|
4月前
|
消息中间件 前端开发 NoSQL
面试官:线程池遇到未处理的异常会崩溃吗?
面试官:线程池遇到未处理的异常会崩溃吗?
91 3
面试官:线程池遇到未处理的异常会崩溃吗?
|
5月前
|
安全 测试技术 数据库连接
如何避免 C# 中的异常
【8月更文挑战第27天】
65 2
|
5月前
|
Java
线程池中线程抛了异常,该如何处理?
【8月更文挑战第27天】在Java多线程编程中,线程池(ThreadPool)是一种常用的并发处理工具,它能够有效地管理线程的生命周期,提高资源利用率,并简化并发编程的复杂性。然而,当线程池中的线程在执行任务时抛出异常,如果不妥善处理,这些异常可能会导致程序出现未预料的行为,甚至崩溃。因此,了解并掌握线程池异常处理机制至关重要。
580 0
|
5月前
|
Java 调度
【多线程面试题 四】、 线程是否可以重复启动,会有什么后果?
线程不能被重复启动,一旦调用start()方法后,线程将从新建状态进入就绪状态,再次调用start()会抛出IllegalThreadStateException异常。
|
8月前
|
编解码 网络协议
Kitex踩坑记录,Kitex超时控制问题
Kitex踩坑记录,Kitex超时控制问题
Kitex踩坑记录,Kitex超时控制问题
|
消息中间件 存储 Arthas
MQ-消息堆积-JDK Bug导致线程阻塞案例分析
一个JDK BUG导致系统LOAD高的案例分析
195 0
这一篇让你知道怎么处理异常
这一篇让你知道怎么处理异常
这一篇让你知道怎么处理异常