大厂C++面试经验

大厂C++面经


前言

本科双非,已拿20k的offer,特来分享一波面经


一、字节跳动一面(90min):

1、自我介绍
2、项目介绍:

  • 因为我的项目是基于人脸识别的,所以面试官问了具体的人脸算法,我大致讲了一下算法思路和算法流程
  • 有没有做过并发测试?(没。。)
  • 项目中遇到哪些问题,如何去解决的?
  • 人脸检测的时间复杂度是多少?
  • 然后面试官和我探讨了一下算法优化问题,闲聊了不少人脸的东西(面试官知识面是真的碾压我这个菜鸡。。)
  • 最后面试官评价说:你这个项目有点意思(有点小开心)

3、八股文:

  • 和我说一下进程和线程的区别吧?
  • 你说进程拥有资源,那你能说一下具体有哪些资源吗?
  • 你提到了PCB,那和具体我说一下PCB的内部组成和实现吧(懵了一下,硬着头皮说了个七七八八)
  • 你还提了一个进程有多个线程,那问题来了,你有没有做过多线程并发?(只知道理论,没怎么实际操作过)
  • 如何去解决多线程安全问题?(回答:用加锁机制、互斥信号量等)
  • 如果用信号量的话,该如何去实现?(回答:PV操作)
  • 那PV操作为什么可以实现互斥呢?(回答:因为他们是原子操作)
  • 那能具体说一下如何实现原子操作吗?(然后我就把PV的具体实现代码说了一下,主要是有个阻塞队列和唤醒操作)
  • 说一下http协议吧
  • http包的构成是什么样子的?
  • 你提到的发送报文和回复报文的具体有哪些组成或者字段呢?
  • 说一下你知道的常见的http的状态码(说了200、301、302、304、404)

4、算法:
给一个m*n的二维整型数组,各行之间可能有重复出现的数字,要求输出所有在每
一行都出现的数(可能有多个):

我的想法是先每一行排序,然后用m个指针去找重复的数
面试官说思路没问题,然后让我手撕代码,我没撕出来。。不知道怎么去同时处理m个指针,最后结束时面试官和我说了一下我才反应过来,我太菜了。。

5、反问:

  • 我哪里需要提升?(让我多敲代码。。我哭了)
  • 我的项目讲解的怎么样?(没什么大毛病)

二、华为一面(60min):

1、自我介绍
2、项目:

  • 你在项目中的角色?(负责人)
  • 如何协调各个成员的工作分配?
  • 项目有没有遇到什么问题,怎么解决的?
  • 我看你做了不少项目,你哪来的项目资源?(我说我大二时开始在老师工作室打工。。)
  • 项目并发量有没有测过?

3、八股文:

  • 说一下你对linux的理解
  • 说一下多线程
  • 死锁的原理是怎样的
  • 死锁的必要条件
  • 说一下你了解的数据结构
  • 常见的排序算法你说一下吧
  • 快排什么时候用比较好?(说了一下快排的最好情况和最快情况,说了一下递归划分子问题,然后准备说一下快排的优化问题,被打断了。。)

4、算法
(算法我真的有点委屈,和我联系的hr说最多机考前两题的难度,问我行不行,我拍着胸脯说没问题,结果一面的面试官看了一下我的简历,突然来一句:你搞过竞赛对吧?那我们来一道难点的吧?。。我瞬间懵逼了。。)
在这里插入图片描述
我想了五分钟,大致说了一下算法思路:先看所有数加和是否是4的整数倍,如果不是直接就false,如果是的话,先算出边长,然后我们就不断选取当前木棍分别尝试放在四条边上,用分治的思想,划分的子问题就是当前剩余长度减去当前选取的木棍长度,边界就是当木棍只剩下一根且正好能放入时则退出。
面试官说我的算法思路很好,然后又让我手撕代码,我又没撕出来,只能和面试官说我太久没碰过代码了,手太生了,最后面试官让我写了个伪代码,然后记录下来交差了。。

5、反问:
我表现的怎么样?(整体不错,就是linux和多线程的东西要去了解一下,代码的话,能看出来你的底子不错,手生的话建议去LeetCode刷几题捡起来。。)
我还有二面嘛?(这个我们得具体评估一下才能决定的)
PS:刚刚收到了二面邀请,后续面经继续补充。。

三、华为二面(80min):

1、自我介绍
2、项目:

  • 项目介绍
  • 人脸算法如何实现的?(大致说了一下算法的思路和流程)
  • 用的什么语言?

3、八股文:

  • linux熟悉吗?说一下
  • 多任务调度算法说一下
  • 堆和栈的区别
  • 你提到栈效率更高点,那为什么栈效率更高的?
  • 那如果两个任务调用一同个代码,它们的任务栈是什么样的?
  • 汇编学过么?给一段代码你知道它内存怎么分配的吗?
  • 计算机网络了解不?说一下你了解的知识点。(说了rip、ospf、tcp三次握手四次挥手、tcp拥塞控制、滑动窗口机制,还准备继续说来着,然后面试官说够了够了。。)

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、反问:

  • 我哪里薄弱?(linux和内存不太清楚,要多看多学多练)

四、上海立芯(120min):

(因为是偏算法方向的,两轮技术面都是全程手撕算法,无任何前戏和八股文,但题目难度倒不是很难)

1、一道改编的二分查找,给一个数组,找到给定的元素位置,若该元素不存在则插入到数组的正确位置。

2、简单dp,爬楼梯问题,LeetCode上有这题。(写了递归和非递归,然后优化成了计划搜索)

3、改编的LCA问题,差点没写出来。。

4、手撕冒泡排序算法。

5、合并两个链表。

6、二叉树非递归的中序遍历。

7、删除链表的重复节点,注意有头结点,并且头结点也有数据(这题主要考察有没有考虑头结点以及如何去处理它)

(还有两题我忘了。。全程手撕,还好基本都写出来了。后面还问了一下项目,和前面两个问的差不多,就不多写了)

  • 11
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值