慕课前端售1299元的面试题【第一阶段】http-day04

1. Http面试题

- 我的博客需要缩宽页面观看,图片无法均放,很抱歉。

1. HTTP状态码

1. 状态码分类

301 永久重定向

~ 前端发了个请求到这个网址上,这个网址如果是 返回301配合一个location新网址 ,就到新网址去找。
~ 比如一个网站,域名到期了 或想换域名了,这时老网址就可以返回一个301 永久重定向,配合loaction 新域名,浏览器记住了这件事,就不会再去访问老域名了

302 临时重定向
~只是这一次,请求网站,返回一个302 临时的重定向,配合loaction 新地址。 下次再访问网站还是访问 未302之前的 地址域名。
~下次还访问老地址,看看有什么新指令,是不是就不返回302了,或者 域名又改变了。反正它就是一次一次来,我也不嫌烦。

加粗样式

下面演示302,307也是和302一个意思
在这里插入图片描述
在这里插入图片描述

  • 短网址,意思就将比较长的链接网址,缩短网址,这个短网址通过302条跳转访问长链接
    在这里插入图片描述
  • 304资源未被修改

~ 304 就是说,我们想去向服务端请求资源,比如向服务端 请求一个页面,js或css等都可以。
~ 这时 如果服务端返回一个 200,它会同时把以前的资源全部请求过来,返回200,就是请求成功。
~ 有些情况下,你的浏览器已经请求过了。比如今天刚访问的这个网址,再次访问这个网址,发一个同样的请求。
~ 服务端有可能会告诉你已经请求过了,也就是304,你刚刚请求的资源,已经请求过了,现在还没有过期,你可以继续使用你本地的缓存的结果

在这里插入图片描述
在这里插入图片描述

2. 协议和规范

在这里插入图片描述

传统http methods 和 现在 http methods方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.Http 有哪些常见的 header

1. 常见的 Request headers 请求头

在这里插入图片描述
Accept-Encoding

服务端接受请求,往客户端端发送信息,比如说有一个100kb资源使用gzip压缩后是30kb,浏览器根据压缩算法进行解压

在这里插入图片描述
在这里插入图片描述

2. 常见的 Response headers 响应头

在这里插入图片描述

3. HTTP 缓存相关

1. HTTP缓存介绍

在这里插入图片描述
在这里插入图片描述

Http 缓存

可以将一些没有必要重新获取一遍的数据,不在重新获取,不管以什么方式,本地缓存也好,服务端缓存也罢等给它暂存一份,减少资源浪费,这就是缓存。

为什么需要缓存

~ cpu计算可以做到 毫秒级,比较慢的就是网络请求。
— 通过网络缓存,减少网络请求的数量,体积。让资源加载页面渲染更快一些。
— 网络请求是不稳定的,比如在偏远地区,过隧道啊,这种网络不稳定性,就加剧了页面加载的一个不稳定性。因此需要缓存。

哪些资源可被缓存

— 网页html是不能被缓存的,它随时会更新,时刻要保持最新的html去下载。
— 比如 我们去访问csdn 一篇博客,它业务数据模块,随时会更新,随时会修改,删除,新增一篇新博客,所有不容易被缓存。

静态资源可以被缓存,如js css img

— 如 webpack 打包的时候 会加一个 [contenthash]哈希后缀 ,一般不会改动。
— 如果发生改动 会生成一个新的 hash哈希文件名,它是可以被缓存的。

1. HTTP 强制缓存


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. HTTP 缓存-协商缓存(也叫对比缓存)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. HTTP 和 HTTPS

在这里插入图片描述
在这里插入图片描述

5. 中间人攻击

---- 以非对称加密来说,它是安全的,即使黑客拿到了pukey,获取到了 xxx密文 也无法解密,因为服务端是使用key私钥来解密的,key没有进行传输,一直在服务端所有 它是安全的。
-----但前提是key私钥没有被人掉包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

到这一步,反着看图按图片标记的顺序 1 2 3看。

6. HTTPS 加密,非对称与对称加密图解

在这里插入图片描述


http面试题到此结束

2. 运行环境

1. 从输入url到渲染页面的整个过程?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

比如页面有个div标签,网速比较慢时,标签内文字先渲染出来,然后发现body下又css, 字体50px,这时页面 字体先展示正常大小,在突然变大50px

2. window.onload 和DOMContentLoaded 区别?

在这里插入图片描述

在这里插入图片描述建议使用DOMContentLoaded

3. 性能优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
webpack合并文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

防抖

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

fn.apply(this, arguments)

表示调用函数 fn 并将 this 绑定到指定的上下文对象,arguments 是传递给函数 fn 的参数列表。这个语法允许我们在不知道参数个数的情况下调用函数。其中 apply 是 JavaScript 中的一个函数方法,它允许我们调用一个函数并指定 this 上下文和参数。

节流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. XSS 跨站请求攻击及预防?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. XSRF 跨端请求伪造攻击?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面试真题

1. var 和 let const 的区别

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2. typeof 能判断哪些类型?

在这里插入图片描述

3. 列举强制类型转换和隐式类型转换

在这里插入图片描述

4. 手写深度比较,模拟lodash isEqual

---- isEqual是一个用于比较两个对象是否相等的函数。
----- 通常用于判断两个对象是否具有相同的属性和属性值。
----- 它可以用于比较JavaScript中的所有数据类型,包括简单数据类型和对象类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. split( ) 和 join( ) 的区别

在这里插入图片描述

6. 数组的 pop push unshift shift 分别是什么?

在JavaScript中,数组是一种常用的数据类型,它可以存储多个值。pop、push、unshift和shift都是数组的方法,用于添加或删除数组中的元素。具体如下:

注意!!!以下四个都是对原数组进行了改变,都不是纯函数,它们有副作用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

以上四个方法是数组中常用的元素操作方法,可以方便地添加和删除元素。

7.数组的API,有哪些是纯函数?

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

8. 数组 slice 和 splice的区别 ?

在这里插入图片描述

在这里插入图片描述

9. [10, 20, 30].map(parseInt) 会输出什么值?

在这里插入图片描述
在这里插入图片描述

10. ajax请求 get 和 post的区别 ?

在这里插入图片描述

11. 函数 Call 和 apply 的区别 ?

在这里插入图片描述

call()方法使用示例:

在这里插入图片描述

apply()方法使用示例:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

call()定义:

  • 调用一个对象的一个方法,以另一个对象替换当前对象。

  • 调用call的对象必须是个函数function

  • call的第一个参数将会是function改变上下文后指向的对象如果不传,将会默认是全局对象window

  • 第二个参数开始可以接收任意个参数,这些参数将会作为function的参数传入function

apply()定义:

  • 应用某一对象的一个方法,用另一个对象替换当前对象。
  • 与call方法的使用基本一致,但是只接收两个参数,其中第二个参数必须是一个数组或者类数组

这也是这两个方法很重要的一个区别

异同

  • 1. 相同点

  • 都能够改变方法的执行上下文(执行环境),将一个对象的方法交给另一个对象来执行,并且是立即执行

  • 2.不同点

  • call方法: 从第二个参数开始可以接收任意个参数,每个参数会映射到相应位置的function的参数上,可以通过参数名调用,但是如果将所有的参数作为数组传入,它们会作为一个整体映射到function对应的第一个参数上,之后参数都为空。

  • apply方法: 最多只有两个参数,第二个参数接收数组或者类数组,但是都会被转换成类数组传入function中,并且会被映射到function对应的参数上

  • 更简单地说,apply和call功能一样,只是传入的参数列表形式不同:

  • 如 fn.call ( this,var1,var2,var3 )

  • 对应的apply写法为:fn.apply ( this, [var1,var2,var3] )

  • fn.apply ( this , arguments )

两个方法该如何选择?

  • 根据你要传入的参数来做选择,不需要传参或者只有1个参数的时候,用call,当要传入多个对象时,用apply。

  • 如果需要传入的参数已经是一个数组或者类数组了,就用apply,如果还是单独的需要逐个传入的,可以考虑使用call(如果你不嫌麻烦的话 )

如果 面试问到异同点如何回答?

  • 相同点:两个方法产生的作用是完全一样的,都用来改变当前函数调用的对象。
  • 调用的参数不同,比较精辟的总结:

在这里插入图片描述

  • 具体的使用
    call的使用

在这里插入图片描述
在这里插入图片描述
apply ( )使用

  • apply与call的功能几乎一样,第一个参数意义都一样,只是第二个参数有点不同apply传入的是一个参数数组。
  • 也就是将多个参数组合成为一个数组传入call从第二个参数开始,依次传值给调用函数的参数
  • 代码比较

在这里插入图片描述

bind方法 ,都到这里了 看完得了

  • bind() 方法和前两者不同在于:
  • bind() 方法会返回执行上下文被改变的函数而不会立即执行
  • 而前两者是直接执行该函数。他的参数和call()相同。
  • bind 除了返回是函数以外,它的参数和 call 一样。

当然,三者的参数不限定是 string 类型,允许是各种类型,包括函数 、 object 等等!

  • bind() 函数会创建一个新函数(称为绑定函数)
  • 新函数与被调函数(绑定函数的目标函数)具有相同的函数体(在 ECMAScript 5 规范中内置的call属性)。
  • 目标函数被调用时 this 值绑定到 bind() 的第一个参数该参数不能被重写。绑定函数被调用时,bind() 也接受预设的参数提供给原函数。
  • 一个绑定函数也能使用new操作符创建对象:这种行为就像把原函数当成构造器。提供的 this 值被忽略,同时调用时的参数被提供给模拟函数。

在这里插入图片描述

这三个方法的作用都是改变函数的执行上下文 !

猜你喜欢

转载自blog.csdn.net/weixin_46426412/article/details/130486121