字节暑期新业务前端一面
- 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));
求二面!!!
