主题
场景题
如何回答?
- 交代背景,什么背景下产生的这个需求
- 调研方案
- 方案落地
- 反思追求最优解
JS超过Number最大数值怎么处理
一、需求背景
- 大数据处理
- 数据分析
- 金融
二、解决方案
- 使用
BigInt
js
// 安全数值,能够进行逻辑运算
const bigNum = BigInt('');- 使用
decimal.js、big.js库
js
const decimal = new Decimal('1e+308');如何解决大批量请求并发问题
滑动窗口算法,专门用来控制流量
解决方案
- 请求队列: 浏览器允许6个并发请求,那么队列容量为6,请求完成出队,下一个请求入队,保持队列长度为6
- 防抖节流
- 分页加载
如何实现网页截图
- canvas: 使用html2canvas 把dom绘制成canvas图片最后下载
- Puppeteer: 用代码远程控制浏览器,用作:做自动化测试、爬虫/数据采集、批量截图 / PDF 生成、做前端渲染/预渲染
如何修改第三方库
如果直接修改node_modules中的文件,重新下载依赖就会丢失。所以我们使用patch打补丁方式来进行修改
- 下载依赖
shell
npm install patch-package postinstall-postinstall --save-dev- 修改node_modules/lib-name 某个库的bug后
shell
npx patch-package 'lib-name'它会在你项目中新建一个 patches/ 文件夹,生成一个 .patch 文件
js
patches/some-library+1.2.3.patch- 配置package.json
json
{
"scripts": {
"postinstall": "patch-package"
}
}这样别人拉代码后,只要 npm install,补丁就会自动打上
优化QPS
QPS: 每秒请求数
- 请求限流: 请求时间间隔短的不处理
- 请求合并: 原理就是防抖,同个接口一段时间内只处理最后一次请求
- 请求缓存: 请求参数、请求方法、请求逻辑没有发生变化,则使用缓存
- 任务队列: 滑动窗口
小程序双线程架构了解
一、逻辑层(App Service)
- 运行在 JavaScriptCore 引擎中,负责小程序业务逻辑(处理数据、处理时间、处理网络)
- 不能直接操作视图,需要通过通信机制
二、渲染层(View)
- 运行在 WebView 中,负责渲染小程序页面
- 接收逻辑层的更新UI指令,并渲染页面
- 独立webview,并行渲染多个页面