百度服务器/后台开发一、二、三面面经(已拿offer)
春招找实习,三月中旬才投递了百度。4.11一天内连着进行了三场面试,从早上10点面断断续续面到了下午两点。下面是面经:
一面 技术面 60min左右
一面是一位女面试官,还是挺nice的。不过在面试中经常不断问我“你确定是这样吗?”有点压力面的感觉,搞得我心态有点波动。问题主要分为项目、计算机基础和算法三部分,具体如下:
- 项目
项目中主要就我的文件存储进行了提问,指出我的文件存储方式可靠性不够高。指出采用服务器备份甚至发个邮件 - 计算机基础
- 数据库
因为我简历商写了对数据库比较熟悉,面试官上来首先问了数据库相关问题,还说她总算可以问数据库问题了,具体问题如下:- MySQL数据库有哪两种引擎?它们之间有什么区别和联系?
- 索引的底层实现原理是什么?B树和B+树的区别是什么?
- 查询时命中主键和普通值有什么区别?
- 事务了解么?事务回滚有什么实现机制?除了日志之外呢?
- 操作系统
- 进程和线程区别?进程与线程共享什么资源?线程独占什么资源?
- linux系统中查看进程的命令?文件相关命令有哪些?
- 硬链接软链接了解么?
- 计算机网络
- TCP建立连接过程。为什么要三次握手呢?
我回答了为了解决延迟SYN报文到达的问题。面试官觉得我没答道点上,而是引导我思考如果第二次握手的SYN+ACK报文丢失了之后,客户端会不断发送SYN报文,而由于没有第三次握手,服务器端会认为连接建立,不断发送数据。这时就产生了死锁问题。这也是个不错的角度,拓展了我的思路。 - HTTP错误码有哪些了解么?
- TCP建立连接过程。为什么要三次握手呢?
- 数据库
- 算法
- 判断链表中环相关问题
在这个问题中问深挖了一系列问题。- 如何判断链表是否有环?时间复杂度是多少?
快慢指针,O(n),时间复杂度这里多问了一点,问了时间复杂度具体是怎么计算的。 - 如何计算环的长度?
- 如何找到环的入口?
- 如何计算整个链表中节点数量?
- 如何判断链表是否有环?时间复杂度是多少?
- 最长公共子串
经典dp问题,结果写代码的时候还是在边界情况中有点卡壳。说明还是加深理解。
- 判断链表中环相关问题
二面 技术面 70min左右
问题主要分为计算机基础和算法。
- 计算机基础
- C++语言
- 析构函数是否可以为虚函数?构造函数是否可以是虚函数?
- 计算机网络
- 浏览器打开一个网页经历了怎样的过程?
dns解析,tcp链接,https连接中的ssl加密过程,https链接 - HTTP错误码有哪些?502,200,404?
- 浏览器打开一个网页经历了怎样的过程?
- 操作系统
- 进程与线程
- 数据库
- 索引的底层机制是什么?为什么采用B+树?
- C++语言
- 算法
- 1亿个数中找1000个最大的
最小堆实现,考虑内存大小问题,不能一次全部将数据读入内存 - 判断链表中是否有环?
又来一次 - 升序的数组中寻找是否有两个数相加为给定值?
一开始想成了leetcode 1 two sum问题,回答用哈希做。结果反应过来排好序了,直接双指针即可。 - 二分查找
- 八个字母共有多少组合?每个字母可以使用多次,但类似abb,bba算一种
我没做出来... - 僵尸吃人问题,僵尸吃人后变成人,一个人能够被两个僵尸吃,人被吃后牺牲。问最后多少人存活。
前一个问题没做出来给了一个补救机会,做出来了
- 1亿个数中找1000个最大的
三面 技术面 50min左右
这次面试官应该级别比较高,问的问题很深很难。
- 以后读研么?问什么想来实习?为什么不读研想工作?
一上来搞得我以为是HR面... - 操作系统
- 程序装载进内存后分别在哪里?
代码在.init .text .rodata,初始化的全局变量在.data,未初始化的在.bss,还有堆和用户栈 - 程序在调用中发生了什么?返回时又发生了什么?
这个问题我真是没想到,我一直以为这种底层问题不会被问到。不过幸好我在学校里上过相关课程。具体可以参考《计算机系统基础》(袁春风)。大概就是在用户栈中压入参数,返回地址,%ebp,接着跳转,开辟栈空间,保存需要保存的寄存器。返回时反过来从栈中进行恢复。 - 你怎么接触到这些的?
在学校里上过一门ICS课里接触过。 - 你调过core么?
我以为是延续上一题,我给听成了call,结果会错意了哈哈。 - 同步/异步 阻塞/非阻塞
- 接触过多线程编程么
比较少
- 程序装载进内存后分别在哪里?
- C++
- 多态有哪些?分别怎么实现的?
静态多态,动态多态。- 静态函数多态通过编译时不同的函数名来实现。
不同的函数名是怎么组合出来的?真不知道了... - 动态多态通过虚函数实现,讲了下虚函数表原理
虚函数表头指针属于类还是对象? 对象
虚函数表属于类还是对象? 类
虚函数表存在哪里? 静态数据区
- 静态函数多态通过编译时不同的函数名来实现。
- 静态变量和非静态变量有什么区别?分别存在什么地方?
要分为静态全局变量,静态局部变量,非静态全局变量,非静态局部变量来答
- 多态有哪些?分别怎么实现的?
- 算法
- 说说你了解的排序算法,分别有什么适用范围?
快排,归并,堆,分析了下时、空复杂度,讲了点适用范围
- 说说你了解的排序算法,分别有什么适用范围?
- 计算机网络
TCP建立连接和断开连接 - 向面试官提问
技术栈是什么?
跟你的背景比较契合。linux下用C++编程,也会接触到汇编语言。
后续
4.29日收到offer call,是北京凤巢的,具体没说哪个部门。5.14收到offer邮件,确认部门为商业架构部。
总结
整体面试效率还是很高的,过程也比较流畅,跟面试官交流不错。不过等offer邮件的过程有点漫长。好在最后结果不错。
#百度面试##百度##C++工程师##实习##面经#