-
Notifications
You must be signed in to change notification settings - Fork 0
/
上传功能(进阶)
57 lines (49 loc) · 2.75 KB
/
上传功能(进阶)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
半个小时内,怎样让面试官爱上你?
把这个上传功能有简单往深里挖!
向大圣老师学习:
1.菜鸟
1.axios.post+上传进度条+后端node接收文件
2.相当于想亲的妹子问你,你有什么擅长的:小学三好学生
2.10k
1.拖拽 粘贴
3.15k
1.分片 断点续传(开始得分)
中断(各种原因:断网、断电、程序崩溃等)》向后端询问并标记已经传输片段》为传输的进行标记
》只传输未被标记片段
4.20k
1.如何限制只能上传png格式的
1. .split()基本不得分的 因为.pdf文件重命名 就可以越过了,干掉这个方法
2.解决方法:文件头信息:
在操作系统中每一个文件都有自己的头信息(图片),并且是十六进制的。每一类文件都有固定规律可寻
十六进制数相同规律:GIF:前六个,JPG:前两个+后两个,PNG:前八个
可以通过判断文件头信息来确定只能上传png格式图片,其他一切范会报错
2.如何判断文件的唯一性
1.算hash 比如md5
2.文件过大,几个G,怎么算md5不卡顿
1.web-work
2.时间切片(学了react fiber架构get到的知识点,requestIdleCallback)
3.抽样
5.25k
1.文件切片数量过多,上传请求过多,导致卡顿,怎么处理
1.控制异步任务并发数量(本来一个头条的面试题)
6.各种场景的深挖
1.如果又报错,怎么重试,报错三次怎么统一终止所有切片
7.每个切片的大小如何控制,移动端和pc端网速不一样的
1.应该根据网速来动态调整包的大小
计算hash》webwork(js多线程,帮助主线程不卡顿)?异步通知(影分身)
抽样hash:1.每个切片切成2M
2.首尾两块拿掉
3.中间切片取首中尾2个字节
4.合并在一起,算出md5
保证无论多大,经抽样以后都在5M左右
相关算法:布隆过滤器》牺牲一点精读,获取高效率
2.TCP协议的慢启动
8.并发数+包控制如何实现?
浏览器的每一帧都有空闲时间,流畅》60FPS》1秒渲染60次》1帧16.6ms
渲染绘制 更新UI 动画 同步任务
|16.6ms| |16.6ms| |16.6ms| |远大于16.6ms|
在同步任务中利用空闲时间来计算,一旦有个优先级更高的同步任务返回浏览器控制权,等待下一次空闲,所谓浏览器的fiber架构,就是这个理念。
fiber架构:
1.虚拟dom从树拆成链表,易于中断
2.diff过程用空闲时间来做
3.加入fiber的react将组件更新分为两个时期phase 1,phase 2,这两个时期以render为分界,phase 1可以随时打断,phase 2不可