字节暑期新业务前端一面
- TCP和UDP的区别
- udp面向有连接,需要三次握手,而udp面向无连接
- udp更安全,udp更不安全
- tcp头部占20字节,udp头部占8字节,udp的开销更小
- tcp面向字节,udp面向报文
- tcp有拥塞控制,而udp没有
- UDP丢包的优化方案
丢包的原因:UDP包过大、发送速率过快和recvfrom处理数据过慢
对应上面三种的解决方案
1. 增加系统发送和接受缓存区的大小
2. 增加应答机制,处理完一个包,在继续发包
3. 开辟两个线程,一个专门接收数据包,并存放在应用层缓存区;另外一个线程专门处理和响应数据包,避免处理数据造成丢包
- Websocket是什么?
html5的一中新协议,实现了浏览器和服务器的实时通信
- Websocket用的是TCP还是UDP,怎么实现Websocket全双工通信?
TCP
- http报文
请求行,请求体,请求体
- 强缓存字段和协商缓存字段
Cache-Control和Expries Etg和Last-Midefied,之后说了各种的特点,及说了下既能有了有了Last-Midefied为什么要Etg的原因
- 线程通信的方式
管道通信,消息队列通信,共享内存通信,信号量通信,socket,面试管说不能socket通信给我整不自信了,不就这5种嘛
- http正向代理和反向代理
1. 正向代理就是客户端代理,帮客户端找到访问其无法访问的资源;反向代理就是服务器代理,帮助服务器做负载均衡,安全防护等。2. 正向代理一般是客户端架设的,比如自己机器上安装了一个代理软件;反向代理一般是服务器架设的,比如自己集群中部署一个反向代理服务器。3. 正向代理中,服务器不知道真正的客户端是谁,以为访问自己就是真实的客户端;反向代理客户端不知道真正的服务器是谁,以为自己访问的就是真实的服务器。
- this指向编程题
const fn = () => { console.log(this); const a = function(){ console.log('a',this);} const b = () => { console.log('b',this);} let obj = { age:20, c:function(){ console.log('c',this); }, d:() => { console.log('d',this); }, e:function() { a(); b(); (()=> console.log('e',this))(); } } a() b() obj.c() obj.d() obj.e() } fn() // 1. window // 2. a window // 3. b window // 4. c obj // 5. d window // 6. a window b window e e
- 寻找无序二叉树树中第n个最小值的位置
input: n = 4,tree = obj output: [ [ 2, 2 ], [ 3, 3 ] ]
let obj = { val:14, left:{ val:4, left:{ val:5, left:null, right:null }, right: { val:8, left:null, right:null } }, right:{ val:7, left:{ val:7, left:null, right:null }, right: { val:3, left:null, right:null } } } const getMinN = (root,n) => { let stack = [root] let i = 0,j =0; let map = new Map() while(stack.length) { let len = stack.length i++ while(len--) { const n = stack.shift() j++ map.set({val:n.val},[i,j]) if(n.left) stack.push(n.left) if(n.right) stack.push(n.right) } j = 0 } // 得到排序的map数据 let sortArr = [...map.entries()].sort((a,b) => a[0].val - b[0].val) // 找到一样的 let ans = sortArr.filter((item,index,arr) => index >= n - 1 && arr[n - 1][0].val == item[0].val) // 加工一波 ans = ans.map(item => item[1]) return ans } console.log(getMinN(obj,4));
求二面!!!