首页 > 程序人生 > 程序员面试技艺 > 北美求职记(五):Twitter
2014
11-11

北美求职记(五):Twitter

Twitter 用的也是 jobvite 的 招聘系统,我麻烦了一位在里面工作的学姐帮忙内推。据说 Twitter 相比其他互联网公司 work-life balance 是比较好的,工作会相对轻松。而在给我安排面试时 HR 给出的可以约的最晚的时间点,也是几个公司里最早的,于是我只能很早起床等待面试官的电话。

第 一面是一位负责移动端网页前端开发的工程师面的。他说我的简历上工作经历很丰富,就不让我做 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 把招聘进程终止了。

编程技巧