很多C 同学的项目都是webserver,属于网络编程项目。今天来看看微信,是怎么考察网络和系统的,这次分享是校招实习的面经。
我看了下,问的问题还是挺深的,面微信的话,计算机基础还是得学深和学扎实一些。
面经
- 存字符串用
unordered_map
还是用map
好?为什么?要怎么优化? - 有一个请求队列,有读者线程和写者线程 在同时操作这个共享的请求队列,属于什么样的读写模型 ?
- 一写多读模型的情况下怎么解决读写冲突的问题?加锁是一种方案,但是会影响性能,有没有更好的办法?
- select和epoll有什么区别?
- epoll中可以无限承载socket的连接吗?创建socket时的返回值是什么?
- fd在系统中有限制吗?可以无限申请吗?
- 一个服务端进程最多可以和多少个客户端进行连接?和fd的数量有关吗?
- 假设这样一个场景,客户端在和服务端进行TCP的三次握手的过程中,突然间客户端宕机了,那么这个socket怎么处理?可以删除吗?是怎么删除的?
- 在服务端调用
accept()
之后,socket就是一直可读的吗?就是调用read()函数就一直可以读吗?会阻塞吗? - 如果服务端read()函数发生了阻塞,对方客户端异常关闭了,一直没有发数据过来,服务端会一直阻塞吗?会导致服务端卡死吗?
- 在第七题中提到的这个情况,epoll可以解决这个问题吗?如果要识别这个问题,怎么识别?
- linux进程创建线程的流程是怎么样的?
- 线程共享进程的资源在linux中是怎么实现的?
- 线程有自己私有的栈,那么这个栈的内存是被分配到哪里的?是放在进程所属的内存里面,还是说放在独立于进程外部的内存中?
- 什么是协程?协程有什么用?
- 场景题:一致性哈希相关
面试总结
追问到深处就不知道怎么回答了,面对追问就不知道怎么回答了,喜欢乱说。
----