robbiemie/keep-learning

面试题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万的手机号码怎么存储最省空间

  1. 列成字符串
    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 的可执行文件。