大厂C++面经
文章目录
前言
本科双非,已拿20k的offer,特来分享一波面经
一、字节跳动一面(90min):
1、自我介绍
2、项目介绍:
3、八股文:
4、算法:
给一个m*n的二维整型数组,各行之间可能有重复出现的数字,要求输出所有在每
一行都出现的数(可能有多个):
我的想法是先每一行排序,然后用m个指针去找重复的数
面试官说思路没问题,然后让我手撕代码,我没撕出来。。不知道怎么去同时处理m个指针,最后结束时面试官和我说了一下我才反应过来,我太菜了。。
5、反问:
二、华为一面(60min):
1、自我介绍
2、项目:
3、八股文:
4、算法
(算法我真的有点委屈,和我联系的hr说最多机考前两题的难度,问我行不行,我拍着胸脯说没问题,结果一面的面试官看了一下我的简历,突然来一句:你搞过竞赛对吧?那我们来一道难点的吧?。。我瞬间懵逼了。。)
我想了五分钟,大致说了一下算法思路:先看所有数加和是否是4的整数倍,如果不是直接就false,如果是的话,先算出边长,然后我们就不断选取当前木棍分别尝试放在四条边上,用分治的思想,划分的子问题就是当前剩余长度减去当前选取的木棍长度,边界就是当木棍只剩下一根且正好能放入时则退出。
面试官说我的算法思路很好,然后又让我手撕代码,我又没撕出来,只能和面试官说我太久没碰过代码了,手太生了,最后面试官让我写了个伪代码,然后记录下来交差了。。
5、反问:
我表现的怎么样?(整体不错,就是linux和多线程的东西要去了解一下,代码的话,能看出来你的底子不错,手生的话建议去LeetCode刷几题捡起来。。)
我还有二面嘛?(这个我们得具体评估一下才能决定的)
PS:刚刚收到了二面邀请,后续面经继续补充。。
三、华为二面(80min):
1、自我介绍
2、项目:
3、八股文:
4、算法题:
这题直接秒杀,大整数加法,注意进位变化就好了(最后一位可能也有进位)
但手撕代码时头结点和边界内存没处理好,被面试官说了一通。。
大致代码如下,不保证没bug哈。。
ListNode* add(ListNode* l1,ListNode* l2)
{
if(l1==nullptr&&l2)
return l2;
else if(l2==nullptr&&l1)
return l1;
else if(l1==nullptr&&l2==nullptr)
return nullptr;
ListNode* l3=nullptr,*p=l1,*q=l2;
ListNode* x=l3;
int flag=0;
while(p||q)
{
ListNode* node=new ListNode;
int t1,t2;
if(!p)
t1=0;
else
{
t1=p->val;
p=p->next;
}
if(!q)
t2=0;
else
{
t2=q->val;
q=q->next;
}
node->val=(t1+t2)%10+flag;
flag=(t1+t2)/10;
if(!x)
l3=node;
else
x->next=node;
x=node;
}
return l3;
}
4、反问:
四、上海立芯(120min):
(因为是偏算法方向的,两轮技术面都是全程手撕算法,无任何前戏和八股文,但题目难度倒不是很难)
1、一道改编的二分查找,给一个数组,找到给定的元素位置,若该元素不存在则插入到数组的正确位置。
2、简单dp,爬楼梯问题,LeetCode上有这题。(写了递归和非递归,然后优化成了计划搜索)
3、改编的LCA问题,差点没写出来。。
4、手撕冒泡排序算法。
5、合并两个链表。
6、二叉树非递归的中序遍历。
7、删除链表的重复节点,注意有头结点,并且头结点也有数据(这题主要考察有没有考虑头结点以及如何去处理它)
(还有两题我忘了。。全程手撕,还好基本都写出来了。后面还问了一下项目,和前面两个问的差不多,就不多写了)