安卓面试中高级安卓开发工程师总结之——大公司面试的方向和套路以及
上一篇我们说了大公司的任职资格描述可能很简单,但是有很多点需要注意。下面我们说说中高级安卓开发工程师岗位在大公司应聘中的复习方向:
安卓已经火了这么多年了。现在如果还从事安卓开发,基本上都是中高级安卓开发工程师。
那么用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?
在回答这个问题之前,我先说一下中高级安卓开发工程师的薪资水平吧。至于为什么,先说这个。因为我怕接下来你没有动力去看,去学习,去提高。所以先给你一点动力。
贝壳,汽车之家,这些中高级安卓开发工程师的薪资范围是30K-50K,并且有可能达到14薪(因为被爆出的链家门事件,具体参考http://www.sohu.com/a/248709552_100079542,
https://mp.weixin.qq.com/s/GapQX15P-4Jg92-8TyVaUA ,所有租房类公司,博主也拒绝了面试邀请)。美团,百度,京东,滴滴(现在正值全民抵制滴滴的时候,博主也拿到了滴滴的offer,因为滴滴顺风车造成多起治安事件,引起全国人民的愤怒,所以,博主本人决定不去滴滴履任,以后也拒绝再投或给滴滴推荐简历。除非滴滴做到如下所有滴滴注册司机必须按照出租车司机标准审核,并且滴滴内置一键报警功能,同时滴滴客服业务自己经营管理。)的薪资范围是 18K-35K,可以拿到16薪,并且有年终奖。如果分到比较好的项目组,年终或者季度分红的奖励买房买车也是有的(比如华为荣耀,腾讯王者荣耀和吃鸡手游,季度分红达到100薪以上。各位吃瓜群众还是要有梦想的)。
回到之前的那个问题,用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?
举例说明:百度,汽车之家有笔试。笔试大多都比较简单,会有几个不好回答的。不过笔试其实真的没有多大关系,主要还是面试
面试官一般会从最简单的入手(博主本人因为是自学的,4个月就自学完了Java。所以基础很差,也最怕问这些。),比如会问object有哪些方法?我回答完后,面试官就会继续问,那equals方法的比较原理是什么?hashCode的原理,跟equals的区别。随即转到Map中的hashMap的相关原理。
有问listview(recycleview)有哪些方法,然后每一个方法的作用(这里的方法会根据你前面回答的不断的深问),参数的作用。问到这,还有公司会问,由于一个项目中需要用到的这2个控件太多了,每次都要写,会很麻烦,并且要写很多次,怎么解决这个问题。
这个问题的解答,各位可以百度一下。一般我的解决方式是自定义一个带泛型和不指定参数个数的adapter。然后再定义一些方法,这样就不需要再adapter里面做太多的操作。具体自定义封装的会在后面的博文中详细说明这里的自定义封装方式和应用方式。当然鼓励大家自己发掘,并且给我留言,我好补充完整这个问题。
第二种问题:你经常用到的第三方库有哪些?然后开始考你对第三方库的源码的熟悉程度,熟练使用能力,和扩展能力。
比如博主遇到过面试官问我gson解析的多方面问题。因为博主项目中有硬件交互,所以服务端接口返回的有对象,有不是对象的,有字段的,有连字段都没有,直接返回的,有返回是字符串的,有直接返回是二进制(或16进制)的。所以在回答这方面问题的时候,对使用面试官很满意。但是接下来的一个问题,让我很难受。面试官是这么说的:假如后台给你了一个错误的数据类型,我们作为前端,怎么做一个容错处理来保证APP的正常使用(根据接口文档,后台就是给错了,前端也必须能做兼容这种错误数据的解析。)。这道题也是很多大公司要面临的问题,尤其是发展很快的创业公司。在创业中前端和后台人事变化大,并且开发需求变化也比较大。后台API和前端的版本没有做到同步更新会导致这些问题。所以各位想跳槽的,心里有一个类似这种兼容,容错问题的准备。(备注:这道题可以用泛型,反射。但是还是有一定的问题。一般问这种问题的,也是公司当前面临这个问题亟待需要解决的问题。通常问这种问题的面试官,会不仅仅只问一个这种问题,他会前后循序渐进都这种类型的问题,围绕这个主题问,所以面试时遇到这种没有准备的,又不知道怎么做的,可以前后思考一下面试官前后的几个问题和引导方向,综合这几个问题,思考一下解决思路)。
第三种:算法。这个从各个大公司的招聘来看,都有这个方向的要求。并且博主在去面试的过程中,真的有问算法方面的问题。这个主要考察一个人的解决问题的能力,思路能力,是否开阔,活跃。
并且这种题有2种考法。第一种是用Java或者安卓代码能实现的方法去解决。第二,可以不考虑具体用代码怎么实现,而是要看你的分析问题,解决问题的能力。当然第二种的情况比较少。
举个栗子:比如博主在去知乎的时候,面试官出了2个关于这方面的题。第一:比如一张图片,有很多颜色,那么在打开这个图片的时候,这个图片下边会有这张图片上有颜色的色块。(可参见苹果手机系统的图片编辑)。这个题用最原始的方法实现(不要说用python,不要说用现在有了一个这个类palette)。第二个题:一篇新闻,点赞(或评论),2个维度时间和点赞,用什么样的函数来做到时间的新鲜度和点赞的数量来决定这篇新闻的排名。(面试官说现在只让我考虑2个维度,时间和点赞数。从原则上来讲,时间约大,点赞越多,排名越靠前。),然后面试官给我画了一个函数图线。我一看,像是对数函数的大致走势,然后就说用对数函数。但是由于很多年没有在看数学,真的忘了这些。线性函数,对数,指数,凸优化,统计,微积分,真的忘了。不过靠这个的不多。因为大公司会有专门的算法工程师。这里只是做一个强调:大公司会很看着一个人的逻辑思维和解题能力。答案是否够完美,不重要。
第四种:混合开发经验。这个是目前很火的一种安卓开发工程师的需求。Hybrid开发经验。由于本人是native和App的混合开发。所以今日头条HR也给我打了面试要求电话。先说一下今日头条技术很强大,原以为可以到今日头条看看。然而去面试,才一把辛酸。本人面试的是今日头条的【懂房帝】,新项目团队,团队很小,办公也不怎么的。跟今日头条是分开办公的。人员不多。我去面试的时候,可能对方的HR没有跟技术人员沟通好,临时2个一线开发人员面试。所以对方也很紧张,很匆忙。然后从最基础的面试开始,没有涉及有深度的问题。我很不舒服,发表了一句,你们面试都这么基础吗?对方回怼:那你认为什么是高端问题?我回怼:不是说那个问题高端和low的问题。你们问的问题本身就很不明确,我不知道你想问的知识点是什么。对方说:我们一般由浅入深。我继续回怼:那我回答后,为什么不继续问,而是不停的跳转其他基础问题。对方在问问题的时候,也暴露出很多知识点的不确定和知识点的范围不够广。举个例子,问的最确定的一个问题是:说说安卓的4大组件。然后没有深问其中任何一个组件。又问:activity的启动。就这几个字。我很懵,这个要问我activity的启动模式,还是就是问activity怎么启动的。如果是后者,我还需要明确我是否需要回答启动的调用方法过程(这个过程20多步,我没有全部记住,我只记得大概)。然后问二维码你用的什么。我说这个用zxing。对方很懵。事件分发,问的是:手势冲突。就这几个字。基本上,说着说着我也懒得说了。不知道为什么,我没有继续说下去的欲望了。最后他们说,我们需要的是hybrid开发经验。我说简历,我没有投你们,是你们给我打的面试要求电话。简历,你们的技术大佬肯定看过。你说的hybrid开发经验,你们偏web。而我偏native。关于网络请求,你全程就问了我我的网络请求用的什么。我说retorfit2+OKHTTP3。你也没有再深问了。你没有问过我web方面的,没有问过我webkit。我也很委屈。然后他们的技术大佬不在,然后就没有然后了。中午1点赶到面试的。竟然来了一个这。中间还有一个插曲是我说,activity的生命周期你别问吗?对方也很尴尬。我说没有一个深入,我该怎么回答这个问题呢?是回答6个生命周期,还是12个生命周期,还是更多?我回答6个没什么意义,回答12个我不确定你们希望是否认可,是否知道activity的其他生命周期及其作用。
扯了一会淡,回归正题。目前互联网大公司大多还是偏纯应用,偏web方面的,所以,hybrid开发经验在目前还是比较好找工作的。没有这个方面知识的,要开始狂补了。
总结:目前想换一个18K以上,尤其是想拿到25K以上的;想从一个初级安卓开发工程师进阶到中高级安卓开发的。这几个方面的知识点要开始狂补了:
第一:Java基础,要有深度,原理要知道。
第二:源码是否经常看,是否能自己封装,扩展一些第三方类库。比如常用的listview,recycleview,gson,okhttp,图片加载框架,内存优化,内存溢出,传感器(sensormanager),兼容性(分两个方面,第一UI适配(今日头条适配方案),第二性能适配(so文件))。
(备注:以上2个方面在下文中有具体方向说明)
第三:算法,逻辑思维能力。这个可以大公司都会问一些这方面的问题。多想想为什么。数据结构,几个排序要会写。还有就是多看看常用APP他们的有些算法是怎么做的,琢磨琢磨
第四:目前非常火的就是hybrid混合开发(偏前端),这个要开始写一个项目了。简单的都行。从Github上下载一个项目,自己再敲一遍。
第五:很重要。就是据我所知,很多应用都准备加入小视频的功能。很多大公司的APP也是。所以,视频音频,这个必须会。GitHub上很多这方面的源码,可以下载自己看看,不说自己敲一遍,至少要知道用什么,怎么做。
基础知识 – 四大组件(生命周期,使用场景,如何启动)
java基础 – 数据结构,线程,mvc/MVP/MVVM框架
通信 – 网络连接(HttpClient,HttpUrlConnetion),Socket
数据持久化 – SQLite,SharedPreferences,ContentProvider
性能优化 – 布局优化,内存优化,电量优化
安全 – 数据加密,代码混淆,WebView/Js调用,https
UI– 动画,view自定义,adapter的泛型和不指定参数数量的优化,滑动控件的深度优化,图表
其他 – JNI,AIDL,Handler,Intent等
开源框架 – OKHTTP,Gilde,RxJava,Gson等
说了这么多,那应聘中高级安卓开发工程师,要做哪些面试准备呢?
在这里,博主也准备好了几个方面的知识点,不过会在后面的博客中,慢慢更新出来。
今天先给大家分享一个面试题准备的:https://blog.csdn.net/huangqili1314/article/details/72792682
后面,博主会不断一个知识点一个知识点的更新,希望能让你进阶成一位中高级安卓开发工程师。
下一篇,博主会主要讲一下:中高级安卓开发工程师面试之——如何写一份让HR主动邀请你面试的简历