• 面试题-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和隐藏元素

  • 相关阅读:
    QT DAY2
    【postgresql】数据表id自增与python sqlachemy结合实例
    调频系列柔性直流输电VSC-HVDC送端电网受端电网联合一次调频。
    嵌入式必备技能---git与github
    合肥工业大学操作系统课设-进程死锁的检测
    【飞控开发高级教程2】疯壳·开源编队无人机-遥控整机代码走读、编译与烧写
    微服务分布式开源架构是什么?
    el-data-picker限制日期可选范围
    GPT-3 内幕机制可视化解析
    【Transformer系列】深入浅出理解Embedding(词嵌入)
  • 原文地址:https://blog.csdn.net/qq_59076775/article/details/134477507