别人面试经验

发布时间 2023-10-10 22:07:21作者: 小海哥哥de

第一位

说实话,我之前以为字节的面试会很难很难. 但事实上我觉得非常简单. 不知道是我最近面试的很多的原因.我只是一个二本院校毕业的电子专业的.工作经验3年.代码编程什么的都是自学的,学校也不教这个东西.而且我不擅长八股和leetcode上刷题.
那为什么我觉得字节面试的很简单呢. 是因为他问的都是比较浅薄的C++知识.至少我是这么觉得的.因为很多问题可以继续追问到汇编和编译层面的东西.比方说跟我在欧特克的面试比起来,字节就显得相当简单了.但是字节问的更多的项目上和实际上用到的东西,比方说崩溃,多线程处理,内存溢出之类的问题,可能更贴近实际操作上的东西.
到现在我三面都过了. 等着HR 回头给我最后一面就行了.
我学历低,离职率也比较高,HR也很有可能给我挂掉.所以能不能最终拿到offer也不好说.

下面是面经:

一面:三四十分钟左右
问项目的东西,项目用到的东西
1.问了线程锁的相关内容
2.问了QT信号槽的机制, 和线程安全方面的问题(多线程连接用直连会怎么样..)
3.设计模式 让我手写了一个饿汉. 我是用伪代码写的...
3.1 然后问我怎么样可以让他线程安全
4.手写算法是 二叉树的最小深度
5.知道我封装过SDK. 问我做SDK要注意什么东西.
5.1 SDK申请内存是交给外部还是内部,他们要注意的地方.
5.2 动态库的加载的两种方式,他们的优缺点
5.3 动态库加载失败的几种可能
6. vector容器的 逻辑. 他的拷贝是怎么样子的
7. share_ptr的实现大概逻辑是怎么样子的
8. 遇到内存泄漏是怎么排查处理的
9. 遇到崩溃问题是怎么排查处理的
10. 以前遇到的什么问题是比较有挑战,并且什么怎么解决的.
11. 有没有用过其他的GUI框架
12. eletron和qt开发的区别
13. 有没有用过opengl,opencv的东西

二面: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面试,我都没有准备什么东西)
这次的面试没有要写算法题, 但是前前后后也问题了大概四五十分钟的样子.

第二位

211本 工作两年半 一直在写C++

面试部门
字节跳动上海穿山甲团队

面试时间
10.20-11.14

一面
算法题:LRU缓存实现,要求set\get操作o(1)时间复杂度,leetcode有原题

技术问题:

TCP滑动窗口
浏览器访问baidu.com的过程
https原理
epoll实现原理,和poll的对比
关于kafka的一个小问题
TCP握手挥手细节(特别细...)
MYSQL存储结构,主键索引和非主键索引在MYSQL中是如何存储、查找的
二面
算法题:一个N位数K,从N位中去掉M个数字,使剩下的数字最大,leetcode有类似题

技术问题:

SQL聚合查询语法(这个忘了竟然- -||)
一个SQL语句的执行过程
TCP拥塞控制
rb-tree和b+-tree的区别,INNODB为什么用b+-tree
给了两个事务,问在各种隔离级别下的执行结果
MVCC原理
ACID的涵义,MYSQL是如何保证的
三面(偏业务面)
算法题:单链表排序

(聊了很长时间的项目经验,问了啥问题已经是想不起来了...)
技术问题:

redis sds实现
缓存失效的几种场景,以及解决方案
四面(leader面)
算法题:二叉查找

技术问题:

goroutine的实现
缓存雪崩、击穿的解决方案
如何排查线上程序问题
protobuf为什么快
epoll原理
分布式系统优缺点,一致性是如何保证的
MYSQL存储结构
CPU寻址过程,cache miss,TLB,页表...
在linux上执行ls操作系统做了什么(这个在6.S081上看过,刚好会,哈哈)
职业规划,愿意转go吗
总结感受
字节面试流程还是比较快的,HR比较积极
前两轮面试感觉不是特别好,http协议这块是真的不熟悉,说实话前两面给我不过我都是可以接受的,但leader面我觉得可以给自己打个90分
面试官人都很不错,状态很轻松
每一轮基本都是自我介绍,项目经验,技术问题,算法题这个流程,每轮时间1个小时,算法题半小时
字节社招的算法题基本都是leetcode中等以下难度的,我这四轮感觉是2easy 2medium

第三位

第一次面试实在紧张死了,一边嘴瓢一边忘词
一面 30min
十亿个用户id怎么去重?
用两个栈实现一个队列
c++语言
1、一个结构体有一个int一个char,sizeof是多少
2、虚函数的原理(越详细越好)
3、虚表什么时候产生?虚表指针什么时候被初始化?
4、讲一下inline函数
计算机网络
1、TCP和UDP的区别
2、数据是先到交换机还是路由器
3、http访问过程。https?
4、三次握手第三次丢了怎么办?
5、四次挥手的状态?为什么有TIME_WAIT?
二面 1h20min
问题很多但是比较常规,也很多追问。以下是我凭记忆整理出来的。我把答的不好的答案写出来了,求轻喷。
1、知道纯虚函数吗,和虚函数各自是怎么工作的?
纯虚函数是抽象类提供的接口,子类定义了这个函数才可以被实例化。
2、虚函数具体怎么实现多态?
扯了一堆c++内存模型的东西
3、vptr放在对象的哪个位置?
4、子类是怎么找到对应虚函数的入口指针的,为什么不会调用到父类的虚表?
我答的是子类继承的时候会修改父类的虚表对应的表项
5、构造函数能为虚函数吗,析构函数呢?
6、讲一讲复制构造函数吧
(1)什么时候调用复制构造函数?
(2)什么时候需要你手动写一个复制构造函数呢?什么时候编译器会为你合成一个复制构造函数呢?
如果类成员有new出来的变量,浅拷贝有可能造成内存泄漏。对于第二个问题在类展现bitwise semantics的时候并不会合成,当类中的成员类有自己定义的复制构造函数时,类实现了虚函数时,或者类
实现了虚拟继承时不表现bitwise semantics此时编译器会合成一个复制构造函数(这一段答的很混乱,对象模型那本书还得好好看,被问细节真的好紧张)
7、讲一下智能指针
8、weak_ptr用来解决什么问题?怎么解决?
9、说说lamda表达式的捕获有几种?
只记得值和引用捕获...(昨天才学习的一紧张给忘了)
10、聊聊左值和右值吧
11、如果一个函数形参是左值引用能否接受一个右值?
左值引用不能绑定到右值。但是常量左值引用可以(追问为什么?答曰 右值一定是一个const&,const&不一定是右值 不知道对不对)
12、右值引用能接受左值吗?
13、声明一个右值引用给他赋值如Data && p1 = std::move(p),p1是左值还是右值?
14、万能引用了解过吗?怎么保持其引用类型不变?
完美转发(脑子里只有这个词了)
15、讲一下static关键字
局部变量 、全局变量、函数、类成员函数、类成员变量各自用static声明时的行为
16、讲一下extern C
17、重载是什么,只改变返回值是重载吗?

算法题20min
1、给一个无序数组和target,从数组中找到3个数,这3个数的和与target最为接近。假设有唯一解。
用双指针,面试官说还有时间来写一道构造函数题吧(我:。。。)
2、给一个类,成员变量有int和char*,重载他的赋值运算符
注意比较this和形参的地址,注意释放赋值之前的地址

反问:
我需要改进的地方?

三面(1h)
二面完就收到了三面通知
1、一个类对象的指针赋值成nullptr能调用成员函数吗?虚函数呢?为什么?
2、算法题
为一对标签。一个字符串内有很多这样的标签比如




"非法字符串" //非法

"d层次中的字符串" //合法



成对标签之间可以有字符串,字符串上一层和下一层必须是成对标签
判断其是否合法并生成一棵树表示其层次结构(节点自己定义)

这一个题能顶三个题的代码量啊
写了一个小时没写完。。。我下来写完发面试官邮箱了
居然没问操作系统也好奇怪
许愿hr面

3.21更新:
通过啦!!!

3.23更新:
收到offer啦!!!

从三面到offer差不多一个多星期,三面的算法题当场没做出来,整个表现属于是被完美打中知识盲区了。之后官网的校招进度一直没变过,所以一直是处于心虚但是又不敢直接打电话催的尴尬状态,学习也学不进去,游戏也玩的不爽,主要是游戏玩的不爽。

在牛客刷面经真的帮助了我很多,虽然越刷越焦虑,但是越刷也越有动力!希望牛友们都能收到理想的offer!