追一科技面经:
时间:7.25晚上19:30
方式:电话一面
岗位:C++/GO后台开发工程师(20秋招提前批)
时长:30分钟左右
1. 自我介绍
2. 介绍下单例模式
答:局部静态变量实现单例模式,在C++11中静态局部变量是线程安全的。(面试官希望能答出:这里为什么采用静态局部变量,怎么保证线程安全的)
3. 不同进程访问静态变量是否是同一个实例?
答:全局变量不管是不是静态的,在多进程模型下都是每个子进程一份,互不影响,也就是说如果一个进程修改了这个变量的值,那只对该进程有效,其他子进程看不到修改后的值。(考察:进程的地址空间)
4. 基类中new一个子类,讲下构造函数和析构函数的顺序?
答:先调用基类的构造函数,再调用子类的构造函数,析构函数调用顺序相反。(考察的是C++基础)
5. 讲下内存泄漏
答:new和delete成对使用,malloc和free成对使用;(考察的是C++基础)
6. 讲下野指针
答:野指针指向一个已删除的对象或 申请访问受限内存区域 的指针。比如delete后没有置空,free后没有置空,此时指针指向的就是垃圾内存,该指针就是野指针。(考察的是C++基础)
7. 介绍下TCP快重传
答:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。(考察的是C++基础)
8. 讲下链表翻转
答:从原链表的头部一个一个取节点插入新链表的头部;
ListNode* ReverseList(ListNode*pHead){ ListNode* prev=NULL; while(pHead) { ListNode* next=p->next; p->next= prev; prev =p; p= next; } return newh; }
9. 讲下红黑树
答:R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
10. 红黑树左旋
答:红黑树的左旋操作
假设待左旋的结构中,P为父节点,S为孩子节点。左旋操作后,S节点代替P节点的位置,P节点成为S节点的左孩子,S节点的左孩子成为P节点的右孩子。
红黑树的右旋操作。
假设待右旋的结构中,P为父节点,S为孩子节点。右旋操作后,S节点代替P节点的位置,P节点成为S节点的右孩子,S节点的右孩子成为P节点的左孩子。
11. 讲下不同进程怎么访问共享内存的?
答:一个进程创建共享内存区域,然后把共享区域的地址链接到本进程的地址空间;其他进程若访问该共享内存,只需把共享内存区域的地址链接到进程的地址空间即可。
12. 假如进程A和进程B访问共享内存(包括信号量),如果进程A和进程B异常退出,信号量是否还在?
答:我理解的是还在,只要代码里没有调用信号量的销毁函数,那信号量就一直在。
13. 不同进程是否可以监听同一个端口?怎么做到多个进程监听同一个端口的?
答:可以,比如nginx服务器中的多个worker进程监听同一个端口,
14. 当有个请求到达,多个进程之间怎么处理这个请求?
答:比如在nginx服务器中,当有请求到达时,多个worker进程先去竞争互斥锁,谁拿到互斥锁谁来处理这个请求。