第一面是一位负责移动端网页前端开发的工程师面的。他说我的简历上工作经历很丰富,就不让我做 coding 题了,让我谈谈做过的这些项目。谈完项目后又进入了聊天时间,我提到喜欢 Twitter 的一个原因在于他有很多好用的开源项目。比如我平时写一些小型的 web 应用都会用 bootstrap,省时省力;而我之前实习的时候做的一个分布式的内容下载系统,也参考了 murder 的实现。另外因为当时我在实现字节社 iPhone 和 iPad 的 web 界面时碰到了之前修复的 bug 后来再次出现,忘了测试的情况,就问了他 Twitter 是怎么做移动端 web 界面的测试的。结果面试官说他们也基本上是买一堆设备然后人工测的,倒是桌面端可以用 Selenium。
愉快的结束第一面后,就开始了略有点无语的二面。我的二面前三次都没面成,第一次被放鸽子了;第二次面试官是 iOS 团队的,听我介绍完自己想做后端时,说他面我不合适,会让 HR 再帮我重新安排一轮;第三次再次被放鸽子,面试官那天很忙,抽不出身。每次面试失败后都要再等一星期才能收到 HR 的消息,所以光二面就拖了一个月。
第四次二面终于面成了。我听面试官介绍应该是来自平台相关的团队,不过面试官接着问我是喜欢写代码还是喜欢倒腾环境的时候,我说喜欢写代码,结果面试官说他的团队主要是做运维的,开发的工作量很小。估计是考虑到之前已经放过一次鸽子了,这次面试官还是继续面下去了。
虽然运维团队本身不是我喜欢的,但是面试官的问题相当对我胃口。一上来就是一连串的几个关于僵尸进程的问题:什么是僵尸进程?如何列出所有的僵尸进程?如何获得这些僵尸进程的 PID?如何把它们终止?我用 ps grep awk xargs 配合管道把这几个问题用一行命令行解决了,他很满意。
第二问是统计一个 httpd 的访问日志中,访问量最大的前五个 IP。我用 Ruby 写了一个,六行代码就能搞定。
接着面试官了解 DNS 吗,如果浏览器没法上网一般怎么诊断?我的回答是先 dig 看 DNS 解析是否正确,然后用 ping 判断 IP 是否可以访问,再用 curl 看是不是浏览器设置的问题。最后还可以用类似 www.websitedown.info 的服务检查。
第四个问题是怎么把一个文件复制到多个机器上?我说可以先用 ssh-copy-id 把公钥拷过去,然后再用 scp 拷文件。面试官说这样机器多就麻烦了。我解释到可以用 expect 写脚本自动输入密码,还加了句当然也可以用 Twitter 的开源工具 murder 分布式部署。
第五问是文件系统中 soft link 和 hard link 的区别。我的解释是 soft link 是一种特殊的文件,它的内容是被指向的文件的路径,而 hard link 是直接指向 inode 的。所以 soft link 可以用于目录,但是 hard link 不可以。
文件系统中 inode 和 path 的区别。我回答是 inode 是文件系统的一个数据结构,指向某个磁盘上的文件;而 path 是由多个 struct dentry 组成的,每个 dentry 描述了 inode 的父子关系。
最后一问是如何修改 DNS 服务器?我说可以修改 /etc/resolve.conf。
感觉 Twitter 的电面题会包含不少概念题,当然也有可能是运维团队的特点。几天后我收到 HR 的邮件,告诉我两位二面面试官都表示我对他们的团队不怎么感兴趣,而除了这两个团队外目前还没有其他团队可以给我安排面试。估计从此就进入等待列表了,没能去总部 onsite 面试,我在签掉 Facebook 后就联系 HR 把招聘进程终止了。
后记
最后签了 Facebook,等着下一步关于工作签证手续的通知。mm 也表示愿意和我一起去美国,她应该会先在那里读个硕士再找工作。
希望接下来的签证手续等事情都一切顺利了。
推荐阅读:
我的求职经历:走进过腾讯、网易、百度、迅雷
IT民工在美国打工的日