百度2017校招面试总结
来源:互联网 发布:mac app store更新不了 编辑:程序博客网 时间:2024/06/05 16:31
百度2017校招面试总结
之前报的是百度北京总部的C++软件开发岗,有幸通过了百度2017年校招的笔试,在9月24号参加了百度校招的面试,时间约在了上午11点,总共面了三面。
一面
一面主要问了以下几个问题:
给出一个正数n,实现一个函数来计算n的平方根,给出误差范围0.0001
这个问题主要有两种思路:一般能想到的是二分法,整个思路类似于二分查找,不断逼近最后的结果即可。具体代码如下:
double binarySqrt(double num){ double error = 0.0001; double x = 1; double left, right; if (num <= 0) { return 0; } if (std::abs(num - 1) < error){ return 1; } if (num > 1){ left = 1; right = num; } else { left = num; right = 1; } while (std::abs(right - left) > error) { double mid = (right - left) / 2 + left; if (mid * mid > num){ right = mid; } else { left = mid; } } return left;}
第二种思路可能一般不太能想到,是用牛顿法来进行求解。
牛顿法的迭代公式如下:
在本题中设
double NewtonSqrt(double num){ double error = 0.0001; double x = num; if (num <= 0) { return 0; } while (std::abs(x * x - num) > error){ x = (x * x + num) / (x * 2); } return x;}
可以看出牛顿法的代码更简洁,同时牛顿法的迭代次数远少于二分法。
写一个单例模式
这个不多说了,很经典的设计模式,需要牢记。但是写之前需要先跟面试官进行沟通,例如是否需要考虑异常,是否需要考虑线程安全等。可以体现出面试者对问题考虑的全面性。
有两个文件,每个文件中有最大长度128字节的url一亿个,求两个文件的url的交集。
这道题实际上是考察面试者对大数据的处理思路,每个文件有一亿个url,每个url为128字节,计算下来文件有12.8GB,因此将文件全部加载进内存是不现实的。
若允许一定的误差,可以使用bloom filter将一个文件中的url进行hash后映射到内存空间中,然后遍历另一个文件,将url经过hash后查看内存位置的数值是否为1;若为0则一定不重复,若为1则有很大概率重复。
若要求不能接受误差,则可以使用B-树或B+树对URL建立索引,之后对冲突的url在索引中进行查找即可。
服务器短时间内被很多IP访问,计算10s内访问时间超过10次的IP地址
针对每个IP,维护一个上次访问时间的链表,可以使用std::map的key-value的方式来进行存储。对于一个请求链接的IP,首先查找到相应的链表头结点,然后按照当前时间去掉链表中时间小于10s之前的节点,最后统计剩余链表的长度,若长度大于10,则是访问次数超过10次的节点。
上面两道题实际上都是大数据处理的问题,具体方式可以参照十道海量数据处理面试题与十个方法大总结中给出的思路
二面
二面过程中首先跟面试官聊项目,之后面试官问了如下两个问题:
使用概率知识来分析项目使用的算法的性能。
这个问题比较开放,面试官也没有正确的答案,但是可以与面试者共同探讨这个问题,分析这个问题需要概率论的基础,但是只要认真学过大学的概率论就没什么问题。感觉这一道问题考察的主要是面试者的数理功底以及对实际问题的抽象分析能力。
假设一个队列中的元素有不同的优先级,同时这个队列不断地插入元素,同时要求取出优先级最高的元素。用什么方法来实现这个需求,要求写出部分代码。
这个问题实际上是典型的优先级队列问题,使用堆排序的思想即可解决。
之后和面试官又聊了聊其他内容,通过二面。
三面
三面是经理面,简单地介绍了一下在学校做的项目之后,问了这样一个问题:
假设有一个停车场,设计一个调度算法在不堵住路的条件下最大利用停车位,要求10min内写出代码。
这道题感觉像是面试官临时出的,可能考察的是面试者的临场应变能力和面对压力的能力。在跟面试官进行一些细节上的沟通之后,被面试官提示说还剩5min…..。然后以最快的速度写出最简单的代码,交给面试官之后面试官问你觉得在你的代码中有哪些漏洞。随即说出了在写代码时考虑有欠缺的地方。
之后又跟面试官聊了一些个人发展意愿,职业规划相关的东西。然后就结束了面试,面试过后两个月接到电话通知,得知面试通过(这效率也是醉了…)。
总结
百度校招面试一般都是三面,问到的问题都是一些比较基础的知识。在校招的过程中,面试官对于面试者对计算机和数理基础知识的掌握程度非常看重。在应对校招面试之前,应先复习好操作系统,数据结构,算法分析和计算机网络的基础知识。若要应聘算法类岗位,则对微积分,线性代数,概率论和离散数学的基础知识也要进行一些准备。
对于快速排序、堆排序、折半查找等常用的排序or查找算法实现也应当牢记于心。
- 百度2017校招面试总结
- 百度校招2012应届生面试总结(一)
- 【2014校招】百度面试
- 校招面试总结
- 2017校招笔试面试总结
- Android校招面试总结
- 2012校招之百度电话面试
- 2017春招百度实习生面试记录
- 2018百度校招、腾讯校招 面试经验
- 百度校招面试经历及总结(已发offer)
- 2017校招笔试面试总结(挂满辛酸泪)
- 2014腾讯校招面试之一总结
- 雅虎2015校招面试总结
- 2014网易校招面试总结
- 阿里实习校招面试总结
- 华为、腾讯校招面试总结
- 计算机专业校招笔试面试基础知识总结
- 2018校招 面试总结 (一)
- 查找整数
- hibernate三态
- iOS 程序内语言切换 -- 中英文切换
- 一个Myeclipse视图跑出来,脱离窗口的问题
- LCD驱动学习
- 百度2017校招面试总结
- SpringMVC之组合注解@GetMapping
- 操作系统-1.设计的原则
- 设计模式-引言及个人认识(1)
- oracle中=>符号的意义
- 百度语音识别技术负责人李先刚:如何利用Deep CNN大幅提升识别准确率?
- java中遍历实体类属性和类型,属性值
- 闰年判断
- C与指针 六 一些字符函数