以下内容来自于应聘者回忆整理
【一面】
1、自我介绍
2、基础 排序算法有哪些
(1)选择排序,分为“简单选择排序”和“堆排序”(2)插入排序,分为“简单插入排序”和“希尔排序”(3)交换排序,分为“冒泡排序”和“快速排序”(4)归并排序(5)基数排序。
3、复杂度复杂度相同,讲一下快排的优势
4、讲一下 STLvector list 等的底层实现
5、存放数据量比较大的时候选择 vector 还是 list,数据量比较小的时候呢?
6、栈和队列的区别
7、死锁的条件
(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。. 一不满足,就不会发生死锁。.
8、进程线程优缺点
进程的优点 程序的并发执行和资源共享。 多道程序设计出现后,实现了程序的并发执行和资源共享,提高了系统的效率和系统的资源利用率。
进程的缺点 操作系统调度切换多个线程要比切换调度进程在速度上快的多。 而且进程间内存无法共享,通讯也比较麻烦。
9、进程通信方式类成员访问控制方式有哪些(private 和 protected 区别)
在同一类中可视为一样,但在继承中就不同了,private在派生类中不可以被访问,而protected可以。
10、常用设计模式
11、讲一下 malloc 和 new 的区别
malloc是C++语言的标准库函数;而new是C++语言中的操作符。
12、快排思想
【二面】
总体情况:一面完 10 分钟左右进行的
1、进程的状态
2、死锁的条件
3、解决死锁的方法
资源剥夺法和撤销进程法
4、 问了三个算法
5、讲一下内存管理
管理计算机内存的过程,将内存空间分配给程序以提高整体系统性能
6、自由存储区是什么
自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
7、 malloc 内存分配底层操作
8、用malloc 分配内存 1k 和 100M 有什么区别
9、TCP 三次握手和四次挥手 三次握手过程中做了哪些准备
10、 为什么有 TIME_WAIT
可靠地实现TCP全双工连接的终止 在进行关闭连接四次挥手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器将重发最终的FIN, 因此客户端必须维护状态信息允许它重发最终的ACK。 如果不维持这个状态信息,那么客户端将响应RST分节,服务器将此分节解释成一个错误(在java中会抛出connection reset的SocketException)。 因而,要实现TCP全双工连接的正常终止,必须处理终止序列四个分节中任何一个分节的丢失情况,主动关闭的客户端必须维持状态信息进入TIME_WAIT状态。
11、设计抢红包算法
总结:二面问的更深入