折腾的一天,两场面试,感觉都还凑合。
第一场是华数淘宝的面试,关于华数淘宝和淘宝之间有什么区别和联系,我也没有细究,反正上午十点到了西湖国际大厦后只看到了 Taobao 的字样。来到了前台,填写了一份履历表,一会一位男员工走了出来带着我来到了一个沙发处。有好几个桌子,都是面试官和学生们面对面地谈。
首先还是自我介绍。我就毫不客气巴拉巴拉地说了一通,连自己骑车玩户外的事情都吹了一通。面试官微笑,蛮厉害的嘛。接下来就开始考题目了。第一道题目是 C 语言指针的问题。问:
我大概是脑子进水了,两个简单的问题都答错了,弄了一个非常尴尬的开端。然后又问我有没有用过内存拷贝函数?“ memset
?” 我问。“不是, memcpy
。算了,有没有用过 strcpy
”。“这个,用过”。“那你写一下这个函数的实现”。然个后我就很不争气的写了一个非常糙的实现,还是在面试官的提醒下才改对的,两个明显的 bug。尴尬。
接下来问我对排序了解多少,知道哪些排序。我说我对那种 \(O(n \lg n)\) 的排序比较熟,他让我举例,我就把能想到的选择排序、冒泡排序、插入排序、快速排序、归并排序、希尔排序等等都说了。然后他让我描述一下快速排序的实现,我就 balabala 讲了一通—— 其实要让我写,短时间内我还真不一定能写出来。快排到此为止。又问我那些是稳定排序和不稳定排序,我说这个我真不清楚了,可能要看具体实现——很尴尬。“还有别的排序方法吗”, “有,当然有,比如桶排序——还是创新工厂的面试时学会的……”。我又 balabala 的吹了一通,把决策树都说上了,这些排序总算是问完了。
问我了解设计模式不?我说看过几页《大话设计模式》。然后他问了一个单例模式?我就傻眼了,嘟囔着说不出来。其实这东西一直想去研究,一直在拖。接下来问我程序的内存空间是如何管理的。我就说栈和堆的东西。蒙混过关。然后问我“给你两个栈,如何模拟一个全功能的队列?”我想了想,给了一两套方案,不过终究不完美。
中间问我 Java 的 vector 是怎么回事?Java有 vector 的?我愣了。然后他说那就说说 C++ STL 里面的 vector
和 list
是怎么实现的吧,又什么区别。这个问到点子上了。记得大二时扫《C++ Primer 3rd Edition》时恰好仔细研究过,我就 balabala 的说了一下 vector<int> v
的 v.capacity()
和 v.size()
的区别,看得懂的应该不用细讲,看不懂的看官,你的 C++ 比我还差,赶紧回家补补。问完这个又问我进程和线程有啥关系。一个进程开辟出来的内存,其子线程是否能够访问等等,答得一般。
又问我在实验室做的项目(一个 Windows Mobile 界面开发的项目),问我 GUI 库中的 button
的 onclicked()
的动作是如何相映处理的。我就把 Win32 API 里面的消息循环机制又吹了一通。面试官表示很满意。
最后问我 Linux Shell 命令的东西,比如如何找出一个分区内占用空间最大的目录,我说用 du -h . | sort
,如何看磁盘使用量—— df -h
,如何查找文件等等,由于日常经常用 Linux 小打小闹,所以这部分答的也还算可以。
大概就谈了这么多,最后他送我出去,还郑重地握了握手,感觉还凑合吧。
然后回到玉泉吃了个午饭,就赶往滨江区 DeviceVM 参加下午一点的面试。公交 + 打的跌跌撞撞到了盾安大厦 DeviceVM 公司,接待我的是一个 ppmm。二话不说,先给了我一套题目,说时间一个小时,标记的必做,没有标记的选作——这个标记主要根据你应聘的职位来标的。我的娘,题目总共有十几页,大概是 16 种类型,不过我只需要做 6、7 种必做的。类型分布大概如下:
- C/C++ (What's operator overloading, what's copy constructor)
- OO (class, instance, inheritance, polymorphism, how to modeling)
- GTK (layout, glib)
- Qt (qmake)
- Linux File System (
/proc
directory, how to mount multiple file systems) - Linux Device Driver (What's IO port? How to install and remove driver?)
- PHP
- Javascript
- Regular Expression
- Windows API
- XML
- UML
- Networking
- Python (
list
,tuple
,dict
) - Shell Script (
$PATH
, find command) - Logic
- personal information
我不管是否必答,先把自己会的都答上了。其实题目都不是很难,只是考的比较广泛,这就看你平时的积累了。而且每种职位大概只有 7 个部分是必答的。我应聘的是 Linux C++ 开发工程师实习,Qt 和 GTK 必考,可是我只有了解,却基本不会,倒是把 Shell 和 Filesystem 基本都答上了……汗。
答完了给了我一份履历表,填完履历表过来一位男面试官。看着我简历问我一些问题。首先让我阐述下 C++ 的多态性是怎么回事。我就 balabala 胡侃了一通,把 RTTI 和函数指针都侃出来了,面试官表示满意。然后让我介绍了下实验室项目,我又 balabala 说了一通,面试官表示还不错。问我有没有用过 JavaScript,我说只用过 document.write()
…… 又问我如何写一个程序,探知另外一个 C++ 可执行程序的堆内存使用情况。这个问题不太明了,他说就是让你写个调试器类似的东西,我说没什么思路,他说可以利用 C++ 的运算符重载,重载一下 new
和 delete
,让 new
和 delete
输出一些信息。不过我头脑中没有任何重载 new
和 delete
的想法和回忆,晕了。
最后他问我实习时间可以保证多少。我说最多到十月中旬,问我什么时候考完试,我说 7 月 6 号。然后就这样结束了。我也不知道这么问究竟什么意思,淘宝的面试官也这么问我,不知是悲剧呢,还是心里觉得我这个人还有点潜质,打算发 offer 了。
Ok,到此为止。