作者 | H同学
编辑 | Ivy Xu
专栏 | 九章算法
上了安卓实战课之后成功找到了安卓开发的工作,故而来分享一下经验和感受。
先说一下我自己的情况。我是非牛校EE专业转cs方向,2016年初毕业。当时找的工作是某百年巨头IT公司在波士顿的一个office,职位比较尴尬,是软件的技术支持,比on-call段位高多了,但还不是开发,不写代码。我觉得这样下去不行,想跳槽,又想回国,所以最好跳回国。比较尴尬的是,既然参加不了国内校招,社招背景又太薄弱。
为了增加自己的背景,报了九章的安卓实践班第3期,我不排斥以后做安卓,或者说还挺有兴趣做安卓,所以回国之后就只投了安卓开发的职位。我是在网上投的简历。搜了搜,初级到中级的安卓职位大概有两三百个,开始时候只是想海投几波,就顺着搜出来的顺序开始往下投。计划一天投10个,慢慢面。
但是给面试的速度惊人的快…我是五一假之前那周周中开始投的,结果五一假之后的5个工作日里有4个工作日我都在on-site…所以总共大概也就投了20多个职位吧。太啰嗦了…下面开始说和面试有关的…能看到这的都是真爱…按面的顺序说
一共三轮,面完还没到家就给offer了
第一轮:
上来先带着他玩了一会儿咱们课上的app。就着app问了些问题,所以说app还是要熟悉。然后问了好多安卓的问题,activity生命周期啊,asyn task相关,parcelable和serializable区别(高频),listview优化(高频)用没用过Service等,还是那句话,其实安卓的知识还是差太多,只能尽量答。然后问java基础知识,HashMap的内部实现原理(高频),线程相关,了解什么设计模式。最后写了到题,用数组实现个循环队列。
第二轮:
还是玩了会儿app。问了些android的知识,自己定没定义过View,了不了解安卓的事件分发……不会。
第三轮:
总监。问了简历的问题,问我研究生学什么课了,每门课问了一个相关的问题,答的他还挺满意。(我研究生后半段还是选了几门cs的课的。)写了道题,数组移位,没难度三次反转法秒杀。
总监得出结论:
虽然你安卓的基础比较薄弱,但是你计算机的基础还是挺扎实的,可以培养。
然后叫HR来聊了聊,问问基本情况,问问薪资什么的就走了。在公交车上收到了offer。
一共三轮,由于安卓经验实在是薄弱,所以基础问的更多一点。
第一轮:
我问看不看我写的app,他说没事儿不看了……Activity和fragment生命周期(高频),HashMap实现原理(高频),parcelable和serializable的区别(高频),listview优化(高频),view是怎么画的。写了道题,是next permutation的变种,主要部分是写next permutation。
第二轮:
玩儿了一会儿app,问做没做过适配,开始没反应过来就是根据不同分辨率准备不同图片,后来说了一下怎么弄。没怎么问开始写题,两题。
第一题,翻转单词位置,比如“I love andorid”变成 “android love I”。给的字符数组要求原地完成,秒杀。
第二题,给个单链表,交换相邻两个节点的位置,1->2->3->4->5变成2->1->4->3->5,原题秒杀。
第三轮:
总监。问的比较开放了,问我前两轮自我感觉,看好什么行业,自己有什么规划,之前的每段经历用两三句话总结之类的,又问了问简历上之前的课。问了问还有什么别的面试和offer。
之后HR过来聊了一会儿,问问基本情况和薪资,别的机会什么的。过了一小时打电话给了口头offer。
是个运动软件,据说比肩Nike,FitBit。
OA:codility上三道题,都挺简单的,秒杀。
on-site:玩儿了一会儿app,问了问listview优化(高频),无限加载列表怎么实现的(高频)。
后来问了两个问题我回答的不太好:
1.你在做这些项目时候遇到的最困难的问题
2.你在做项目时候发没发现android有什么坑。
还是那句话,安卓经验太薄弱,聊不聊两句都能试探出来。聊了差不多20分就打发我走了。40分钟后收到邮件得知挂了。
一共三轮
第一轮:
activity生命周期(高频),HashMap实现原理(高频)。写了道题,给个二叉树根节点,给个int表示第几层,要求返回第几层有多少个节点。秒杀。
第二轮:
LRU实现原理,顺势让写了下双链表把一个node移到尾部的操作。问了问多线程的问题。
第三轮:
总监。问的比较深入,一个点问到哑口无言为止。后来直接告诉我了,并不是要求我一定要会,就是想看看我在接触到一个知识点的时候,是不是习惯把相关的知识都弄透。
HR来聊了聊基本信息,待遇之类的事,两天之后给了offer。
为了增加自己的背景,报了九章的安卓实践班第3期,开始上课的时候还在美国,结课的时候就已经辞职在国内了。
上完课之后,赶紧把课上的三个项目做完了,dribbble的项目自己又多用了几个api加了几个功能,完善简历之后就开始投了。当时的思路是,虽然项目摆在那有的聊,但是对于安卓的了解包括基础知识差的太多了,所以想海投几波尽量拿面试刷经验,陆续再有针对性的投一些自己选中的职位投可能更容易成功一点。但是其实结果是有点超出我的预期的。
面经
还是要好好准备的,就像上面说的,自己觉得安卓的知识还是差的太多,所以百度了一下“安卓面试面经”,结果搜出来的面经里面关于安卓的问题有80%是真的不会答的。
没办法只能一个一个问题的解决,不会的问题搜答案,不清楚的概念看官方文档。看了几篇之后,其实重复的问题就比较多了,虽然会回答那些面经的问题还是段位差太远,但是至少不会让面试官觉得:“我靠这都不知道也来投安卓职位?”。
java
看的面经里一般都会有java的问题,基础知识还是要扎实的,事实证明在面试中真的有帮助。比如HashMap的实现原理我就被问了三次,我一共才4个onsite。
项目
课上的项目不仅要跟下来自己敲一遍,还要知道每个细节是为什么,其实实际上课上老师给的代码还是有一些小问题的,如果自己能发现然后解决其实帮助还挺大的,至少更自信。
所以准备时候,首先就是把课上的项目自己写完,然后再完善,面试之前又把代码通读了一遍,把不熟悉或者不知道概念搜搜、学学,读读官方文档什么的,主要目的就是不能被人问住。即使问你你这个功能为什么这么设计也要能忽悠出一套说辞,即使并不是你自己设计的……
刷题
事实证明国内也是考算法的,我面的几家全都考了。不过我遇到的都不是很难,非常非常基础,linttcode easy级别,最难不会到medium。之前刷题比较多,面试之前小刷了几道easy练练手就上路了。面试遇到的题很简单都是秒杀。
心态
因为开始面试时候都是抱着“我就是过来体会体会,套套面经的”,所以很放松,会就答,模糊的就尽量答,不会就说不会。所以不怎么紧张。其实我觉得即使真的很在乎面试的职位,也是这种状态比较好吧。
面试公司app。了解一下公司做什么的,我把每个投的公司的app都下下来了。
总结
其实面试官很容易发现我安卓经验薄弱这个事实,我猜应该是有一定规模的公司愿意培养基础知识比较好的候选者,相对规模很小的公司更愿意精兵简政,招即战力强的候选者。
投的时候有点侧重会更好吧,以免浪费时间。如果专业方向并不突出,基础知识一定要扎实。如果不扎实的话就多刷刷面经,至少面经上的问题都要会。面试过程也是学习过程,第一次不会的问题,回家准备第二次也该会了。
国内也是考算法的,但是不是很难,感觉就是看看基础,看看你会不会写代码,考虑的周不周全。感觉没有哪一轮是算法轮,哪一轮是非算法轮这个概念,都会穿插着考。给反馈非常快,从投到安排面试1~2天,面完到给结果1~2天。简历不过的也会在网上直接拒掉,很快。由于过程过于的快,以至于都没来得及投大厂就从了。前后不过6个工作日。
我完全是上了课才会安卓的,之前都不会(但是面试时候说我做安卓已经一年多了。)然后就拿到了安卓开发的职位,基本上就是这个情况,给大家做个参考。对了是在北京。虽然拿到了offer,但是还是经验不丰富,最近还是要恶补一下的,从忽悠到真干还需要一段时间,自勉。
回复“简历”,查看简历撰写指南,获取“简历模板”
回复“冷冻期”,查看北美各大IT企业冷冻期信息和注意事项
回复“Career”, 查看Caireer Fair 攻略 check list
回复“薪资”,查看北美各大IT企业New Grades Engineer 薪资水平;
回复“项目”,查看7-14天可以搞定的小项目推荐
回复“评分”,查看系统设计评分指南
回复“behavior”,查看behavior interview指南
回复“晋升”,查看Engineer晋升机制
《Android 项目实战班》| 本周免费试听
Android 开发的就业前景如何?
Android Studio 简介
Android 代码框架和程序构建
Android UI 入门
2017年秋招备战进行时
赢在起跑线!
报名登陆官网 www.jiuzhang.com
或点击文末“阅读原文”