面试题-浏览器知识点和js (二)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 面试题-浏览器知识点和js

20 异步任务有哪些? ok


1.setTimeOut、setInterval


2.DOM 事件


3.Promise


4.ajax


21. 说一说你对Cookie localStorage sessionStorage ok


Cookie 的缺点:大小,影响性能,安全缺陷


1.Cookie 的体积上限只有4KB,只能用来存储少量的信息。


2.影响性能,不管域名下的某个地址是否需要Cookie,请求都会带上完整的Cookie,请求数量增加,会造成巨大的浪费。


3.安全缺陷,Cookie以纯文本的形式在浏览器和服务器中传递,很容易被非法用户获取,

当HTTPOnly为false时,Cookie信息可以直接通过JS脚本读取。


localStorage:理论上永久有效的,除非主动清除。4.98MB(不同浏览器情况不同,safari 2.49M)


保存在客户端,不与服务端交互。节省网络流量


sessionStorage


仅在当前网页会话下有效,关闭页面或浏览器后会被清除。 4.98MB.(部分浏览器没有限制)


ps==>localStorage其实存储的都是字符串,如果是存储对象需要调用JSON的stringify方法,


在使用的时候用JSON.parse来解析成对象。


23. 谈一谈你对XSS攻击理解?或者 什么是 XSS 攻击? ok


XSS 全称是 Cross Site Scripting ,翻译过来就是“跨站脚本”。


XSS是指黑客往 HTML 文件中注入恶意脚本,


用户在浏览页面时利用注入的恶意脚本对用户实施攻击的一种手段。


最开始的时候,这种攻击是通过跨域来实现的,所以叫“跨域脚本”。


24. 能不能说一说CSRF攻击


CSRF即跨站请求伪造,黑客诱导用户点击链接,打开黑客的网站,


然后黑客利用用户「目前的登录状态」发起跨站请求。


举个例子, 你在某个论坛点击了黑客精心挑选的小姐姐图片,你点击后,进入了一个新的页面。


那么恭喜你,你可能就被攻击了)


列举如下


<img src="https://xxx.com/info?user=hhh&count=100">


进入页面后自动发送 get 请求,值得注意的是,


这个请求会自动带上关于 xxx.com 的 cookie 信息(这里是假定你已经在 xxx.com 中登录过)。


假如服务器端没有相应的验证机制,它可能认为发请求的是一个正常的用户,


因为携带了相应的 cookie,然后进行相应的各种操作,可以是转账汇款以及其他的恶意操作。


28. DOMContentLoaded 与 load 的区别 ?


DOMContentLoaded事件的触发时机:仅当DOM解析完成后,不包括样式表,图片等资源。


onload 事件触发时机:页面上所有的 DOM,样式表,脚本,图片等资源已经加载完毕。


那么也就是先DOMContentLoaded 实行时机 > load.


那么在Jquery中, document.read(function(){ })监听的就是DOMContentLoaded事件。


使用(document).load(callback)监听的就是load事件。


29. 什么是DOM节点


DOM,即文档对象模型(Document Object Model),W3C 制定的标准规范,


是一种处理 HTML 和 XML 文件的标准 API。


它把文档作为一个树形结构,树的每个结点表示了一个 HTML标签或标签内的文本项。


将 HTML 或 XML 文档转化为 DOM 树的过程称为解析(parse)。


30. 你对addEventListener 来注册事件的理解 ?


我们一般使用 addEventListener 来注册事件,它接受三个参数:


第1个参数:处理的事件名称,如点击事件 click;


第2个参数:事件处理程序,要绑定的函数体;


第3个参数:可以是布尔值,也可以是对象


当第3个参数是布尔值时,true 则作为捕获事件处理,false 则作为冒泡事件处理(默认)。


第三个参数是对象时,有这几个属性:


capture:布尔值,和第三个参数作为布尔值时作用一样


once:布尔值,值为 true 表示该回调只会调用一次,调用后会移除监听


passive:布尔值,值为 true表示永远不会调用 preventDefault.


[如果`listener`仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告]


一般来说,我们可以通过使用 stopPropagation 来阻止事件的进一步传播,即阻止事件冒泡。


32. onclick 与addEventListener的区别


区别 1==>


onclick:就是说相同的事件绑定同一个元素会出现覆盖;


addEventListener:进行多次绑定相同的事件都能运行。不会出现事件覆盖


区别 2==> addEventListener对任何DOM都是有效的。


而onclick仅限于HTML,像br标签使用onclick就是失效。


区别 3==>addEventListener可以控制listener的触发阶段,(捕获/冒泡)。


区别 4==>onclick事件在同一时间只能指向唯一对象


Content [kang 腾 t] 内容、目录、满意


Loaded [ləʊ dɪ d]


33. HTTP 与 HTTPS 的区别


1、HTTP 信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。


3、HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,HTTP是80,HTTPS是443。


4、HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密、身份认证的网络协议,比 HTTP 协议安全。


(无状态是说:数据包的发送、传输和接收都是相互独立的。


无连接是指:通信双方都不长久的维持对方的任何信息。)


1.浏览器的主要组成部分是什么?ok


1.用户界面:包括地址栏、前进/后退按钮、书签菜单等


2.浏览器引擎:在用户界面和呈现引擎之间传送指令。


3.呈现引擎 :负责显示请求的内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。


4.网络 :用于网络调用,比如 HTTP 请求。其接口与平台无关,并为所有平台提供底层实现


5.JavaScript解释器:用于解析和执行 JavaScript 代码。


6.数据存储:浏览器需要在硬盘上保存各种数据


2.浏览器是如何渲染UI的? ok


1.浏览器获取HTML文件,然后对文件进行解析,形成DOM Tree.


2.与此同时,进行CSS解析,生成Style Rules


3.接着将DOM Tree与Style Rules合成为 Render Tree


4.接着进入布局(Layout)阶段,为每个节点分配一个应出现在屏幕上的确切坐标。


5.随后调用GPU进行绘制(Paint),遍历Render Tree的节点,并将元素呈现出来


3.浏览器如何解析css选择器?ok


浏览器会『从右往左』解析CSS选择器。


题外话:(1)若从左向右的匹配,(2) 如果从右至左的匹配:


后者匹配性能更好,


是因为从右向左的匹配在第一步就筛选掉了大量的不符合条件的最右节点(叶子节点);


而从左向右的匹配规则的性能都浪费在了失败的查找上面。


4.DOM Tree是如何构建的?()


转码: 浏览器将接收到的二进制数据,按照指定编码格式,转化为HTML字符串


生成Tokens: 浏览器会将HTML字符串,解析成Tokens.


构建Nodes: 对节点(Node)添加特定的属性,通过指针确定节点(Node)的父、子、兄弟关系


生成DOM Tree: 通过node包含的指针信息构建出DOM Tree


巧计:转码-生成Tokens-构建-生成


4. CSS加载会造成阻塞吗 ? ok


CSS不会阻塞DOM解析,但会阻塞DOM渲染。


并不会阻塞JS文件下载,CSS会阻塞JS执行,


4.1 为什么CSS不会阻塞DOM解析,但会阻塞DOM渲染? ok


DOM 和 CSSOM通常是并行构建的,所以「CSS 加载不会阻塞 DOM 的解析」。


然而由于Render Tree 是依赖DOM Tree和 CSSOM Tree的,


所以它必须等到两者都加载完毕后,完成相应的构建。才开始渲染,因此,「CSS加载会阻塞DOM渲染」


CSSOM==》css Object Model [css对象模型]]


5. CSSOM[css对象模型]作用 ? ok


第一个是提供给 JavaScript 操作样式表的能力


第二个是为布局树的合成提供基础的样式信息


6.GUI渲染线程与 JavaScript 引擎(线程)为互斥 ok


我们都知道JavaScript 是可操纵 DOM 和 css 样式 的,


如果在修改这些元素属性同时渲染界面(即 JavaScript 线程和 UI 线程同时运行),


那么渲染线程前后获得的元素数据就可能不一致了。


因此为了防止渲染出现不可预期的结果,


浏览器设置 「GUI渲染线程与 JavaScript 引擎为互斥」的关系。


7 为什么有时候JS需要等到CSS的下载呢? Ok


如果脚本的内容是获取元素的样式,宽高等CSS属性


也就是依赖于CSS,因而只好等前面所有的样式下载完后,再执行JS。


34.为什么 0.1+0.1 !== 0.3


在做算术运算时,JS 会先把十进制数转换成二进制数后再计算,


0.1 和 0.2 的二进制数是个无限循环小数。


JS 中表示一个数字只有 64 位,其中精度位(有效数位)只有 52 位,


所以当出现无限循环小数时,会通过 0 舍 1 入 的规则截取前 52 位(类似十进制的四舍五入),


这样导致了精度位的丢失。 所以运算结果不等于 0.3了


35. js表示数字使用64位分别为:


符号位1位:不参与计算,0表示正数;1表示负数;


指数位11位:有个基准值(01111111111),小于这个数时指数位就是负数。


因为指数位没有符号位,而科学计数法的指数位可以为负数。转换的时候要减去这个基准值;


有效位数 52 位:有效数字隐藏了1位,因为以 0 开头没有意义;


36. 什么是vite? 你对vite的理解?


是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:


一个开发服务器,它基于原生 ES 模块。        


一套构建指令,它使用 Rollup 打包你的代码。


37. 为什么选择vite?


当我们开始构建越来越大的应用时,


需要处理的 JavaScript 代码量会呈指数级增长。


项目会包含很多的模块。几十个或者几百个。


这个时候我们会遇见性能瓶颈


使用 JavaScript 开发的工具通常需要很长时间(甚至是几分钟!)才能启动开发服务器,


文件修改后的效果也需要几秒钟才能在浏览器中反映出来。


Vite就是为了就解决这个问题


38. vite的优势?


1==>速度快: Vite 将会使用 esbuild 预构建依赖。Esbuild 使用 Go 编写,


并且比 JavaScript 编写的打包器【预构建依赖】快 10-100 倍。


2==>按需提供源码: Vite只需要在浏览器请求源码时,


进行转换并按需提供源码。


根据情景动态导入代码。


40. npm与yarn的区别


1.npm是按照队列执行每个package。


也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。


而yarn是同步执行所有任务,提高了性能。  


2.使用yarn安装过一个软件包,再次用yarn安装时,


从缓存中获取,就不会像npm那样再从网络下载了。


package  [pai k a g]   包


41. package.json中~和^的区别


波浪号~指定版本:比如  "core-js": "~3.6.5",  


   表示安装3.6.x的最新版本(不低于3.6.5),


   但是不安装3.7.x,也就是说安装时不改变大版本号和次要版本号  


^指定版本:比如 "antd": "^3.1.4",


表示安装3.1.4及以上的版本,但是不安装4.0.0,


也就是说安装时不改变大版本号。


形象理解:~向水波一样平静,不改变大版本号和次要版本号.


^ 有冲锋的意思,不改变大版本号


相关文章
|
17天前
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
在浏览器执行js脚本的两种方式
|
16天前
|
JSON JavaScript 前端开发
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
本文介绍了JSONP的工作原理及其在解决跨域请求中的应用。首先解释了同源策略的概念,然后通过多个示例详细阐述了JSONP如何通过动态解释服务端返回的JavaScript脚本来实现跨域数据交互。文章还探讨了使用jQuery的`$.ajax`方法封装JSONP请求的方式,并提供了具体的代码示例。最后,通过一个更复杂的示例展示了如何处理JSON格式的响应数据。
28 2
[JS]面试官:你的简历上写着熟悉jsonp,那你说说它的底层逻辑是怎样的?
|
14天前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
|
21天前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
135 9
|
18天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
23天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
60 1
|
29天前
|
存储 缓存 JSON
vue2知识点:浏览器本地缓存
vue2知识点:浏览器本地缓存
42 2
|
1月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
105 0
|
1月前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
1月前
|
JavaScript 前端开发 开发者
JavaScript 浏览器控制台的使用
JavaScript 浏览器控制台的使用
20 0
下一篇
无影云桌面