面试解惑:如何系统学习Android开发?

前言

在最近在进行模拟面试,除了我问面试者问题外,也会和面试者交换了一些看法,回答了一些他们比较关注或迷惑的问题。

在回答这些问题时,有时候是即兴发挥,事后在反思面试者遇到的这些问题时,我觉得还是有必要就这些问题进行一个比较完整的论述,也算是对自己思维过程的一个总结。同时也让有相同问题的读者可以直接看到,如果能获得启发,那正是我所愿。

今天和大家分享“如何系统的学习Android开发”,面试者在问我关于学习Android开发的问题时,基本上没有“系统”两个字,大家常用的问法是:不知道怎么学习Android开发,没有方向,不知道该往哪里使力。

什么是系统?

为什么我会提系统两个字呢?先说一下新手和专家的区别,大家常常认为新手和专家的区别在于经验上,这样说也不能说是错的。因为确实这个经验是很重要的,但这个经验不是指实施某项技术获得了一个过程和记录,而是指通过实施某项技术促进了思维的改变。

如果思维没有改变,那么一个声称拥有十年经验的开发人员,实际上只是一年的经验重复了九次。

新手往往都不是特别想要学习,也不知道自己的行为是对是错,只是想实现一个立竿见影的目标。如果给新手提供一个与情境无关的规则(或者叫指命)让他们去执行,他们就会变得能干起来。

而专家更关注情境,更关注系统,而且喜欢说“具体情况具体分析”。他们往往更关注事物之间的联系,把自己看做系统的一部份,能分清和认识到系统的边界。

新手往往不把自己看做系统的一部份,所以学习Android开发也变成了一项孤立的事件,学习的模块也变得孤立起来。虽然花时间学习了很多组件或者技巧,但是却没有理清过这些模块或问题之间的关联。

然而,现实中的问题都是不是孤立的,理解系统,学会用系统思维才更有利于你去解决问题。

系统学习Android的资源和方法

而问怎么学习Android的人,从学生到工作过几年的程序员都有,大家都在关注怎么学好Android,怎么让自己的开发技能提升,往往看到什么技术或亮点都想学一下。但太多的人却忽略了系统,没有好好系统地学习Android的一些基础和这些基础特征之间的联系。

具体的学习方式每个人不一样,这里我给出一个我认为比较好的方式:完整地看完和练习官方指导文档。网上有太多Android开发的视频和文章,但他们都过于碎片化,只有这份官方文当是我认为最系统介绍Android开发的指南。

网址:https://developer.android.com/develop/index.html

《面试解惑:如何系统学习Android开发?》

一定要把官方文档中的“培训”和“API指南”认真的看一篇,而且花时间把相关的知识联系起来。这个工作只能靠自己了,官方都已经出了这么好的系统学习资料,但是你不去系统的学就是你自己的问题了。

如何系统的学习Android开发呢?

1. Java语言进阶与Android相关技术内核

Android应用是由Java语言进行开发的,SDK也是由Java语言编写,所以我们要学习java语言。另外,虽说kotlin语言得到了Android官方的热推,但是kotlin也是编译成了java语言再运行的。对于Android来说,只要SDK没有用kotlin重写,那么Java语言是都需要学习的。而且Android apk的后台服务器程序大概率是java语言构建,所以学习java也是一种必然。那么Java中哪些东西是我们Android程序员需要学习的呢?由于Android程序员习惯了 C V 代码块,所以与Android中比较相关的稍微比较难的Java基础几乎都是一个门槛,像 泛型,多线程,反射,JVM,Java IO,注解,序列化等,都是被 CV 的对象,而程序员是不懂原理的,具体内容如大纲所示。

《面试解惑:如何系统学习Android开发?》 Java语言进阶与Android相关技术内核

2. App开发框架知识体系(APP亦对象)

这块知识是现今使用者最多的,我们称之为Android 2013~2016年的技术,但是,即使是这样的技术,Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道,天天在复制这些代码;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。所以我们需要从新的角度去分析这些知识点,深入研究他们,要学习源码,模仿源码,然后再hook源码,这样才能说自己懂这块的知识。这些都是做Android开发,做高级工程师的基础。

《面试解惑:如何系统学习Android开发?》 App开发框架知识体系(APP亦对象)

3.Android App全方位性能调优

一个app的性能好不好我们需要从两个层面努力。第一个层面:从写代码的时候就需要注意,让自己的代码是高性能高可用的代码,这个过程是书写高性能代码;第二个层面:对已经成型的代码通过工具检查代码的问题,通过检查到的问题来指导我们进行代码的删改,这个过程被称为调优。

如何写出高性能的代码呢?那就需要我们具备深厚的代码功底,这就是代码的基础,如:数据结构达到可以根据应用场景写出符合当前场景的特殊结构,比如google针对Android平台特征研发了sparseArray替代HashMap。另外,对常用的算法有自己独到的见解,leetcode上有刷个上百道题,这样差不多可以达到精通最常用的排序查找动态规划等算法的能力。再者,高效的算法以及节省内存的数据结构如果配合优秀的符合应用场景的设计模式,那么,这些就为高性能的代码提供了实现依据。

另外一个就是对写好的代码进行调优,那么调优的方向就是使用Profiler工具进行测试和检查,看哪里有性能消耗大的操作,然后分析对于代码的问题。调优的方向就变成了如何对内存调优,对耗电调优,对网络流量调优,当然,还有对启动速度,页面切换效果与速度,开机白屏体验,闪屏方面的原因等进行分析和调优。最后再加上一个屏幕适配相机适配。

《面试解惑:如何系统学习Android开发?》 Android App全方位性能调优

4.NDK模块开发

音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以Android NDK技术已经是我们必备技能了。要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且OpenCV/OpenGl/ 这些又是图像处理必备知识,这些都是原理级的实战项目。

《面试解惑:如何系统学习Android开发?》 NDK模块开发

由于篇幅原因,还有很多点需要大家提升的像混合开发、小程序开发、架构专题等,在这边就不进行赘述了

最后

在现在这个金三银四的面试季,我自己在网上也搜集了很多资料做成了文档和架构视频资料免费分享给大家【包括高级UI、性能优化、架构师课程、NDK、Kotlin、混合式开发(ReactNative+Weex)、Flutter等架构技术资料】,希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

资料获取方式:加入Android架构交流QQ群聊:513088520 ,进群即领取资料!!!

点击链接加入群聊【Android移动架构总群】:加入群聊

《面试解惑:如何系统学习Android开发?》 资料大全

我们想要的东西往往都在身边触手可及,但我们却喜欢跑到遥远的地方去追求虚假的华丽。

    原文作者:Android架构
    原文地址: https://www.jianshu.com/p/e2c5e4102109
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞