面试题-5

1.用递归的时候有没有遇到什么问题?

如果一个函数内可以调用函数本身,那么这个就是递归函数

函数内部调用自己

特别注意:写递归必须要有退出条件return

2.如何实现一个深拷贝

深拷贝就是完全拷贝一份新的对象,会在堆内存中开辟新的空间,拷贝的对象被修改后,原对象不受影响,主要针对的是引用数据类型。

1.扩展运算符

2.JSON.parse(JSON.stringify())

3.利用递归函数来实现

3.事件循环

1.JS是一个单线程的脚本语言

主线程  执行栈  任务队列  宏任务   微任务

主线程先执行同步的任务,然后才去执行任务队列里的任务,如果在执行宏任务之前有微任务,那么要先执行微任务,全部执行完毕之后等待主线程的调用,调用完毕再去任务队列中查看是否有异步任务,这样一个循环往复的过程就是事件循环!

4.ajax是什么?怎么实现的?

创建交互式网页应用的网页开发技术

在不重新加载整个网页的前提下,与服务器交换数据并更新部分内容

通过XmlHttpRequest对象向服务器发送异步请求,从服务器拿到数据.最后通过JS操作DOM更新页面

1.创建XmlHttpRequest 对象 xml

2.通过xmh对象里的open()方法和服务器建立链接

3.构建请求所需的数据,并通过xml对象的send()方法发送给服务器

4.通过xmh对象的onreadystate  chansge事件监听服务器和你的通信状态

5.接收并处理服务器响应的数据结果

6.把处理的数据更新到HTML页面上

5.get和post有什么区别?

1.get一般获取数据,post一般提交数据

2.get参数会放在url上,所以安全性比较差,post是放在body中

3.get请求时会被缓存,post请求不会被缓存

4.get请求会被保存在浏览器历史记录中,post不会

5.get请求只能url编码,psot请求支持很多种

6.promise的内部原理是什么?它的有缺点是什么?

Promise对象,封装了一个异步操作并且还可以获取成功或失败的结果

Promise主要是解决回调地狱的问题,之前如果异步任务比较多,同时他们之间有相互依赖的关系,

就只能使用回调函数处理,这样就容易形成回调地狱,代码的可读性差,维护性差

有三种状态:pending   fulfiled     rejected

                   等待         成功       失败

状态改变只会有两种情况:

pending----------->fulfilled  ;pending---------->rejected  一旦发生,状态就会凝固,不会再变

首先就是我们无法取消,一旦创建它就会立即执行,不能中途取消

如果不设置回调,若当前处于pending状态时,无法得知目前在那个阶段

原理:

          构造一个Promise实例,实例需要传递函数的参数,这个函数有两个形参,分别是函数类型,一个是resolve,一个reject

promise上还有then方法,这个方法就是来指定状态改变时的确定操作,resolve是执行第一个函数,reject是执行第二个函数

7.promise和async await的区别是什么?

1.都是处理异步请求的方式

2.promise是ES6,async,await 是ES7的语法

3.async  await是基于promise实现的,他和promise都是非阻塞性的

优缺点:

1.promise是返回对象我们要用then,catch方法处理和捕获异常,并且书写方式是链式,容易造成代码重叠,不好维护,async,await是通过try  catch进行捕获异常

2.async  await最大的优点就是能让代码看起来像同步一样,只要遇到await就会立刻返回结果,然后再执行后面的操作Promise,Promise.then()的方式返回,会出现请求还没返回,就执行了后面的操作

8.浏览器的存储方式有哪些?

1.cookies

H5标准前的本地存储方式

兼容性好,请求头自带cookie

存储量小,资源浪费,使用麻烦(封装)

2.localstorage

操作方便,永久存储,兼容性较好        

3.sessionstorage

当前页面关闭后就会立刻清理,会话级别的存储方式

4.indexedDB

H5标准的存储方式,.他是以键值对进行存储

9.token存在sessionstorage还是localstorage

token:验证身份的令牌,一般就是用户通过账号密码登录后,服务端把这些凭证通过加密等一系列操作后得到的字符串

1.存localstorage里,后期每次请求接口都需要把它当作一个字段传给后台

2.存cookie中,会自动发送,缺点就是不能跨越

如果存在localstorag中,容易被xss攻击,但是如果做好了对应的措施是利大于弊的

如果存在cookie中会有csrf攻击

10.token的登录流程

1.客户端用账号密码请求登录

2.服务端收到请求后,需要去验证账号密码

3.验证成功之后,服务端会签发一个token,把这个token发送给客户端

4.客户端收到token后保存起来,可以放在cookie或者localstorage

5.客户端每次向服务端发送请求资源的时候,都需要携带这个token

6.服务端收到请求,接着去验证客户端里的token,验证成功才会返回客户端请求的数据

11.页面渲染的过程是怎样的?

DNS解析

建立TCP链接

发送http请求

服务器处理请求

渲染页面

 (1)浏览器会获取HTML和css的资源,然后把HTML解析成DOM树

 (2) 再把css解析成cssom  

 (3) 把DOM和CSSOM合并为渲染树

 (4) 布局

 (5)  把渲染树的每个节点渲染到屏幕上        

断开TCP链接

12.DOM树和渲染树有什么区别?

  DOM树是和HTML标签一一对应的,包括head和隐藏元素

  渲染树是不包括head和隐藏元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值