从零开始学习安卓开发(不知道怎么学习安卓)
从零开始学习安卓开发(不知道怎么学习安卓)软件开发是个工程项目,技术也具备和工程项目一样的特点,那就是技术之间高度融合、相互配合,整个项目是理论和实践高度结合,技术之间高度融合后的产物。你应该清楚哪些是最优先的、哪些是可以放放的,就像项目开发一样,列个燃尽图出来,估计你会吓死。当然能把这个图列出来也是你的能力,好多人还都列不出来呢。但你若是对这些视而不见,那就是逃避。踏实、务实才应该是我们的日常。今天分享一下,包括一些学习资料,但是更重要的是明明白白的告诉大家,你为什么学不会、怎么才能学的好、怎么学习才是效率最高的。听我之言,Android 2年高级不成问题。新技术月月有、日日出、年年新,出来一个你看一个,但是你真的着急学它吗?你着急在项目中立马使用吗?真的让你用你敢用、你有权利用吗?你想过没有,我还有多少不会的、没懂的、模糊的、项目急需的、遗留的,难倒那些欠下的技术债你都装看不见吗?
前言编程这条路能走多远,能走多久,就看一点:你学不学的明白。想学明白,就得看你会不会学习,所以编程能干多久,你值多少钱,最终看你会不会学习。
我们从小就学习,但是一旦离开了学校这种压力环境,你还会学吗?你还学的进去吗?软件行业从业者之间差距就是因为学习效率的不同拉开的。
你是不是曾经这样苦恼过,并且百思不得其解:
- 为啥大厂校招比社招的人多?
- 为啥大厂只要基础好的毕业生?
- 为啥硅谷面试只问数据结构和算法?
- 为啥大厂要给新人安排导师、引路人?
- 为啥大厂新人成长这儿快,别人半年顶我3年?
- 为啥我5年经验不如大厂里干1年的小鲜肉?
这些问题曾经一直困扰着我,冥冥中有个声音告诉我,你要是找到了答案,从此康庄大道、任你傲游、你也能达到那令你羡慕、憧憬的高度!历经多次思考,到今年我总算是差不多略顺了前前后后,今天发出来大家鉴赏一下。
今天分享一下,包括一些学习资料,但是更重要的是明明白白的告诉大家,你为什么学不会、怎么才能学的好、怎么学习才是效率最高的。听我之言,Android 2年高级不成问题。
学习中常见问题1. 进退无据,盲目追求最新技术新技术月月有、日日出、年年新,出来一个你看一个,但是你真的着急学它吗?你着急在项目中立马使用吗?真的让你用你敢用、你有权利用吗?
你想过没有,我还有多少不会的、没懂的、模糊的、项目急需的、遗留的,难倒那些欠下的技术债你都装看不见吗?
你应该清楚哪些是最优先的、哪些是可以放放的,就像项目开发一样,列个燃尽图出来,估计你会吓死。当然能把这个图列出来也是你的能力,好多人还都列不出来呢。但你若是对这些视而不见,那就是逃避。踏实、务实才应该是我们的日常。
2. 胡乱学习,左学一点右学一点软件开发是个工程项目,技术也具备和工程项目一样的特点,那就是技术之间高度融合、相互配合,整个项目是理论和实践高度结合,技术之间高度融合后的产物。
很多人平时怎么学习?就是看博客!今天A写了这个,我就看这个;明天B又写了那个,我又去看那个。先不说这短时间内来回切换学不同的技术点,你有时间能学明白吗?单就说这左一下、右一下的,你怎么形成知识体系?你的学识之间要是不能相互融会贯通,在软件这个行业那是致命的。尤其是这种左学一点右学一点的方式那是真的会要你命的,这样学下来1年,我敢说你最多就是学到几个单独的知识点罢了,于全局无补。
但恰恰太多的人都是这样,你们天天喊学习、我学习、白天学、晚上学的,但还是学不会,你就不想想是哪里出了问题吗?
3. 不写笔记,狗熊掰棒子全忘了大家须知,没有过目不忘,即便你当时学的再通透,过2月不用,一样可以忘的一点不剩。你要是努力辛辛苦苦整天看、整天学、一年下来,年关的时候你回忆回忆你还记得多少?样的学习真的有意义吗?属浪费时间罢了!这都算是一种基于焦虑的精神疾病了,是对自己的一种折磨 (>﹏<)
别人的文章是别人的,不代表你看了就是你的了,只能说你知道了有这么一个知识点。你看为什么大神们都写博客,因为大神们辛苦提炼出来的精华它也会忘,所以的写博客出来,一个是分享,一个是在写文章过程中再提炼提炼,分享出来还能有名望。
4. 基础薄弱,原理、源码我就是学不会很有朋友都看原理,看源码的吧:
- OKHttp 源码看不懂,线程池、阻塞队列我没学过,网络编程的点也不懂,设计模式也只是听过,我不理解为啥类要设计的这么复杂,要有这么多类
- Glide 源码看不懂,设计模式忘了,不理解类结构为什么这么设计,都说好,但是我就是不理解好在哪
- MMKV 根本就看不懂,到底怎么实现的快速文件储存的?去看原理,虚拟内存、文件映射、mmap 这都啥玩意,听都没听过
- AMS 怎么运行的,系统服务都是怎么跑起来的,Binder 通信怎么做的,看了很多文章就是不明白
- 自定义 View 练了好些次了,怎么就是还是不会呢,canvas,paint 怎么就是不会使呢
- 哎,这个效果好赞,怎么画出来的
- 视频播放好高深呀,怎么做的?看文章一点也看不懂哎,产品让我在播放器页面加点东西,但这个怎么改,播放器样式不都写死的,我只会在上面好来加一个蒙版,但是我看大神们都是自己定制的播放器,好高深啊。
今天看 MMKV,完全看不懂。找博客,看到有文章说用到虚拟内存。没听过,我去看虚拟内存,看了好些天,还是不怎么理解。然后又有文章说用的是文件映射的原理,看了好些资源终于多少明白点了。但是 mmap() 函数就是不理解。还有用户空间、内核空间这些。一个月过去,总算是看的差不多了,虽然点看的差不多,但都是半懵不懂,整个知识点串起来也费劲。
看 OKHttp 源码,里面有线程池,还有 Socket,耗时大半个月,总算是把 OKHttp 源码囫囵看完了。
最可怕的学习方式就是反推式学习,你啥也不会的时候就去硬看 OKHttp 源码,一般大家都有一些理解力、经验,浅层代码能看个大概,当看到不会的知识点再去看资料,然后再一点点深入,一般都是这么学的,文章也都是这么写的。
我个人强烈抨击这种学习方式,OKHttp 是干什么的大家都知道吧,实现网络功能的,代码很多很复杂的吧,其中肯定会涉及到网络编程、设计模式、多线程知识点,并且这些知识点会综合应用。很多啥也不会、一点基础都没有的小白直接去看 OKHttp 源码,这不叫学习,这叫硬看。你一点基础没有,即便遇到不会你去查资料,你真的能看懂整个框架吗?其中设计思路、思想精髓、技术策略你肯定吸收体会不到,这些才是最有价值的部分,面试高玩们也是侧重想听你说这部分。
太多的人在啥也不会的时候直接去看代码成品,而不是先巩固、学习涉及的基础、底层知识,我管这种方式叫:反推式学习。这种学习方式,及其低效率、难度极高、效果极低。你明明知道会涉及什么基础知识,你为什么不先把这些基础知识点都看懂了再来看 OKHttp,你没有和作者相同高度的基础认知,你是不可能看得懂作者的想法的,你是不会体会到作者感受、作者写这个框架时的技术思路和决策。
什么才是好的学习方式历经3年、不停反复思考、实践之后的思路,希望对大家有所帮助
1. 学习要有优先级不要去管那些天天都出来的新技术,你先放着,就让别人先趟坑去,你现在学那些令你寸步难行的知识点,这些才是你现在拦路石,时间不要浪费在别处。
2. 夯实自己的基础,先打好基础再说太多没有结果的学习都是因为你基础不行,既然看不懂那就不要勉强了,应该去看用到的基础知识。以 OKHttp 为例,看不懂源码,那就去猜它用了什么基础知识。若是不会,就把 网络编程、设计模式、多线程 这些基都学会了,再回过头来看 OKHttp 它不香吗。有多少看不懂的、还有多少不理解的。你再去看网上那些 OKHttp 的文章,你会骂:这什么文章、都写的啥、垃圾、哦~原来是这样啊、我知道了、我明白了...... 这才是正确的打开方式。
3. 集中时间办大事不要今天看这个明天看那个的,对于单个知识点,利用短期的集中的时间先把这个点搞定再去干别的,再去休息。对于大块的知识点,规划好时间,集中时间一个个点的啃下来再看别的。
4. 系统性学习编程领域的知识点都是相互关联的,不管是学习阶段,还是使用阶段都是一样。割裂的、无法成体系、相互无法印证的散碎知识点对你来说是没什么帮助的,该不会的还是不会,你不会真的学明白。学习就必须把一个领域的知识点一次性全部学到位,这才是最正确的展开。
再强调下基础的重要性基础不稳,地动山摇!
好比我们学习数学,大家都是先学:
- 阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理
从小我们学习,在学校里就是从难到深,那为啥放到软件领域,编程行业,我们就忘了呢,大家总是着眼于最顶层的东西,总也看不到技术基础在哪里呼喊你赶紧关注它 ┻━┻︵╰(‵□′)╯︵┻━┻
我们平时用的开源框架/库,这些都是软件领域最终的成品了,就好比是数学中的公式定理,小白学习这些源码就是一个剥开公式定理外皮一层层深入的过程,随着学习的深入,这过程是这样的:
- 公式定理 -> 方程式 -> 九九乘法表 -> 乘除法 -> 加减法 -> 数学符号 -> 阿拉伯数字
这个过程就是我上面说的反向学习,在没完全成熟、完善的、从头到位的学习课程的技术领域,这个逆向的过程是不可避免的,但是我们必须知道这种逆向学习有多大威海。
很多时候我们的确能研究到及其指令这一层,但是当我们翻回头,我很难把这些知识点全部串起来搞清晰,最多我只能比较清晰的明白部分,这就是大多数人学习的常态:耗费大量时间,总也学不明白,学不通透。
但是大家再看,阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理这些东西就是基础知识啊,当我们把这些基础知识都掌握了(网络编程、设计模式、操作系统),你再去看这些框架, 你就会时不时大声呼喊:原来是这样啊,我get到了,也没有太复杂啊,我都大概都串起来了!
学习基础知识还有一个非常NB的地方,就是当你把基础知识都搞定的时候,一定形成自己的一套行之有效的学习方法,这会让今后的学习、工作路程走上快车道。
具体到 Android 学习总听别人说基础、基础、底层、底层的,啥是基础,啥是底层?根据我近3年的经验来看,所谓的基础、底层就是完整的大学课程 ->
- C/C
- 计算机导论
- 计算机组成/微机原理
- 操作系统原理/Linux编程
- 网络编程
- 数据结构
- 设计模式
- 多线程
加上语言、平台基础(JAVA 、Android) ->
- JVM
- 反射
- 泛型
- 注解、AOP、APT、AST、AspectJ、ASM、Javassist、IOC
- Android 操作系统
还有一些跨平台通用 API、算法
- Bitmap
- Canvas
- Paint
- 各种缓存机制,比如:LruCache
学习是有顺序的,至少我经过亲身学习后,大概摸索出一个适合的大多数人的学习路径:
- C/C 一定要先学C ,也不用看多深,知道语法,能看懂代码,能在 Android 上写 .cpp 文件,能跑起来就行
- 计算机导论 看看这个,大多数人对于计算机整个结构都不清楚,好的计算机导论内容很全,会把计算机组成的部分也笼统的介绍一边,要是对硬件没什么兴趣,计算机组成/微机原理 可以略过,有计算机导论部分介绍的硬件知识就够了
- 操作系统原理/Linux编程 这里说的都是 Linux,操作系统原理这部分都是原理不涉及代码,但这个是必须会的,后面的内容随随便便、不经意间都会涉及到操作系统原理。Linux编程这块优先级不高,等你需要了再学都来得及。但是大家要知道Linux编程里非常非常多,捡你需要的学
- 数据结构、设计模式 这2部分学习没有前后,没时间的同学数据结构可以放放,不影响后面学习
- 网络编程 这个算是基础部分最后的点了,但是非常重要,一定要学清楚、学明白
- 多线程 不用说了吧,
- JVM 深化对 JAVA 的理解,最好的方式就是把 JVM 从头到位的学习一遍,到这里你就能体会到学习操作系统带给我们的感受,java 就是对 C 的简化,JVM 就是用C 写的,java 的一切都是跑在C上的
- 反射、泛型 这2个是很多人都欠缺的,一定要会,Android 的黑科技哪个离得开反射了
- 注解、AOP、APT、AST、AspectJ、ASM、Javassist、IOC 这些都是基于注解衍生出来的技术,实属黑科技,但是又及其重要,不管哪个平台的哪些开源库没有几个没用到的,必须掌握的技术
- Android 操作系统 最后就是这个了,学过 操作系统 这里就不会再出现学不明白了的问题了,其实有操作系统知识打底,Android 操作系统好理解多了,没有多少难理解的点了。
带着上述学习成果,再去学习 Android 应用层的东西,你会发展,学习原来是这样爽啊,看一个会一个,看一个明白一个,看每一都能理解通透,爽死了 ヾ(≧O≦)〃嗷~
学习资料:这其中很多还没整理或者还没看完,大家见谅,我长期更新,肯定会把学习资料这块都写全的,并且这些资料都是我亲身学习、品鉴过的,保证质量,保证小白都能看懂,我的资料就是给小白准备的,因为我自己就是小白 (ノへ ̄、),干了好几年了,还是小白,感觉对不起社会的栽培啊,没办法我是跨界过来的,可不是科班出身。
本文重在思想,资料不全不要开喷,也欢迎大家给我补全资料。
学会下面,不敢说从此平趟,但是保你同样的时候,可以看3倍的学习资料,吸收5倍的知识,提高10倍的知识体系建设。2年高级、3年资深、5年成神不再是梦。
Android 知识复习大全覆盖Android所有知识点,包含:Android 进阶延伸点、数据存储、IPC、View、Fragment、Activity 生命周期、Handler、线程、性能优化、Android基础、Java等等。
最全的《Android面试题及解析》从基础到架构进阶,包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中高级安卓技术点。
包含:Android 基础、Android 高级、开源框架实战、JAVA 面试题、Flutter 相关面试题全解析、Android 高频面试题集锦。
对标阿里P7移动开发架构师全套系列学习教程笔记包含内容:Android框架体系架构、NDK模块开发、360°性能优化、设计思想解读开源框架、Flutter学习进阶、架构师必备Java基础、微信小程序开发。
大厂内部超高质量Flutter Kotlin笔记Flutter学习笔记
Flutter学习笔记
Kotlin入门到精通
Kotlin入门到精通
超全面Android开发相关源码精编解析内容概要:微信 MMKV 源码、阿里巴巴路由框架ARouter 源码、AsyncTask 源码、Volley 源码、Retrofit、OkHttp、ButterKnife、Okio、SharedPreferences、EventBus、Android 自定义注解、View 的工作机制、Android 触摸事件分发机制、Android 按键事件分发机制等等Android开发过程中相关源码精编解析!
深入解析Binder源码解析这一系列下来,相信你想学不会都难!
因为文件太多,全部展示会影响篇幅,暂时就先列举这些部分截图;
以上所有资料,直接转发 私信我【资料】一键领取