问的非常仔细,讲不清楚是不会给过的
-
1.STL用过吗,说下用过STL的哪些组件
-
2.map和unordered_map的区别
一面也问了,当时答不好,现在又没答好,而且问的更深。。
map底层是红黑树,unordered_map是哈希表
红黑树的增删查复杂度都是O(lgn),unordered_map是O(1)
STL里,unordered_map采用哈希表实现,用桶存放hash冲突的值,hashmap会在插入元素时自动增加桶的数量 -
3.什么时候用map/unordered_map
需要有序输出的时候用map -
4.hash表的查询复杂度?增删呢?
O(1) -
5.线程和进程的区别
-
5.1.线程中的共享内存和进程之间的共享内存的区别
-
6.TCP和UDP的区别
-
7.什么时候用TCP,什么时候用UDP
UDP实际用处并不大,只在局域网/NAT穿透才需要UDP,非常局限
视频传输实际上也是基于HTTP的,而不是UDP
非要让UDP可靠,还不如用TCP
也可以选择QUIC协议,可靠的UDP协议
1)建立连接延迟小,只需1.5RTT,加上加密控制
2)连接迁移,TCP采用源目的的IP/PORT,切换网络时要重连,QUIC采用ID标识连接,切换网络无需重连
3)前向纠错
4)改进的拥塞控制 -
8.那视频直播用的是什么协议
RTMPS,基于TCP+HTTPS -
9.为什么用UDP,TCP不是也挺方便的吗
没错,TCP就是更方便 -
10.那DNS用的是什么协议
DNS是TCP+UDP
访问局域网里的DNS服务器的时候,用UDP;到根服务器里查询ip的时候,用TCP -
11.那迅雷的p2p下载用的是什么协议
-
12.问个问题,弹幕长1-30个字,敏感词库100w单词,怎么剔除敏感词
map/trie -
13.有的敏感词有拼音代替,怎么匹配到
说了很久,没给出他满意的方案,最主要的原因是拼音可能匹配到多个词语,所以比较复杂 -
14.C++11之后的新特性?
答了coroutine,然后被疯狂问 -
15.为什么要coroutine?直接在线程上优化不好吗
1)协程在用户态上实现,有自己的状态寄存器和栈,切换开销比线程小
2)一个CPU可以开上万个协程,高并发
3)无需原子操作加锁同步,降低开销 -
16.什么时候用协程,什么时候用线程?
协程适用于IO密集型任务
进程适合CPU密集型 -
17.屏障在多线程中的作用,屏障是只和编译器优化相关的吗?