首页 > 字节跳动 客户端中台(C++) 超详细面经
头像
klaxxi
编辑于 2020-08-14 21:22
+ 关注

字节跳动 客户端中台(C++) 超详细面经

此面经禁止任何形式的转载,请各种公众号 知乎号绕道


一面

1.手写单例模式

C++ 静态局部变量 能保证线程安全

问了别的方式std::call_once或者静态成员变量,但是一般都会用静态局部变量

C++没有java的volatile能阻止指令重排,不能用DCL

2.malloc和new

malloc分配内存

new是操作符重载 分配内存+构造函数

3.多态

C++可以用继承和模板实现 个人更倾向于模板

4.继承

讲了下虚表

5.构造函数和析构函数能不能是虚函数

继承场景下,一般析构必须为虚,防止内存泄露。构造函数不能,结合虚表和构造析构的调用顺序来讲。

6.模板和继承的对比

模板默认内联,且没有虚表指针,调用开销小

7.模板的缺点

一个是编译慢一个是编译产物更占用内存

8.模板是怎么编译的

编译期碰到了就生成需要的代码,每个.o都会有用到的定义

所以链接的时候要去掉重定义,因此编的慢

9.智能指针

stl的三种 还有android的sp/wp都讲了一下,这块讲的比较细,面试官一直打断问细节

10.手写智能指针

11.左值右值的区别

12.完美转发

13.聊项目

14.算法 leetcode 92 反转链表 从m到n

二面:

1. 虚继承虚表

2. C++ 4种cast 区别和主要使用场景

3. 场景类算法题 有依赖关系的进程启动管理

类似leetcode 1136 平行课程

4. 聊项目

5.算法题 LFU leetcode 460


三面:

1. 聊项目

2. 下面的代码会发生什么?

		
		
class Foo {
public:
void A() {}
virtual void B() {}
void C() { std::cout << this << std::endl; }
};
Foo* temp = nullptr;
temp->A();
temp->B();
temp->C();
1)函数A,什么都不会发生;

2)函数B,crash

3)函数C,打印地址0

C++的成员函数,如果使用了this相关的,那么编译器在编译时会给函数入参加入this指针作为入参。A不需要,因此没有this指针作为入参;B和C需要,其中B是虚函数,需要找到虚表,即需要解引用,空指针解引用直接就会崩溃,C不需要解引用,只会打印空指针的地址0。

3.算法题xml解析 有一点类似leetcode 385/591 可以看看xml解析相关的实现



四面(HR面):

聊人生 挺轻松的

总体来说 字节的流程非常快 还是由于个人工作原因 很难约面试时间的情况下(面试大概花了十来天)  大概是三周拿到正式offer

更多模拟面试

全部评论

(9) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐