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

简介: 面试题-浏览器知识点和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,


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


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


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


相关文章
|
4月前
|
缓存 NoSQL Java
校招 Java 面试常见知识点及实战案例全解析
本文全面解析了Java校招面试中的常见知识点,涵盖Java新特性(如Lambda表达式、、Optional类)、集合框架高级应用(线程安全集合、Map性能优化)、多线程与并发编程(线程池配置)、JVM性能调优(内存溢出排查、垃圾回收器选择)、Spring与微服务实战(Spring Boot自动配置)、数据库与ORM框架(MyBatis高级用法、索引优化)、分布式系统(分布式事务、缓存应用)、性能优化(接口优化、高并发限流)、单元测试与代码质量(JUnit 5、Mockito、JaCoCo)以及项目实战案例(电商秒杀系统、社交消息推送)。资源地址: [https://pan.quark.cn/s
166 4
|
6月前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
169 23
|
4月前
|
存储 设计模式 算法
校招 Java 面试常见知识点汇总及备考指南
本文全面解析校招Java面试常见知识点,涵盖Java基础、集合框架、多线程并发、JVM等内容。从面向对象特性(封装、继承、多态)到数据类型与包装类,再到字符串处理和关键字用法,逐一剖析。集合框架部分深入讲解List、Set、Map接口及其常用实现类的特性和应用场景。多线程章节探讨线程创建、同步机制及线程池的使用。JVM部分聚焦内存区域、垃圾回收机制和类加载过程。结合实际案例,助你轻松应对校招面试!资源地址:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
107 0
|
6月前
|
存储 前端开发 JavaScript
JavaScript的重要知识点
以上就是JavaScript的一些重要知识点。学习JavaScript需要理解和掌握这些知识点,才能编写出高效、可维护的代码。同时,还需要不断实践,通过编写项目来提高编程技能。
84 14
|
8月前
|
自然语言处理 JavaScript 前端开发
当面试官再问我JS闭包时,我能答出来的都在这里了。
闭包(Closure)是前端面试中的高频考点,广泛应用于函数式编程中。它不仅指函数内部定义的函数,还涉及内存管理、作用域链和垃圾回收机制。闭包可以让函数访问其外部作用域的变量,但也可能引发内存泄漏等问题。通过合理使用闭包,可以实现模块化、高阶函数和回调函数等应用场景。然而,滥用闭包可能导致代码复杂度增加、调试困难以及潜在的性能问题。为了避免这些问题,开发时应谨慎处理闭包,避免不必要的嵌套,并及时清理不再使用的变量和监听器。
327 16
当面试官再问我JS闭包时,我能答出来的都在这里了。
|
9月前
|
Web App开发 前端开发 JavaScript
折腾之王:JavaScript之父Brave浏览器与BAT的诞生
2015年,JavaScript之父Brendan Eich再次创业,推出Brave浏览器和加密货币Basic Attention Token(BAT),旨在颠覆传统广告行业。Brave屏蔽广告、保护隐私,加载速度快;BAT则通过奖励机制让用户、内容创作者和广告主三方受益。尽管面临用户习惯和巨头竞争的挑战,Brave已拥有超4000万月活跃用户,成为全球增长最快的隐私浏览器,引领Web3生态发展。
329 22
折腾之王:JavaScript之父Brave浏览器与BAT的诞生
|
11月前
|
JavaScript 前端开发 数据处理
模板字符串和普通字符串在浏览器和 Node.js 中的性能表现是否一致?
综上所述,模板字符串和普通字符串在浏览器和 Node.js 中的性能表现既有相似之处,也有不同之处。在实际应用中,需要根据具体的场景和性能需求来选择使用哪种字符串处理方式,以达到最佳的性能和开发效率。
248 63
|
11月前
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
352 58
|
11月前
|
算法 开发者
Moment.js库是如何处理不同浏览器的时间戳格式差异的?
总的来说,Moment.js 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
292 57
|
11月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
1412 1