最近跳槽季,刷面试,被问到的问题,答不出或觉得答的不好,底下查找资料学习下,顺便整理一下,跟大家一起学习!

一、event loop事件循环及线程问题

其实两者是有关联的。就因为JS是单线程,所以所有的任务就得排队执行,js代码始终在一个线程上执行,此线程被称为js引擎线程。(为什么单线程,举别人举的例子:假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?),前一个任务结束,才会执行后一个任务。

说到任务,也分同步和异步任务。所有的同步任务在主线程排队执行,形成一个执行栈。异步任务会被主线程挂起,不会进入主线程,而是进入消息队列,也叫任务队列或事件队列。队列都是先进先出,最先进入的任务最先执行。同时,异步任务需要指定回调函数,一个异步过程包括两个要素:注册函数和回调函数,其中注册函数用来发起异步过程,回调函数用来处理结果。

js是单线程而浏览器是多线程

一下一张来自网上的图,大致有以下线程

1、ui渲染线程主要用来渲染页面。(js可以操作dom,影响渲染,所以js引擎线程和UI线程是互斥的。js执行时会阻塞页面的渲染。)

2、js引擎线程,即上面说的单线程

异步任务需要浏览器执行事件触发线程或定时器触发线程或http请求线程,所以异步是浏览器的两个或者两个以上线程共同完成的。

了解了以上,我们来说下event loop事件循环

详细步骤如下:

  1、所有同步任务都在主线程上执行,形成一个执行栈

  2、主线程之外,还存在一个"消息队列"。只要异步操作执行完成,就到消息队列中排队

  3、一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取消息队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行

  4、主线程不断重复上面的第三步

由于主线程不断的重复获得消息、执行消息、再取消息、再执行。所以,这种机制被称为事件循环

实例说明:

console.log(1)
div.onclick = () => {console.log('click')}
console.log(2)
setTimeout(() => {console.log('timeout')},1000)

1、执行第一行代码,第一行是一个同步任务,控制台显示1

2、执行第二行代码,第二行是一个异步任务,发起异步请求,可以在任意时刻执行鼠标点击的异步操作

3、执行第三行代码,第三行是一个同步任务,控制台显示2

4、执行第四行代码,第四行是一个异步任务,发起异步请求,1s后执行定时器任务

5、假设从执行第四行代码的1s内,执行了鼠标点击,则鼠标任务在消息队列中排到首位

6、从执行第四行代码1s后,定时器任务到消息队列中排到第二位

7、现在同步任务已经执行完毕,则从消息队列中按照次序把异步任务放到执行栈中执行

8、则控制台依次显示'click‘、'timeout'

9、过了一段时间后,又执行了一次鼠标点击,由于消息队列中已经空了,则鼠标任务在消息队列中排到首位

10、同步任务执行完毕后,再从消息队列中按照次序把异步任务放到执行栈中执行

11、 则控制台显示'click'

二、this指向问题

this 指的是当前对象,如果在全局范围内使用this,则指代当前页面window;如果在函数中使用this,则this指代什么是根据当前函数是在什么对象上调用。函数中的this是在运行时候决定的,而不是函数定义时。可以使用call和apply改变函数中this的具体指向。

function dog(){console.log(this.name);
}
var name = "哈士奇";
dog();  //哈士奇var o = {name: "金毛"
};
dog.call(o); //金毛

三、浏览器内核

浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。通常最开始渲染引擎和 JS 引擎并没有区分的很明确,后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎。常见的浏览器内核有:Trident(IE内核)、Gecko(Firefox 内核)、谷歌Blink内核、weblit内核

四、margin-top/top的百分比是相对于父元素的宽度计算的。

五、弹性布局的了解

六、闭包

转载于:https://www.cnblogs.com/wuzhiquan/p/10381173.html

整理最近面试问道的问题相关推荐

  1. 测试面试问道MySQL,面试---mysql相关

    前言:在2019年的年末,我又再一次的踏上了面试的漫漫征途.每次的面试准备都是对自己学习的一次积累.目前已经尘埃落定,将自己面试准备的东西做一次整理. 面试准备时长:1.5个月 mysql基本上每次面 ...

  2. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力 希望大家多补充或回答

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 主 题:  发布本 ...

  3. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力!希望大家多补充或回答!

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 主 题: ...

  4. 拿大厂机器学习岗 offer,吐血整理的面试秘籍!

    2012年起,AI越发火热,各大公司开始陆续招AI方面的人才,很多同学也会从网上找各种各样的机器学习笔试题.面试题,但和数据结构方面的题不同,AI的题网上极少.如今,人工智能火爆全球并快速切入各个领域 ...

  5. Java架构师面试网整理-JVM面试专题(共8题含答案)

    Java架构师面试网总结了JVM一些经典面试题,分享出大致的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新. 所有面试题均由小编从各个渠道收集整理,整理不易,点个关注吧, ...

  6. 熬夜整理Java面试笔试题,你还看不懂吗?

    前言 说真的,在 Java 使用最多的集合类中,List 绝对占有一席之地的,它和 Map 一样适用于很多场景,非常方便我们的日常开发,毕竟存储一个列表的需求随处可见.尽管如此,还是有很多同学没有弄明 ...

  7. 安卓初中级开发基础知识整理(面试自用)

    文章目录 前言 一.Android之四大组件.六大布局.五大存储 二.安卓线程原理 三.安卓开源框架 三.安卓架构MVC.MVP.MVVM 四.设计模式 面试题整理 1.Activity A 跳转到 ...

  8. 传智播客Java面试宝典 | 张老师尽心整理的面试宝典大全,面试阿里腾讯不成问题。西边人西说测试

    提示:本大全每半月更新一次,请持续保持关注!谢谢! 索取方式:头条或公众号中回复[面试] 从享受生活的角度上来说:"程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员, ...

  9. 2021字节面经最新整理: 面试真经/思维导图/学习笔记!火遍全网

    前言 为什么要面试字节跳动? 近两年是中国互联网企业组织架构升级的大年,阿里.腾讯.小米.快手等知名互联网企业都进行了相应调整.2020年3月12日,字节跳动成立八周年之际,宣布组织全面升级,而这一消 ...

最新文章

  1. excel最常用的八个函数_Excel最常用的几个函数,我都帮你整理好了!
  2. Oracle_11g_R2安装手册(图文教程)
  3. SpringBoot中yml文件报错:org.yaml.snakeyaml.scanner.ScannerException:mapping values are not allowe here...
  4. 给初学者们讲解人工神经网络(ANN)
  5. 基坑计算理论m法弹性支点法_人工冲孔轻型井点在基坑降水工程中的应用
  6. 双11特刊 | 云数据库RDS如何顺滑应对流量洪峰
  7. 大数据自学——Spark
  8. python更新_MacOS升级python版本
  9. Python+django网页设计入门(6):文件上传与数据导入
  10. LeetCode 516 最长回文子串
  11. java程序如何执行jar包_java程序如何打包成可执行jar包?
  12. android 关闭jack_安卓编译 Jack server 错误问题解决办法
  13. mysql数据库下载及安装教程
  14. 中国省,市,区 json数据
  15. 国产CAD_谁说国产系统没有CAD软件可以用?
  16. 新年新气象,重新出发
  17. 修改el-table表头高度 表格高度 行鼠标悬停颜色
  18. NPM install报错certificate has expired
  19. 你居然不会狄杰斯特算法?惊了!
  20. 九龙证券|通信巨头火了!地产板块异动拉升,龙头获主力资金追捧

热门文章

  1. WPS 代码域 修改默认代码域 使目录页码样式和页脚样式不同。
  2. 编程世界的脚手架(Scaffolding)是啥意思
  3. 2021年高考成绩查询宜春昌黎,2021年宜春中考录取批次
  4. 手怎么画?怎样才能画好人物的手部?
  5. 正弦波振荡电路由哪几部分组成?各部分有什么作用?
  6. 牛客面试题ACM模式js
  7. 浅析Activity启动模式
  8. VS终结者原理及思路简要说明
  9. 世界上最好的语言是哪个?
  10. Linux——什么是环境变量?