十几年工作经验,连一个Binder都讲不明白,还敢要20K?
博主是京东员工,奉旨担任了几次面试官,其中有一次的面试经历印象比较深,因为来参加面试的人真的是一个名副其实的“老Android”了。
具体情况
前不久,接到了上面的任务,要去面几个人,我也没有拒绝的理由,就接下了,结果遇见了一个非常特殊的应聘者——一个40岁的应聘者。
交谈之下,唏嘘不已,回去后就想发帖倾吐一下自己内心积攒的情绪,和诸位分享一下,也想听听大家的想法。
应聘者情况
40岁,名副其实的大龄程序员,两天前刚过四十岁生日。上有年逾耳顺之年的母亲,下有刚刚上小学六年级的孩子,妻子身体不太好,一直在家养病,只有他一个人是家里最大的劳动力。
三月,因为疫情还有其他多方面的原因,他被原来的公司辞退了,到现在,已经是失业半年有余,没有收入来源,还有份子钱,房贷,车贷等一大堆的支出,家里的经济状况越来越差,他只能出来继续找工作了。
面试第一感
现在的市场行情,招聘信息一般都会标注要求:35岁以下。我们公司在招的岗位也是。
所以,看见这个人面试的年龄信息时,我的第一个猜想是:这人要么是技术大牛,要么是老板的关系户,当时心里更加偏向大牛的猜测。
所以,一开始心里是怀着比较认真且有些紧张的心情面对的,有些担心自己的表现不够专业,从而影响对方对我们公司的评价。
但是问了几个问题后,我发现这个人和我想象中的有些不一样。
面试进行时
因为公司技术涉及到Binder比较多,所以我就问了一些相关的问题,都是比较基础的吧
我:Linux和Android的IPC机制种类
应聘者:Linux中提供了很多进程间通信机制,主要有管道、信号、信号量、消息队列……(这个还是回答的差不多了)
我:为什么要使用Binder
应聘者:这个也不太记得了
我:Linux和Binder的IPC通信原理
应聘者:……这个不清楚了
我感觉再问下去就直接冷场了,于是,干脆换了方向,换了话题。看他的简历,Java基础好,于是就挑了Java方向的问题问他。
我:你有互联网分布式相关项目开发经历么?
应聘者:有啊,那个 XXX 项目就是…(说了一堆)
我:好,我看到了,我看这个项目是用 Dubbo 框架做的,为什么要用 Dubbo 呢?在你们整个项目里面 Dubbo 承担了什么角色?
应聘者:做服务治理,底层是 ZK…
然后他就一直在说和 ZK 的关系,我也没怎么听明白,我再怎么引导也没说清楚 Dubbo 在项目中承担什么角色。
我:能介绍下服务与服务之间相互调用的时候,如果调用超时了是怎么处理的?
应聘者:超时啊,(想了几秒后)那应该是报错吧。
我:确定是报错吗?(他想了想,不说话,然后我接着说)没有重试机制吗?重试机制是怎样的?
做过分布式的项目的都知道重试机制,至少读操作要支持重试,写操作支持重试的话被调用方还要支持幂等性,不然会造成重复写入。
应聘者:(局促的笑了一下,和我说)这个项目有点久了,这个不太记得了……
然后我看了下这个项目,2014 年做的,6 年前了,他说太久不记得了,那也情有可原了。
我:我想问的是,从上到下,这些技术是怎么承接起来的,整体的系统架构是怎样的?(现场没纸笔,不然我都想让他画图了)
应聘者:呃……我知道你的意思,主要是我真的不知道怎么表达……(然后他不说话了,场面尴尬了)
我:没事,问你一个设计性的问题,假如有一个接口,五个实现类,现在的需求可能要往接口加一个方法,这样就要改动五个实现类,但需求只需要改动其中两个实现类,要怎么设计才好?
应聘者:那就只能把方法写在两个实现类中……(想了半天也没有说出好的方案)
其实这里至少有两个方案:
可以再定义一个抽象类去实现这个接口,在抽象类中新增这个方法,然后其他两个实现类实现这个抽象类就好了。
使用 Java 8 中的新特性,在接口中新增默认方法或者静态方法。
所以,其实这里我一方面是考一下他的设计能力,另一方面我是想了解下他对 JDK 新特性各方面知识的应用和掌握。还有更多设计方案,我这里只列了两种。
我:好的,没事,那你觉得你擅长的技术或者框架有哪一些呢?
应聘者:擅长的啊……(半天没说出来一个)也没什么,就 Java 基础方面还可以吧!
我:Java 基础可以是吧,好吧,我问一些 Java 基础方面的问题吧。请问:Java 接口和抽象类的区别是什么?(其实就是上一题的答案)
应聘者:呃……(想了半天)好像是抽象类还是接口里面可以写实现方法的吧(不确定的回答)
我:到底是哪个可以写实现方法呢?
应聘者:(左右摇头,眼神飘浮不定,不说话了,场面再度陷入尴尬……)
后面聊了一些其他的,期间我问了一下他的薪资要求(如果在10K左右,我觉得还是可以考虑一下的……)但是我没想到,他说20K起步,当然,他也说了理由,家庭经济压力大,必须要这个价。我表示理解,但是,我还是觉得没必要聊下去了。
我:(没办法,我要打破这个尴尬场面)你确定是做过 Java 么,这都是非常基础的呀,感觉你基础也不是很好啊!
应聘者:哎,来这家公司面试没做准备!(一脸无奈)
我:这样啊,那建议你还是回去好好准备一下吧,因为我们这个岗位是需要有一定技术能力的,所以,非常不好意思……
应聘者:好的,我明白。
最后
我一开始以为会是一个无所不能的大佬,结果发现对方技术陈旧,没有什么建树,而且年纪在所有面试者中也是偏大的,学习能力比较弱。
所以最后,虽然很同情他,但是我还是没敢收下他。
结束后,对面隐晦的问了一下,我没说话,直接摇了摇头,他看懂了,当时就感觉他快要哭出来了……
结语
Android学习是一条漫长的道路,我们要学习的东西不仅仅只有表面的 技术,还要深入底层,弄明白下面的 原理,只有这样,我们才能够提高自己的竞争力,在当今这个竞争激烈的世界里立足。
千里之行始于足下,愿你我共勉。
其实,Binder这个知识点并不难,当时面试结束后,我整合了很多Binder的知识,此外还有我认为比较重要的学习方向和知识点,当时发去了应聘者的邮箱。
另外,我在我的GitHub:https://github.com/xieyuliang/Android也备份了,需要的朋友可以自己来取,欢迎大家一起学习进步。