C++ Interview
行也成文
# C++ Interview
# Meta App UE初级工程师
笔试:
三步式,依次递进
一面:
- [链表] 取链表中间节点,如果是环形链表呢?
- [树] 二叉树,二叉搜索树,查找时间复杂度以及极限情况。
- 怎么平衡二叉树的平衡(红黑树)。
- 怎么判断两棵树是否是镜像树
- 看你写过项目,用过 epoll,那你说为什么使用 epoll,还有哪些 IO 复用技术,对比其他苦(未明确提及select,poll), epoll 有什么好处,select, poll 的特点呢?
- 你知道长链接需要保活么?为什么需要保活?你的项目有实现吗?你怎么实现的?
- 游戏中会用到哪些数学知识?
- 最近有学到什么东西
二面:
- 若是你来实现 protobuf,你应该会怎么实现?键值对方式,数组方式的分别?序列化时,确定类型和不确定类型的区别在哪里?整型数字和整型数组的区别在哪里?整型数组和字符串之间的关系呢?
- 常用的数据结构有哪些?说两个熟悉的,并说一下他们的应用场景?hash 表你熟悉吗,这个效率是怎么样的?hash 碰撞的解决方案除了扩容还有哪些?
- 多线程中怎么实现的同步的?多线程中的锁有哪几种?
- 你项目里你说用过 Redis,那说一下用 Redis 是做什么的?是 C 端的还是 S 端的过程?为什么用 Epoll,不是有很多现成的小框架吗?
- 将下列结果输出出来
class A {
public:
int j = 5;
int i = 1;
void exec() {
i = 2;
}
}
class B {
public:
int i = 3;
int j = 6;
void exec() {
i = 4;
}
}
int main() {
A a;
B *bp = (B *)&a;
B b = *bp;
a.i // = ?
bp->i // = ?
b.i // = ?
bp->exec();
a.i // = ?
bp->i // = ?
b.i // = ?
b.exec();
a.i // = ?
bp->i // = ?
b.i // = ?
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- 给定一个坐标系,只允许对它的轴进行反轴和交换位置,可以构建出多少种坐标系?
- 怎么判断左手坐标系和右手坐标系?你知道向量的计算吗?
- 对一个空对象调用他的方法,会发生什么情况
# 上海华泰
一面:
- 析构函数用来做什么的,能不能重载?你重载过么?
- 指针和引用的区别?
- 多态是怎么实现的
- socket 编程的基本流程
- 多线程和多进程的区别。进程间的通信方式,线程间的通信方式,线程同步
- Linux 的 IO 的通信模型
- 分析简历上的项目经历
# 益玩网络
- 讲一讲封装,继承,多态?多态怎么实现的?你用过纯虚类么?为什么要使用虚函数?
- map 和 unordered_map 的内部实现区别?
- Linux 五种 IO 模型、epoll 的特性有哪些?ET、LT 的区别?
- 怎么判断链表是否有环?
- 给定一组数,和一个数,怎么判断两个数相加等于这个整数?
- new 和 malloc 的区别,可以重载 new 和 delete 吗?
- 阻塞式 Recv/Send 和非阻塞式的区别?
- TCP 的三次握手的原理,四次挥手的原理,为什么会出现 TIME_WAIT。
- 线程的使用,你知道怎么同步吗,怎么使用?你知道哪些锁吗?
# 卓智达科技
- 两个栈实现一个队列
- epoll 的使用,ET 和 LT 的区别
# 二郎神科技
- 指针和引用的区别