跳转到内容

场景题

如何回答?

  1. 交代背景,什么背景下产生的这个需求
  2. 调研方案
  3. 方案落地
  4. 反思追求最优解

JS超过Number最大数值怎么处理

一、需求背景

  1. 大数据处理
  2. 数据分析
  3. 金融

二、解决方案

  1. 使用BigInt
js
// 安全数值,能够进行逻辑运算
const bigNum = BigInt('');
  1. 使用decimal.jsbig.js
js
const decimal = new Decimal('1e+308');

如何解决大批量请求并发问题

滑动窗口算法,专门用来控制流量

解决方案

  1. 请求队列: 浏览器允许6个并发请求,那么队列容量为6,请求完成出队,下一个请求入队,保持队列长度为6
  2. 防抖节流
  3. 分页加载

如何实现网页截图

  1. canvas: 使用html2canvas 把dom绘制成canvas图片最后下载
  2. Puppeteer: 用代码远程控制浏览器,用作:做自动化测试、爬虫/数据采集、批量截图 / PDF 生成、做前端渲染/预渲染

如何修改第三方库

如果直接修改node_modules中的文件,重新下载依赖就会丢失。所以我们使用patch打补丁方式来进行修改

  1. 下载依赖
shell
npm install patch-package postinstall-postinstall --save-dev
  1. 修改node_modules/lib-name 某个库的bug后
shell
npx patch-package 'lib-name'

它会在你项目中新建一个 patches/ 文件夹,生成一个 .patch 文件

js
patches/some-library+1.2.3.patch
  1. 配置package.json
json
{
	"scripts": {
		"postinstall": "patch-package"
	}
}

这样别人拉代码后,只要 npm install,补丁就会自动打上

优化QPS

QPS: 每秒请求数

  1. 请求限流: 请求时间间隔短的不处理
  2. 请求合并: 原理就是防抖,同个接口一段时间内只处理最后一次请求
  3. 请求缓存: 请求参数、请求方法、请求逻辑没有发生变化,则使用缓存
  4. 任务队列: 滑动窗口

小程序双线程架构了解

一、逻辑层(App Service)

  1. 运行在 JavaScriptCore 引擎中,负责小程序业务逻辑(处理数据、处理时间、处理网络)
  2. 不能直接操作视图,需要通过通信机制

二、渲染层(View)

  1. 运行在 WebView 中,负责渲染小程序页面
  2. 接收逻辑层的更新UI指令,并渲染页面
  3. 独立webview,并行渲染多个页面

Will Try My Best.