如何系统由高效的自学Android,字节大牛如实说道,记住这几个点超越90%的Android开发者
前言
看到很多人提问非科班该如何学习编程,其实科班也基本靠自学。有句话叫“师傅领进门修行靠个人”,再厉害的老师能教你的东西都是很有限的,真正的修行还是要靠自己。博主本科是数学专业,虽研究生是计算机专业,但研究生往往是做研究工作(偏学术型研究),编程只是工具,可能很多时候Matlab就搞定了基本需求,再或许用一些科研型仿真软件就可完成课题研究中涉及的编程模块,学业上不太需要很多编程。
我的学习总结
关于编程(比如Java)完全是靠挤时间自学的,而Android则更是参加工作后才开始自己倒腾。不少人认为我学习能力强、博客产出高,是如何做到的? 一份兴趣 + 一份坚持
,很简单,只是把大家用来娱乐、游戏等闲散时间,挤出来用于学习技术、写博客而已。
如何高效学Android?
关于如何学习Android系统, 这就好比读书, 是经由一个由薄读厚,再由厚读薄的过程. 前者是指刚接触一个新领域, 知之甚少,开始不断努力钻研探索, 慢慢地随着时间地积累, 当你会发现自己钻研得越来越多, 自己掌握得知识体系非常庞大, 但当遇到一个新问题需要从大脑检索很久,甚至需要重新review一下曾经看过的已知东西, 那么说明自己以完成了”由薄读厚”;
接下来, 需要进行一个”由厚读薄”的过程, 用程序员都能理解的一个词就是知识归纳与建立索引的过程, 通过思考将所有相关联的知识 整理到一起, 形成自己大脑体系的完整知识目录.进而你会发现自己大脑里面留下得便是整个知识架构, 架构里面的每一层只要拉开抽屉就能取出所有完整的知识点. 到此,我觉得才是完成一个知识的学习的过程.
接下来从基础篇和高级篇两个层次来说说如何学习Android, 在学习过程中所读过的部分较经典的一些书籍才推荐给大家。
我的【GitHub】里有进阶技能脑图,500多个详细分支知识点,由于图片清晰度问题可以查看我的GitHub!
一. Java篇
Java是Android的语言基础,建议初学者一定要先学习Java基本知识,进而再学习Android,循序渐进,只有扎实的基础才能建造牢固的上层建筑。
- 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有一定基础后,很有必要了解看看。
- The Java Language Specification,官方Java文档(英文版)
- The Java® Virtual Machine Specification,官方Jvm文档(英文版)
- 深入理解java虚拟机:这是国内关于Java虚拟机讲得非常全面的一本书,从Java GC到Java虚拟机内部实现以及优化策略,作为Java高手非常值得一看的书籍。
为了方便小白或者正在准备进阶的Android开发者更好的学习,我把文中提到的网上能收集整理的资料,书籍都分享在我的【GitHub】里面,需要系统Android进阶学习资料可以自行领取收藏!
二、Android基础篇
2.1 入门级别
- 《疯狂Android讲义》:作者李刚,这是我看过的第一个Android书籍,目前有第三版了,我当时看的是第二版基于Android 4.2,书中有大量的实例,记得当时每看完一个实例就跟着敲了一遍,大概花了一周时间把这本书看完并把大部分的实例代码都亲手敲了一遍。这里需要说明这本书对于理解Android系统帮忙并不太大,只是当初次接触Android时恰巧看到这本书,并非其他书不好,对于应用入门级的书其实大同小异。
- 《第一行代码》:作者郭霖,网上有不少人都推荐这本书作为Android入门书,但我当时没有看过。这是图灵系列图书,前段时间图灵的编辑看到我的博客gityuan.com,联系到我问是否有兴趣出书,便提到郭霖的《第一行代码》是他们出版社推出的,然后就给我免费邮寄了一本(多谢赠书之谊)。我大概扫了一扫这本书,内容的确比较基础,作者文笔不错,书中还穿插了不少打怪涨经验升级的片段,比较风趣,初学者可以看看。
有朋友好奇私信我是否即将要出书了,目前没有相关计划,自觉能力尚不及很多前辈,还需加深内功修为,将更多的知识写成文章来分享大家。
2.2 一手资料
言归正传,如果你能看完并理解以下内容,那么你完全可以没有必要再看前面介绍的书籍,并且对于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.googleblog.com:Android官方博客,有一些比较不错的feature,博客会第一时间呈现。
2.3 开源资源
到这里,那么你已经具备开发App的本领。平时需要自己动手多写写App,另外就是看看别人优秀的App是如何写的,下面列举一些开源库、工具以及App:
- android-arsenal.com:作者vbauer整理收集Github中各种开源库与工具,并提供搜索功能,是国外整理得最全面的库;
- Android 开源项目汇总:作者Trinea整理的各种开源库,是国内整理得最全面的库;
- codeKK 开源项目源码分析:从源码的角度,分析Android较流行的优秀开源框架;
- codota.com:这是一个代码搜索引擎,收集的是各种API的优秀示例Java代码。
此处本文提及的网址与博客,当然还有很多优秀的博客和网站值得推荐,这里就不一一介绍。
三、Android高级篇
作为程序员,不去阅读源码,仅仅看API文档,只是浮于表象,这是远远不够的。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Andoid系统源码,也包括阅读各种优秀的开源库。
如果想成为Android系统工程师,那么阅读Android系统源码便是必修课。
如果想成为高级App开发工程师,那么阅读Android系统源码算是选修课,阅读一些优秀的开源框架库算是必修课。
如果你是刚刚入门,建议先打好基础,千万不要一上看源码,一来看得费劲,二来你可能在代码间来回跳转,可能会迷失在某一个环节,更甚是理解错误,记住一定要循序渐进。
3.1 阅读源码的重要性
3.2 阅读源码的准备
- Java基础:上层framework以及App层都是采用Java语法;
- C/C++基础:Android的jni/native层代码采用C++,Linux 采用C;
- Linux内核:Android内核基于Linux的,了解Linux相关知识对深入掌握Android还是很有必要。
- Git工具:Android源码采用git和repo进行管理;
- Make:Android源码采用Make系统编译,源码系统中会看到很多Android.mk之类的文件;
- Source Insight:这绝对是看源码的神器;可以在Java、C++、C代码之间无缝衔接;
- Android Studio:这是Google官方支持的App开发环境,另外,能方便地阅读framework Java层面的系统源码。
- Atom: 是Github推出的开源文本编辑器,支持linux、window等多平台,可能不是最好用的,但我已习惯Atom.
- Google Drawings:这是画图工具,Gityuan博客中的文章都是采用Google Drawing完成,比如Binder开篇文中的图。
- StarUML:这是类图,Gityuan博客文章的类图和流程图都是采用StarUML完成,比如理解Android进程创建流程文中时序图。
3.3 阅读源码的姿态
如下以Android系统启动为主线,展开一系列的文章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库;
3.4 优秀资源
Android 系统源码分析:邓凡平和罗升阳都是我的好朋友,对于Android方面的理解有着很多共通之处,下面推荐给大家。
- Innost的专栏
- 邓凡平前辈所写博客,条例有序,覆盖了Android系统大部分内容;
- 《深入理解Android》 (卷I,卷II,卷III)
- 老罗的Android之旅
- 罗升阳前辈所写博客,从各个层面介绍Android系统;
- 《Android系统源代码情景分析 》
- Gityuan源码分析
- 前面两位的博客基于Android 2.x或4.x,目前Android已发展到Android 6.0。不管Android如何变化,核心思维变化并不大,两位前辈的博客还是值得学习和参考的地方。但是Android经过几个大版本迭代,无论是从代码结构还是整体逻辑仍有很多变化。故博主(Gityuan)撰写了Android 6.0源码系列的博文。
3.5 进阶书籍
**需要再次强调一下,**此处高级篇更主要的是针对系统工程师,对于android开发高级工程师的修炼之路,只需要掌握其中一部分即可,更核心的重点还是在app层面的知识。
四、复习知识
工作这么久要重新再去面试肯定是要将自己的知识储备重新拿出来,要把各个知识点复习到位,需要通过各个方式,选择自己最习惯的。无论是读电子书籍还是观看视频都是可以的,但要记得做好自己的学习笔记,能够起到总结的作用,再去复习起来就特别清晰了。
每个知识点都有左侧导航书签页,看的时候十分方便,需要的记得帮忙点赞评论支持一下,评论区,评论【666】即可来获取下面的大厂Android面试解析+技术知识点笔记”锦集了
4.1 Android快速面试指南
4.2 Android从入门到架构成长笔记
就拿我们移动开发人员来说,从初级程序员进阶到高级程序员,从初级架构师到资深架构师,应该如何构建自己的知识体系,成为移动架构师需要掌握哪些技能?
13年java转Android开发,在小厂待过,也去过华为,百度等,去年四月份辞职现在进了字节跳动。等大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
我们今年整理了一份阿里P8级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括腾讯,以及字节跳动,华为,小米,等一线互联网公司主流架构技术。如果你有需要,拿走记得刷不要收藏夹里吃灰。
点击我的:【GitHub】免费领取Android高级教程和面试题PDF;需要的点击查看自行下载保存!
4.3 Android从入门到精通逆向学习视频
推荐一个B站up主,里面有Android系列学习视频,专题分类!
【实战MVVM和Jetpack的完美结合让页面开发不再烦恼】
【1.什么是插件化】
【2.插件化能解决的问题及与组件化的区别】
【3.常用插件化框架对比】
.
.
.
【13.手写实现插件的资源加载】
五、其他
5.1 开发书籍推荐
如果还想看更多关于开发书籍的推荐, 可以看看diycode
发起的,由一群社区较活跃的Android人士(包括Gityuan在内)一起共同撰写的Android开发书籍推荐。
5.2 解决问题的方式
遇到问题,一定要先尝试自己解决,实在解决不了再请教他人。这是对自己的一个锻炼,也是对他人的一个尊重,可以有多种途径自行尝试解决:
百度
一下,很多时候还是能有所帮助的,不要过分强调google,完全抛弃百度,毕竟中文资料对大多数人来说理解起来更快;Google
搜索,建议先用中文关键词google
一下;再英文关键词google一下;- stackoverflow.com、知乎等技术问答网站内直接搜索;
- 查看官方文档;
- 如果有源码,尝试直接看源码,看能否解决;
另外,有空可以多逛逛github
,多看看Google官方文档,多关注社区,定会收获不少;
5.3 番外篇
- 好奇心比雄心走得更远:很多人对未来空有满腔的雄心壮志,往往不如对技术要有一份好奇心,一份探索欲,再加上一份执着的人。
- 要有open的心态:曾经的我也只是把自己的所思所得都放入自己的云笔记,很少整理,这其实不利于技术发展,有空应该多整理自己零散的知识点,觉得不错的点可以拿出来写成博客,那是对能力的又一层提升。另外,在低头做技术的同时,还应该有空抬头看世界,不能闭门造车。
- 天道酬勤:学历只能代表过去,能力代表现在,潜力代表未来! 你不把自己逼一把,你压根不知道自己有多优秀,只要努力去学习,去挖掘潜力,进而提升自我技术修为,未来不再是梦!共勉之!
- 当然,最最重要的是能静得下心,持之以恒地钻研技术。
如何系统由高效的自学Android,字节大牛如实说道,记住这几个点超越90%的Android开发者相关推荐
- 字节大牛耗时八个月又一力作,详细的Android学习指南
开头 互联网时代的到来,让我们获取知识变得更加简单,理论上讲只要你想学,便会有不尽的知识等你,只要方法得当,够努力,任何人都可以都有可能成为大牛. 自己在努力的基础上,还学习了一些高效的学习方法,让我 ...
- 字节跳动Android开发大牛:90% 成功率的 BATZ Offer 收割机是怎样练成的!
都说今年的形势不好,各种找工作不顺利,但我身边就有一位同学,每次面试都拿到了offer,我特意邀请他来给大家分享下经验,虽然不同人的技术领域未必相同,但很多东西是相通的,希望本文能对大家有所帮助. 前 ...
- Android 字节码插桩全流程解析
在Android进阶宝典 – Handler应用于线上卡顿监控中,我简单介绍了一下关于ASM实现字节码插桩来实现方法耗时的监控,但是当时只是找了一个特定的class文件,针对某个特定的方法进行插桩,但 ...
- 阿里P7大牛手把手教你!一眼就能看懂的Android自学手册,真香!
前言 曾听过很多人说Android学习很简单,做个App就上手了,工作机会多,毕业后也比较容易找工作.这种观点可能是很多Android开发者最开始入行的原因之一. 在工作初期,工作主要是按照业务需求实 ...
- 字节大牛教你手撕Android学习,灵魂拷问
背景 知乎客户端中有一个自己维护的 Hybrid 框架,在此基础上开发了一些 Hybrid 页面,当需要前端或者客户端开发接口的时候,就涉及到联调的问题. 和一般的 前端 <=> 服务端, ...
- Android字节跳动一面,被面试官吊打
缘起 最近看到很多准备春招的童靴,面试被各种吊打.除了提升专业技术水平外.程序员招聘校招相关的注意事项也是大家需要熟悉的. 像下面这位同学,分享自己Android字节跳动一面,被面试官吊打! 实习项目 ...
- android 字节码指令集,进入Android Dalvik虚拟机之Dalvik指令集
1. 指令特点 Dalvik指定在调用格式上模仿了C语言的调用约定.Dalvik指令的语法与助词符有如下特点: 参数采用从目标(destination)到源(source)的方式. 根据字节码的大小与 ...
- 【Java 虚拟机原理】动态字节码技术 | Dalvik ART 虚拟机 | Android 字节码打包过程
文章目录 一.动态字节码技术 二.Dalvik & ART 虚拟机 三.Android 字节码打包过程 总结 一.动态字节码技术 动态字节码技术 就是在 运行时 , 动态修改 Class 字节 ...
- Android字节码插桩
什么是字节码插桩 字节码插桩就是在构建的过程中,通过修改已经编译完成的字节码文件,也就是class文件,来实现功能的添加. 简单来讲,我们要实现无埋点对客户端的全量统计.这里的统计概括的范围比较广泛, ...
最新文章
- 编译-链接-运行-环境配置各种error汇总
- 媲美光纤!WiFi传输速度已可达100Gbps
- python可以干嘛知乎-一行Python代码能做什么?
- Rxjs takeWhile 和 filter 操作符的区别
- 前端学习(3297):effect的使用
- 6内置数据结构_set
- python3.5.2安装pygame_#Python3.6.2(32位) pip安装 和 pygame 环境配置
- 【elasticsearch】elasticsearch 精确匹配 与 全文搜索
- 随想录(easyx中的键盘输入和鼠标消息)
- linux的poll_wait函数,select() 与 poll()两个函数接口的作用
- Deep Learning学习随记(二)Vectorized、PCA和Whitening
- PicoDet网络结构在YOLOv5-Lite上的复现
- 结队编程之——阅读分析队友的代码(C++自动生成数学试卷)
- # 研究杂感 × VOSviewer(第一辑)
- 使用cloudcompare测量平面之间的距离
- JAVA 通过wContour和geotools实现等值面分析、裁切、出图
- 腕管综合征(鼠标手)的康复之路
- Dijskra迪杰斯特拉算法
- 433MHz通信 发F115 收SYN480R
- mysql locate用法,LOCATE()函数如何与MySQL WHERE子句一起使用?