自我救赎的面试经历——小米篇

阅读本篇大概需要 6 分钟

这篇文章比较长。

为什么我将文章定义为一次自我救赎的面试经历,实际上和我在16年底的一次小米面试经历有关。

16年12月,我毕业半年,我当时还在无锡出差,然后电话面试了四轮小米技术面试。那时候,小米在南京有一个工作地点,人还不多,小米MIUI部门的主管在招聘网站上邀请我面试的。

当时的四轮面试,我全部经历了下来,棋差一招,还是没有通过,但那次面试对我来说意义重大,我也写了一篇大概一万一千字的文章分享了那次经历,文章有一定反响,大家可以在张哥(stormzhang)这篇文章观看,还可以去掘金来观看下文章

历经 33 天,终于拿到了心仪的 Offer

https://juejin.im/post/59ba35246fb9a00a3f24c8db

总结起来,那次面试是我毕业之后第一次正式社招面试,我感慨小米对于人才要求之高,他们对于一个人对问题深入探究的能力要求很高,如果一个问题想解决它,可以深究到五层,那么他们可能要求你至少得体现出探究至三到四层的意志与能力。

而我当时缺的就是这份深入,我可能当时最多就深入到两层,毕竟那会刚毕业,还在大量的吸收和学习过程中,是一个横向发展的过程,纵向的深入确实欠缺很多。不过这段经历也让我落下了一个小米情节,给我灌输了整整一年半的学习动力。

vivo面试后,我更新了我在招聘网站上的简历,然后上次找我的那位小米主管又对我发出了面试邀请。

没错,同一个人。

都说同一个坑不能掉两次,还说,从哪跌倒就要从哪爬起来,所以我准备迎接这次挑战了。

第一轮

因为我现在在南京,所以我可以进行两轮线下面试,直接去小米在南京的新址来面试,巧合的是,新址就在我上班公司隔壁,所以步行5分钟就到楼下了。

南京小米一楼是全球第一家小米有品旗舰店,离面试还有一小时,我就进有品里面逛了逛。有品让我感觉到了小米的格局与野心,不得不说逛有品的体验感有点像在无印良品和宜家,幻想着如果能来这里上班,中午下楼逛逛有品,也是美滋滋。

进了楼,被领到一个办公室等待面试,那会大概在下午2点,应该是他们中午休息时间结束的时间,很多人路过我这个办公室到旁边的打水池打水喝,然后有意思的是,我看到的程序员基本都是穿拖鞋或者人字拖。

差不多过了20分钟,来了一位小哥,戴着眼镜,抱着一沓白纸就进来了,我是知道这些是用来给我写算法,或者涂涂画画用的。

因为有了上一次小米面试的经验,我在回答之前都会深思熟虑一遍,在心里捋一下我在这个问题上到底懂到什么程度,如果实在不会,我会提前说我没看过/我不太清楚,然后如果有自己的想法,我会再补一句「虽然我没看过,但如果是我做/我的想法是」。

切记,不要不懂装懂,懂也要明确表示懂到第几层。

小哥先让我做了自我介绍,我们针对项目上我做的那些东西探讨了很多(这部分和我在vivo面试差不多),下面是一些问题细节。

  • 在说到我们项目上用的图表库的时候,他让我把View的详细绘制流程说说
  • 在自定义View 的时候,除了三大流程,说几个别的可重写方法
  • 自定义View中,onAttachedToWindow() 和 onDetachedFromWindow() 是啥意思,在啥时候会调用
  • requestLayout 和 invalidate() 区别
  • Handler 流程。随后,因为我说过我看过源码,所以他让我说说源码中实现单线程单Looper对象的核心类ThreadLocal的作用
  • AsyncTask原理,如果切换线程,内部线程池的机理,3.0前后的并发区别

到此Android问题结束,实际上时间还是挺长的,主要集中于一开始我项目中遇到的架构和设计上的问题,项目上的东西是我简历上和面试过程中我感觉最有价值的东西,我之后会再写一篇文章详细介绍我这一年技术上到底做了什么。

后来将近一小时时间都是Java基础问题,很基础,很细,虽然不算偏,但老实说Android开发很少会覆盖到这些基础知识。面试小哥给了我一个颇有压力的形式,他在白纸上写下了Java几个知识点,让我从中挑两三个熟悉的,他来细致问问:集合、并发、泛型、I/O、注解、OOP、JVM。

我挑了集合、泛型、并发,回忆了一些印象比较深的问题,大家可以看下:

  • HashMap内部数据结构实现原理、扩容机制、最坏的查找次数、什么时候转化为红黑树
  • LinkedList内部结构
  • HashSet和HashMap的实现关系
  • ConcurrentHashMap实现原理,内部的分段锁结构
  • 线程池的基本构造函数,ThreadPoolExecutor各参数意义,如何配合
  • ReentrantLock怎么使用,重入锁、公平锁概念,它与synchronized区别
  • <? extends A>和<? super A>是干嘛用的,它们各自的存取能力是咋样的

一个算法题:两个整数,A和B,A只能通过+、-、*2来达到整数B,求达到B的最短操作次数的算法。

一个情景逻辑题:一个操场,5个跑道,用5个人跑一次可以排出来12345名,假设每个人每次跑的成绩都是一样的,但只能知道这次跑步的名次,无法知道具体的时间成绩,现在有25个人,要找出其中的123名,求最少需要使用多少次操场。

这一轮因为上来有点紧张,所以有点被虐到了,但好在后面的手写算法和情景题回答的还可以。整个第一轮时间大概在2小时。

第二轮

第一轮结束大概20分钟,第二个面试小哥来面我了,依然是常规的自我介绍,聊聊项目。说到那个16进制路由系统的时候,他打断了下来,说正好我好像也懂16进制,所以考察我一个相关算法题,让我手写:一个整数n,求离它最近的二次幂数,等同于求 |n-2的x次方|最小时候的x的值。显然要用到一些移位的东西。

这里有个小插曲,我写了大概10分钟左右,这位面试小哥临时有事,所以他随手拉了一位要上厕所的同事,让他继续面试我。而后面的面试水准和质量依然非常强,可见这样的人才筛选要求,团队各个成员的能力都是肉眼可见的扎实。

换了新的人来面我,这道算法题也就暂停了。他重新问我了很多Android方面的问题:

  • 触控中,MotionEvent.ACTION_CANCEL什么时候调用
  • SparseArray和ArrayMap内部怎么设计的,他们的优缺点。
  • 我项目中的TCP的保活和心跳逻辑是怎样的
  • 为什么onResume里无法获取到宽高
  • XML布局里面我们经常会用?attr开头的属性值,这是干嘛的
  • 数据结构的一个简单问题:求树中拥有最大叶子数的层

这位面试官对我项目中的组件化和自动化测试的系统思路非常感兴趣,和我聊了很久,我感觉是我这轮面试很大的加分项。

后来他问完了,之前有事的那位面试官回来看了我的二进制算法,又让我写了一个算法:一组整数数组,将其中的偶数升序放在前,奇数降序放在后。我提供了几种思路,但感觉不是他最想听到的。

两轮面完了,从2点到6点半,后来主管来了,跟我聊了会,他说,小米这边要求很严格,因为是他推上去的人,所以他没法面我,要北京那边再面两轮,才能对我有一个细致而全面的了解。让我等待后面的北京电话面试。

第三轮

过了几天,我接到了北京那边的第三轮电话面试,这次的面试我准备的非常充分,特意挑选了一个安静的地方来等待面试,时间也比较舒服,约到了工作日晚上。节奏比较紧凑:

  • 线程池
  • 事件分发
  • RxJava中的map和flatmap
  • Retrofit中组装请求参数的几种方式
  • 注解有什么用,AOP的思想
  • 如何计算BitMap大小
  • 性能优化方面和困难问题解决方面
  • 组件化和GIO的问题
  • RecyclerView 的优势和缓存机制

值得一提的是性能优化和问题解决是我准备过的问题,我觉得回答的很好,说了很多实际开发中发现问题、确定问题、解决问题的流程还有方案,是我觉得回答比较好的地方。

技术大概问了45分钟,面试官开始问一些比较有趣的问题。

「觉得这次面试难度从高中低中选一个」

我选了低,我说我会、掌握的我觉得我都答了,不会的和没看过的记不住的我也没法,但我也尽力的说了我的见解和想法,至少我觉得该回答出来的部分,我对自己的表现还算满意。

「那你觉得你还有什么需要展示给我的但没有展示的」

我说了一些我项目中写过并且比较满意的因为某些问题而设计的系统。

下一个问题,请各位读者划重点,这是我认为我最有质量的一个回答。

「你对小米这次给到你的机会怎么看,你对小米有什么看法,为什么选择小米」

  1. 一年半之前的那次面试,是我的一个心结,让我认识到很多不足,当然也给了我一定的自信,令我对小米的期望更进一步。
  2. 小米是一家很酷的公司,它很特别,也很伟大。作为一家互联网公司,它真正拥有着强大的势能,即便16年下滑了,但17年还是力挽狂澜,这对于一个手机为核心的企业来说是前所未有的,这是他强大势能的体现。如果我能身处于这样的一个高势能公司工作,我自然能事半功倍。
  3. 小米总是走在别人的前面,他是真正的时代引领着。他很特别,感觉一直游刃有余,小米的眼界和所处的位置总是超前一步。最先开始小米做手机,做性价比,那会的小米实质上引领了中国进入了移动互联网时代,但等到华为和OV这些公司发现移动互联网的市场很大,开始入局并进行产品和价格的厮杀的时候,小米实际上早就把重心又换到其他地方了,比如IOT互联网,现在小米又开始引领物联网时代了。
  4. 小米的产品宗旨是:感动人心,价格厚道。小米是用心做产品,并且真正意义上贴近用户的,让用户有参与感。我记得MIUI早期开发就是这样,论坛里第一批使用者实际上也参与了开发过程。不仅如此,雷总在之前给员工的信中说过,硬件产品利润不超过百分之五,实际上不是每一家企业都有这种魄力来作这样的承诺的,这需要的是自信、生态链的成熟以及极高的战略布局才能作出来。
  5. 在面试过程中,我感受到的小米工程师文化很吸引我,小米可以算是最年轻的超级互联网公司之一了。
  6. 在引领时代的公司工作,也可以参与到改变时代的过程中,我不只是单纯的为工作而工作,我想让工作也孕育使命感,我想让我的代码也可以改变一点世界。
  7. 跟更优秀的团队和人一起工作,在这样的一家公司,哪个程序员不愿意来。

面试官说:感谢对小米的认可,期待与你一起共事,那么请等待后续消息吧。

第四轮

第四轮在一个下午,我请假去咖啡厅面试的,依然是北京那边的电话面试。整个过程很轻松,没有太多技术问题,他主要对我今年开始的Leader身份很感兴趣,问了很多这方面的问题。

  • 如何管理你的团队
  • 团队如何分配需求
  • 为什么选择使用单元测试
  • 你是如何完成交接工作的
  • 为什么你们团队的效率会比较高
  • 你们的代码质量是如何保证的
  • 如何线上监控你们的项目

然后他问我还有什么问题,我问了两个。

一个是小米手机在目前其他大厂如此发力的前提下,并且自身也在把重心放在IOT的情况下,手机部门的现状是什么样的,处于公司什么样的战略地位。

另一个问题是,如果我加入小米,我所担任的工作职责是什么样的,会有一定的灵活性吗。

第一个问题,他站在他的理解角度跟我说了很多,他的答案让我挺满意,挺安心的。

第二个问题,我如果假如小米,会在MIUI应用部门工作,现在我知道了,我开发的是小米天气应用,所以以后各位用小米的小伙伴天气要有bug,就跟我说就好了!

至此第四轮结束。

后续

等了好大几天,HR来了电话,给了offer,我如释重负,随后婉拒了vivo的offer,近期做完了前东家的交接工作,准备迎接新的职业生涯。小米面试成功对我来说意义很大。

一来,这是一次自我救赎的面试,打破了我的心结。

二来,我最想去的互联网公司前三名是小米、网易、京东,现在成功入职小米,这种体验别说多爽了。

经历篇就告一段落,后面的文章我将写写这段时间我总结的面试的技巧、经验,以及对各个公司的直观感悟。

原文发布于微信公众号 - 之乎者也V(WeaponZhi)

原文发表时间:2018-08-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FD的专栏

组织哈工大技术兴趣讨论班的心路历程

去年的秋季学期还没开始的时候,我就在考虑技术兴趣讨论班计划——让对某方面技术感兴趣的同学聚集在一起,定期轮流做一些分享。一晃眼今年都快过完了,想着把去年一年的经...

982
来自专栏一个会写诗的程序员的博客

Peter Norvig:十年学会编程

作者 Peter Norvig 是计算机科学家,Google 的研究总监。 在本文中,Peter Norvig会告诉你:为什么急功近利地学习软件开发技术是没效...

1005
来自专栏MixLab科技+设计实验室

产品经理最小技能指南之化繁为简的一页纸思考法

在这个快节奏的时代,每天新概念、新名词、新思想应接不暇。每个人或多或少都存在焦虑感,年轻人焦虑未来、父母焦虑小孩、小孩焦虑考试。这人群中,创业者和企业家人群尤为...

1583
来自专栏码洞

程序员的心理疾病

由于程序员工作的性质,他们长期以来受到的所谓“黑客”式的“熏陶”,形成了一种行业性的心理疾病。患了这种病的人对于很多新入行的人,甚至一些外行人士造成了持续的伤害...

1001
来自专栏小白课代表

你想要学习的知识,教育部都帮你准备好了!

如果说你想要学习某方面的课程,你会怎么做呢?报培训班?自己买书?网上搜罗视频?在进行这些操作之前,我建议你看看这篇文章。

1232
来自专栏程序员互动联盟

如何写出漂亮的代码?

疑惑一 程序员如何戒掉二指禅 这个问题一般是对初级人员才有的问题,老手都一练出来了。新手程序员如和戒掉二指禅?咋在学校的时候lol撸多了,哪去些什么代码。短时间...

3857
来自专栏Java学习网

程序员怎样新学一门技术

程序员怎样新学一门技术 因为公司缺一个系 Web 管理系统的开发,我决定挑一个技术栈来学习一下,然后自己来写。我选择了 Node.js+Express+Angu...

2676
来自专栏Crossin的编程教室

用十年来学编程

为什么每个人都急不可耐? 走进任何一家书店,你会看见《Teach Yourself Java in 7 Days》(7天Java无师自通)的旁边是一长排看不到尽...

3056
来自专栏高性能服务器开发

“21天教你学会C++”

下面是一个《Teach Yourself C++ in 21 Days》的流程图,请各位程序员同仁认真领会。如果有必要,你可以查看这个图书以作参照:http:...

1881
来自专栏灯塔大数据

干货|写给程序员的新技术学习指南,数据分析师也能用

因为公司缺一个系 Web 管理系统的开发,我决定挑一个技术栈来学习一下,然后自己来写。我选择了 Node.js+Express+AngulaJS+MongoD...

2894

扫码关注云+社区

领取腾讯云代金券