3

【第四十二期】米哈游后台golang开发面经

 2 years ago
source link: https://studygolang.com/articles/35538
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【第四十二期】米哈游后台golang开发面经

itmrtan · 5天之前 · 460 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    

介绍一下自己

一开始问项目(我的项目跟网络相关)中的拥塞控制、流量控制;

简单介绍了一下协议做的事情。有什么拥塞控制协议:Reno和BBR

介绍一下Reno协议的工作方式;

UDP 和 TCP 的区别,都适合什么场景:在游戏中使用KCP协议比较多。

引申了一下HTTP 的状态码:1~5开头各是什么作用

用HTTP可以实现主动推送的功能吗,为什么不使用HTTP而是使用 websocket(项目中使用了websocket )

HTTP1.1 中也实现了长连接,但是这个长连接中服务器还是被动的,而且HTTP都是基于文本的,虽然底层TCP没有断开,发送消息还是包含太多不必要的头部信息(带宽消耗大),所以在某些场景还是 websocket 好用。

HTTP2中对上述的两个缺点做了些优化,比如压缩头部,再比如可以支持服务器主动推送(相当于预加载),但是客户端还是主导地位,可以发送RST_STREAM 来显式的停止这种推送。

TCP 的各种标志位(发现我不熟这些标志位),又开始问TCP的三次握手

TCP 有多个控制位,SYNC是开启连接,FIN是结束连接(单向断开,优雅断开),ACK是指回复包,RST是异常断开(双向都直接不能处理了),PSH是类似于FLUSH,告诉对方可以将缓冲区的数据直接上报道应用层了(还是有序的),URG(把这一个包上报应用层,数据包可能是无序的)

问 golang 的协程:Goroutine 阻塞的话,是不是对应的M也会阻塞

问一道思考题:如何并发100个任务,但是同一时间最多运行的10个任务(waitgroup + channel)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK