Android开发5年,技术增长乏力,成为优秀开发者你还差点什么?

很多半路出家、甚至科班出身、工作好几年的安卓开发者,在进行面试的时候会面临很多基础能力方面的面试,这些内容往往离不开java语言本身,你比如:多线程,JVM这两者就是面试必问的地方,可是大家平时开发中接触不到啊...

其实,多线程使用最多的场景就是网络请求中,而网络往往就被大家以retrofit或者okhttp替代了,但是它底层却大量在运用多线程;JVM就更不用说了,虽然大家普通的开发涉及不到JVM,然而App性能与它有着千丝万缕的联系,每个App都会有自己的art虚拟机,甚至每一个进程都是有自己独立的虚拟机,内存的回收是由虚拟机来管理的,GC回收算法怎样,adj内存管理,这一切都基于虚拟机,那么虚拟机自然就变成大厂面试的香饽饽了。

其他技术自然不必多说了,你看源码是不是想能够单步调试最好了,为什么?因为你看不懂它的代码调度处理流程。这些代码都是基于java 的面向对象思想建立的,对Java语言的掌握就自然而然成为了你深入Android开发的绊脚石。

Android应用程序开发是以Java语言为基础的(kotlin也是对java的封装),你做Android开发的时候经常遇到的各种问题,其实都是因为java基础没打好,很多人android做着做着又滚回去恶补java了。这也是为什么很多大牛都建议Android开发者一定要学好java,熟悉java基本语法、注解、反射、泛型、设计模式、数据结构算法、并发编程、JVM、io等,越深越好。

一个优秀的Android开发者,一定有扎实的Java基础常识。今天给大家分享一下大家必须掌握的Java常识点。

设计模式

我为什么把设计模式放在最前面?因为Android系统框架层里,要用到大量的设计模式,如果你设计模式没学好,你很难真正理解Android。

设计模式大概有28种,要全部掌握,很难而且没必要,你可以深入理解常用的设计模式:

  • Builder模式:比如AlertDialog.Builder;
  • 适配器模式:比如GridView、ListView与Adapter;
  • 命令模式:比如Handler.post;
  • 享元模式:比如Message.obtain;
  • 单例模式:比如InputMethodManager.getInstance;
  • 观察者模式:比如ContentObserver;
  • 抽象工厂模式:比如BaseActivity;

深入Java泛型

泛型在Android中应用非常广泛,但绝大多数人是简单的应用,一旦到了触碰泛型边界的地方,你就不知所措了,比如,如何根据嵌套泛型来反射生成动态变化的对象你知道吗?所以泛型是面向对象的一个核心常识。

  • 泛型的作用与定义
  • 通配符与嵌套
  • 泛型上下边界
  • RxJava中泛型的使用分析

注解深入浅出

注解在Android中大量应用,尤其是在自动生成代码的技术中(字节码插桩),还有开源库,你具备下面关于注解的能力么?

3.1 自定义注解

  • 自定义注解与元注解
  • 注解参数与默认

3.2 注解的使用

  • APT,编译时注解处理器
  • 插桩,编译后处理筛选
  • 反射,运行时动态获取注解信息

3.3 Retrofit中的注解

并发编程

并发就不必多说了,面试必问,Glide/Okhttp等框架自己看一眼就知道里面是如何大量使用的。

4.1 线程共享和协作

  • CPU核心数,线程数,时间片轮转机制解读
  • synchronized、Lock、volatile、ThreadLocal如何实现线程共享
  • Wait,Notify/NotifyAll,Join方法如何实现线程间协作

4.2 站在巨人肩上操作CAS

  • CAS的原理
  • CAS带来的ABA问题

4.3 仅会用线程池是不够的

  • Callbale、Future和FutureTask源码解读
  • 线程池底层实现分析
  • 线程池排队机制
  • 手写线程池实战
  • Executor框架解读实战

4.4 Android AsyncTask原理解析

数据传输与序列化

移动互联网的移动两个字就是来自于它随时随地可以得到想要的数据,而这个数据的解析就必然少不了序列化,那么它的原理怎样呢?

  • Serializable原理
  • Parcelable接口原理解析
  • Json

反射与类加载

这是Android源码里面应用最多的地方,小到xml的解析,大到dex文件的加载,application的启动,均大量运用了反射和类加载。

6.1 反射基本概念与Class

  • 三种获取Class对象的方式
  • 获取构造器实例化对象与属性信息
  • 包信息和方法
  • Hook技术动态编程

6.2 ClassLoader类加载器

  • 动态代理模式
  • AndroidDavilk与ART
  • PathClassLoader、DexClassLoader与BootClassLoader
  • 双亲委托机制

JVM核心原理

JVM面试必问,就是因为它与app的内存紧密相连,具体细节如下:谈Android高级必谈性能优化,谈性能优化必谈内存优化,谈内存优化必谈虚拟机,包括各类性能优化的检测工具均引用了JVM 回收算法开发而来。

7.1 垃圾回收器机制

  • 对象存活及强、弱等各种引用辨析
  • 快速解读GC算法之标记-清除、复制及标记-整理算法
  • 正确姿势解读GC日志

7.2 内存分配策略

  • JVM栈桢及方法调用详解
  • JMM,Java Memory Model

7.3 Dalvik虚拟机

Java语言具有跨平台特性,就是由JVM实现的。JVM将运行时数据区分为线程私有和共享数据区两大类。其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含 Java 堆、方法区,在方法区内有一个常量池。

Java本身有一个很好的管理内存的机制—— GC。然而,GC却经常会遇到无法回收的内存,即内存泄漏,内存抖动,结果可能是OOM。

JVM与内存优化息息相关,优秀的Android开发者,需要熟练掌握JVM核心原理,才能将开发的app性能做到极致。

  • JVM和dalvik、art的区别是什么?
  • 大家该如何通过JVM原理引导代码实践开发?
  • 大家该如何从架构层面优化产品性能?
  • 项目整体框架设计中该使用哪些优化技术?

资料分享

最后在这里放上相关的我搜集整理的24套Tencent、字节跳动、阿里、百度2019-2020面试真题解析,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含常识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

点击:

《Android学习PDF+架构视频+面试文档+源码笔记》

即可免费获取~

2020年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。祝大家2020年万事大吉。