提前有笔试,90分钟,分为选择题、英语题、编程题三部分。
选择题包括数据结构、算法、操作系统、计算机组成还有部分智力题。选择题不难,只要基础课没问题基本都行,就是智力题很抽象,5,6个找规律的题都不会。
英语题是三个,有一段描述和一个例子,然后让你做。基本上英语没问题,逻辑上没问题都能做,就是第三个有点难,当时题没读太懂。
编程题是二选一,我的第一个是翻转句子中单词的顺序,但单词内字符的顺序不变。例如输入“I am a student.”,则输出“student. a am I”。这是面试书上原题,没看过也不难。
第二个题是将单链表重新排序输出,原来的结构是A1A2A3...An,现在换成A1AnA2An-1...,时间复杂度没要求,空间复杂度要求为O(1)。这个题有点难,我当时没有选,最后想了下可以做就是很麻烦。
笔试就是这样,第二天通知面试。(建议提前将笔试最后两个编程题都搞懂,面试的时候主动和他们谈起来,这样容易留下好印象。)
面试一共三面:2轮技术面+BOSS面。
第一轮:主要考察数据结构+算法+基础知识。
1.自我介绍+擅长的学科。
2.CPU中断是什么,我说是为了提高效率CPU等待IO时将其挂起,是操作系统控制的,然后又举了个例子说了下。他说那有些比如说单片机连操作系统都没有怎么执行中断,我说除了软中断还有硬中断。
3.队列的应用有哪些,我说先进先出在BFS中用的比较多。
4.知不知道最短路径算法,我说知道,让我解释下算法思想。
5.知道几种排序算法,我说会写冒泡、快排、堆排序、基数排序、插入排序、归并排序,让我解释快排思想。
6.一个算法题:一个数组里面只有大小写字母和数字,如何快速的将所有的数字排到字母前面,字母和数字各自内部的顺序无所谓。我说了两种思路:1.hash表的思想:由于只有字母和数字,所以建立一个数组,以字母或数字的ASCII的值作为下标,扫描一遍后就得到了对应的数量,然后再输出即可。他问我那这个申请的内存空间有多大,我说跟数组中存的字符对应的ASCII值有关。2.同时从前往后和从后往前扫描一次:后面扫到数字停止,前面扫到字母停止,同时停止时互换位置。他让我写方法2的代码,当时太紧张,写的不对。
7.一个智力题:一个圆形池塘,鸭子在池塘里,狐狸在岸边。鸭子只有游到岸边才能飞走。而狐狸想吃鸭子。但是狐狸又不会游泳,只能在岸上跑。狐狸在岸上奔跑的速度是鸭子在水里游的速度的4倍,问鸭子怎样才能飞走而不被狐狸吃掉。假设狐狸足够聪明。这个题我答的很烂,最开始我说肯定跑不掉,他说那我为什么要问你这个题。然后又提醒我可以跑弯路,我还是没想到,想了估计有5分钟我说我实在不会他就给我解释了一下,虽然我还是没听懂。(百度:算法 狐狸与鸭子的问题)
一面就问了我这些,完了后问我有没有什么要问的。我就把笔试题当时没选的那个编程题拿出来和他探讨了一下,说了一下我自己的想法。
第二轮:项目+基础
1.介绍一下自己的项目,说说自己负责的模块。
2.在你做过的项目中,说说你遇到的最大困难以及你当时是怎么解决的。
3.他看我既做Java又做C++,就问我C++和Java的区别是什么和各自的优缺点。我简单说了下JVM,他问我JVM的好处是什么,为什么C++不做JVM这样一个东西。我说JVM虽然跨平台很方便,但同时也牺牲了速度,对于某些速度要求高的程序来说不好。
4.用数组实现一个队列(现场写代码):我最开始想太复杂了,他一步步引导我,多次解释。最后用两个指针实现了整段代码,这段代码写加分析估计搞了20分钟。
5.有什么想问的:我就说在实际工程中,用数组实现队列怎么样比较方便,然后他给我说了下他们平时怎么做的。
第三轮:BOSS面
BOSS面很简单,没问技术方面的,问了下成绩和擅长科目。
你对公司有什么了解吗,我说当时用Visual Studio开发时订阅过你们的邮件,反正就是一顿神侃。
你为什么拒了以前的公司,以及你对你以后的工作看法。
三轮面完之后,他说下周谈工资这些,应该没什么问题。...查看更多