淘宝面试记

淘宝面试归来,度过这充满期盼的一周,今天终于收到淘宝“小聘”的邮件了,其结果就不用说了,如果我通过也许就不会发这个帖子了,发这个帖子主要是将自己的一些感悟记录下来,也许对其他人有点帮助。

任何公司都希望自己聘用的员工都是绝对不会看走眼和符合公司企业文化的,所以面试官当然会非常的谨慎,我们程序员面试除了技术关,很多公司还会安排HR这一关,好了,其实经过我的思考,我很大程度上有可能是没有通过HR这一关,我有两大致命的缺陷,面试的时候脑子会乱,然后性格偏内向而不太善于表达,我发现我周围包括我的同事有很多人都和我比较相似,这种人如果太在意结果就有可能只能发挥能力的80%左右。

我的淘宝面试一共5关,前两关是电面技术,后三关有一关是HR,现在让我慢慢的分享给大家,技术问题基本上都是从简历上开始循序渐进的,说到这里就提一下简历,大家一定要注意这个简字,这个需要一些技巧性,太简单有问题,复杂了肯定不好,最重要的一部分就是你的项目经验,尽量详细,而且要靠前写,这个是必须要认真做了项目,然后对项目真正有自己的思考才会写得生动,这一块面试官要挖清楚你是否真的有项目经验是很简单的。我的两次电面的第一个问题都是描述一下你当前的项目,由于我们公司的项目周期跨度比较大,我只参与了两个项目,当前项目还处在火热的开发阶段,由于公司的资源分配原因,给我的任务比较简单,所以基本上我很快就完成了,所以我其实没有接触到项目真正的核心,这也是我有很多时间来写自己的框架和做jivejdon的原因,在这里希望知道我公司名字的道友还是尊重我一下,不要在回复中提出来。用简短的语言先介绍完项目,然后面试官的问题就来了,这个也许大家都比较清楚,你在项目中的角色,你的贡献,你们有遇到什么比较难的技术问题,又是怎么解决的,团队成员之间的摩擦处理等等,关于这个问题,我给自己打分的话10分可能只能得6分。

第二个问题比较经典了,那就是设计模式,原话是:请描述一下你常用的设计模式和它们的使用场景?设计模式是什么?单纯从字面上来理解,它应该指一种可复用的问题解决方案,设计是方案,模式是复用,所以各个领域都会有自己的设计模式,它的通用意义就是复用和交流,那么我们软件开发中的设计模式也是这样的特点,那就是复用和方便交流,GOF设计模式是很多程序员在探索软件复用性,可维护性,变化适应能力等软件能力的道路上总结出来的可复用问题解决方案,所以设计模式会在未来还会被发现和发明,我们程序中的设计模式有的直接内置于语言了,有的需要我们用语言去表达,对于这个问题,我要感谢jivejdon,这个软件里面有大量的模式,所以我给我自己的回答打10分,jivejdon中的模式场景有,装饰器管理缓存,Builder从关系数据库构造领域模型,领域模型的搜索代理,模板方法的查询框架等,除了GOF中的这些,还有异步加载模式,领域事件模式等,最后问一个无关问题,你们公司的代码有GOF设计模式吗?

第三个问题,关系数据库的大数据量相关问题,这个从理论上来说比较简单,现在大家应该都知道关系数据库在大数据量下暴露出的很多问题了,我们项目的一个sql可以跑3天,一致性和完整性是关系数据库存在的理由,根据著名的CAP理论,关系数据在要求高一致性的前提下要做可用性,这样就限制了可伸缩(scala out),你能随便动态添加数据存储节点?你能随便改变schema?目前很多公司都有数据分区,拆分数据库或者数据表的做法,目的都是为了分解压力,但是最后就完全弱化了关系数据库的特性了,基本上退化为key value,关于怎么水平分区要根据不通的数据特性去分析,怎么hash等,这一部分确实要经验,不过这个技术上个人觉得没有什么难度,现在nosql数据库那么多都是为了解决关系数据库解决不好或者解决不了的问题,项目中具体场景具体分析就可以了,这一部分的回答我给自己打8分。

第四个问题,关于数据库事务,JTA等,这些都是在事务的ACID特性下展开的,大家一定要注意还有另外一个世界BASE,这类问题都是纯技术问题,如果你用心思考过和研究过基本上都可以回答上,比如隔离级别,分布式事务,教科书上的隔离级别用不同的读写锁组合就实现了,还有两外的多版本控制,然后就是不同隔离级别下的很多数据问题,当然面试问题没有这么细,这一块知识点还有乐观和悲观锁定,这两种又有离线和非离线两类问题。

第五个问题,关于可伸缩性,问题还原:请讲一下可伸缩性。这个问题不好回答,因为不知道从哪里切入,伸缩性可以细到代码,大到架构,伸缩性就是为了更加有效的使用资源,加了更多cpu,io,带宽,程序性能,吞吐量一定要符合我们的预期在提高,程序上的可伸缩性我们深入挖掘并行,降低锁粒度,分拆和分离锁之类的方法,架构上的可伸缩性有异步去中心化等。

以上这些面试问题都还比较大,接下来是比较细的东西,我去淘宝的第一步是从前台MM那里领到了一份笔试题,大概有4页,都是非常基础的Java细节,这部分题目有些真的还要思考半天,为什么呢?因为平时的代码根本就没触碰到那个奇怪的点,比如覆盖Thread的start方法,很多题目感觉都是在违反我们常规的编程,就是考你有没有在语言细节上有研究,这个大家可以在以后面试之前特地准备下,这张卷子我自己答得不好,甚至我觉得有些题目没有答案。

接下来就是和三位技术面试官的面对面了,这种面试,如果你的口才不错,然后彼此谈得非常开心的话希望就很大了,可是我遇到了一个非常头疼的问题,就是在技术术语上理解有偏差,导致我会要求面试官可否再问一次,有个问题其实目的是在考我是否知道AOP技术,但是我们彼此绕来绕去,最后我才醒悟目的原来如此简单,关于IOC,AOP这些技术太司空见惯,导致我有一个错觉,就是面试官不会太当问题,AOP其实本质可以说一个代理技术,控制对其他对象的访问,GOF代理模式也是这样的,java里面的做法很多就是代理接口或者代理类,另一个就是单例,问题是实现单例要注意些什么,我一子就想到了double check,但是面试官并不是这个意思,他想知道为什么它就单例了,为什么不能实例化多个,面对面我还被问到和String,java的内存结构,内存模型,内存泄露之类的问题,因为个人性格上的原因吧,面试效果我寄希望与上天了,我只遇到过一次和技术官谈笑风生。

最后一关HR,,这里有个非常重要的开始,自我介绍,其实在面对面的技术面试也会有,这个一定要事先准备好,不要回答得过于平常,企业最希望知道的应该是你是否可以胜任工作,你最强的技能,深入的知识领域,个性上的一些东西,所以不要重复你的姓名,年龄这些简历上已有的东西,在这一关,也是需要技巧的,当然大部分解决方案都是圆滑一点,看你的聪明程度和随机应变能力了,我这次就直接表达了我的性格上的真实自我,我也许不适合淘宝的企业文化,淘宝喜欢个性张扬,激情四射的人,所以要想进这些公司就要适配他们的企业文化,因为HR了解你就那么几分钟,一定要抓住机会。

最后希望看过此贴的道友都发表下看法,我也希望看到大家对我的建议,哪怕逆耳的忠言,中国的IT环境是否是浮躁?我觉得我某些时候确实浮躁,应该沉下心来学习,专心思考问题,学习技术,学习生活道理,最后引用乔布斯的名言“成就一番伟业的唯一途径就是热爱自己的事业。如果你还没能找到让自己热爱的事业,继续寻找,不要放弃。跟随自己的心,总有一天你会找到的”和banq的一句话“以自己喜欢为主,工作即生活,生活即工作。薪水是结果,和你财运有关,多几个钱发不了财,少几个钱饿不死”作为结尾。

看得出来你有点失落,没啥,工作这个东西也讲缘分的,并不是因为技术上哪里不行。有时候你很强,但是面试官就是和你对不上眼,我把面试比作谈恋爱。兄弟不用太在意。

刚开始有点,现在不觉得了,所以发了这个帖子

@oojdon
找工就像谈恋爱,不但要有硬件条件,缘分也是很重要的,你分享来也可让大家映射到自己有那些不足,或是有那些可以改进的。

这个经验对大家很有借鉴。新东家也讲究缘分。不过亏你从西跑到东,辛苦了,多些人生阅历吧。

不过马云最近也在被面试:http://www.20ju.com/content/V149146.htm

兄弟,加油,这个不算什么,也算是一种经历吧

多谢大家的关心,呵呵,其实网络上有很多关于淘宝面试的经历贴,基本上都是反思和总结。
写这些也算是对类似讨论的补充吧,我没有觉得是失败,而是成长了。

面试也是人生的经验,最近也面了几次,笔试题也面对过很多平时米想到的.
成功与否有时候真的是看运气.
但是对很多内向的程序员来说,多面试几次还是有收获的.

和本人的经历差不多,

我是经过了四轮面试,前两轮是电面,三轮是视频面试,第四面的跨度比较大,关于架构设计方面的。

中途还谈了不少非技术方面的东西,还是以失败告终。楼主一起加油哦!

看到网上有人评论,说如果把这些面试题反过来再去问其公司的员工,有可能他们也会死得很惨。
如果确实如此,比较有趣。

2010年07月03日 21:59 "oojdon"的内容
看到网上有人评论,说如果把这些面试题反过来再去问其公司的员工,有可能他们也会死得很惨。
如果确实如此,比较有趣。 ...

给你透个消息,最后一面,考官问我有什么问题,我问了一个技术问题,当时他说不清楚。

其实,这个面试不好说,甚至我在怀疑他们招人的目的性,腾讯就经常打广告,不招人,我当然希望不是如此。

至今,拒绝建议都没有回信给我。

@oojdon
我现在也在找工作。
也在阿里巴巴面试过5面,最后一面被刷
我感觉每次面试也是一种提高。面试会让你重新去思考技术、生活、理想、甚至做人。
让我们当做一种美好的经历吧。


祝好运!