后端/C++面经,(已完结)

自我介绍一下,普通二本计算机专业大三本科生,退役ACMer。

刚开始投了好多小厂,想着先拿来练练手,谁知道小厂都被刷下来了。。。然后第一面就是百度

有一些答案写了出来,可能有错误或需要补充,非常欢迎指出。

百度C++岗位 2020.3-19

一面

  • 自我介绍
  • 大三可以出去实习吗?
    因为我投的是校招简历。
  • 简单的算法题---一个数组,找两个数之和等于一定值的下标。
    用map建立了val-index的映射,O(nlogn)写出来的。因为没刷过leetcode,以为有O(n)的写法,最后浪费了2分钟想O(n)的解法。
  • 什么是hash?,如何解决hash冲突。
    说了下hash原理和rehash
  • 熟悉哪些排序? 快排的时间复杂度是多少?,最坏时间复杂度是多少?为什么?空间复杂度是多少?快排是稳定的还是不稳定的?什么是稳定排序?
  • 熟悉哪些数据结构? (我说我都行)他说链表会吗?(我说熟悉,而且还熟悉跳表),来说说跳表,(跳表说的不好,以后再也不敢随便装了....)。
  • 链表找环。
    不知道快慢指针,没说到点上。在这里浪费了10分钟左右。
  • 你们学的计算机网络是几层?(五层),都哪几层?传输层是什么?UDP和TCP的区别?如何实现可靠传输?TCP的三次握手?ask是干嘛的?HTTP在哪一层?说一下HTTP get请求和post请求,HTTP的get请求和post请求的区别?get请求的url的最大长度?
    这里三次握手第一次说的有误解,后面再在面试官的提示下意识到错误重新说了一下。
  • 进程和线程的区别?
  • 进程间通信?
  • 什么是死锁?如何打破死锁?
  • mysql事务?
  • 有什么问题要问的。

面了50分钟,总体来说比较满意,面试官很好(第一次面试前是很忐忑的,但是跟面试官聊起天来就一点不紧张的),问的也非常详细,很广泛。

回去把自己的坑给补了下 (快慢指针)

二面(与一面隔了一天)

二面是用微信语音面的,用腾讯文档打的代码。

  • 介绍一下自己
  • 大三可以出去实习吗?
  • 说一下unorderd_map的大概实现?如何解决hash冲突?
  • session和cookies的区别?
  • 数据库mysql的两种引擎InnoDB和MyISAM的区别?
    MyISAM不支持聚簇索引,不支持事务,不支持行级锁。 InnoDB支持事务,默认隔离级别是不可重复读,支持行级锁,但是不能显示的支持的Hash索引,可能会有自适应hash索引。
  • 事务的特性?
  • 设计模式熟悉吗?(呃呃,不熟悉,好像没开这门课) ,好,那你给我说下单例模式吧(额,不太会),你得好好补补设计模式,这个会有很多人问。
  • 说一下项目吧?
    我的项目好长时间没碰了,整体说的很差。给面试官讲了一下项目中用到的算法,另一个项目讲了下架构。
  • 如果项目重构一下有什么想法?
    说的不咋地。
  • 打个代码吧,给出二叉树前序和中序遍历,求二叉树结构。
    因为没刷过leetcode,之前也没做过。所以这道题是第一次做,所以也是第一次思考,好在有了思路,写了10多分钟做出来了。
  • linux如何统计ip地址出现次数?
    没答上来。
  • 对所在的岗位熟悉吗?(不熟悉)
    面试管给我解释了一下岗位主要是干嘛的,
  • 你对岗位有什么要求? (我们就一直在聊)
  • 最近在看什么书?
  • 有什么问题吗?(我问了下面试过程我有哪些需要补充,然后面试官给我了一些意见,我们又聊了一会)

这位面试官给我的印象特别深,给了我很多意见,很有帮助,也非常感谢他。面试时常总共是100多分钟。

回去里面就买了本Head First设计模式,补了补。以前眼拙以为设计模式没啥用就是一个架构思想,现在看来是真的神奇呀,非常重要。
重新翻起来老项目给扒了扒,并准备重构一下。

5天没通知了,看之前的情况而言感觉是凉了,不过从中学到了很多,也非常感谢前面的面试官给的经验。
3-27更--

发现校招简历投递状态变为请重新投递,实习生简历状态变为已通知笔试。(可能是我投的是2020校招的原因吧,实习生招聘再闯一下!)

腾讯2020.3-23

一面

  • 介绍一下自己

  • c++指针和引用的区别?什么是构造函数?什么情况下会调用构造函数?

  • 下面代码内存中会有几个"23"

    string a="23"
    string b=a;

    我回答的三个(补充:当时面试官主要想考拷贝构造函数那一块,所以我就想都没想就说了三个😅,如果string具体实现采用写时复制的话是1个,不过具体不太清楚...)。

  • const是干嘛的?const & 有什么优势?(速度快点),为什么会快? 如何在下面代码中修改const string & 类型的值?(用const_cast<string &>,补充:也可以用取地址然后强制转换对应指针再操作)

  • 虚函数是什么?怎么实现?是运行时决定还是?

  • 编译器编译代码的过程?
    之前看过CSAPP,就把先把宏展开,编译,静态链接过程说了一下。就差不多了。

  • UDP和TCP的区别?流量控制如何实现?为什么要time_wait?

  • 如何去除套接字的time_wait的状态?(setsockopt函数)

  • epoll和select区别? (说了下select移植性高,epoll性能方面好点) 为什么epoll性能比select好 ?(主要说了下epoll和select 传参的过程,epoll相当于可持久的)
    这个感觉说的不太好。

  • 进程和线程区别?为什么进程切换快?进程切换和线程切换有什么不同?线程都共享什么?

  • 进程间通信?

  • mysql索引方面InnoDB和MyISAM的区别?

  • 下面代码用了几个索引?

    //假设tablea中在name建立了个索引。且name不是聚簇索引
    select name from tablea where name...//比较操作

    一个,因为查询过程对于name是覆盖索引。

  • 写sql语句。

  • 写个代码吧,序列有n个数,第i个数代码第i天买(卖)股票所需要(获得)的钱,只允许买卖一次,输出最优买卖天数的索引?
    很快就写完了,并讲了下思路。然后嘴贱的我多说了一句,这题太简单了(以后发誓再也不这样了)。

  • 输入一个表达式字符串,输出结果。像这样的

    1 > 2 || 3 < 4 && 5 < 10 

    GG。一眼表达式求值,但是表达式求值好久没写过了,感觉得写30多分钟而且不一定能写出来。就假设条件中 字符串用|| && 隔开的只是个 a > b只类的。然后就开始写了,到最后也没写出来,不过也快了。牛客编译器运行一直不出结果,也调不出来Bug。面试官说没事你给我说下思路吧,我说了下,并且面试官给出了代码的一些见解。

  • 获奖经历?

  • 有什么问题要问的吗?

感觉腾讯问的特别细,挖的也很深,其中也发现了自己的薄弱点,比如(epoll和select性能之间,进程线程切换的内容是什么?)。面试时长是90分钟,应该是过了。


3-25号,现在还没收到腾讯二面的通知。不过也算是给自己时间去补项目经历了。
3-29号,发现流程变灰了,我真感觉自己面的不错呀。

字节(未)

3-26更,没有任何通知发现被调到深圳的C++客户端开发--飞书岗位了。
4-9 都被刷了,没希望了。

百度C++暑期实习生(4-25)

一下午直接三面,现在等oc

一面

  • 设计一个百度搜索引擎如何设计?
  • 如何把我的项目改成网络版的?
  • TCP与UDP区别
  • 查找当前目录下修改时长距现在1h之内的所有文件(考察find命令-mmin选项)
  • 端口扫描工具(nmap)
  • 硬链接与软链接区别?硬链接链接文件夹会有多少个硬链接(这应该是个坑,硬链接只能链接文件,不能连接文件夹)
  • 写题,给出一堆ip地址,找出ip地址出现次数最多的ip?
  • 写题,n个ip地址中找出出现次数大于n的一半的ip地址?

Linux命令回答的不太好,其他都还行。

感觉很简单,跟之前面的不一样,这一次基础问的很少。

二面

  • 讲一下我的项目
  • 写下项目中某个功能的实现
  • mysql如何查看语句的执行效果,如何优化索引(explain命令和索引优化)
  • 讲一下跳表
  • 讲一下redis持久化

三面

聊天

  • cpu都由什么组成呀
  • 喇叭如何发生呀
  • 液晶屏幕如何显示彩色呀
  • 有没有压力大的事情呀

5.22更,百度状态显示未通过
唉,真是难受。

腾讯5.11

一面

  • 右值引用
  • dijkstra算法
  • kmp算法
  • 好多忘了,想起来立马补

二面

  • 熟悉vector和list吗,讲一下对应的内存分配策略,讲一下插入时间复杂度。
  • 讲一下TCP四次挥手和time_wait状态
  • 如果有一个服务器,每秒接受9亿个请求,而现在网络中很多客户端都是time_wait状态,是什么状况?
    面试官说是正常状态,但是我回答的时候过程可谓是非常坎坷。

    我:如果服务器认为每秒9亿个请求是正常的话,那就是正常状态,因为客户端连接结束后都会进入time_wait状态,但是如果每秒9亿个请求不正常,那就可能可能有恶意连接,比如一个电脑,恶意将所有端口都去连接服务器。
    面试官:为啥是正常状态呢?
    我:因为每个客户端连接后断开就会进入time_wait状态,这个状态会持续2MSL时间,大概2分钟(注意,这个时间我不太确定,其实不应该说
    面试官:为什么是2分钟,你在哪看的?
    我:呃呃呃,记得不太清楚了,反正是30秒以上,挺长时间的,在谢希仁那本书看的。
    面试官:那回到这个问题,现在是什么状态呢?
    我:客户端连接套接字进入time_wait状态,这个套接字在一定时间内就不可用了呀。
    我:对还有可能,是服务器收不到第四次挥手,所以就一直像客户端发送第三次挥手,导致客户端不能退出time_Wait状态。
    面试官:客户端不是只有一个套接字进入time_wait状态,是很多端口都进入time_wait状态。
    我:可能遭受DDOS攻击了吧(这里我对DDOS攻击的理解是大量的请求,但是我不熟悉DDOS,其实不应该说
    面试官:你知道什么是DDOS攻击吗?
    我:呃呃呃,不太清楚,但大概意思就是客户端恶意像服务器发送连接请求,导致服务器宕机,
    面试管:现在没有遭受攻击。
    我:我不知道,你说吧
    面试官:其实是正常状态
    我:那为啥一个客户端很多端口都time_wait呢?
    面试官:那是因为它重启了
    我:。。。

一个简单的正常状态,被面试官反问到我怀疑人生

  • 如果套接字进入time_wait状态,该如何处理呢?

    我:使用setsockopt函数
    面试官:你给我打出来?
    我:(输入框打这个函数)
    面试官:使用套接字的什么属性
    我:忘了,但我之前用过,一般这个东西我要看文档。
    面试官:还有什么方法
    我:呃呃呃,等一会就行了,因为time_wait状态会自动清除

  • 讲一下程序的编译和连接
    我讲了宏绽开、翻译到汇编文件.s、再到重定位文件.o、然后动态链接和静态链接bababababa
  • 做一个算法题:二分找有序数组的某个数出现位置,

    我:如果多个出现是最左边还是最右边
    面试官:左边
    我papapa开始写,但是好久没写出了点问题,大概20分钟,然后被面试官说代码能力不行,身为acmer真的惭愧。
    然后面试官说有个样例不行呀,我一看,数组无序。
    我:你数组无序呀,
    面试官:呵呵呵,你这代码不行呀,边界问题没考虑,你都没判断数组有序没,还没判断我要是输入个字符串咋办。
    我:呵呵呵

  • 再给你一次机会,算法题:给出一串字符串,由许多单词组成,让你用O(1)的空间把单词位置反转,如 who are you 翻译成 you are who

    我想了想思路,开始在牛客网编译器上敲,敲了大概10分钟,敲完了,然后我准备测试一下,重点来了,我输出测试结果printf("res:\n",s);
    牛客编译器也没显示编译信息,我就直接运行,然后就啥都没输出,我以为哪里有bug,找了10分钟发现%s没写,槽!!!!
    面试官:你这代码能力不行呀,时间太长了嗷,

  • 面试官问我有没有问题,我说没有问题(当时已经不报希望了)

  • 面试管问了我两个问题,问如何做到大三实习六个月以上的?学校让出来吗?

总之:面试发挥很糟,不该错的地方错了,就如二分,一般情况核心代码我一分钟就能写出来。这次一直考虑< 还是<= 还是> 然后先分左边还是右边,唉主要是太长时间没写二分了,而且这次脑子还抽筋了。还有面试官的反问,让我怀疑自己的观点。

三面

  • 全程讲我新写的项目

  • 问如果让我设计一个简单的服务器框架如何设计
    这个问题当时不太清楚,就随便说了一下说的不好,现在想来,可以传入一个对象,这个对象是实现了一个抽象类并要求实现

    • 接受套接字函数

    • 读取数据函数

    • 写数据函数

    • 断开连接函数

    • 被动断开连接函数

      然后必须在主程序中执行框架的run方法,去激活事件循环。

hr面

5.22,今天hr面试。
希望能过呀!!!!!!(感觉还是有点玄,因为三面没有多说什么)

5.26号更新----------拿到实习offer了!!!

等网易

一面

  • 讲一下虚函数,子类和父类的虚函数表是一个虚表吗

    当时回答错了。。。不是一个虚表,请看:C++中虚函数、虚继承内存模型

  • 一个空类占多少字节,如果这个空类有虚函数呢?
  • 如何申请内存使得内存的首地址是16字节对齐?
  • vector和list的插入时间复杂度和扩容机制。
  • 熟悉sort吗?写一下sort
  • 一个文件每行有一个字符串,如何对这个文件中字符串去重。如果这个文件很大不能放到内存呢?(hash到多个文件中,分别去重)
  • tcp如何做到可靠传输。
  • redis list是如何实现的
  • redis持久化的几种方式,AOF持久化过程中如何做到服务器继续响应请求
  • redis子进程进行AOF重写时,父进程有写操作时,此时会怎么样?
  • redis持久化过程中,子进程读一个内存数据,父进程写这个内存数据,会有冲突吗?(子父进程在页面方面执行写时复制)
  • HTTP get请求与post请求区别
  • linux 查看进程的几个命令(ps aux 与 top)
  • linux 查看本机端口有哪些服务的命令(netstat和nmap)

计蒜客

这个面试的发挥的极差,因为好久没写算法了,代码能力下降太多。。。。

  • 聊天
  • 拥塞控制如何实现
  • 给一个n*m的矩阵,通过螺旋将矩阵元素读成一列

    如 n = 3, m = 4
    1 2 3 4
    5 6 7 8
    9 10 11 12
    输出:1 2 3 4 8 12 11 10 9 5 6 7

  • 给出一个平面的两个矩形,求矩形相交面积

    答案:两个矩形水平线段的相交长度 乘以 垂直线端的相交长度

结束

春招到此结束,去腾讯IEG 技术运营部门实习了。

#暑期实习##百度##腾讯##字节跳动##面经##校招##C++工程师#
全部评论
学弟加油
3 回复
分享
发布于 2020-03-26 01:45
看成了字节(末)
2 回复
分享
发布于 2020-03-25 22:37
联想
校招火热招聘中
官网直投
百度一面,两数之和第一遍保存,第二遍就查询,这是O(n)吧。 腾讯一面,string 在内存中为什么是3个呢? 如果采用写时复制  应该是1个。                  const如何修改,貌似可以通过指针修改。
2 回复
分享
发布于 2020-03-26 11:04
牌子在小厂不一定能过简历关银牌非科班小厂简历挂我(记仇)
1 回复
分享
发布于 2020-03-26 01:36
加油
1 回复
分享
发布于 2020-03-26 11:26
最靠谱的部门业务平台体验事业部也开始招聘前端开发实习生了 https://www.nowcoder.com/discuss/384572
点赞 回复
分享
发布于 2020-03-31 07:37
楼主没有问项目嘛?
点赞 回复
分享
发布于 2020-03-31 21:21
去哪了?大佬
点赞 回复
分享
发布于 2020-04-19 01:03

相关推荐

12 101 评论
分享
牛客网
牛客企业服务