折腾的一天,两场面试,感觉都还凑合。

第一场是华数淘宝的面试,关于华数淘宝和淘宝之间有什么区别和联系,我也没有细究,反正上午十点到了西湖国际大厦后只看到了 Taobao 的字样。来到了前台,填写了一份履历表,一会一位男员工走了出来带着我来到了一个沙发处。有好几个桌子,都是面试官和学生们面对面地谈。

首先还是自我介绍。我就毫不客气巴拉巴拉地说了一通,连自己骑车玩户外的事情都吹了一通。面试官微笑,蛮厉害的嘛。接下来就开始考题目了。第一道题目是 C 语言指针的问题。问:

我大概是脑子进水了,两个简单的问题都答错了,弄了一个非常尴尬的开端。然后又问我有没有用过内存拷贝函数?“ memset ?” 我问。“不是, memcpy 。算了,有没有用过 strcpy ”。“这个,用过”。“那你写一下这个函数的实现”。然个后我就很不争气的写了一个非常糙的实现,还是在面试官的提醒下才改对的,两个明显的 bug。尴尬。

接下来问我对排序了解多少,知道哪些排序。我说我对那种 \(O(n \lg n)\) 的排序比较熟,他让我举例,我就把能想到的选择排序、冒泡排序、插入排序、快速排序、归并排序、希尔排序等等都说了。然后他让我描述一下快速排序的实现,我就 balabala 讲了一通—— 其实要让我写,短时间内我还真不一定能写出来。快排到此为止。又问我那些是稳定排序和不稳定排序,我说这个我真不清楚了,可能要看具体实现——很尴尬。“还有别的排序方法吗”, “有,当然有,比如桶排序——还是创新工厂的面试时学会的……”。我又 balabala 的吹了一通,把决策树都说上了,这些排序总算是问完了。

问我了解设计模式不?我说看过几页《大话设计模式》。然后他问了一个单例模式?我就傻眼了,嘟囔着说不出来。其实这东西一直想去研究,一直在拖。接下来问我程序的内存空间是如何管理的。我就说栈和堆的东西。蒙混过关。然后问我“给你两个栈,如何模拟一个全功能的队列?”我想了想,给了一两套方案,不过终究不完美。

中间问我 Java 的 vector 是怎么回事?Java有 vector 的?我愣了。然后他说那就说说 C++ STL 里面的 vectorlist 是怎么实现的吧,又什么区别。这个问到点子上了。记得大二时扫《C++ Primer 3rd Edition》时恰好仔细研究过,我就 balabala 的说了一下 vector<int> vv.capacity()v.size() 的区别,看得懂的应该不用细讲,看不懂的看官,你的 C++ 比我还差,赶紧回家补补。问完这个又问我进程和线程有啥关系。一个进程开辟出来的内存,其子线程是否能够访问等等,答得一般。

又问我在实验室做的项目(一个 Windows Mobile 界面开发的项目),问我 GUI 库中的 buttononclicked() 的动作是如何相映处理的。我就把 Win32 API 里面的消息循环机制又吹了一通。面试官表示很满意。

最后问我 Linux Shell 命令的东西,比如如何找出一个分区内占用空间最大的目录,我说用 du -h . | sort ,如何看磁盘使用量—— df -h ,如何查找文件等等,由于日常经常用 Linux 小打小闹,所以这部分答的也还算可以。

大概就谈了这么多,最后他送我出去,还郑重地握了握手,感觉还凑合吧。

然后回到玉泉吃了个午饭,就赶往滨江区 DeviceVM 参加下午一点的面试。公交 + 打的跌跌撞撞到了盾安大厦 DeviceVM 公司,接待我的是一个 ppmm。二话不说,先给了我一套题目,说时间一个小时,标记的必做,没有标记的选作——这个标记主要根据你应聘的职位来标的。我的娘,题目总共有十几页,大概是 16 种类型,不过我只需要做 6、7 种必做的。类型分布大概如下:

  1. C/C++ (What's operator overloading, what's copy constructor)
  2. OO (class, instance, inheritance, polymorphism, how to modeling)
  3. GTK (layout, glib)
  4. Qt (qmake)
  5. Linux File System (/proc directory, how to mount multiple file systems)
  6. Linux Device Driver (What's IO port? How to install and remove driver?)
  7. PHP
  8. Javascript
  9. Regular Expression
  10. Windows API
  11. XML
  12. UML
  13. Networking
  14. Python (list, tuple, dict)
  15. Shell Script ($PATH, find command)
  16. Logic
  17. personal information

我不管是否必答,先把自己会的都答上了。其实题目都不是很难,只是考的比较广泛,这就看你平时的积累了。而且每种职位大概只有 7 个部分是必答的。我应聘的是 Linux C++ 开发工程师实习,Qt 和 GTK 必考,可是我只有了解,却基本不会,倒是把 Shell 和 Filesystem 基本都答上了……汗。

答完了给了我一份履历表,填完履历表过来一位男面试官。看着我简历问我一些问题。首先让我阐述下 C++ 的多态性是怎么回事。我就 balabala 胡侃了一通,把 RTTI 和函数指针都侃出来了,面试官表示满意。然后让我介绍了下实验室项目,我又 balabala 说了一通,面试官表示还不错。问我有没有用过 JavaScript,我说只用过 document.write() …… 又问我如何写一个程序,探知另外一个 C++ 可执行程序的堆内存使用情况。这个问题不太明了,他说就是让你写个调试器类似的东西,我说没什么思路,他说可以利用 C++ 的运算符重载,重载一下 newdelete ,让 newdelete 输出一些信息。不过我头脑中没有任何重载 newdelete 的想法和回忆,晕了。

最后他问我实习时间可以保证多少。我说最多到十月中旬,问我什么时候考完试,我说 7 月 6 号。然后就这样结束了。我也不知道这么问究竟什么意思,淘宝的面试官也这么问我,不知是悲剧呢,还是心里觉得我这个人还有点潜质,打算发 offer 了。

Ok,到此为止。