面试题8(day2)
Opened this issue · 0 comments
1、serviceworker 缓存命中率、缓存颗粒化
缓存命中上报
- 缓存颗粒化
- 缓存 *.html 静态资源文件
缓存收益和成本
收益
- 省去建立tcp的连接时长,加快首屏速度
- 减少静态资源服务器的负载
成本
- 数据不一致问题(更新策略)
- 代码维护成本
2、nativeApp 如何实现与前端交互 (JSBridge)
https://juejin.im/search?query=JSBridge&type
3、docker 相关概念(image、container、dockerfile)
Docker 和 虚拟机的区别 https://blog.fundebug.com/2017/05/31/docker-and-vm/
虚拟机是虚拟一套硬件,在主操作系统上虚拟从操作系统
Docker是运行在操作系统之上的后台进程
image、container、dockerfile https://juejin.im/post/5b260ec26fb9a00e8e4b031a#heading-18
镜像(image)
镜像类似一个文件系统,提供创建容器所需要的程序、库,等配置信息。
镜像构建的时候,会分层构建
容器(container)
容器是镜像运行时创建的实体,容器可以被创建、停止、启动、删除、暂停。
容器的存储层生命周期与容器是一致的,如果保证存储数据依赖容器,可以使用数据卷(Volume)。
dockerfile
通过dcokerfile文件,可以创建镜像。
https://juejin.im/post/5922e07cda2f60005d602dcd
https://www.qikqiak.com/post/dockerfile-best-practice/
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
4、音频文件如何分片下载、做到断点续传
5、sentry 如何进行错误收集 https://segmentfault.com/a/1190000019304469
6、服务端如何解决高并发(nodeJs、java)
7、DNS劫持
8、base64有什么优缺点
https://segmentfault.com/q/1010000004224127
9、nodejs如何创建多进程
https://github.com/laoqiren/web-performance
10.设计模式种类
https://yang657850144.github.io/javascript-design-patterns/#/
11.Https比http性能慢在哪里
加密、解密
请求体体积
12.Get和Post请求的差别
Get请求长度限制(默认2K)
默认缓存Get请求
Get发送1个TCP数据包,POST发送2个TCP数据包(先发送Header,服务端返回100,然后再发送data,服务端返回200)
13.除了FMP上报,有没有其他的上报类型 https://www.tuicool.com/articles/RzIFrym
白屏时间(DNS解析耗时+服务端耗时+网络传输耗时)
用户可操作时间
总下载时间
错误监控 (sentry)
14.XSS和CRSF攻击预防特点
XSS
转义用户操作的信息(输入、输出检查)
httpOnly 防止截取 cookie
CRSF
验证码规避用户不知情操作
增加token
检查refer
15.304状态码理解
本地缓存失效,请求服务端校验,检测Last-Modify和Etag
16.算法
100W条字符串选出重复最多的十条
1.分治
2.hash
3.堆排
100w字符统计使用次数
Hash
4.算法题: 10w数字里找到最大的10个数
分100块(分治**),一块1000个数字,每次取最大的10个,就剩下1000个大数字,最后在这个1000里找到最大的10个(时间复杂度O(n))
100首歌,怎么生成随机列表
1.取100随机数
2.每生成一个数组减一
3.重复上述操作
或者每次随机一次,权重加一。被选中的歌曲权重置0
100万的手机号码怎么存储最省空间
- 列成字符串
2.进行压缩
数组排序
从数组中取出几个最小的值
海量数据处理算法—Bit-Map
https://blog.csdn.net/hguisu/article/details/7880288
哈夫曼Huffman编码树
https://blog.csdn.net/fx677588/article/details/70767446
编码题
// sum(1, 2, 3).sumOf(); //6
// sum(2, 3)(2).sumOf(); //7
// sum(1)(2)(3)(4).sumOf(); //10
// sum(2)(4, 1)(2).sumOf(); //9
function sum() {
let sum = 0
let list = [...arguments]
const fn = function () {
list = list.concat([...arguments])
return fn
}
fn.sumOf = function() {
return list.reduce((prev, cur) => {
sum += cur
return sum
}, sum)
}
return fn
}
sum(1,2)(3)(4).sumOf()
express 学习
掌握 Array.prototype.reduce 方法
实现promise
实现webpack 模块化
nginx 学习
热部署
master 管理进程与 worker 工作进程的分离设计,使得 Nginx 具有热部署的功能,可以在 7 × 24 小时不间断服务的前提下,升级 Nginx 的可执行文件。