前端面试总结之长沙四

打开浏览器,会启动几个进程

浏览器是多进程的,拿Chrome来说,每打开一个Tab页就会产生一个进程,使用Chrome打开很多标签页不关,电脑会越来越卡,这是因为消耗了其CPU的缘故。

浏览器包含哪些进程:

Chorme浏览器从关闭到启动,然后新开一个页面至少需要:1个浏览器进程,1个GPU进程,1个网络进程,和1个渲染进程,一共4个进程。

后续如果再打开新的标签页:浏览器进程,GPU进程,网络进程是共享的,不会重新启动,然后默认情况下会为每一个标签页配置一个渲染进程,但是也有例外,比如从A页面里面打开一个新的页面B页面,而A页面和B页面又属于同一站点的话,A和B就共用一个渲染进程,其他情况就为B创建一个新的渲染进程

所以,最新的Chrome浏览器包括:1个浏览器主进程,1个GPU进程,1个网络进程,多个渲染进程,和多个插件进程

参考来自 https://www.csdn.net/tags/NtTakg2sMTQ0NTUtYmxvZwO0O0OO0O0O.html

什么是闭包?闭包的使用场景

闭包:

一个函数的作用域可以访问到另一个函数的局部变量,这个变量所在的函数就是闭包函数

闭包使得内部函数可以访问到函数的属性(变量和方法)

在JavaScript中,每当创建一个函数,闭包就会在函数创建的同时被创建出来

闭包的作用

  •  作用:延伸变量的作用范围。
  • 变量不会销毁(核心作用)
  • 变量什么时候不会销毁:变量被引用并且有内存
  • 闭包的缺点:不正确使用会造成内存泄漏(栈溢出)

闭包的形成条件

  1. 函数嵌套
  2. 将内部函数作为返回值返回
  3. 内部函数必须使用到外部的变量 

使用场景

  1.  函数作为参数被传递
  2. 函数作为返回值被返回
  3. 缓存

......... 具体参考 https://www.jb51.net/article/203104.htm

eg:封装功能时(需要用私有属性和方法),函数防抖动、函数节流,单例模式

闭包的优缺点

优点:

  1. 变量长期驻扎在内存中
  2. 另一个就是可以重复使用变量,并且不会造成变量污染
    1. 全局变量可以重复使用,但是容易造成变量污染。不同的地方定义了相同的全局变量,这样就会造成混乱。
    2. 局部变量仅在局部作用域中有效,不可以重复使用,不会造成变量污染。
    3. 闭包结合了全局变量和局部变量的优点。可以重复使用变量,并且不会造成变量的污染。

缺点:

由于闭包会使得函数中变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄漏。

解决方法是在退出函数之前,将不再使用的局部变量全部删除。

getElement与querySelect区别

1.通过querySelector是静态获取的,而是用getElementsByClassName是动态获取,也就是说每一次使用都会去对dom节点调用一次。

var ul = document.getElementById('ul');
var lits = ul.getElementsByTagName('li')
for(var i = 0; i < lits.length; i++){
    ul.appendChild(document.createElement('li'))
}


其中上述代码会无限循环造成卡死,原因是因为每一次for循环中,在ul内增加了新一条的li,下次的for循环length都会因为动态的dom查询而自增1,导致无限循环。

var ul = document.querySelector('#ul')
var lis = ul.querySelectorAll('#ul li')
for(var i = 0; i < lis.length; i ++){
    ul.appendChild(document.createElement('li'))
}


这段代码不会造成卡死,因为是静态获取,lis的长度一直会维持在3这个数字,最终出来的是六个li。

 2.除了动态获取和静态获取,获取的节点也不同

       let inpt = document.querySelector(".inpt")
       let inpt1 = document.getElementsByClassName("inpt")
       console.log(inpt);
       console.log(inpt1);


获取input框的结果如下

 

通过动态获取的dom节点需要在 input1后面加个 [0] 

       let inpt = document.querySelector(".inpt")
       let inpt1 = document.getElementsByClassName("inpt")
       console.log(inpt);
       console.log(inpt1);
       console.log(inpt1[0]);


结果输入如下图

 

下面的一番话懂得自然懂好吧,记得留下你的评论和点赞。

它们两个的区别不大,都是要通过dom去获取原生节点,一个得到的是动态的集合,一个得到的集合是静态的,一个每使用一次都要去dom节点中调用一次,另一个获取一次之后得到的是一个死值,如果说他们两个非要有什么业务逻辑上的区别的话,一个再使用添加节点的时候会因为使用循环而导致无限的死循环,另一个使用节点方式添加的时候则不会。
原文链接:最好理解的getElement与querySelect区别_剑非出我心的博客-CSDN博客_getelement和queryselector

map里面return false能阻止遍历吗?

不能,具体参考 array.map循环,使用return或者break都不能退出循环_流浪码农~的博客-CSDN博客_退出map循环

 symbol什么属性

参考  6、Symbol和Symbol属性 - 深入理解 ES6 读书笔记 - 开发文档 - 文江博客

hash路由和history路由的区别

单页应用是在移动互联时代诞生的,它的目标是不刷新浏览器,而通过感知地址栏中的变化来决定内容区域显示什么内容。要达成这个目标,我们要用到前端路由技术,具体来说有两种方式来实现:hash模式和history模式。

不同之处有三点。

1.原理不同。
hash模式的实现原理是通过监听hashChange事件来实现的。history模式是通过调用 history.pushState方法(或者replaceState) 并且 监听popstate事件来实现的。history.pushState会追加历史记录,并更换地址栏地址信息,但是页面不会刷新,需要手动调用地址变化之后的处理函数,并在处理函数内部决定跳转逻辑;监听popstate事件是为了响应浏览器的前进后退功能。

2.表现不同。
hash模式会在地址栏中有#号,而history模式没有;同时由于history模式的实现原理用到H5的新特性,所以它对浏览器的兼容性有要求(IE >= 10)。

3.history模式特点
history模式开发的SPA项目,需要服务器端做额外的配置,否则会出现刷新白屏(链接分享失效)。原因是页面刷新时,浏览器会向服务器真的发出对这个地址的请求,而这个文件资源又不存在,所以就报404。处理方式就由后端做一个保底映射:所有的请求全部拦截到index.html上。

总结
单页应用是在移动互联时代诞生的,它的目标是不刷新整体页面,通过地址栏中的变化来决定内容区域显示什么内容。要达成这个目标,我们要用到前端路由技术,具体来说有两种方式来实现:hash模式和history模式。hash模式是通过监听hashChange事件来实现的,history模式是通过pushState方法+popstate事件来实现的。
 

原文链接:hash路由和history路由的区别_前端小刘~的博客-CSDN博客_hash路由和history的区别

 首页加载白屏解决方法

下面这个真的很详细

参考 Vue首页加载白屏原因以及解决的10种方法_进阶的巨人001的博客-CSDN博客_vue首次加载白屏 

如何解决跨域问题

 参考 参考  解决跨域问题的8种方案(最新最全) - 知乎

webpack解决

好像是在vue.config.js里面配置是一样的

参考参考 webpack代理解决跨域问题_yotomato的博客-CSDN博客_webpack代理跨域

 flex移动端适配

这个是真不会,我也没看懂搜到的博客,so我放弃了

可参考 flex 移动端适配 js_259-aaa的博客-CSDN博客_flex移动端适配 

如何判断Token过期

我的理解就是,看后端返回的code码,比如返回的是401,那就表示token过期了,重新发请求,或者重新登陆

参考参考  Vue刷新token,判断token是否过期、失效的最简便的方法 - 百度文库 

null是否等于null

不等于

这个好像有点偏后端了,好吧,我又没看懂为什么

参考参考  简述一个关于null的理解误区:null不等于null_huilang88688的博客-CSDN博客

seo多组件优化

比较全 参考一个完整和详细的网站SEO优化解决方案_fangzhou121212的博客-CSDN博客_一个具体网站的seo优化方案 vue的话,使用  prerender-spa-plugin 插件

参考 vue做seo优化_kang_k的博客-CSDN博客_vueseo优化

        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值