2023.03.26 更新各大厂前端面试问题总结(22道题)

2023.03.26 更新前端面试问题总结(22道题)
获取更多面试问题可以访问
github 地址: https://github.com/pro-collection/interview-question/issues
gitee 地址: https://gitee.com/yanleweb/interview-question/issues

目录:

  • 初级开发者相关问题【共计 1 道题】

    • 185.TypeScript is 这个关键字是做什么呢?【TypeScript】
  • 中级开发者相关问题【共计 9 道题】

    • 182.http3 QUIC 是什么协议?【网络】
    • 188.前端如何实现截图?【web应用场景】
    • 189.当QPS达到峰值时, 该如何处理?【web应用场景】
    • 190.js 超过 Number 最大值的数怎么处理?【web应用场景】
    • 191.[‘1’, ‘2’, ‘3’].map(parseInt) 结果是啥,为什么?【JavaScript】
    • 192.介绍下深度优先遍历和广度优先遍历,如何实现?【JavaScript】
    • 193.请分别用深度优先思想和广度优先思想实现一个拷贝函数?【JavaScript】
    • 195.Promise 构造函数是同步执行还是异步执行,那么 then 方法呢?【JavaScript】
    • 199.手写 观察者模式【JavaScript】【出题公司: 网易、阿里巴巴】
  • 高级开发者相关问题【共计 11 道题】

    • 2.async/await 原理, 手写 async 函数?【JavaScript】
    • 180.HTTP协议的不同版本的主要特点有哪些?【网络】
    • 181.http1.1 持久连接 和 http2 的多路复用有什么区别?【网络】
    • 184.前端如何防止加载外域脚本?【网络】
    • 186.中间人攻击是什么?【网络】
    • 187.前端单页应用 History 路由模式, 需要如何配置 nginx?【工程化】
    • 194.JavaScript 异步解决方案的发展历程主要有哪些阶段?【JavaScript】
    • 196.如何从 http1.1 迁移到 http2 ?【JavaScript】
    • 197.A、B 机器正常连接后,B 机器突然重启,问 A 此时处于 TCP 什么状态?(了解即可)【网络】【出题公司: 网易】
    • 198.介绍下观察者模式和订阅-发布模式的区别?【JavaScript】【出题公司: 网易、阿里巴巴】
    • 200.手写订阅-发布模式【JavaScript】【出题公司: 网易、阿里巴巴】
  • 资深开发者相关问题【共计 1 道题】

    • 183.HTTP/3 是基于 UDP 的协议, 那么他是如何保障安全性的?【网络】

初级开发者相关问题【共计 1 道题】

185.TypeScript is 这个关键字是做什么呢?【TypeScript】

is 是 TypeScript 中的一个关键字,用于创建类型保护。在 TypeScript 中,类型保护是一种用于确定变量是否符合某种类型的方法。当我们使用 is 关键字创建一个类型保护时,它会在运行时对变量进行判断,然后返回一个布尔值。

具体来说,我们可以通过定义一个返回值为布尔类型的函数,并在函数内部进行类型判断来创建类型保护。比如:

csharpCopy codefunction isString(value: any): value is string {
   
  return typeof value === 'string';
}

在这个例子中,我们定义了一个名为 isString 的函数,它接收一个任意类型的参数 value,并通过 typeof 运算符判断 value 是否为字符串。如果是字符串,函数返回 true,否则返回 false

使用时,我们可以通过将变量传递给 isString 函数来判断变量是否为字符串类型:

rustCopy codeconst str = 'hello';
if (isString(str)) {
   
  console.log(str.length);
}

在这个例子中,由于 str 是字符串类型,所以 isString(str) 返回 trueif 语句内的代码会被执行,输出字符串的长度。如果 str 不是字符串类型,isString(str) 返回 falseif 语句内的代码不会被执行。

这样,在使用变量之前进行类型保护,可以避免在运行时出现类型错误,提高代码的健壮性。

中级开发者相关问题【共计 9 道题】

182.http3 QUIC 是什么协议?【网络】

HTTP/3(或称为HTTP-over-QUIC)是一个基于QUIC协议的新版本的HTTP协议。QUIC(Quick UDP Internet Connections)是由Google设计的一个基于UDP协议的传输层协议,旨在解决HTTP/2协议存在的一些问题。

HTTP/3中引入了QUIC的一些特性,如0-RTT连接建立、基于UDP的传输、数据流多路复用和快速恢复等,这些特性有助于提高性能和安全性。与HTTP/2相比,HTTP/3采用了新的二进制编码协议(QUIC Crypto)来加密和验证数据,以提供更好的安全性。

此外,HTTP/3还可以更好地适应现代网络环境下的多元化应用需求。由于QUIC协议基于UDP协议,因此可以更好地适应移动网络和高丢包率网络等不稳定的网络环境。同时,HTTP/3可以更好地支持多媒体内容和实时通信等应用场景。

188.前端如何实现截图?【web应用场景】

前端实现截图需要使用 HTML5 的 Canvas 和相关 API,具体步骤如下:

  1. 首先在页面中创建一个 Canvas 元素,并设置其宽高和样式。
  2. 使用 Canvas API 在 Canvas 上绘制需要截图的内容,比如页面的某个区域、某个元素、图片等。
  3. 调用 Canvas API 中的 toDataURL() 方法将 Canvas 转化为 base64 编码的图片数据。
  4. 将 base64 编码的图片数据传递给后端进行处理或者直接在前端进行显示。

以下是一个简单的例子,实现了对整个页面的截图:

htmlCopy code<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>截图示例</title>
    <style>
      #canvas {
     
        position: fixed;
        left: 0;
        top: 0;
        z-index: 9999;
      }
    </style>
  </head>
  <body>
    <h1>截图示例</h1>
    <p>这是一个简单的截图示例。</p>
    <button id="btn">截图</button>
    <canvas id="canvas"></canvas>
    <script>
      const canvas = document.getElementById('canvas');
      const ctx = canvas.getContext('2d');
      const btn = document.getElementById('btn');
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;

      btn.addEventListener('click', () => {
     
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.drawImage(document.documentElement, 0, 0);
        const imgData = canvas.toDataURL();
        console.log(imgData);
      });
    </script>
  </body>
</html>

这个例子中,在页面中创建了一个 canvas 元素,并设置其宽高和样式,将其放在页面最上方。在点击“截图”按钮时,通过 toDataURL() 方法将整个页面的截图转换为 base64 编码的图片数据,并打印到控制台上。

189.当QPS达到峰值时, 该如何处理?【web应用场景】

当QPS达到峰值时,可以从以下几个方面来进行优化:

  1. 数据库优化:数据库的优化包括优化SQL语句、使用索引、避免全表扫描、分表分库等措施,以提高数据库的读写性能。

  2. 缓存优化:缓存可以降低对数据库的访问频率,提高响应速度。可以使用Redis、Memcached等缓存技术,减轻服务器负载。

  3. 代码优化:优化代码可以提高代码的执行效率,减少不必要的开销。可以通过一些优化手段,如减少不必要的代码执行、避免循环嵌套、避免不必要的递归调用等来提高代码的性能。

  4. 负载均衡:负载均衡可以将请求分发到多个服务器上,减少单个服务器的负载,提高整个系统的性能和可用性。

  5. 异步处理:将一些计算量大、耗时长的操作异步处理,减少对主线程的阻塞,提高响应速度。

  6. CDN加速:使用CDN技术可以将静态资源缓存到CDN节点上,提高资源的加载速度,减少服务器的负载。

  7. 硬件升级:可以通过升级服务器硬件,增加带宽等方式来提高系统的处理能力。

以上是一些常见的优化手段,需要根据具体情况进行选择和实施。

190.js 超过 Number 最大值的数怎么处理?【web应用场景】

js 超过 Number 最大值的数怎么处理

在 JavaScript 中,超过 Number.MAX_VALUE 的数值被认为是 Infinity(正无穷大)。如果要处理超过 Number.MAX_VALUE 的数值,可以使用第三方的 JavaScript 库,如 big.jsbignumber.js,这些库可以处理任意精度的数值。

例如,使用 big.js 库可以将两个超过 Number.MAX_VALUE 的数相加:

const big = require('big.js');

const
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值