(十七)JS篇——小题

1、说说undefind和null的区别,并举例说明如何让一个对象的属性变为null。

在javascript中undefnd 和null都表示空值。undefind指变量已经声明未赋值,或者变量定义的值就是undefind。例如,let a; console.log(a); // 输出:undefined。null 是指给显式的赋值为null。
例如,let b = null; console.log(b); // 输出:null。如果我们想让一个对象的属性变为null,可以直接为该属性赋值null。例如,我们有一个对象let obj = {name: ‘Alice’};,如果我们想让name属性变为null,可以这样操作:obj.name = null;,然后console.log(obj); // 输出:{name: null}。

2、V8垃圾回收机制

V8是一个开源的JavaScript引擎,它被用于Chrome浏览器和Node.js等平台。V8的垃圾回收机制是V8对内存管理的实现。
v8的垃圾回收机制采用了分代垃圾回收策略,将内存分为新生代和老生代两部分。新生代,内存用于存储生命周期短的对象,采用Scavenge算法就是垃圾回收。老生代内存用于存储生命周期长的对象,采用 Mark Sweep和Mark-Compact算法进行垃圾回收。
在V8中,垃圾回收器周期性地检查内存中不再使用的对象,并将其回收以释放内存空间。由于V8采用了分代垃圾回收策略,所以在回收新生代内存时,只需要扫描新生代内存中少量存货对象即可,因此垃圾回收速度较快。而在回收老生代内存时,粗腰扫描的存货对象较多,因此回收速度较快。
总的来说,V8的垃圾回收机制通过采用分代垃圾回收策略,提高了内存回收效率,减少了内存碎片的存在,从而提高了JavaScript应用的性能和稳定性。

3、cookie、sessionStorage、localStorage区别

  • 共同点:都是保存在浏览器端、且同源。
  • 区别:
    (1)存储大小限制:cookie数据不能超过4k,因为http请求都会携带cookie、所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage也有存储限制,但比cookie大。可以达到5M或更多。
    (2)数据有效期不同:sessionStorage在浏览器窗口关闭之前有效;localStorage始终有效,保存在本地,;cookie只有在cookie设置的有效期内有效,即使窗口关闭或者浏览器关闭。
    (3)作用域不同:sessionStorage不能在不同的浏览器窗口中共享,即使是同一个页面。而localStorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的,web Storage支持事件通知机制,可以将数据更新的通知给监听者。web Storage 的 api 接口使用更方便。
    (4)cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务期间来回传递,饿sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。

4、JS 异步解决方案的发展历程以及优缺点

  • 回调函数 :
    优点:解决了同步执行时间长问题
    缺点:容易形成回调地域,不能用try catch捕获错误,不能使用return ;
  • Promise
    优点:解决了回调地域问题
    缺点:无法取消Promise,错误需要通过回调函数捕获。
  • Generator(生成器):
    特点:可以控制函数的执行
    迭代器(Iterator)、生成器(Generator)了解
  • Async/Await
    优点:代码简单,不用写一大堆then,处理了回调地域。
    缺点:await将异步代码改造成同步代码,如果多个异步操作没有依赖性,使用await反而会降低性能。

5、简述浏览器的缓存读取规则

浏览器的缓存可以优化性能,比如不发起请求直接使用缓存,或者发起了请求但是后端的存储内容与前段一致,则从缓存中读取,从而减少响应数据。

缓存位置:

Service Worker

Service Worker是运行在浏览器背后的独立线程,可以用来实现缓存功能。它脱离于浏览器窗体,因此无法直接访问DOM元素。所以这一个独立的线程能够在不干扰主线程的情况下来提升性能。使用Service Worker,传输协议必须为HTTPS。Service Worker是PWA的核心技术。它与浏览器的其他内建缓存机制不同,它可以让我们自由缓存那些文件,如何匹配缓存、如何读取缓存,并且缓存是可持续性的。

Memory Cache

Memory cache 是指内存中的缓存,主要包含的是当前页面中已经抓取的资源,例如页面上已经下载的样式、脚本、图片等。读取内存中的数据很高效,但是缓存持续性很短,会随着进程的释放而释放。一旦我们关闭页签,缓存就会被释放。

Disk Cache

Disk Cache 也就是存储在硬盘中的缓存,读取速度慢,但是存储容量大,时效长。他会根据HTTP Header中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,那些资源已经过期需要重新请求。并且即使在跨站点的情况下,相同资质的资源一旦被硬盘缓存下来就不会再次去请求数据。在所有浏览器缓存中,Disk Cache 覆盖面基本上是最大的。绝大部分的缓存都来自 Disk Cache。

Push Cache

Push Cache(推送缓存)是HTTP/2中的内容,当以上三种缓存都没有被命中时,他才会被是用。它只会在会话(Session)中存在,一旦会话结束就会被释放,并且缓存时间也很短暂。(大约五分钟)

缓存过程分析:

浏览器与旖通信的方式为应答模式,即:浏览器发起HTTP请求——服务器响应该请求。浏览器第一次向服务器发起请求拿到结果后,将请求结果和缓存标识存入浏览器缓存。浏览器对于缓存的处理是根据第一次请求资源返回的响应头来确定的。
(1)浏览器每次发起请求,都会先在浏览器缓存中查找该请求结果,以及缓存标识。
(2)浏览器每次拿到返回的结果都会将该结果和缓存标识存入浏览器缓存中。

6、JS有哪几种内存泄漏情况

  • 过度的闭包。
  • 未被清空的定时器。
  • 未被销毁的事件监听。
  • 未声明直接赋值的变量。
  • 一些引用的DOM元素没有清除。

7、instanceof 的实现原理

while(x._proto){if(x._proto_ === y.prototype){return true}
x.__proto__ = x.__proto__.__proto__;
}
if (x.__proto__ === null) {return false;
}

8、什么是CSP

CSP(Content-Security-Policy)是指内容安全策略。是一种网络安全机制,主要是为了保护网站不受跨站脚本攻击(XSS)等恶意代码的影响。它通过限制网页可以加载和执行的内容来防止恶意脚本的注入。本质是建立一个白名单,告诉浏览器哪些外部资源可以加加载和执行。我们只需要配置规则,如何拦截由浏览器自己实现。
开启CSP有两种方式:
①设置HTTP首部的Content-Security-Policy。
②设置meta标签的方式:

9、什么是CSRF攻击,如何防范CSRF攻击?

CSRF(Cross-site request forgery,跨站请求伪造),通常缩写为CSRF或者XSRF。与跨站脚本(XSS)的区别是,XSS是利用站点内的信任用户,而CSRF是通过伪装成受信任用户请求受信任网站。攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态(cookie),绕过后台的验证,毛重用户向服务器执行一些操作。
攻击者只有预测出URL的所有参数与参数值,才能成功地构造一个伪造的请求;反之,攻击者将无法攻击成功。
CSRF攻击的本质是利用了在同源请求中携带cookie并发送给服务器的特点,以此来实现用户的冒充。

防御方法:
  • 验证码
  • 在请求中添加token验证
  • Referer Check(Referer Check也可以被用于检查请求是否来自合法的“源”(Referer值是否是指定页面,或者网站的域),如果都不是,那么就极可能是CSRF攻击。但是因为服务器并不是什么时候都能取到Referer,所以也无法作为CSRF防御的主要手段。)
  • 设置cookie时设置Samesite
    ( SameSite 属性用于限制跨站 Cookie,从而减少跨站攻击,如 CSRF(跨站请求伪造)。在设置 Cookie 时,可以通过设置 Set-Cookie 响应头的 SameSite 选项来控制 Cookie 的行为。SameSite 可以设置为以下三个值之一:
    ①、Strict: Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。
    Set-Cookie: CookieName=CookieValue; SameSite=Strict;
    这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 Cookie,跳转过去总是未登陆状态。
    ②、Lax: Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。
    Set-Cookie: CookieName=CookieValue; SameSite=Lax;
    设置了Strict或Lax以后,基本就杜绝了 CSRF 攻击。当然,前提是用户浏览器支持 SameSite 属性。
    ③、None: Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效。
    下面的设置无效。
    Set-Cookie: widget_session=abc123; SameSite=None
    下面的设置有效。
    Set-Cookie: widget_session=abc123; SameSite=None; Secure
    参考链接:https://blog.csdn.net/weixin_55802150/article/details/132082743、https://blog.csdn.net/dzqxwzoe/article/details/131796613、https://www.wangan.com/wenda/3482

未完待续…

JavaScript面试题看这一篇就够了,简单全面一发入魂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/828365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谈谈对“数字化转型”的本质认知

我之前在多家咨询公司与软件公司做过多个大型企业数字化项目,也在甲方企业推动数字化转型,做出了数字化最佳实践案例。 下面我想从一个客观角度来真正意义上的描述数字化及数字化转型。 我相信这篇文章能给做数字化的你们带来极大的收获,我…

了解血糖对身体的危害,掌握三个关键数值,预防并发症。

糖尿病患者的血糖控制至关重要,因为长期的血糖异常会对身体造成各种损害,甚至引发严重的并发症。记住这三个数值。 第一个就是空腹血糖,大于13.9,就会有大量的脂肪分解成酮体,酮体在体内积累过多,可能引发酮…

第55篇:创建Nios II工程之Hello_World<一>

Q:本期我们开始介绍创建Platform Designer系统,并设计基于Nios II Processor的Hello_world工程。 A:设计流程和实验原理:需要用到的IP组件有Clock Source、Nios II Processor、On-Chip Memory、JTAG UART和System ID外设。Nios I…

内网穿透下的 wordpress 地址冲突问题与 https 下的后台登陆问题

内网穿透下的 wordpress 地址冲突问题与 https 下的后台登陆问题 内网穿透下的地址冲突https 登录管理后台总结 同步发布在个人笔记内网穿透下的 wordpress 地址冲突问题与 https 下的后台登陆问题 笔记记录解决两个 wordpress 相关问题 如果我们使用内网穿透把本地的 wordpre…

机器学习理论基础—支持向量机的推导(一)

机器学习理论基础—支持向量机的推导 算法原理 SVM:从几何角度,对于线性可分数据集,支持向量机就是找距离正负样本都最远的超平面,相比于感知机,其解是唯一的,且不偏不倚,泛化性能更好。 超平面 n维空间…

百篇博客 · 千里之行

时光荏苒流逝,白驹匆匆过隙,不知不觉间,Damon小智已经在CSDN上记录了第一百多篇文章。恰逢128天创作纪念日的此刻,我感慨良多,这百余篇博客不仅是我的创作历程,更见证了我在这五年技术生涯中走过心路历程。…

算法学习001-圆桌问题 中小学算法思维学习 信奥算法解析 c++实现

目录 算法学习001-圆桌问题 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 算法学习001-圆桌问题 一、题目要求 1、编程实现 圆桌边围坐着2n个人,其中n个人是好人&#xff0c…

启明云端新品WT99C262-SG LoRa开发板,搭配WT32-ETH0X实现LoRa/WiFi/蓝牙转以太网

WT99C262-SG系列开发板是启明云端推出的一款基于WTLRC262-SG系列模组的开发板。板上搭载的模组支持Wi-FiBLELoRa功能,且模组大部分管脚均已引出至两侧排针,开发人员可根据实际需求,通过跳线连接多种外围设备,也可将开发板插在面包…

第27天:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

第二十七天 一、TP框架-开发-路由访问&数据库&文件上传&MVC模型 1.TP框架-开发-配置架构&路由&MVC模型 参考:https://www.kancloud.cn/manual/thinkphp5_1 配置架构-导入使用路由访问-URL访问数据库操作-应用对象文件上传操作-应用对象前端页…

web-traffic-generator:一款功能强大的HTTP和HTTPs流量混淆工具

关于web-traffic-generator web-traffic-generator是一款功能强大的HTTP和HTTPs流量混淆工具,该工具基于纯Python开发,可以帮助广大研究人员在HTTP或HTTPs网络流量中提添加噪声,以此来实现流量混淆的目的。 本质上来说,web-traff…

Linux编译和NXP官方系统移植

文章目录 一、Linux安装环境配置二、Linux编译流程三、单个.dtb文件编译方法1.修改顶层makefile2.编译设备树文件3.验证 四、NXP官方Linux系统移植1.将NXP官方Linux系统导入到Ubuntu系统中2.解压系统3.编译系统4.验证5.在NXP官方系统中添加自己的板子 五、 CPU 主频和网络驱动修…

C++ | Leetcode C++题解之第49题字母异位词分组

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {// 自定义对 array<int, 26> 类型的哈希函数auto arrayHash [fn hash<int>{}] (const array<int, 26>&…

对浅拷贝的理解

问题背景 我之前一直以为浅拷贝出来的新对象和旧对象的引用地址是相同的&#xff0c;但是通过Object和发现浅拷贝的新对象和旧对象的引用地址不同&#xff01;&#xff01; const obj1 { name: "Alice", test: { age: 12 } };const obj4 Object.assign({}, obj1);…

2、选择什么样的机器人本体

如果说世界是物质的&#xff0c;那么应该先制造出机器人的本体&#xff0c;再让她产生灵魂。如果是精神的呢&#xff0c;世界是无中生有的呢&#xff0c;那就先在仿真中研究算法吧。 而我比较崇尚初中哲学的一句话&#xff0c;世界是物质的&#xff0c;物质是运动的&am…

【Vue】自定义事件实现组件之间的通信(案例讲解)

一、前言 这是部分哔哩哔哩上跟着一个博主【遇见狂神说】学习的&#xff0c;当然自己也是才开始学习的vue&#xff0c;在学到这个Vue的自定义事件的时候&#xff0c;虽然知识点很绕&#xff0c;但是在理解后又觉得很意思&#xff0c;觉得Vue真的很强大。这里博主将自己学习到的…

解释PostgreSQL中的MVCC(多版本并发控制)机制是如何工作的?

文章目录 MVCC的工作原理1. 数据行版本化2. 事务ID和可见性3. 清理旧版本 解决方案&#xff1a;MVCC的优势1. 高并发性2. 避免锁竞争3. 一致性视图 示例代码 PostgreSQL中的MVCC&#xff08;多版本并发控制&#xff09;机制是一种在数据库管理系统中实现事务隔离级别的方法&…

vue中的mixin(局部混入、全局混入)

一、mixin是什么 Mixin是面向对象程序设计语言中的类&#xff0c;提供了方法的实现。其他类可以访问mixin类的方法而不必成为其子类&#xff1b;Mixin类通常作为功能模块使用&#xff0c;在需要该功能时“混入”&#xff0c;有利于代码复用又避免了多继承的复杂 Vue中的mixin…

如何远程访问路由器?

远程访问路由器是一种方便的技术&#xff0c;使用户可以远程操作和配置他们的网络设备。无论用户身在何处&#xff0c;只要有互联网连接&#xff0c;就可以远程访问家庭或办公室的路由器。在这篇文章中&#xff0c;我将介绍远程访问路由器的优势以及一种名为【天联】的组网产品…

数据结构之双链表的相关知识点及应用

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构 目录 双链表的实现 初始化双链表 在双链表中尾插数据 在双链表中尾删数据 在双链表中头插数据 在双链表中头删数据 在双…

低代码技术与仓储管理的新纪元:革命性的供应链变革

引言 在当今数字化时代&#xff0c;企业对于创新和效率的追求越发迫切。在这样的背景下&#xff0c;低代码技术应运而生&#xff0c;成为企业数字化转型的重要工具之一。低代码技术的崛起为企业提供了一种快速、灵活、成本效益高的开发方式&#xff0c;大大缩短了软件开发周期…