android 技术路线+资源汇总(持续更新)

4,478 阅读18分钟

持续更新资源中...

特殊说明

这里真的是不得不说哈,对于那些工作了3-5年,技术还是一般,知识面还是不宽,平时也很努力,但就是没啥成绩的同学,不要再自己一个人费力学习啦,事实是你真的不适合一个人学习,薄弱或是压根没有的技术基础,还有没有效率的学习方式,及其狭窄的知识面,就不适合那些走不了独木桥的人,自己一个人奋发向上适合那些基础好,知道怎么学,该学什么的老手或是天赋好的人

对于上面我说的这种朋友,你要open才能走上康庄大道,去网易云课堂、腾讯课堂找找那些要大几千的学习课程,先听听公开课,对胃口再买课。大几千虽然不少了,但是想想过去几年一事无成,这几千又不算淂什么了。这些课基本都会有资深从业人员教你,会比较成体系成系统的教给你,你也可以去提问

一旦你之道自己用时间换金钱不成功,那么就只能剩下用金钱换时间和效率这条路了,事实一般都是比较有效果的。不是恰饭,不是做广告,up主我也买了,我也算是那些怎么也学不会的笨学生

这样的朋友多来自跨界过来的,基础的缺失会带来极端低效率的学习和进步,真是浪费了我太对的时间。关于这个仁者见仁吧~

我花钱的课程路线图,有兴趣的看看吧,还是有实际意义的~看不清的可以练习我要xmind的


吐槽一下

温故而知新,这篇文章我是又大改了一次,大改意味着我的认知又提升了一节,这是个好事,也希望大家都能常常有这种感觉

任何微小的进步对于自己来说都是弥足珍贵的,不积小步无以至千里!我以前这是这么认为的,就像玩游戏一样,慢慢咱经验值就行了,的确很长时间内我也是这么做的,但是吧说实话总体提升的确有限,总感觉很多都看过,都认真学过,学的是似而非,很多感觉自己学明白了,也有很多感觉就是学了个懵。自我感觉总是好与实际,用的时候就知道了,用不出来就是还没学会,写着磕磕绊绊能勉强写出来,说明初步学会了,但是缺乏练习,什么时候真的是应用自如,写起代码来不用想那才是学到家了

只是学就这么费劲了,就更别提学习效率了,但是为什么我们身边或者业内就有学习飞快,学的非常好的人呢?我总是问一个为什么,也一直在寻找原因,不同的时候都不同的答案,但是我想我现在的确找到了最终的答案:基础欠缺,学习不成体系,不连贯!

这就是大家学不会,没效率的最总要的原因,当然学习期间手写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性能调优》

知识点精讲:

多线程:


物联网

物联网设备其实就是单片机,开发板那套东西

  • 有基于 FreeRTOS 系统,使用微控制器厂商提供的开发工具开的,这方式需要熟悉 C++ 和 PCB 电路设计,大家可以参考 STM32 开发,FreeRTOS 也是一套系统,也有内核,其实和 Linux 差不多,是他的简化版,但是开发难度高一些,因为 微控制器厂商有好几个,基于单一硬件开发技术栈容易走进死胡同
  • 还有的开发板,单片机可以直接跑 Linux,大家基于 Linux 系统开发,好处 Linux 库要多的多,不过一样需要熟悉 C++
  • 还有 AndroidThings 开发,AndroidThings 是基于 android 精简,添加了相关支持库发展而来,可以让我们使用 android 技术栈来开发物联网 app。AndroidThings 系统的缺点是设备贵,最便宜的也得200的开发板才能跑得起来,像那些非常便宜的物联网设备还是使用 STM32 这种开发方式合适。但是 AndroidThings 对于显示支持非常好,碾压其他物联网 OS,还能使用 java 这种高级语言开发,大大简化开发难度。AndroidThings OS 的特点是整个 OS 只有一个 app,开机直接运行,就是这样,大型智能设备上都是用的 AndroidThings OS

stm32 概念:

stm32全称是意法半导体32位系列微控制器芯片。微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机。微控制器诞生于20世纪70年代中期,经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。例如电机控制、条码阅读器/扫描器、消费类电子、游戏设备、电话、HVAC、楼宇安全与门禁控制、工业控制与自动化和白色家电(洗衣机、微波炉)等

微控制器(即MCU)可从不同方面进行分类:根据数据总线宽度可分为8位、16位和32位机;根据内嵌程序存储器的类别可分为OTP、掩膜、EPROM/EEPROM和闪存Flash;根据指令结构又可分为CISC和RISC微控制器。所以M32即32位微控制器

下面是一些学习资料:


综合技术基础

B站:

书:

  • 《程序员数学3件套》矩阵,机器学习,算法中设计到的数学内容都包括了
  • 《程序员的英语》这是适合有闲的人看,或者打算主攻英文文档的

文章:

掘金小册子:


个人成长

我就方基本书吧,这个推荐书的少:

  • 《大话程序员》
  • 《你好哇,程序员》

面试

这里啥都方,只要是面试的,总有你需要的

B站: