北森一二面后端(谈offer了 可以交流一下)
1、 自我介绍
2、 你有没有体现你价值的东西,或者是惑你比较满意的项目
3、 介绍项目
4、 介绍一下服务器实现的流程,i/o模型
5、 Epoll的建立流程,线程池
6、 当你接收到数据的时候,用线程池去处理数据,他们之间的交互是怎么样的
7、 Epoll的工作原理,各个函数的作用,从监听树到就绪链表是由什么触发的呢,是怎么将就绪的事件放到就绪链表的。
8、 MD5加密会出现什么问题,如果我现在对它有一个更高的安全要求,可以怎么做。
9、 中介者模式
10、 map是放在进程里的?当用户量过大的时候会出现什么问题?那你这个问题可以怎么解决?
11、 数组和链表的区别
12、 队列和栈两个数据结构的区别
13、 树的广度优先遍历
14、 哈希表的实现原理、哈希冲突的解决
15、 生成1-1000的数放到数组里,但是是随机的不能重复的不能有序。应该怎么做
16、 TCP的三次握手、四次挥手,连接断开的时候会发送什么、客户端和服务器分别处于什么状态
17、 滑动窗口
18、 在网络通信,发送端发送数据包的时候,是怎么把数据包传送给接收端的,也就是他是怎么找到接收端然后发送包的(具体的过程)
19、 在网路中是如何根据ip和端口号找到对应的主机的。
20、 什么是阻塞i/o、什么是非阻塞i/o。阻塞的什么?
21、 当我们调用sleep的时候,他调用的线程会变成什么状态
22、 当我们访问淘宝的时候,从浏览器到网络到对方的服务器中心,中间的具体实现过程。
23、 做项目的时候遇到的最大的挑战是什么?是怎么解决的?
整体面试感觉挺好的,面试官也没有咄咄逼人的状态。前面的问题主要是基于项目展开的。问题相对来说都还是比较基础的,也会问一些比较底层是实现(比如epoll是怎么把就绪的I/O事件放到就绪链表的),但是不多。1、 线程间同步互斥有哪些方式
2、 互斥锁有的是能跨进程使用的,有的是不能跨进程使用的,为什么有的能跨进程使用有的不能
3、 条件变量用到了什么场景?用信号量是不是也可以?(可以,那你为什么用条件变量+互斥锁)
4、 二分查找的时间复杂度是多少?哪些数据结构支持二分查找
5、 除了有序的数据结构还有其他的吗?
6、 数据结构的字典,它的查找过程,是怎么根据key值找到value的?
7、 map是线程安全的吗
8、 假设一个数据结构不是线程安全的,我们要调用它进行读操作和写操作,可以选择读加锁和写加锁或者读写都加锁去保证它,那你觉得应该选哪个
9、 当我们读加锁的时候,我们读的时候是不是也会被阻塞?
10、 数据库的ACID,你理解的一致性是什么
11、 隔离级别
12、 隔离级别有哪些实现方式
13、 Vector和list有什么区别?它是怎么根据索引下标去得到对应的值的。(纠正了一个问题vector查找的时候时间复杂度不是o(1),当我们查找的时候还是得遍历,它是根据索引下标去得到)
14、 MD5加密
15、 生产者消费者是干什么的
16、 你为什么要进行10个线程的创建和销毁
17、 你觉得10个10个创建有什么不好的地方
18、 假设一个场景,我去请求mysql或者redis,它报了一个socket超时的异常,有可能是哪的问题。
19、 检测网络是否畅通用什么命令
20、 TCP的三次握手过程,每一次客户端和服务器的交互发送了什么
21、 怎么保证缓存的数据和数据库的数据是一致的。