最近在忙着换工作,每天查缺补漏,每天顶着8月的骄阳去面试,每天面试还要遭受各种虐,这种心情有时候让人不禁怀疑人生。究竟自己还能不能行?为何和别人那么大差距,是自己真的不够努力还是怎么回事。不知道求过职的人是不是有过跟我一样的心情,我现在只想记录一下这段经历,不为别的。
8月1号开始第一次面试,在这之前准备了大概有一个月时间,主要是读了一遍《安卓开发艺术探索》,读了80%《android源码设计模式解析与实战》,读了大概1/4的《Thinking in Java》,另外一个月前读完了《Effective Java》。说老实话,读技术书对技术的掌握帮助非常有限,因为我现在已经几乎忘掉《Effective Java》这本书讲了哪些内容,《安卓开发艺术探索》里面View原理和launchMode我都忘了差不多了,(⊙﹏⊙)b。以后不能再这么看书了,一定要结合实践去看书,最好形成文字记录下来。读书最好是带着问题去读,没有目的乱读效果也是非常不好。就比如,你在看Handler Looper Thread MessageQueue的时候,感觉书上说得明明白白,似乎自己搞清楚了,但是面试官问你这些问题,恐怕你回答不好。那么如果面试回来,你回头再去看这部分内容,可能就能更深理解了。
第一场面试是面C厂的高级安卓开发(好像自不量力了),前台填完表领了一套试题,第一道四种启动模式的区别,嗯,也是常考的一道题,但是像singleInstance和singleTop他们的具体使用场景,我答不上来,尽管我多次看过这部分内容,然而还是记不住。看来做过跟没做过的差别还是蛮大的。间接经验远没有直接经验牢固啊。第一道题第二问是Activity如何恢复数据,擦,我印象中知道onCreate方法里面有个savedInstanceState,但是我还想起来有个onSaveInstance方法什么的。我就答了,2种恢复界面数据的方式。后来回去查了资料才知道,那是针对2种不同的场景的,(⊙﹏⊙)b。第二道是问ListView的缓存机制的,都是很普通的题目,但是我其实并不知道它缓存是怎么实现的,面试官和我聊的时候,我说不上来,蛋疼了,水平深浅一问便知。第二题第二问是RecyclerView怎么实现分组,怎么添加header和footer,我用RecyclerView也并不是很多,就最近用了一下,并不知道header和footer是怎么加的,其实现在想一想也是可以答一下的,根据type类型就可以实现。第三道是问怎么自定义控件,事件处理机制,怎么解决滑动冲突。这问题在《安卓开发艺术探索》里,作者将得非常清楚的,但是由于实践比较少,我特么都没法自洽地回答这个问题了,汗,太渣了。第四道是让写一个单例模式,这个在《android源码设计模式》这本书的第一章里讲得非常全面了,我都背会了,不难(这特么是高级开发题目?)。第五个是写一个方法求N的阶乘,不难,感觉答得还行。
答完题,就被叫去和面试官聊,哎,现在面试我的人年龄甚至比我小了,悲哀。自我介绍,我基本上把简历里面的东西简单摘要一下,真心不知道咋介绍。估计面试官看我的项目介绍没啥亮点,就直接和我聊知识性的东西了,String/StringBuffer/StringBuilder三者的区别,前不久我刚看了下源码,记得注释里面就说StringBuffer被StringBuilder替换了,我就这么答了,但是显然没法让面试官满意,他想听到的是线程安全方面的回答,我对这个有印象,但是没说出来。然后又问了Handler这个问题,问我子线程中的Handler能不能处理消息。然后,面试官问了一个让我吃惊的问题,数组怎么删除其中元素,他是把List当成数组了,擦。最后一个问题是ListView和ViewPager怎么解决滑动冲突,我没有回答好。最后被面试官判为“基础不牢”。哎,没想到第一次面试就出师未捷。不过,也没多难过,感觉那家公司做的东西还不如我现在这家公司做的。
面试回去之后赶紧把相关的知识点撸了一遍,第二天约了L厂下午的面试。中午我趁同事休息的时候我溜出去面试了,第一次来L厂,感觉环境也没有我现在这家高大上,里面乱糟糟的,印象不是很好。面试官直接搬了个小板凳和我直接聊,主要是针对简历上的信息来问问题,我的回答似乎激不起面试官的兴趣,到后面问了批量打渠道包的问题,我一下子栽倒在这上面了,估计这里面有玄机。对于一个工作3年的面试者来说,打渠道包都不清楚,很可能这人的简历有水分,擦。半个小时很快就完事了,自我感觉很一般,应该是没什么戏了。(到写这篇文章时我还没弄明白打渠道包是怎么回事)
今天早上约了L厂的另一个事业部,办公地点在另一个地方,到了之后感觉更加失望,又黑又乱。面试我的哥们,感觉水平也挺一般的,问的问题他似乎也理解不是很深,都是泛泛地问一些概念性的很浅的问题。我介绍了我们项目中用的牛逼的框架和比较新的开源库,这哥们似乎也了解不是很多,然后问了所谓的算法的问题,我硬着头皮写了一段二分查找的算法。然后,就问期望薪资了,简历流转到HR,HR又找另一个技术和我进一步聊,有些地方我自己打脸了,简历中有些点没有Holde住,MVVM和RxJava的东西我特么回答不上来,估计会减分了。
昨天找阅文的人帮我内推了简历,今天接到阅文北京技术负责人的电话,2点半的时候电话聊了一下,问的问题都让我非常尴尬,几乎没有能答的。Bitmap怎么计算占用内存?我对bitmap了解挺浅的,我答不上来,不过后来我想起来一个叫Matrics的东西,但是也仅仅是知道这么回事,以前我记得了解过怎么计算,然而电话面试时我都没想起来。然后又问bitmap有几种类型,我又懵了,估计他是希望我回答ARGB_8888什么的,我虽然知道这玩意,但是我当时一点都想不起来。然后又问gradle打渠道包,我又懵逼。然后又针对简历问IM具体怎么实现的,IM SDK是另一个团队开发的,我还没来得及看他们的代码,然后又问HTTP协议相关的问题,长连接怎么建立的,懵。最后,又问MVVM和热修复的原理,热修复我很久以前只看过几篇博客,没实践过,还是懵逼。给跪了!
感觉,好被动啊,现在离我预想的情况差别好大,真不知道该怎么办了。项目经验实在是太单薄了,尽管书没少看,但是没太大卵用。
补充:
每天早上6点起来做功课已经是我的日常。我四五点就醒了,突然想起昨天编辑的文字好像没保存就关机了,起来后急忙打开看有没有自动保存,to my suprise,一个字都没少。简书,绝好的写作体验。
刚才在床上突然想起来昨天阅文还问了HTTP基于什么协议,我特么当时傻逼啊,我说基于socket,现在我想起来了HTTP是面向连接的协议,估计面试官期望我答TCP吧。特么的这个问题,我很久以前就在知乎上看过,哎。没办法,大概就是基础不牢吧。
今天,我打算调整战略了,以项目为中心,去挖掘面试可能考察的所有范围。反正我们的项目足够大,覆盖的足够广,基本上一般面试都可以cover了。God, bless me。
图片处理
批量打渠道包
热修复原理
MVP和MVVM
自定义控件
滑动冲突
Leak & OOM
Hybrid开发
一个IM的实现
视频SDK
第三方支付接入
Realm的实现原理
RecyclerView源码解析
Handler源码剖析工作原理
How databinding works?
Realm的实现原理
经典查找&排序算法
网络协议
设计模式
还有什么,后面想到再加。