说实话,我之前以为字节的面试会很难很难. 但事实上我觉得非常简单. 不知道是我最近面试的很多的原因.我只是一个二本院校毕业的电子专业的.工作经验3年.代码编程什么的都是自学的,学校也不教这个东西.而且我不擅长八股和leetcode上刷题.
那为什么我觉得字节面试的很简单呢. 是因为他问的都是比较浅薄的C++知识.至少我是这么觉得的.因为很多问题可以继续追问到汇编和编译层面的东西.比方说跟我在欧特克的面试比起来,字节就显得相当简单了.但是字节问的更多的项目上和实际上用到的东西,比方说崩溃,多线程处理,内存溢出之类的问题,可能更贴近实际操作上的东西.
到现在我三面都过了. 等着HR 回头给我最后一面就行了.
我学历低,离职率也比较高,HR也很有可能给我挂掉.所以能不能最终拿到offer也不好说.
下面是面经:
一面:三四十分钟左右
问项目的东西,项目用到的东西
1.问了线程锁的相关内容
2.问了QT信号槽的机制, 和线程安全方面的问题(多线程连接用直连会怎么样..)
3.设计模式 让我手写了一个饿汉. 我是用伪代码写的...
3.1 然后问我怎么样可以让他线程安全
4.手写算法是 二叉树的最小深度
5.知道我封装过SDK. 问我做SDK要注意什么东西.
5.1 SDK申请内存是交给外部还是内部,他们要注意的地方.
5.2 动态库的加载的两种方式,他们的优缺点
5.3 动态库加载失败的几种可能
二面:50分钟左右
简单自我介绍。简单问了点项目的东西,
从项目上看我经常用qt,考我信号槽(我直接把信号槽原理, moc机制,元对象机制,信号槽的实现方式都说了一遍)
问虚函数(我从编译的角度以及虚函数在运行的时候的实现方式都说了一遍)
move函数的作用( 从右值引用的地方开始引入来解释这个move,以及他的效率和作用部分来解释)
提问多线程是怎么处理的:我先说用互斥等。。 他提问怎么做到线程同步的。
锁(会让你手写锁的, 我写了一个递归死锁,一个多线程死锁, 还问我怎么改这个递归死锁,我说直接用递归锁就行了,还介绍到我会用读写锁,)
问了很多内存泄漏的处理。怎么预防等等。。 (后面我提问的时候知道这个小组设计到图形算法处理的部分,有比较多内存泄漏的地方)
手写算法题:
两个链表相加
三面:一个小时
其实跟二面一样.问我项目,然后从项目问我东西.
遇到crash是怎么处理的
内存溢出是怎么处理的.尤其是栈溢出是怎么处理的呢.
技术上的东西问的很少.而且我觉得问的很简单..
简单问我指针是什么...
都特别简单, 简单到我没有什么印象了.
然后我问暂时的职业规划.未来的发展方向
然后聊了一会 就开始写算法题了
这个算法题是 从集合里面输出所有的子集:
这个我leetcode上很久以前写的 只有一点点影响.而且这个面试官会问你是怎么思考的,并且在你回答思考的逻辑给你提示和提问. 总的来说就是在那写之前是有一个讨论的.我拼命回忆以前做的这道题.发现驴头不对马嘴..我就换了个思路 我自己想.自己写.我说出我的思路. 然后面试官说:emm我觉得你说的可行.那你就照着这个思路写吧.然后慢慢的就写出来了,因为***上的网页面试,是可以运行的. 写完之后自己试了一下输入输出没有问题就差不多了.
2021/10/12号 更新记录
好气....我三面都面完了,都准备接下来HR面试,然后入职了.
HR告诉我,我的简历被隔壁的剪映部门看上了,leader准备找我谈谈.
应该是因为我以前一直做过QT客户端的开发,跟剪映的这个部门对得上.
好家伙,得重新面试了.
剪映部门:
四面:
一面比较简单,问的问题都是基本的C++问题跟上面的差不多.
有一个我回答错了:
他给了很多类,让我说出来类的大小:(大概是下面这样的)
class A
{}
class B
{
public:
virtual void fun1();
int a;
char b;
}
class C
{
public:
virtual void fun2();
}
class D : public B
{
int c;
}
class E : public B, public C
{
}
class F : public B, public C
{
virtual void fun3();
}
我回答F的大小的时候错了.
还问了STL map和unordered_map的区别,我简单说一个是红黑树一个是哈希表
反问我unordered_map是怎么解决哈希冲突的.(我没有回答上,我说我知道怎么解决哈希冲突,但是我没有深层次的了解unordered_map底层是怎么解决哈希冲突的)
其他的比较简单哈. 我都记不住了;
算法题刚开始让我手写一个 线程安全的单例模式,(我回答之前的面试问过啦)
然后换了一个 两个大数字的string类型相加,我哼哧哼哧给写出来了.
他读了代码.有几个细节跟我交流然后改好了.
面试官说思路没有问题.
这次的面试就算过了
本来我以为这个技术面都结束了,结果第五面还是技术面(这次的面试难度一下就上来了,我表现的非常不好)
先问一下项目和工程的东西
最近一两年最大的收获是什么
怎么用dump信息的.
怎么处理内存泄漏的
以前的项目测试是怎么测试的
Qt的元对象机制
windows与mac的不同(文件系统怎么不同,qt的UI处理上有什么不同)
windows下的消息循环是什么样子的
Qt的窗口刷新机制是什么样子的
Qt下 父类和子类的窗口刷新机制是怎么样子的
Qt下 兄弟类的刷新机制是怎么样子的
Qt下 兄弟类互相被遮盖的地方,他们的刷新机制是怎么样子的
(上面一大串问题给我整懵了,好多不会....)
Qt下的线程有哪些方式(还问了Qfetch..)
然后问了C++的东西
class A
class B
{
A a;
}
上面这个代码有什么问题?
多继承的时候,虚函数表什么怎么处理的
多继承下会遇到哪些问题(我说重名函数会有问题,他问那要怎么解决呢)
C++ 下的int大小,然后long int大小,double大小(分别问32位和64位下的大小都问了)(我没回答上,给我整忘了...)
问我用过QML没有.
其实好多没有回答上来,回忆下来大概就这些个问题.
等着HR 给我回复吧....(大意了..我以为这个是HR面试,我都没有准备什么东西)
这次的面试没有要写算法题, 但是前前后后也问题了大概四五十分钟的样子.