前言
金九银十跳槽季不知不觉已经过去一月有余,在这一个月里面,刷了不少题,面了很多公司,把过往的经历整理出来,为大家提供一些经验,以防踩坑
对此很多面试中遇到的问题,花了15个小时整理成为了一份983页的PDF文档。
需要的可以联系我领取完整的PDF
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取
一.面试前的准备
工欲善其事,必先利其器;想要使他的工作做好,一定要先让工具锋利。要做好一件事,准备工作非常重要。
准备主要还是三个方面:
第一个,简历;
第二个,刷题(包括Java、kotlin、android和算法);
第三个,HR的面试通关准备。我下面一步一步的来讲。
1.1简历
简历这块,由于之前我也面试过别人,所以我深知HR或者我自己筛选简历的一些要求和建议。
首先第一个就是看你的标题。很多人写简历根本不写标题,前面写了一大堆的姓名,性别,年纪等,这些不是说不写,只是说你的关键信息点并没有突出出来。咱们程序员都很忙,本身天天加班就很累,为了招人每天还要筛选几十份简历,心态肯定是要炸的。所以你在简历的首行位置就直接突出重点,你的姓名,工作年限,还有应聘的岗位。
(如:XX-几年经验-Android开发)
这让筛选简历的人一眼就能看到你到底符不符合我的招人要求,然后再看你具体的技能和你的联系方式。很多人开头写了一大段乱七八糟的东西,会的各种技能都写进去,就是不写明自己几年工作经验和应聘的职位,然后写一个毕业年限在那里让HR自己去算。说实话,首先HR压根不懂技术,写那么多会的东西反而让HR觉得你不知道是来应聘什么职位的,其次按照30s一份简历的筛选速度,恐怕HR还没找到你的关键点,就已经把你pass掉了。
其次,展示自己的亮点。我明白不是所有人都有好的学校背景、好的公司背景、好的项目经验背书 —— 假如你有,是个优势,但没有的话,聪明的你应该会想办法从其他方面给自己加分。 比如长期维护技术博客、博客言之有物,比如参与开源项目,比如做过一些个人项目等等。当然这些非一日之功,需要你平时的努力(不要想着在求职前随便粉饰包装一下,言之无物的博客或 github 反而会留下不好的印象)。我的理解是,其实招聘方也很苦恼,从 80% 的千篇一律的普通简历中想要筛选出能力好的人非常非常难,这时你能用这些亮点作为敲门砖无疑就能脱引而出。(PS: 有好的博客或 github 千万记得写在简历上且可以写在显眼的位置。在筛选简历过程中曾碰到一个人简历上没写这些,幸好他是朋友推荐特意给我发来了他的博客地址,否则单看他非常一般的简历他就失去了面试机会)
最后,诚实靠谱。可能有人会问,假如我既没有好的经历也没有亮点怎么办?那就踏踏实实把自己的优势写出来,比如擅长 UI、对网络层有深刻理解、有自研 IM 的经历等等。大部分程序员都是靠谱、理性的工科男,简历写得诚恳踏实往往更能得到青睐。不要浮夸甚至造假,踏踏实实把自己基本信息展示出来就好。对写上简历的技术点要有一定了解,简历上写了一堆技术点结果问了却说不熟肯定是很减分的。(PS:慎用“精通”)
1.2刷题
Java基础面试知识专题
Java小知识
Android的问题。
1.Handler 相关知识,面试必问
Android消息机制的原理及源码解析。Android Handler消息机制
2.Activity 相关
3.Fragment相关
4.Service 相关
进程保活
Service的运行线程(生命周期方法全部在主线程)
Service启动方式以及如何停止
ServiceConnection里面的回调方法运行在哪个线程?
5.Android事件分发
6.AsyncTask内部实现原理。 这个在平安二面领导问道过。主要是AsyncTask内部如何实现的,内部处理多任务是串行还是并行处理,为什么是串行处理,如果让其变成并行处理等
7.LruCache算法如何实现,内部为什么要用LinkHashMap来实现。
8.进程之间的通信方式,IPC原理。 这里会延伸到AIDL和Binder。
9.进程间的优先级。 前台进程、可见进程、后台进程、不可见进程与空进程。腾讯面的时候还特意问了我进程的保活措施。
10.图片的压缩处理以及glide源码 这里会问四种图片格式的区别(ARGB888、RGB565、RGB444、Alpha_8),以及问给出一张以上格式的图片如何计算图片所占的内存大小。
11.动画属性
######12.Android插件化.组件化原理
######13.性能优化
14.RxJava
15.EventBus源码解析
我印象中差不多就是问这些东西,其实都是很基础的Android知识,只是问的比较深入,如果不明白内部的实现原理很多问题其实是回答不上来的。所以还是要多看源码才能了解本质问题。(PDF的东西很全,要得可以联系我)
这里顺便说一下,现在Android招人的要求确定是越来越高的,我记得去年我去面试的时候要的还只是单纯会Android的,今天很多公司已经在招不仅会Android还要会kotlin的人员。我在boss直聘上记得有一个HRBP还没问我要简历就直接问我,硬性要求就是你会不会kotlin语言,如果不会那么就根本不用来面试了。不过还好,我去年就已经意识到了谷歌将kotlin设置成为Android的第一语言,很多公司肯定会更进的。所以会一些kotlin还是很有必要的。
1.3面试HR
当我们面试完技术到HR的面试的时候,基本offer就十拿九稳了。但是我相信也有不少同学在面试HR的时候面挂了的。因为毕竟咱们是程序员,跟技术打交道容易,但是聊起非技术的问题来很多时候都是一脸懵逼的样子。好不容易过了技术面,结果死在HR面上有点得不偿失,因此我特意选了一些HR可能会问的问题以及一些回答方式。
当面试官问“你有什么要问我的吗”时,应该说什么?
这是我们大部分面试者都会遇到或者都会被问到的问题。如果你回答 “ 没有 ”,这往往被一些面试官理解为:你对应聘公司、工作岗位没有太大的兴趣。可能会让面试官产生误解,而影响面试评判。
如果你回答 “ 有”,一时间又容易脑子短路,可能会不知道该问以下哪个问题:
问企业发展?怕面试官觉得这个人好虚,有点不切实际
问薪资待遇、假期福利?又怕面试官觉得这个人没有事业心,入职了也不会呆太久的,整天就想着休息……
那怎么办?
首先,你必须提问
面试往往是互相了解过后,面试者处于被动状态,这个时候面试官将问题抛出,你必须把握住主动权,让面试官知道你是认真对待这次面试,而不是敷衍的流水线面试。
那么,问什么呢?
不管面试官是HR、部门领导,还是老板,以下问题都可以帮你轻松度过难关,而且你还能从面试官的回答中得到很多意外收获:
你在公司的一天是如何度过的?
这个简单的问题可以让对方滔滔不绝的讲述他一天的工作,面试官会说一些比较自豪和有意义的事情,同时也会有一些琐碎的事情。在听的过程中,你也能感受到未来工作中是否有你的兴趣点,以及最无聊的那个部分你是不是可以接受。同时也可以从中推估到你的未来发展,因为升职后也会有一天成为他。我去腾讯面试的时候就问了这个问题,然后他说了下他一天干的活,我才知道腾讯的加班是有多严重,我曾跟他说我每周一二四加班,本以为他会说你加班真多啊,结果没想到他来一句说你加班也不多呀,我们很多都是十二点以后走的。我当时就懵逼。这样比你直接问他公司加班多吗要好很多。
能否给我简单介绍下贵公司业务与战略的未来发展?
在实际运用时,要取决于公司的业务范围。听听面试官的计划,这可显出你关注公司整体和未来的发展。同时也可以从他们的谈论中了解到不同公司在同一个行业的情况,对你准备其他公司的面试也会有所帮助。面试一些小公司的时候我就喜欢去问这个问题,通过这个问题我就大概能清楚知道这些公司适合不适合我还有就是可以知道老板到底是喜欢扯淡还是真正的一个实干家。
贵公司最让你自豪的企业文化是什么?
注意!一般情况下,这个问题比较适合用在面试大公司的职位时,当然现在有不少创业公司也是非常看重企业文化的。通过这个问题,你可以从面试官口中了解到公司的工作氛围和一些非硬件的环境情况,同时也可以在面试官表达的过程中去留意他的肢体、感情的表达。如果从身体语言上都表达出认同公司的文化,那说明该公司在企业文化建设方面做得不错。同时你也可以自我假设一下是否可以融入这种氛围。
团队、公司现在面临的最大挑战是什么?
这个问题比较安全,也是一个可以引起面试官兴趣的话题。一来这个问题不会暴露你对公司的不了解,二来也能让你对未来工作的挑战或困难有一个提前的预期。除此之外 ,这类问题用的好,会很容易增加印象分。特别当面试官是外国或海归人士时,比较直接一点绝对不是坏事儿!
对于未来加入这个团队,你对我的期望是什么?
如果面试官将会是你的直属上司,那么这个问题会让你的利益相关者一开始就有一个感觉,你是一个非常在乎他或者团队,并且愿意倾听的候选人。这样对于快速的培养起一段专业的合作关系是很有帮助的,同时也可以更理解他对你的期望值。也可以初步判断出他是一个成果导向,还是过程导向的上司;是一个由上至下思考,还是一个下至上思考的领导。如果把握准确会更会令面试官觉得:你是一个会做好准备并且有同理心的人,这绝对是加分项。
我期望参与团队合作达成共同目标,您可以给我举一个公司中团队合作的实例吗?
这一问题也是要根据你面试的企业情况来定夺,如果面试的是大企业,同时又是外企,那么合作对于他们来说是必须的,因为很多事情你一个人是不可能完成,所以自然会非常看重你对合作的态度。通过这个问题,可以让面试官知道你有强烈的合作倾向。同时从回答中,你也可以感受到这个公司团队合作的情况如何。
通过刚才的面试交流,您觉得我还有那些不足?
这几乎是我面试都会回问的问题。通过这个问题,我就能够知道自己在他们眼里的不足之处,回去可以做好的修改。例如,我在面珍爱网的时候,他们给我的评价是基础还行,但是深度不够并且对自己未来的职业规划不清晰。因为我回答了我想做大前端,然后转管理。他们就觉得你一下想做技术一下又想做管理,这目标不清晰。所以后来我就直接说自己想做大前端,就没有说再后来转管理的事情了。
写在最后
最近半年,常常有人问我 “Android就业市场究竟怎么样,我还能不能坚持下去 ?”
现在想想,移动互联网的发展不知不觉已经十多年了,Mobile First 也已经变成了 AI First。换句话说,我们已经不再是“风口上的猪”。移动开发的光环和溢价开始慢慢消失,并且正在向 AI、区块链等新的领域转移。移动开发的新鲜血液也已经变少,最明显的是国内应届生都纷纷涌向了 AI 方向。
可以说,国内移动互联网的红利期已经过去了,现在是增量下降、存量厮杀,从争夺用户到争夺时长。比较明显的是手机厂商纷纷互联网化,与传统互联网企业直接竞争。另外一方面,过去渠道的打法失灵,小程序、快应用等新兴渠道崛起,无论是手机厂商,还是各大 App 都把出海摆到了战略的位置。
各大培训市场也不再培训Android,作为开发Android的我们该何去何从?
其实如果你技术深度足够,大必不用为就业而忧愁。每个行业何尝不是这样,最开始的风口,到慢慢的成熟。Android初级在2019年的日子里风光不再, 靠会四大组件就能够获取到满意薪资的时代一去不复返。**经过一波一波的淘汰与洗牌,剩下的都是技术的金子。就像大浪褪去,裸泳的会慢慢上岸。**而真正坚持下来的一定会取得不错成绩。毕竟Android市场是如此之大。从Android高级的蓬勃的就业岗位需求来看,能坚信我们每一位Android开发者的梦想 。
领取完整PDF请添加
更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取