前言
今天我们说说中高级安卓开发工程师岗位在大公司应聘中的复习方向:
用人单位对中高级安卓开发工程师方面的要求
安卓已经火了这么多年了。现在如果还从事安卓开发,基本上都是中高级安卓开发工程师。
那么用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?
【文末有惊喜~】【文末有惊喜~】【文末有惊喜~】
在回答这个问题之前,我先说一下中高级安卓开发工程师的薪资水平吧。至于为什么,先说这个。因为我怕接下来你没有动力去看,去学习,去提高。所以先给你一点动力。
贝壳,汽车之家,这些中高级安卓开发工程师的薪资范围是30K-50K,并且有可能达到14薪。美团,百度,京东,滴滴(现在正值全民抵制滴滴的时候,博主也拿到了滴滴的offer,因为滴滴顺风车造成多起治安事件,引起全国人民的愤怒,所以,博主本人决定不去滴滴履任,以后也拒绝再投或给滴滴推荐简历。除非滴滴做到如下所有滴滴注册司机必须按照出租车司机标准审核,并且滴滴内置一键报警功能,同时滴滴客服业务自己经营管理。)的薪资范围是 18K-35K,可以拿到16薪,并且有年终奖。如果分到比较好的项目组,年终或者季度分红的奖励买房买车也是有的(比如华为荣耀,腾讯王者荣耀和吃鸡手游,季度分红达到100薪以上。各位吃瓜群众还是要有梦想的)。
回到之前的那个问题,用人单位在对中高级安卓开发工程师方面的要求要达到什么程度呢?
举例说明:百度,汽车之家有笔试。笔试大多都比较简单,会有几个不好回答的。不过笔试其实真的没有多大关系,主要还是面试
面试官一般会从最简单的入手(博主本人因为是自学的,4个月就自学完了Java。所以基础很差,也最怕问这些。),比如会问object有哪些方法?我回答完后,面试官就会继续问,那equals方法的比较原理是什么?hashCode的原理,跟equals的区别。随即转到Map中的hashMap的相关原理。
有问listview(recycleview)有哪些方法,然后每一个方法的作用(这里的方法会根据你前面回答的不断的深问),参数的作用。问到这,还有公司会问,由于一个项目中需要用到的这2个控件太多了,每次都要写,会很麻烦,并且要写很多次,怎么解决这个问题。
这个问题的解答,各位可以百度一下。一般我的解决方式是自定义一个带泛型和不指定参数个数的adapter。然后再定义一些方法,这样就不需要再adapter里面做太多的操作。具体自定义封装的会在后面的博文中详细说明这里的自定义封装方式和应用方式。当然鼓励大家自己发掘,并且给我留言,我好补充完整这个问题。
这是我个人的一些面试经历以及自己收集的一些试题,熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。
一、java方面
1.接口的意义(百度)
2.抽象类的意义(乐视)
3.内部类的作用(百度,乐视)
4.父类的静态方法能否被子类重写,为什么?(猎豹)
5.举1-2个排序算法,并使用java代码实现(美团)
6.列举java的集合和继承关系(百度、美团)
7.java虚拟机的特性(百度、乐视)
8.哪些情况下的对象会被垃圾回收机制处理掉(乐视、美团、小米)
9.进程和线程的区别(猎豹)
10.Java中==和equals的区别,equals和hashCode的区别(乐视)
11.常见的排序算法时间复杂度(小米)
12.HashMap的实现原理(美团)
13.java 状态机
14.java中int char long各占多少字节数
15.java int与integer的区别
16.string stringbuffer stringbuilder 区别(小米、乐视、百度)
17.Java多态(乐视)
18.什么导致线程阻塞(58、美团)
19.抽象类接口区别(360)
20.容器类之间的区别(乐视、美团)
21.java 内部类(小米)
22.Java中hashmap和hashtable的区别(乐视、小米)
23.ArrayMap VS HashMap
二、android方面
1.数据库的操作类型有哪些,如何导入外部数据库?
2.是否使用过本地广播,和全局广播有什么差别?
3.是否使用过intentServer,作用是什么,AIDL解决了什么问题?(小米)
4.Activity、Window、View三者的差别,fragment的特点?(360)
5.描述一次网络请求的流程(新浪)
6.Handler、Thread和HandlerThread的差别(小米)
7.低版本SDK实现高版本api(小米)
8.编译安卓系统(百度)
9.launch mode应用场景(百度、小米、乐视)
10.touch 事件传递流程(小米)
11.view绘制流程(百度)
12.多线程(360)
13.线程同步(百度)
14.什么情况导致内存泄漏(美团)
15.ANR定位和修正
16.什么情况导致oom(乐视、美团)
17.Android Service与Activity之间通信的几种方式
18.Android各个版本API的区别
19. Android代码中实现WAP方式联网(360)
20.如何保证service在后台不被kill
21.Requestlayout,onlayout,onDraw,DrawChild区别与联系(猎豹)
22.invalidate()和postInvalidate() 的区别及使用(百度)
23.Android动画框架实现原理
24.Android为每个应用程序分配的内存大小是多少?(美团)
25.Android View刷新机制(百度、美团)
26.LinearLayout对比RelativeLayout(百度)
27.优化自定义view(百度、乐视、小米)
28.ContentProvider(乐视)
29.fragment生命周期
30.volley解析(美团、乐视)
31.Android Glide源码解析
32.Android 设计模式
33.架构设计(搜狐)
34.Android属性动画特性(乐视、小米)
总结
目前想换一个18K以上,尤其是想拿到25K以上的;想从一个初级安卓开发工程师进阶到中高级安卓开发的。这几个方面的知识点要开始狂补了:
第一:Java基础,要有深度,原理要知道。
第二:源码是否经常看,是否能自己封装,扩展一些第三方类库。比如常用的listview,recycleview,gson,okhttp,图片加载框架,内存优化,内存溢出,传感器(sensormanager),兼容性(分两个方面,第一UI适配(今日头条适配方案),第二性能适配(so文件))。
第三:算法,逻辑思维能力。这个可以大公司都会问一些这方面的问题。多想想为什么。数据结构,几个排序要会写。还有就是多看看常用APP他们的有些算法是怎么做的,琢磨琢磨
第四:目前非常火的就是hybrid混合开发(偏前端),这个要开始写一个项目了。简单的都行。从Github上下载一个项目,自己再敲一遍。
第五:很重要。就是据我所知,很多应用都准备加入小视频的功能。很多大公司的APP也是。所以,视频音频,这个必须会。GitHub上很多这方面的源码,可以下载自己看看,不说自己敲一遍,至少要知道用什么,怎么做。
小编个人还整理了一些Android的像高级UI、性能优化、架构师课程、NDK、Kotlin进阶、混合式开发(ReactNative+Weex)全方面的Android进阶实践技术学习资料免费分享,如果对上文的面试题感兴趣需要答案的可以关注+私信回复我【面试】免费获取!