百度2017实习生软件开发(cpp方向)
首先说一下岗位。分为软件开发,开发测试,前端,机器学习数据挖掘,移动开发,据我观察,报的人数来看,软件开发最多,移动开发和开发测试较少。百度前台还准备了吃的喝的,真的是白吃白喝,但是哪里有心情,第一次还是有些紧张。面试地点应该是百度的一餐厅吧,进去后我就惊呆了,没见过大场面啊,人真多。里边全是一对一的,每个面试官都标配mac,真心羡慕。
上来先自我介绍,面试官大概先看了一眼简历,了解了我是非计算机专业的后就问我擅长哪个方面,然后就开干C++,很奇怪为甚么没问我STL的内容和数据库,之后C++完了就问了一些数据结构和算法的问题,问我了不了解操作系统,我就很实在的讲只了解一点点,然后就是计算机网络,再然后就是对linux C熟不熟悉,常用的一些命令。最后又看我简历,指出来简历的问题,真心挺好,问我写的那几个破比赛的情况,接着就完了。搞了一个多小时,问的我都懵逼了,可能面试官觉得我欠缺的知识挺多的吧,虽然让写的几个程序也绊绊磕磕的写出来了,也没有拿得出手的项目做支撑,所以直接就让我走了。
具体问题:
- 面向对象的几个特性?
封装、继承、多态
- 写一个继承的例子?
比如:类B继承类A,(我就简单写了写,还把继承的符号写错了,当时有点紧张)
- Public和private的区别以及派生类的访问权限问题
- 多态是怎么实现的?(我说通过虚函数)
- 接着在上边的例子里写一个虚函数
- 基类和派生类中的虚函数的重写(覆盖问题)
- 重载和重写的区别?
- 实现Swap(a,b)对不同类型数据都能处理的话,除了重载,还有哪种方式?(我说函数模板)
- 函数模板写出来实现一下上边的问题
- 实现Swap(a,b),如果不用第三个变量temp的话怎么实现?(记得看过,当时懵逼想不起来了,也没想着分析分析就说不会了,感觉不应该这样)
- 纯虚函数怎么定义的
- 包含纯虚函数的类是什么情况?(抽象类)
- 抽象类的用法
- 命名空间是怎么回事?有什么作用
- 函数指针和指针函数是什么?
- 指针常量和常量指针的区别(我当时弄混了,一时懵逼,面试官给我讲清楚了)
- 栈区和堆区的问题 以及内存泄漏问题
- 数组和链表的区别,访问和删除、插入的复杂度及为什么(这个我挺明白,但是没表述清楚,他又给我讲了一遍)
- 二叉树的几种遍历方式?
- 层序遍历是怎么实现的,是dfs还是bfs?
- 写一下二叉树中序遍历的代码,提示我说要自己定义节点(我问了可以写递归么,他说可以),问复杂度,我说不知道啊。
- 知道平衡二叉树吗,怎么定义的。
- 二分查找写代码(我当时忘了写查不到的情况,真尴尬)我写的版本有一个移位,然后他就问为啥移位(编程一定注意细节,说写的这编译肯定出问题啊)
- 了解哪些排序算法,写一个吧,我说几个,然后说能写冒泡么,后来他又想了想说就说思路吧,我就讲了冒泡的思路,又问复杂度是多少,怎么算的。
- 快排写代码,我说要写么?,然后他就说讲讲思路吧,我就大致讲了讲,问平均复杂度,最好的复杂度,最坏的复杂度
- 插入排序的思路
- 问我这些基本的算法自己有没有实现过
- 聊简历上写的本科时的项目和比赛,怎么实现的,技术难点,什么平台,数学建模里边主要负责啥(这些都和软件开发没啥关系)
- 说奖学金挺多,看来学习一定很好(我说很渣)
- 看我研究生课程有数据挖掘和神经网络,问我为啥没去报机器学习岗
- 问我的优势是啥,对于软件研发这个岗位来说,我说就C++吧,他说这掌握的还不够呐。
- 自学能力怎么样?数学怎么样?
- 问我了解操作系统么,我说就一点点。问并发和并行是啥?(我直接按自己理解说了其实不懂,然后他就跟我讲了一通)
- 进程和线程的区别
- 进程间通信的几种方式?(我没答全),然后问我管道是全双工的么?,线程间内存是共享的吗?再问其他的了,我就直接表示不会了。(操作系统确实是软肋)
- Osi七层模型(差一个忘了),然后五层的那个。
- 应用层的有哪些协议:我说http,ftp,telnet,smtp(没说DNS)
- 然后问我DNS是啥(现在想想都是套路啊,当时没反应过来)
- http和https的区别,ssl底层实现了解么,加密算法了解么
- TCP协议和UDP协议
- 画出tcp/ip建立连接和断开连接的示意图,(我就画了个建立连接的,四次挥手忘了),还问我服务器端最开始要怎么做?(好像是保持监听转态)
- IP地址中子网掩码的作用,IP地址分为哪几部分
- IP地址分为几类
- 熟悉linux C么,(不熟悉)
- 熟悉的Linux 命令,mkdir, ls, rm, chomd,是啥意思,awk, grep(刚看了就忘了)
- 宿主目录(直接懵逼),根目录下,怎么查找一个文件
- 了解设计模式么,我说就知道一个模式(观察者模式),没敢说单例模式,怕他让写单例模式的代码,这个单例模式还不是很熟悉。让我画出观察者模式的示意图,我说了个依赖关系,其实也是自己没理解到位,他就揪着 依赖 不放了,跟我使劲讲清楚了,还画图,我只能连连点头。
- 应该还有没想起来的。待更新、、、、
- 补充几个常考的算法题(写代码):二分查找及其变种,循环数组查找、快排变种、归并排序、后缀表达式、hashmap、LRU
教训总结:
- 基础知识掌握的不够细致,关键细节搞不清楚。
- 操作系统和linux,设计模式不会是硬伤
- 简历写的有问题
- 没有说服力的项目支撑
- 编程细节问题。
- 面试太套路,多总结,面经很有用,问的知识都是很基础的。
- 期间有时候太着急完成回答,没有认真想清楚,一定想清楚再回答。