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

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

42. vue/cli3.0相对路径打包


没有这个文件需要新增这个文件。在vue.config.js文件中,在跟目录下。

module.exports={
    productionSourceMap: false,
    publicPath: process.env.NODE_ENV === 'production' ? '././' : './',
}


publicPath的值如果是生产环境(production==>prəˈdʌkʃn),


我们使用././;否者就是开发环境使用./;


如何获取当前的环境呢?process.env.NODE_ENV


process 【ˈprɑːses 】 处理;加工


43. devDependencies和dependencies有何区别


--save-dev等价为-D  意思是开发环境中需要,生产环境中不需要要了  


-S  开发和生产环境都需要。


形象记忆:devDependencies 长开发环境


44.js的垃圾回收机制 (面试问过)


找出不再使用的变量,然后释放掉它所占用的内存。


但是这个过程不是时时的,因为其开销比较大。


所以垃圾回收器会按照固定的时间间隔周期性的执行。


从变量的生命周期来讲:


变量分为全局变量和局部变量。


局部变量只在函数执行的过程中存在,一旦函数结束,局部变量就没有存在的必要了。就可以释放掉他们所占用的内存。


垃圾回收机制就必须知道哪些变量有用,哪些变量没有用。


垃圾回收有两种机制:1.标记清除 2.引用计数


45.标记清除


当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为"进入环境",


当变量离开环境的时候(函数执行结束)将其标记为“离开环境"。


原则上讲不能够释放进入环境的变量所占的内存,它们随时可能会被调用的到。


垃圾回收器会在运行的时候给内存中的所有变量加上标记,


然后去掉环境中的变量,以及被环境中所引用的变量(闭包)。


在这些完成之后,仍存在标记的就是要删除的变量。


因为环境中的变量已经无法访问到这些变量了,


然后垃圾回收器相会将这些带有标记的变量所占用的内存空间释放掉.


46.引用计数


引用计数的策略是跟踪记录每个值被使用的次数,


当声明了一个变量并将一个引用类型赋值给该变量的时候,


这个值的引用次数就加1,如果该变量的值变成了另外一个,则这个值得引用次数减1。


当这个值的引用次数变为0的时候,说明没有变量在使用,


然后垃圾回收器会这个变量所占用的内存空间释放掉.


缺点:没有办法解决循环引用的问题


47.浏览器使用的是那一种垃圾回收?


现在大多数浏览器都是基于标记清除算法。


V8 亦是,当然 V8 肯定也对其进行了一些优化加工处理,


那接下来我们主要就来看 V8 中对垃圾回收机制的优化


48.V8 的垃圾回收策略


V8 的垃圾回收策略主要基于分代式垃圾回收机制。


V8 中将堆内存分为新生代和老生代两区域。采用不同的策略回收垃圾。


新生代指:对象存活时间较短,


简单来说就是新产生的对象,通常只支持 1~8M 的容量,


老生代指:对象的存活时间较长或常驻内存的对象


V8 整个堆内存的大小就等于新生代加上老生代的内存


49.原型


js每声明一个function,都有prototype原型,


prototype原型是函数的一个默认属性,


在函数的创建过程中由js编译器自动添加。


50.原型链:


从实例对象上往上找,找到创造这个实例对象的相关对象。


然后这个相关对象在往上找,找到创造它的,上一级的原型对象.


以此类推,一直到原型对象终止。


51.浏览器缓存机制或者你对浏览器缓存的理解?


浏览器会根据  response header[响应头] 中的 Expires 和cahe-control 字段判断是否命中强缓存,


如若命中,则直接从缓存中取资源,不会再去向服务器请求。


没有命中强缓存,浏览器会发出一个条件请求。


在请求头中包含 If-Modified-Since 或 If-None-Match 字段


If-Modified-Since 即浏览器当初得到的 Last-Modified。If-None-Match即浏览器当初得到的 ETag。(方便自己理解,不需要说出来)


当服务器发现资源的更新时间晚于 If-Modified-Since 所提供的时间。(方便自己理解,不需要说出来)


或者当前的 ETag 和 If-None-Match 提供的不符时,说明该资源需要向服务器重新请求了。


否则,浏览器将不需要重新下载整个资源,只需要从缓存中去加载这个资源,


这时响应的http code 为 304(304 Not Modified)。


参考地址:https://blog.csdn.net/weixin_33895695/article/details/91451701


31. javaScript事件的三个阶段:捕获阶段 目标阶段 冒泡阶段


1.捕获阶段 概念:


事件从根节点流向目标节点,途中流经各个DOM节点,在各个节点上触发捕获事件,直到达到目标节点。


2.目标阶段 概念:


事件到达目标节点时,就到了目标阶段,事件在目标节点上被触发


3.冒泡阶段 概念:


事件在目标节点上触发后,一层层向上冒,回溯到根节点


javascript事件循环机制


javascript是单线程,它只有一条主线.


javascript代码在执行的时候


首先是调用栈,因为耗时较短。


耗时较长的先放置到任务队列中。


任务队列又分为宏任务和微任务。


微任务中队列中放置的是 promise、aysnc、await  


宏任务队列中放置的是 setTimeout、 seteral、ajax、onClick 事件


等调用栈的任务执行完成后,再轮询微任务队列,微任务队列中任务执行完成之后再执行宏任务。


不阻塞主进程的程序放入调用栈中,压入栈底,执行完了就会弹出。


而阻塞主进程的程序放入任务队列中,他们需要“排队”依次执行


栈是先进后出,队列是先进先出


1.Set的理解


Set本身是一个构造函数,用来生成Set数据结构。


它类似于数组,但是成员的值是唯一的,不重复的。


set.add(item)加入值。


加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。


[...new Set([1,2,2,3])]  //[1,2,3] 数组去重


set.size检测值的个数


map的理解


它类似于对象,也是键值对的集合。


但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。


如果对同一个键多次赋值,后面的值将覆盖前面的值。


如果读取一个未知的键,则返回undefined。


new Map().get('userName') // undefined


Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。


相关文章
|
6月前
|
编解码 JavaScript 前端开发
【Java进阶】详解JavaScript的BOM(浏览器对象模型)
总的来说,BOM提供了一种方式来与浏览器进行交互。通过BOM,你可以操作窗口、获取URL、操作历史、访问HTML文档、获取浏览器信息和屏幕信息等。虽然BOM并没有正式的标准,但大多数现代浏览器都实现了相似的功能,因此,你可以放心地在你的JavaScript代码中使用BOM。
170 23
|
6月前
|
存储 前端开发 JavaScript
JavaScript的重要知识点
以上就是JavaScript的一些重要知识点。学习JavaScript需要理解和掌握这些知识点,才能编写出高效、可维护的代码。同时,还需要不断实践,通过编写项目来提高编程技能。
85 14
|
8月前
|
自然语言处理 JavaScript 前端开发
当面试官再问我JS闭包时,我能答出来的都在这里了。
闭包(Closure)是前端面试中的高频考点,广泛应用于函数式编程中。它不仅指函数内部定义的函数,还涉及内存管理、作用域链和垃圾回收机制。闭包可以让函数访问其外部作用域的变量,但也可能引发内存泄漏等问题。通过合理使用闭包,可以实现模块化、高阶函数和回调函数等应用场景。然而,滥用闭包可能导致代码复杂度增加、调试困难以及潜在的性能问题。为了避免这些问题,开发时应谨慎处理闭包,避免不必要的嵌套,并及时清理不再使用的变量和监听器。
331 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 通过一系列的技术手段和策略,有效地处理了不同浏览器的时间戳格式差异,为开发者提供了一个稳定、可靠且易于使用的时间处理工具。
293 57
|
JavaScript 前端开发 数据安全/隐私保护
JavaScript_知识点梳理note1
参考文献《JavaWeb 从入门到精通》 1.JavaScript的语法 JavaScript区分大小写 每行结尾的分号可有可无 变量是弱类型的 在定义变量时,只使用var运算符就可以将变量初始化为任意的值。
921 0
|
JavaScript 前端开发
JAVASCRIPT的一些知识点梳理
春节闲点,可以安心的梳理一下以前不是很清楚的东东。。 看的是以下几个URL: http://web.jobbole.com/82520/ http://blog.csdn.net/luoweifu/article/details/41466537 http://javascriptissexy.
1370 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
251 2