写点什么

如何自学 Android gityuan ?,2021 年互联网大厂 Android 面经总结

用户头像
Android架构
关注
发布于: 7 小时前

------------------------------------------- 正文 ----------------------------------------------------------------

一、基础篇

**看书的姿态:**学习过程往往大家都需要看书,网上一搜,往往会有一大推的书推荐给大家去阅读,面对这么多书,该如何选择,如何阅读的呢,对于同一个层级的书籍选择一本精读,其余的粗读、略读即可,大同小异,对于精读的书籍需要反复的阅读。

1.1 Java 篇

Java 是 Android 的基础,建议初学者一定要先学习 Java 基本知识,进而再学习 Android,循序渐进,切莫心急,只有扎实的基础才能建造牢固的上层建筑。


  • Java 书籍

  • Thinking in Java: 中文版《Java 编程思想 》,这是一本非常经典的 Java 书籍,很多人都说这个书不适合初学者,我记得自己当初看的第一本 Java 书便是这本书。看完第一遍对 Java 有了整体的理解,但很多细节没有完全理解,查了资源又看了第二遍,对 Java 有了更深地理解。再后来一段时间后,能力也有所提升,再拿起这本书又看了第三遍,发现对面向对象有了更深一步的理解,这本书就是适合反复的阅读。

  • Effective Java:Java 进阶书,这本书采用“条目”的方式来展开的,总提出了 78 条 Java 具体的建议,对 Java 平台精妙之处的独到见解,还提供优秀的代码范例。作为 Java 进阶之书,对 Java 水平的提升大有裨益。

  • Java concurrency in Practice:中文版《Java 并发编程实战》,本书采用循序渐进的讲解方式,从并发编程的基本理论讲起,再讲述了结构化并发应用,性能与测试,最后将显式锁、原子变量、非阻塞算法这些高级主题。对于 Java 并发这一块算得上是一本很棒的书。

  • Java Performance:中文版《Java 性能优化权威指南》,Java 之父 James Gosling 推荐的一本 Java 应用性能优化的经典之作,包含算法结构、内存、I/O、磁盘使用方式,内容通俗易懂,还介绍了大量的监控和测量工具。关于优化都是属于较深的领域,对 Java 有一定基础后,很有必要了解看看。

  • Java 虚拟机,这是作为进阶 Java 高手必需有所了解:

  • [The Java Language Specification](


),官方 Java 文档(英文版)


  • [The Java? Virtual Machine Specification](


),官方 Jvm 文档(英文版)


  • 深入理解 java 虚拟机:这是国内关于 Java 虚拟机讲得非常全面的一本书,从 Java GC 到 Java 虚拟机内部实现以及优化策略,作为 Java 高手非常值得一看的书籍。


本文的重点是讲如何学习 Android,所以姑且把 Java 基础与进阶的书都放到 Android 学习的基础篇里。作为 Android 开发者来说,完全没有必要一开始都对 Java 理解得那么深,只有要看一两本 Java 基本书,掌握 Java 面向对象的思想的核心要义即万物皆为对象,掌握 Java 基本语法,基本就可以开启 Android 的学习之路。在后续对 Android 也有一定理解后,再慢慢不断提升 Java 和 Android 水平。


有朋友私信我觉着这个 java 书难度有点高,可能是本人在看 Java 书籍之前,还看过些许 C 和 C++的入门书的缘故,所以看的第一本书《Java 编程思想》。如果你真的是零基础,第一次接触编程,想以 Java 作为自己的入门语言,那么你可以先看看《Java 语言程序设计》(基础篇) 或者《Java 从入门到精通》,作为初学者险掌握 Java 基本语法,平时遇到不熟悉的方法,多查看 API 文档即可,慢慢地就熟悉了。

1.2 Android 基础篇

有了一定的 Java 基础(不需要精通 Java),就可以开始入门 Android。建议初学 Android 者,一定要先搭建自己的开发环境,先准备 jdk 和 Android Studio 环境。再看书的过程,一边看知识点一边写示例程序,一来加深印象,二来提高动手能力。


  • 《疯狂 Android 讲义》:作者李刚,这是我看过的第一个 Android 书籍,目前有第三版了,我当时看的是第二版基于 Android 4.2,书中有大量的实例,记得当时每看完一个实例就跟着敲了一遍,大概花了一周时间把这本书看完并把大部分的实例代码都亲手敲了一遍。

  • 《第一行代码》:作者郭霖,网上有不少人都推荐这本书作为 Android 入门书,但我当时没有看过。这是图灵系列图书,前段时间图灵的编辑看到我的博客[gityuan.com](


),于是联系到我问是否有兴趣出书,便提到郭霖的《第一行代码》也是他们出版社推出的,然后就给我邮寄了一本。我大概扫了一扫这本书,内容的确比较基础,作者文笔不错,书中还穿插了不少打怪涨经验升级的片段,比较风趣,初学者可以看看。


Android 的基本书籍,只需一两本即可,没有必要看太多基础书籍,不同能力就该有不同的追求,这里就不再介绍其他基础书籍。 另外,Android 开发过程中总是需要各种开发环境、工具的下载,再这里推荐一个不错的网站 [AndroidDevTools.cn](


),收集整理了 Android 开发、设计等相关的各种工具大集合,非常全面,而且速度也不错哦,最重要的不用翻墙就可下载到最新的工具。


有朋友好奇私信我是否即将要出书了,目前没有相关计划,能力尚不及很多前辈,还需加深内功修为,自己的所学所悟写成博客,还请大家多多指点!


还有不少朋友私信我,零基础学习编程是该自学呢还是去培训机构呢?

1.3 Android 一手资料

何为 Android 一手资料?那就是 Google 官方给出的资料,这里往往是英文版的,营养价值极高。其实你只要英文还凑合+翻墙工具,强烈建议你直接看 Android 官网的资料,千万别被英语所吓倒,因为很多专业名称,大家一看就明白比如 Activity/Service 等这些代码名称本身就是英语,剩下地都就非常基础语法,不懂可以随时翻译,我一般都是用 Chrome 浏览器+Google 翻译插件,


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


哪里不会点哪里,妈妈再也不用担心我的英语了。


言归正传,如果你能看完并理解下列的内容,那么你完全可以没有必要再看前面介绍的书籍,并且对于 Android 已有相当熟悉了。


  • [developer.android.com](


):Android 开发官网,下面列举常用的资料:


  • [Android training](


):Android 培训文档;


  • 另外由胡凯发起了[Android 培训课程中文版](


);对官方文档进行翻译;


  • [Android API 指南](


):Android 组件、Manifest 配置文件,动画/图像等相关介绍;


  • [Android Tools](


):性能、测试、Android Studio 等各种工具说明文档;


  • [source.android.com](


):介绍 Android 开源码相关的内容;


  • [Android Performance Patterns](


):2015 年 Google 陆续在 Youtube 上发布的 Android 性能优化的视频,目前已更新第 4 季。


  • 国内 Google 组织,优酷上发布了相应的 [(中文)Android 性能模式 第四季](


);


  • 另外由胡凯发起了[Android 性能优化典范中文版文档](


);对官方视频进行翻译并整理;


  • [android-developers.blogspot.com](


):Android 官方博客,有一些比较不错的 feature,博客会第一时间呈现。

1.4 Android 资源整理

到这里,那么你已经具备开发 App 的本领。平时需要自己动手多写写 App,另外就是看看别人优秀的 App 是如何写的,下面列举一些开源库、工具以及 App:


  • [android-arsenal.com](


):作者[vbauer](


)整理收集 Github 中各种开源库与工具,并提供搜索功能,是国外整理得最全面的库;


  • [Android 开源项目汇总](


):作者[Trinea](


)整理的各种开源库,是国内整理得最全面的库;


  • [codeKK 开源项目源码分析](


):从源码的角度,分析 Android 较流行的优秀开源框架;


  • [codota.com](


):这是一个代码搜索引擎,收集的是各种 API 的优秀示例 Java 代码。


当然还有很多优秀的博客和网站值得推荐... //TODO

二、进阶篇

作为程序员,不去阅读源码,仅仅看 API 文档,只是浮于表象,这是远远不够的。.真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读 Android 系统源码,也包括阅读各种优秀的开源库。

2.1 阅读源码的重要性

借用 Linux 之父 Linus Torvalds 的一句名言:Read the fucking source code。不管是阅读 Andoid 系统源码还是优秀的开源框架,对能力那都会有一个巨大的提升;首先,能学习到优秀的代码风格和设计思想;能真正做到“知其然,还需知其所以然”;能指导自己更加灵活的使用 API,能更加快速地找到系统 bug 的根源。

2.2 阅读源码的准备

  1. Java 基础:上层 framework 以及 App 层都是采用 Java 语法;

  2. C/C++基础:Android 的 jni/native 层代码采用 C++,Linux 采用 C;

  3. Linux:Android 内核基于 Linux 的,了解 Linux 相关知识对深入掌握 Android 还是很有必要。

  4. Git:Android 源码采用 git 和 repo 进行管理;

  5. Make:Android 源码采用 Make 系统编译,源码系统中会看到很多 Android.mk 之类的文件;

  6. Source Insight:这绝对是看源码的神器;可以在 Java、C++、C 代码之间无缝衔接;

  7. Eclipse:熟悉常用快捷键,工欲善其事必先利其器;虽然 Source Insight 很方便,但由于对 Eclipse 的熟悉感,对于 framework Java 层面的代码,我还是更习惯用 Eclipse 来看,对于 Native 代码以及 linux 代码则采用 Source Insight 来看;

  8. Android Studio:这是 Google 官方支持的 App 开发环境,简称 AS,目前已经推出 AS 2.0 正式版,使用教程[android-studio.org](


);9. Google Drawings:这是画图工具,Gityuan 博客中的文章都是采用 Google Drawing 完成,比如[Binder 开篇](


)文中的图。10. StarUML:这是类图,Gityuan 博客文章的类图和流程图都是采用 StarUML 完成,比如[理解 Android 进程创建流程](


)文中时序图。

2.3 阅读源码的姿态

阅读源码绝不是从源码工程按顺序一个个的文件,从首行看到尾行。正确而高效地阅读源码的姿态应该是以某一个主线为起点,从上层往底层,不断地追溯,在各个模块、文件、方法之间来回跳转,反复地阅读,理清整个流程的逻辑。同时带着思考去看源码,尝试去揣测作者的用意,去理解代码的精妙之处,去思考代码可能存在的缺陷,去总结优秀的代码设计思想。下面说说我在阅读 Android 源码过程常涉及的库。


阅读 Android 源码:


下面是我以 Android 开机过程为主线,展开一系列的文章 [Android 开篇](


)中的一副流程图,在公司内部分享时我曾多次以下图为流程整个 Android 架构,如下图:



Android 系统源码


[android.googlesource.com](


):Google 官方源码,国内无法直接访问,需要翻墙,对于一个程序员来说具备翻墙的能力是非常有必要的。Android 源码中包含的库非常之多,下面列举我在看 Android 源码过程中涉及较多,也是比较常看的一些库:


  • [android/platform/packages/apps](


):Android 自带的 app,比如 Email,Camera, Music 等,对于应用开发工程师主要关注的目录;


  • [android/platform/frameworks/base](


): Java framework,这是 framework 工程师看得最多的目录;


  • [android/platform/frameworks/native](


):Native framework;


  • [android/platform/art](


):Art 虚拟机;


  • [android/kernel/common](


):Android 内核,这是驱动工程师最关注的模块;


  • [android/platform/system/core](


) :核心系统;


  • [android/platform/libcore](


):平台的 lib 库;


另外,对于无法翻墙的朋友来说,还可以通过上 Github 通过 [Android 主页](


) 下载 Android 源码,这些都是定时从 Google 官方源码的镜像同步而来的。

2.4 优秀资源

牛顿曾说过:“如果我看得更远一点的话,是因为我站在巨人的肩膀上”,这句话很具有实用价值,看完前面的介绍,你千万不要一上来就一头扎进源码的世界,小心你会进入二次元世界,处于混沌状态,最后崩溃乃至放弃求知之路,一定要合理利用现有的优秀资源。


Android 系统源码分析


  • [Innost 的专栏](


)


  • 邓凡平前辈所写博客,条例有序,覆盖了 Android 系统大部分内容;

  • 《深入理解 Android》 (卷 I,卷 II,卷 III)

  • [老罗的 Android 之旅](


)


  • 罗升阳前辈所写博客,从各个层面介绍 Android 系统;

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
如何自学Android gityuan ?,2021年互联网大厂Android面经总结