编程学习网 > 程序人生 > 程序员面试技艺 > 程序员面试经历
2015
08-16

程序员面试经历

背景


自从2013年离开北京后,就没有在固定单位上班了。
期间捣鼓过一些东西,也挣了点小钱,日子也没有到过不下去非要找工作的地步。
只是觉得自身仍有不足,作为技术,还是想再开阔一点,再深刻一点,再专业一点。
也没有去刻意地投递简历,本来老婆怀孕,自己在家,时间比较多,所以就写写博客,所以会有一些来自私信的机会。
既然有机会,那就愉快地去追一下,本篇,就记录一下最近几个月的一些经历。

云XX


这个公司招聘全栈,要求精通编译、操作系统、计算机网络,要精通一门底层语言,比如汇编或者C,要精通一门高级语言,比如C++或者Java,没有.Net方面的要求。
因为不是自己投的,一般看到诸如要求精通的,我就呵呵一下,然后就扫其他的了,但是机缘巧合,可能HR妹妹比较具有亲和力,所以也就答应应试。
约的两周后聊,不过由于老总临时有事,就和CTO哥哥先聊下,主要聊的一些内容是:
操作系统的进/线程区别,Linux Kernel进线程调度的机制,以及操作系统原理概念上的调度算法。
分布式存储的一些问题,比如分布式锁、锁性能、Master-Master多主架构和Master-Slave架构的各自优劣,等等。
作为第2个问题的延续,会聊到CouchBase和HBase的一些实现原理,但并不深入,还会聊到性能上的东西,比如为什么不选择HBase。
自己的一些项目经历,一些比较泛的知识点,看似随意,但应该是在考察知识结构,是否全面。
知道哪些开源软件或者框架,看没看过源码,有没有自己的理解等等。
Java多态的实现和体现,接口和抽象类的关系,我从java和vm层面大概做了叙述。
第二天,和老总聊,这个比较有趣,因为老总的技术很厉害,而且也很坚持己见的,这次聊的很久,大概有3个小时,主要还是争论,其实到这一步基本就没打算要这个offer了:
硕士为什么没有毕业。
天文科学家为何要选择Python来处理数据,而不选择其他的语言。我说这是历史原因,然后老总说这个设计方向不是用来处理这个的。这里也有点小争议,略过吧。
为什么要在Python虚拟机上做核间并行,在kernel里做会不会更舒服。
聊到老总面过的一些人,包括985出来的,和BAT出来的一些T,能把编译、装载、链接,说清楚的人不超过5个。我说你们公司要求挺严格的,老总说不是他们要求严格,是行业整体水平太低。很多做WEB开发的,后面的东西一点不懂,但也能做,你说能做好吗。这一点,各自有不同的看法,但分歧到没有大到要争论的地步。
中途我问到了一个问题,为什么选择Erlang作为开发语言。因为这家公司目前主要做云通讯(之前CTO自己的定位),而这个问题也是本次面试最大的争议所在。

老总说你应该自己做做homework,当时我是觉得吧,通过这个点让人家介绍下业务,毕竟没业务聊啥都是比较泛,自己想有点针对性,但被这么当头一棒,觉得自己是在浪费人家的时间,而且“做做homework”如果你听了也会有点火吧,呵呵。

从这里开始,基本各种争论的东西也就出来了,比如,聊到ZooKeeper:

老总:ZooKeeper太重,在他们的架构中是臃肿的或者累赘。
我:可以不用zk,但一致性和同步也得自己实现吧。
老总:他们自己基于paxos算法实现了。同时列举了一些行业内的反例,说其实用zk等开源框架拼出来的系统,都存在逻辑上的问题。
我:提到了twitter。
老总:如果你有机会可以去twitter看看,我们现在做的是取代他们的老框架。
我:虽然我没在twitter工作过,不过各种Con,各种Summit,各种SlideShare,还是有看过的。

后来又聊到多主结构,和主从结构:


我:我之前有了解到,类似p2p这种,捕获网络拓补变化的速度会比较慢,随着节点数的上升,可能时间复杂度过高。
老总:我们从不空谈问题。很多业内观点,认为这种架构不好,但事实上我们有一套老系统性能特别高,目前的通讯也是基于这个,30-40个节点没有什么问题。
我:那心跳是怎么维护的?
老总:是由每个节点互相维护心跳。
我:好的。但好像这样也是将同步和协调机制耦合进去了,我觉得Hadoop和HBase那种Master-Slave的,抽象出NameNode或者MasterNode,然后维护一些metadata在zk上,也是已经被成功证明的一种架构呀?
老总:我问你,如果状态节点和数据节点之间发生网络割裂怎么办?
我:发现网络拓补这块不通后,肯定要进行节点间复制,并等待网络恢复,比如阿里那次光纤切断事件。而且,您为什么一定觉得状态节点一定是单个节点呢?
老总:所以,它们之间并没有解耦。
我:哦,我说的解耦不是说彻底不协作了,只是从设计上按照独立角色原则分离开来,这样清晰一些。
老总:那还是耦合的。

期间,老总还觉得Java不是一门比较好的语言,当然,这一点我也有同感,但我觉得生态可能更重要一些。

最后,还是回到了那个Homework问题:


我:X总,您应该是一直受西化文化的影响,所以觉得问这个问题会没有什么价值?因为您的homework回答,让我感觉有点过于直接和难以接受。
老总:公司需要以效率为重。
我:其实,我个人听HR说您的技术很厉害,我也搜过一些新闻和对您的采访,我觉得我个人是作为一个follower来取经的,不过这么干脆的拒绝,的确我是第一次见。
老总:讲了很多公司开会的方式,比如先做好准备再开会,否则要一直给某个不懂的人讲,会算白开了。
我:这个我同意,但我是面试,所以不清楚你们公司的业务,只是想听听作为创始人,对这个技术选型的看法,而且很多大牛,如果你邮件给他,他也会很谦虚,很详实地回答你的问题。

期间又聊到StackOverflow,我提到,记得以前有个人对于回答问题的人,表示了感谢,站务觉得这是废话,后来有很高reputation的人站出来发声:至少在我们的国度,如果有人帮了你,说声谢谢,是有教养的体现。如果觉得表示感谢这样的话,过于社交向,那不如去掉reputation和回答者的个人链接好了。

后面的很多问答,其实也是在互相表达团队沟通的一些原则,我只是觉得,公司不是招聘机器人,大家都是专家独当一面,开会高效,无可厚非,但人与人之间普遍存在差距,一个好的leader,如果这么冷面,那团队氛围会利于激发创新么?

的确,老总说的很多都是有道理的,比如美团,就有要么牛逼,要么滚蛋之类的宣言,但我个人觉得任何事,得3-7开,不能那么绝对。
觉得像云XX这样的公司,走Geek路线,全招的是专家或者有潜力成为专家的全栈牛,而且对智能硬件、云通讯、实时系统有自己的一套理念和实现,还是很有前途的,祝福一下吧。

极客XX


教育类公司,职位好像是大数据就业班主管布道师,就是研发管理大数据方向的课程。
这个是从猎聘上来的机会。
HR要了简历后,觉得太简单了,我又大概补充了下,3天后,跟数据中心负责研发的leader聊,主要内容是:
算法课程,在大学和在培训机构的课程,有什么不同。
对方leader表示算法虽然没什么用,学起来没有干货的感觉,但是可以帮助一些学员就业,比如一些公司会考算法。
Hadoop和Spark。
项目经历。
上班时间,课程开发的一些过程,等等。
有个槽点就是,对方leader把C#念作"C井",我当时有点慌,如果纠正说C-Sharp,会不会留下不好的印象,如果说C井,好像又很别扭. : ]
本来觉得聊得还行,结果HR后来说,可能此方面直接项目经验少了些。

民XXX


这个机会,接触了来回有2个多月的感觉,对方的总监是个很好的人,上海交大的硕士,素质很高。
因为接触的时间挺长,所以对我的一些擅长和不足都有较深的了解,去上海时,和总监聊的少一些。
去上海终面,先和负责数据中心研发的leader聊,人非常不错,平易近人,聊的内容也挺广泛。
项目经历.
Hadoop.
HBase是否适合作为行为分析的后端storage,二级索引等。
淘宝dubbo.
Phoenix.
Storm的混合拓补问题,比如同时支持最少一次和仅一次的数据处理语义。
SOA,异步,原子服务。
Spark.
流式处理。
实时系统构建,主要问下有没有一个完整的设计和想法。
Kafka,全局序的一些限制和问题。
目前数据中心的研发状态和产品。
这个leader哥,人真的很好,哈哈,中午请我吃了一餐。
下午和CIO聊,主要是听人家的看法,因为他之前以为我是应聘数据科学家,后来发现是想聘基础平台的搭建,倾向于工程师,所以数据挖掘和数据仓库没有问太多。
大概介绍了互联网金融行业内的一些生态,对数据仓库和ODS的异同表达了一些见解。
对数据中心期待的数据仓库,有什么,应该是什么,做了一些设计上的表述,让我更明白一些已经实现的,和没有实现的,从整体上有个把握。
数据挖掘的一些东西,比如分类、聚类、关联规则、有监督和无监督学习等等。
音频和视频数据的处理和知识发现。
结构化数据和非结构化数据,在生产环境的一些强制要求。
北京、成都、上海,各个研发中心的一些情况,看更倾向于在哪里,从事何种工作,大数据方向的还是在上海。
敏捷,自我驱动,等等内容。
基础平台的重要性,以及领域专家发现知识的价值,等等关系。
工程师文化。
CIO感觉深不可测哈,因为他之前在国外一些挺著名的搞DW的公司做,所以经验很丰富,理论素养也很高,因为聊得东西很广泛,所以我更多是在听,表达的比较少一点。

结语


仅作流水记录,感谢每个给机会的人和公司,呵呵。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取