android 技术路线+资源汇总(持续更新)
持续更新资源中...
特殊说明
这里真的是不得不说哈,对于那些工作了3-5年,技术还是一般,知识面还是不宽,平时也很努力,但就是没啥成绩的同学,不要再自己一个人费力学习啦,事实是你真的不适合一个人学习,薄弱或是压根没有的技术基础,还有没有效率的学习方式,及其狭窄的知识面,就不适合那些走不了独木桥的人,自己一个人奋发向上适合那些基础好,知道怎么学,该学什么的老手或是天赋好的人
对于上面我说的这种朋友,你要open
才能走上康庄大道,去网易云课堂、腾讯课堂找找那些要大几千的学习课程
,先听听公开课,对胃口再买课。大几千虽然不少了,但是想想过去几年一事无成,这几千又不算淂什么了。这些课基本都会有资深从业人员教你,会比较成体系成系统的教给你,你也可以去提问
一旦你之道自己用时间换金钱不成功,那么就只能剩下用金钱换时间和效率这条路了,事实一般都是比较有效果的。不是恰饭,不是做广告,up主我也买了,我也算是那些怎么也学不会的笨学生
这样的朋友多来自跨界过来的,基础的缺失会带来极端低效率的学习和进步,真是浪费了我太对的时间。关于这个仁者见仁吧~
吐槽一下
温故而知新,这篇文章我是又大改了一次,大改意味着我的认知又提升了一节,这是个好事,也希望大家都能常常有这种感觉
任何微小的进步对于自己来说都是弥足珍贵的,不积小步无以至千里!我以前这是这么认为的,就像玩游戏一样,慢慢咱经验值就行了,的确很长时间内我也是这么做的,但是吧说实话总体提升的确有限,总感觉很多都看过,都认真学过,学的是似而非,很多感觉自己学明白了,也有很多感觉就是学了个懵。自我感觉总是好与实际,用的时候就知道了,用不出来就是还没学会,写着磕磕绊绊能勉强写出来,说明初步学会了,但是缺乏练习,什么时候真的是应用自如,写起代码来不用想那才是学到家了
只是学就这么费劲了,就更别提学习效率了,但是为什么我们身边或者业内就有学习飞快,学的非常好的人呢?我总是问一个为什么,也一直在寻找原因,不同的时候都不同的答案,但是我想我现在的确找到了最终的答案:基础欠缺,学习不成体系,不连贯!
这就是大家学不会,没效率的最总要的原因,当然学习期间手写demo,技术博客这些也是很重要的一环,但是在这里不讨论这个,这个是很多人都能明白的,就不单说了
-
基础欠缺:
好比还不会走,就要跑;还不会拧螺丝,就要造火箭,你能学的明白就怪了 -
学习不成体系:
好比吃了口凉菜就要和热汤,吃了口猪头肉就去吃日料,喝了口百事就去喝百草蛇水,各种滋味大家能体会吗,五味杂陈,这样美阳东西即便再美味,再有内涵,我们又能知道吗?大家想想
贪多嚼不烂,最终还是淂一样一样来。一点一点啃方才是人间正道呀!一个点啃的差不多了,再去看别的。编程是一个交叉纷杂,关系混乱的技能树,不学会A/B/C就别想学D,但是学E可能有要C/H,但是字母只有这26个,学会了这26个基础知识,还有什么技术是我们学不会的,学不快的(26是个比喻,其实没这么多)
编程学习路线图
任何事情都是从简单开始的,复杂的往往都是从简单的基础上一步一步发展二来的,编程也是如此
你以为基础其实不多,呵呵,其实非常多,我们学习的技术,60%都是基础,30%是基础的简单组合应用,10%才是烧脑活动
下面我列出的都是基础,基本上都是编程这个职业的必会的通用技术基础。花1W小时搞定这些,从此你不用再担心被淘汰,被优化,只要按部就班的,不急不慢的,稳步的跟着时代走就行了。从此远离焦虑,拥抱变化,提高效率,深入原理
1. 编程4大件
是个做编程的都必须会的,不管你是做放个方向的都离不开这个经典的编程基础4大件
,包括:
-
数据结构和算法:
有什么带代码不涉及到数据结构呢,清楚这个是十分必要的,当然做后台开发方向对这块会要求到极致,移动端和前端没必要搞得非常深,但是也是值得学的。另外机器学习和神经网络对算法要求会非常变态,不仅要求能熟练理解,掌握算法理论和实现,更淂结合实际数据对算法进行调整组合,甚至自创算法 -
计算机网络:
这个没得说,谁都得会,都得要求精通的,这个不了解,简单的会对实现网络功能时经常会对各种配置,传参项懵逼;更重要的是在嵌入式设备和物联网设备时要自己实现各种网络连接,这个时候你就死了,先学先找可不怎么来的急。还是大家先照顾我网络方面最好,需要时候再回忆具体代码 -
操作系统:
进程,线程,编译,内存,锁,内存调度,内核态这些都是操作系统层面的内容,是不会就会对学习其他造成强烈困扰的,是必须优先学习的内容 -
设计模式:
不多说,重要性大家都知道
2. 系统基础
出了window
外,我们做开发的系统的都是基于或者就是Linux
产生演变的,我们要熟悉包括Linux
,android
这2个系统
做后台开发,做硬件开发的大多都要求在Linux
环境下执行,所以我们做开发跟着也要在Linux
环境,所以熟悉Linux
的一切很有必要,像编译,调试这是跑不掉的
做客户端的,像android
,ios
系统都是有自己特性的,不熟悉自己所在客户端是要死人的...
3. 语言基础
运行在同一系统上的不同语言之间差异是很大的,有的带编译,有的直接解释,基本都有专业自己语言的JVM虚拟机,JVM之间的差异是那样大
熟悉自身语言特性,原理,运行机制实在是太重要了,像注解,多线程,协程,IO,反射
啥的,不会的很要命的,最深刻的解释是这些不会那些高深的东西你看不懂。比如热修复就是使用了:注解,反射,android系统ClassLoad 机制,这些每个点都是基础,但是正是这些基础知识点的组合使用实现了那些魔幻的功能,看黑科技,其实不难,我们熟悉基础知识再去看学习资料就能看的懂了,要不技术资料给你有什么用,涉及的基础知识你不会就跟看天书一样,看了也是瞎猜,没效率
4. 硬件基础
这里的硬件基础指大一课程:计算机组成原理
,操作系统会和这里有深入关联,遥想操作系统学的好,计算机组成原理
也得学明白。除了为了学好操作系统之外,学好了计算机组成原理
我们能从最底层彻底明白计算机是个什么东西,带着这种通透感,学其他内容也是有些效率替身
5. 其他知识点
编程是个大工程,上面说的还都是基础性的东西,除此之外,还有
IDE 编译工具
音视频
二维码
markdown
git
各种性能分析工具,抓包工具
这些东西也是必须会的
6. 熟悉基础之后
等我们学完了基础知识,深入理解了本质工作的东西,那我们就完事了吗?远远没呢,我们需要拓展眼界,拓展技术维度,像做客户端的,必要学习前端。还可以学习 python,机器学习这块,C++这块也得学,现在趋势是要会,尤其是偏做硬件设备开发的,比如车载,物联网,只能设备,很多时候都设计到C++,C++的性能优势没有哪个高级语言能比得上的
为了实现财富自由,基金,定投,股票,期货这些你会了解,你会损失很大的,甚至影响后半生是否幸福
程序员这个行业就是注定了一辈子远离游戏,小说,抖音,终身学习,奋斗的行业,掉头发那是必然。就像一拳超人说的,我变强了,头也秃了,什么时候我们有开始秃顶的趋势时,我们才有资格评论这个行业,才能算是个技术专家,不秃顶就不算是专家,这是妥妥的,不信大家在身边找,没有一个技术NB的不秃顶的,只是多少的事
数据结构和算法
这是编程4大件中的一个,是必须会的,不做后端的同学可以不精,但是淂会,淂了解,面淂广,之道都有什么,再需要的时候之道找什么,去哪找。另外去大厂面试,这个可是重点考察内容
数据结构和算法不会的同学,不推荐去找博客看,没效率,你也串不起来。最好去看大结构出的系统的视频或者直接看书
不管你学的好,学的坏,这些常见的必须会:字符串,链表,二叉树,堆,栈,队列,哈西,查找,排序,动态规划
成体系资料:
B站:
书:
- 《大话数据结构》
- 《算法第四版红色的》
- 《剑指offer》
刷题网站:
知识点精讲:
计算机网络
这个同样也是计算机4大件中的一个,比上一个数据结构更重要,为啥,没有网络计算机就没多大意义了,你不管干啥都绕不开计算机网络这一块
并且计算机网络这里很复杂,API很多,大家必须熟悉,就算是用开源网络组件,即便是为了明白传参时那些复杂的设置你都得过来学学计算机网络
网络协议涉及很多:ARP/IP/ICMP/TCP/UDP/DNS/HTTP/HTTPS
,这些都得明白,同学们在这里一定要多花时间,不要吝啬,要不以后会吃亏的,面试的时候有的人就喜欢就着这里问到死
成体系资料:
B站:
书:
- 《TCP/IP 三件套》3本一套,挺贵的,钱紧的拼多多吧
- 《图解 4件套》 4本一套,看这个也行,这个是国人写的,接地气
知识点精讲:
B站:
操作系统-偏硬件方向
说到操作系统其实绝大部分人不知道操作系统提供了什么给我们。像:进程,线程的调度中断挂起回复,原子性,并发,锁,内存分配管理
,这些都是操作系统提供的基础性能,部分语言在JVM层面会有一些自己的特性,但是总体而言都是遵循操作系统提供的功能的
操作系统是管理资源和硬件的,是衔接硬件资源和应用层面的中间层,所以会定义很多标准,接口和概念,这些对我们来说及其重要,不了解这些特性,我们很多时候不知道为啥要XX设计,最典型的就是学习多线程原理时会懵逼~
大家可以找到很多大学的课程,不推荐大家看,普遍又臭又长,罗里吧嗦还说不明白,看的话一些国外的大学课程视频倒是要好很多
系统了解:
书:
- 《深入理解计算机系统》
文章:
设计模式
我就说一点,不熟悉设计模式,你就看不好源码,开源库,你就学不好业务代码,功能组件
有意思的是设计模式这个东西是70年代,国外资深coder从建筑领域借鉴过来的,这说明应用工程相互之间都是都是通着的~
成体系资料:
B站:
书:
- 《大话设计模式》
linux 系统
Linux
是基础中的基础,重要中的重要,做后端,单片机,硬件开发你离得开,移动端系统哪个不是基于 linux
linux 要学习的东西不少呢,像是:环境搭建,命令行指令,shell批处理,linux 系统API,多线程,资源,信号,同步,互斥,锁
等...部分内容和上面操作系统有重叠
书:
- 《鸟哥的Liunx私房菜》
- 《Linux就该这么学》这本简单
- 《Unix环境高级编程》这本必看
- 《Linux高性能服务器编程》
- 《POSIX多线程程序设计》
java
java 和 C++ 现在来看都是必学必会的,java 是一切高级语言学习的起点,C++ 是提高自身能力,深入部分技术领域时必须的前提条件,现在即便做客户端的,像做到高级资深水平都得会C++
C++ 作为性能最好的语言,真的是不出不在,最好会~
这里咱不说 java 语法啊,但是像是:泛型,注解,反射,IO
这些都是需要深入精通的,从 Android 来看没有哪个NB的开源技术没用到虚拟机,泛型,注解,反射
的,热修复,插件化NB不NB,不也是用注解,反射
实现的嘛,所以大家精通了基础技术,就没有什么不是你不能学的了
这里没有什么大块的资料了,都是一个个点了,我都放一起大家看吧
系统资料:
书:
- 《深入理解JAVA虚拟机》
- 《大话java性能调优》
知识点精讲:
多线程:
- 全面深入学习java并发编程
- 高并发编程实战(一)
- 高并发编程实战(二)
- 高并发编程实战(三)
- 2020年JavaSE基础强化,全面深入学习线程池
- RT-Thread内核入门指南
- 【Java编程中的“锁”全套教程】500分钟带你彻底弄懂Java各种并发锁
综合技术基础
B站:
- 详讲编码与解码,灵活解决乱码难题
- 程序员工作中常见的英语词汇(有读音)
- Git零基础入门到实战详解
- 活动作品【高中生UP】二维码是如何生成的?为什么不能随手画个二维码?
- 一招搞定GitHub开源项目下载加速!
- NDK模块开发之音视频基础知识
书:
- 《程序员数学3件套》矩阵,机器学习,算法中设计到的数学内容都包括了
- 《程序员的英语》这是适合有闲的人看,或者打算主攻英文文档的
文章:
掘金小册子:
个人成长
我就方基本书吧,这个推荐书的少:
- 《大话程序员》
- 《你好哇,程序员》
面试
这里啥都方,只要是面试的,总有你需要的
B站:
- 【Java | 源码分析】为了2020年面试阿里巴巴,死磕了这几个知识!
- 2019年度大厂Java面试知识点合集(全50集)
- 揭秘Java一线互联网大厂JVM面试题,搞定面试官
- Java面试突击训练营精讲视频全集(2020年金三银四一线大厂面试必备)