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

简介: 面试题-浏览器知识点和js

重绘和重排 ok


重绘:当元素的一部分属性发生改变,


如背景、颜色等不会引起布局变化,


只需要浏览器根据元素的新属性重新绘制,


使元素呈现新的外观叫做重绘。  


重排(回流):当render树中的一部分或者全部,


因为大小边距等问题发生改变,而需要DOM树重新计算的过程


所以简单的来说就是。会引起布局的变化,叫做重排(回流)。


不会引起布局的变化,叫做重绘。


『重绘』不一定会出现『重排』,『重排』必然会出现『重绘』。


tip:所以在我们平时写css的时候,还是要按照html中类的顺序来写。


否者可能会造成重排,重排是需要消耗浏览器性能的哈。


引起重排的地方 ok


1.添加、删除可见的dom


2.元素的位置改变


3.元素的尺寸改变(外边距、内边距、边框厚度、宽高)


4.页面渲染初始化


5.浏览器窗口大小改变


6.改变文字大小


7.操作class属性


8.内容的改变,(用户在输入框中写入内容也会)


add,del-->位置-->尺寸--初始化


窗口-->字体-->内容-->操作class属性


如何避免重绘或者重排?ok


#### 1.集中改变样式
#### 2.使用createDocumentFragment
#### 2.使用createDocumentFragment
我们可以通过createDocumentFragment创建一个游离于DOM树之外的节点,
然后在此节点上批量操作,当完成所有的操作后,最后插入DOM树中,这样只触发一次重排
var fragment = document.createDocumentFragment();
for (let i = 0;i<10;i++){
  let node = document.createElement("p");
  node.innerHTML = i;
  fragment.appendChild(node);
}
document.body.appendChild(fragment);


12.前端如何实现即时通讯?


1.短轮询,使用setTimeout。


每隔一段时间客户端就发出一个请求,去获取服务器最新的数据,一定程度上模拟实现了即时通讯。


优点:兼容性强,实现非常简单


缺点:延迟性高,非常消耗请求资源,影响性能


2.Websocket:


Websocket是一个全新的、独立的协议,基于TCP协议。


可以在服务器和客户端之间建立【实时】的【双向通信】。


优点:真正意义上的实时双向通信,性能好,低延迟


缺点:需要额外的项目改造,使用复杂度高,必须引入成熟的库,无法兼容低版本浏览器

3.Web Worker


Web Worker 的作用,就是为 JavaScript 创造【多线程环境】,


允许主线程创建 Worker 线程,将一些任务分配给后者运行


4.Service workers


Service workers 本质上充当Web应用程序与浏览器之间的代理服务器,


也可以在网络可用时作为浏览器和网络间的代理,创建有效的离线体验。


https://www.cnblogs.com/wangxi01/p/11590178.html


13 什么是跨域 ok


协议, 域名, 端口号, 不同就是不同的域。


不同的域之间相互请求资源,就叫“跨域”。


ps:https与http也是不同的域


浏览器基于:“同源策略”


认为跨域请求是不安全的 所以拒绝访问。


14.什么是浏览器同源策略? 理解


同源策略是一个重要的安全策略,


它用于限制一个origin上的文档或者它加载的脚本如何能与另一个源的资源进行交互。


它能阻隔恶意文档,减少被攻击的媒介。


协议, 域名, 端口号 相同就是同源


15 哪三个标签可以不受同源的影响 ok


浏览器中的大部分内容都是受同源策略限制的,但是以下三个标签可以不受限制:


<img src=XXX>
<link href=XXX>
<script src=XXX>

17.最经典的跨域方案 jsonp


jsonp它利用<script>标签不受同源策略的限制。


缺点:


1.只支持get请求(因为<script>标签只能get)


2.同时需要后配合。


3.有安全性问题,容易遭受xss攻击


2最流行的跨域方案cors[跨域资源共享]


(CORS) 是一种机制,使用 HTTP 头来告诉浏览器。


让运行在一个 origin (domain) 上的Web应用,访问不同源服上务服务的指定的资源。


3.最方便的跨域方案Nginx


Nginx是一款极其强大的web服务器,其优点就是轻量级、启动快、高并发。


反向代理的原理很简单,即所有客户端的请求都必须先经过nginx的处理,


nginx作为代理服务器在将请求转发给node或者java服务,这样就规避了同源策略。


其它跨域方案


1.HTML5 XMLHttpRequest 有一个API,、


postMessage()方法允许来自不同源的脚本采用异步方式进行有限的通信,


可以实现跨文本档、


多窗口、


跨域消息传递。


19 为什么JavaScript是单线程的? 与异步冲突吗 ok


JavaScript是单线程,与它的用途有关。


作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。


这决定了它只能是单线程,否则会带来很复杂的问题。


解释为什么是单线程的,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,


另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?


所以,为了避免复杂性,从一诞生,JavaScript就是单线程,


这已经成了这门语言的核心特征,将来也不会改变。


不冲突:


Js执行是单线程,但浏览器是多线程,它有以下常驻线程


1.渲染引擎线程:负责页面的渲染。


2.JS引擎线程:负责JS的解析和执行(本文说的主线程就指js引擎线程)


3.定时器触发线程:处理定时事件,比如setTimeout, setInterval


4.事件触发线程:处理DOM事件


5.异步http请求线程:处理http请求

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