Aiur

zellux 的博客

北美求职记(二):Google & Facebook

Permalink

北美求职记系列文章

Google

Google 面试也是托学长推荐了。HR 说我的简历看起来很不错,先给我安排了两轮电面。

电面都和 coding 有关,面试官会给你一个 Google Docs 链接,在电话里描述题目后要求你在 Google Docs 上写程序。题目的难度不高,两轮一共四题,都是对基本数据结构的操作,例如给在一个未排序的数组中去掉重复的数字,还有把一个有序数组转成一个平衡二叉搜索树,在一个已排序但有重复数字的数组中查找元素等。

第一轮电面聊天的时候还发现第一轮的面试官是在 ITA Software 做的。正好前几天用他们的产品 Matrix Airfare Search 订到了低价的去土耳其的机票,过了一星期神奇的在面试的时候碰到了这个团队的工程师。当时一下子就兴奋起来,聊了不少和 Matrix 的有关的话题。这位面试官听说中国的机票也能用他们的平台查询,还挺吃惊的。他还提到他们原本想把计算任务放到 Google 内部的计算框架上,但是由于和合作方的合同的限制,没法把一些商业数据放到 Google 的平台里,只能继续用原有的计算引擎。

北美求职记(一):Microsoft

Permalink

北美求职记系列文章

最近签掉了 offer,找工作的事情算是告一段落。在这里写一点面试体验和心得,希望对有兴趣去北美工作的朋友有所帮助。

先简单介绍下自己,国内硕士在读,明年毕业,没有牛 paper,也没参加过 ACM-ICPC 竞赛。在实验室做过内核、虚拟机和 Android 底层相关的研究工作,接过一些网页和移动开发的外包,2011 年开始在字节社兼职负责后台开发。另外也经常上 StackoverflowGitHub

这次决定直接申请美国的职位后,由于心里没底,不知道国外公司招聘的难度,所以一开始投了很多公司。几个大公司都找人内推或者直接投了,小公司也投了不少,比如 Foursquare、Path、Pinterest 和 Square 等都试了。当时甚至在手机上找了一圈应用,把可能涉及后端开发的应用都投了一遍。不过大多数公司都没给我安排面试,最后 Microsoft、Google、Facebook、Twitter 和 Hulu 这五家公司愿意给我面试机会。

Impossible is Nothing

Permalink

虽然这一年还没结束,还是想为这一年写点什么。

一月到四月还是一如既往的波澜不惊的生活着。因为在一个创业公司兼职,做的事情比一年前有意思一些,但基本上还是实验室寝室两点一线,周末和 tt 出去逛逛。四月初去了一次杭州。

过年的时候和 tt 商量一起去台湾玩,但那时候去台湾还只是个完全没有谱的事情。三月底 tt 看到一个台湾自由行的优惠活动,四天内截止,两个人就这样一冲动报了去台湾的团购。四月准备好了各种手续,准备五月中旬出发。但是老实说,甚至在出发前的那一天,我都没觉得这件事情是彻底定下来了,或者说,总觉得去台湾玩这样一件事还是离自己遥远了点。也许是宅生活惯了,一下子这样进行一个离开大陆的持续 10 天的旅游让自己觉得太遥远了。去台湾我还是第一次坐飞机。

但是当下了飞机,双脚踏在松山机场的时候,我才意识到这一次台湾之旅真的成行了。

台湾这次旅游其实对我心理上的积极意义很大,不知道怎么描述,大致就是一件事原以为离自己很远的事情从慢慢部署准备到突然意识到已经成功了的感觉。

台湾旅游 tips

Permalink

顺带把几个月前写的台湾旅游 tips 也放到这个博客来。

机票

  • 我们订的是去哪儿上的团购,每人 2799 元,包括往返机票、入台证和一张台北捷运卡。团购是中旅台湾部负责的,中旅的态度很不错,提供了不少台湾旅游相关的信息。

大通证、入台证

  • 办证需要的具体证件网上能搜到很多,这里就不细讲了。办理入台证需要的证件可以直接问旅行社,不同旅行社的要求可能会有细小的差异,比如在存款证明时间上。
  • 微博上的 @台湾自由行 前一阵子推荐几家大陆的低价入台证办理点,应该比较靠谱,可以参考下。

土耳其旅游 tips

Permalink

刚从土耳其呆了两星期回来,我们的行程是 Istanbul(一天一晚),过夜大巴到 Göreme(三天两晚),过夜大巴到 Fethiye(三天两晚),过夜大巴到 Bursa(一天一晚),下午的轮船回 Istanbul(四天三晚)。趁着记忆还新鲜,写一点土耳其旅游相关的 tips。

Twitter Snowflake

Permalink

这是一篇两年前 Twitter 开发团队写的文章,今天挖出来研究了一下。原文地址 http://engineering.twitter.com/2010/06/announcing-snowflake.html

Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,开发团队就开始用 Cassandra 和 sharded MySQL 替代原有的系统。然而和 MySQL 不同的是,Cassandra 没有内置为每一条数据生成唯一 ID 的功能,因为在一个分布式环境下,很难有完美的 ID 生成方案。

恢复 Things Cloud 的同步功能

Permalink

Things Cloud for iOS 的同步功能出来后一直不能正常使用,必须得先翻墙才行。用代理截了下请求后发现 Things Cloud 用的同步服务器是 multithreaded.thingscloud.appspot.com,难怪一直没法访问。

好在 Things Cloud 同步走的是 HTTPS 协议,所以恢复方法也很简单,换用一个没有被污染的 DNS 服务器就好。对于越狱了的机器,也可以直接修改 iOS 上的 /etc/hosts 文件,在里面添加下面两行地址。

1
2
203.208.46.161 multithreaded.thingscloud.appspot.com
203.208.46.161 thingscloud.appspot.com

Android 中点击事件的判断

Permalink

最近实验室做的一个东西会向 Android 应用快速注入一系列触屏事件,模拟用户的点击。但是我们发现当按下和弹起的 MotionEvent 之间时间间隔过小(例如小于 100ms)时,会导致该事件被忽略。看了代码后发现 Android 中按下和弹起之间时间间隔要在 115ms 以上才会被认为是一个点击事件。这里结合 Android 的源码分析一下点击事件的产生过程。

Scala 中的协变和逆变

Permalink

Java 数组

先来看一个 Java 中的例子,Java 中的数组是协变的。也就是说,一个 String 数组(String[])是可以被当成 Object 数组(Object[])处理的:

1
2
String[] a1 = { "abc" };
Object[] a2 = a1;

这种协变虽然在读取数组内容时不会有问题(a1 数组中的 String 元素可以被当成 Object 使用),但是修改数组内容时就会出现无法在编译期检测出来的错误了:

1
2
a2[0] = new Integer(17)
String s  = a1[0]  // java.lang.ArrayStoreException

存储是移动应用性能的瓶颈?

Permalink

Revisiting Storage for Smartphones 是今年 FAST 会议上的最佳论文,这篇论文提出了一个违背直觉的观点,很有意思。这里简单介绍一下这篇论文的内容,有兴趣的朋友可以直接访问前面的链接下载原文或是观看现场录像。

传统的观点认为,移动应用性能的主要瓶颈在网络和 CPU,而闪存的读写速率明显高于网络传输速度,不会称为性能的瓶颈。然而,根据右图作者给出的关于移动存储性能的图例(纵坐标单位为 Mbps,本文图片均来自演讲 slides 和原论文),我们可以看到,虽然移动存储顺序读写的性能明显高于 wifi 和 3G,但是随机写的性能却比它们差很多,因此移动存储成为应用性能瓶颈是完全有可能的。