1. 当QPS达到峰值时,该如何处理?


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

  1. 数据库优化:数据库的优化包括优化 SQL 语句、使用索引、避免全表扫描、分表分库等措施,以提高数据库的读写性能。
  2. 缓存优化:缓存可以降低对数据库的访问频率,提高响应速度。可以使用 Redis、Memcached 等缓存技术,减轻服务器负载。
  3. 代码优化:优化代码可以提高代码的执行效率,减少不必要的开销。可以通过一些优化手段,如减少不必要的代码执行、避免循环嵌套、避免不必要的递归调用等来提高代码的性能。
  4. 负载均衡:负载均衡可以将请求分发到多个服务器上,减少单个服务器的负载,提高整个系统的性能和可用性。
  5. 异步处理:将一些计算量大、耗时长得操作异步处理,减少对主线程的阻塞,提高响应速度。
  6. CND 加速:使用 CDN 技术可以将静态资源缓存到 CDN 节点上,提高资源的加载苏苏,减少服务器的负载。
  7. 硬件升级:可以通过升级服务器硬件,增加带宽等方式来提供系统的处理能力。

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

2. js 超过 Nmuber 最大的数怎么处理?


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

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

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

const x = new big('9007199254740993');
const y = new big('100000000000000000');

const result = x.plus(y);

console.log(result.toString()); // 输出:100009007194925474093

这里创建了两个 big.js 对象 xy ,分别存储超过 Number.MAX_VALUE 的数值。通过 plus 将它们相加,得到了正确的结果。最后,通过 toString 方法将结果转换为字符串。

如果不依赖外部库,咋处理

JavaScript 中,数值超过了 Number 最大值时,可以使用 BigInt,它可以表示任意精度的整数。

使用 BigInt 类型时,需要再数值后面添加一个 n 后缀来表示 BigInt 类型。例如:

const bigNum = 9007199254740993n; // 注意:数字后面添加了 'n' 后缀

注意:BigInt 类型是 ECMAScript 2020 新增的特性,因此在某些浏览器中可能不被支持。如果需要在不支持 BigInt 的环境中使用 BigInt,可以使用 polyfill 或者第三方库来实现。

3. 使⽤同⼀个链接, 如何实现 PC 打开是 web 应⽤、⼿机打 开是⼀个 H5 应⽤?


可以通过根据请求来源(User-Agent)来判断访问设备的类型,然后在服务器端进⾏适配。例如,可 以在服务器端使⽤ Node.js 的 Express 框架,在路由中对不同的 User-Agent 进⾏判断,返回不同的⻚ ⾯或数据。具体实现可以参考以下步骤:

  1. 根据 User-Agent 判断访问设备的类型,例如判断是否为移动设备。可以使⽤第三⽅库如 uaparser-js 进⾏ User-Agent 的解析。
  2. 如果是移动设备,可以返回⼀个 H5 ⻚⾯或接⼝数据。
  3. 如果是 PC 设备,可以返回⼀个 web 应⽤⻚⾯或接⼝数据。

具体实现⽅式还取决于应⽤的具体场景和需求,以上只是⼀个⼤致的思路。

4. 如何保证⽤⼾的使⽤体验


【如何保证⽤⼾的使⽤体验】这个也是⼀个较为复杂的话题, 这个也不是问题了, 这个算是话题吧;

主要从以下⼏个⽅⾯思考问题:

  1. 性能⽅向的思考
  2. ⽤⼾线上问题反馈,线上 on call 的思考
  3. ⽤⼾使⽤体验的思考, 交互体验使⽤⽅向
  4. 提升⽤⼾能效⽅向思考

5. 如何解决⻚⾯请求接⼝⼤规模并发问题


如何解决⻚⾯请求接⼝⼤规模并发问题, 不仅仅是包含了接⼝并发, 还有前端资源下载的请求并发。

应该说这是⼀个话题讨论了;

个⼈认为可以从以下⼏个⽅⾯来考虑如何解决这个并发问题:

  1. 后端优化:可以对接⼝进⾏优化,采⽤缓存技术,对数据进⾏预处理,减少数据库操作等。使⽤集群技术,将请求分散到不同的服务器上,提⾼并发量。另外可以使⽤反向代理、负载均衡等技术,分担服务器压⼒。
  2. 做 BFF 聚合:把所有⾸屏需要依赖的接⼝, 利⽤服务中间层给聚合为⼀个接⼝。
  3. CDN 加速:使⽤ CDN 缓存技术可以有效减少服务器请求压⼒,提⾼⽹站访问速度。CDN 缓存可以将接⼝的数据存储在缓存服务器中,减少对原始服务器的访问,加速数据传输速度。
  4. 使⽤ WebSocket:使⽤ WebSocket 可以建⽴⼀个持久的连接,避免反复连接请求。WebSocket 可以实现双向通信,⼤幅降低服务器响应时间。
  5. 使⽤ HTTP2 及其以上版本, 使⽤多路复⽤。
  6. 使⽤浏览器缓存技术:强缓存、协商缓存、离线缓存、Service Worker 缓存 等⽅向。
  7. 聚合⼀定量的静态资源: ⽐如提取⻚⾯公⽤复⽤部分代码打包到⼀个⽂件⾥⾯、对图⽚进⾏雪碧图处理, 多个图⽚只下载⼀个图⽚。
  8. 采⽤微前端⼯程架构: 只是对当前访问⻚⾯的静态资源进⾏下载, ⽽不是下载整站静态资源。
  9. 使⽤服务端渲染技术: 从服务端把⻚⾯⾸屏直接渲染好返回, 就可以避免掉⾸屏需要的数据再做额外加载和执⾏。