外国开发者都知道的Android-筑基导论,程序员必看

基础不稳,地动山摇!

好比我们学习数学,大家都是先学:

  • 阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理

从小我们学习,在学校里就是从难到深,那为啥放到软件领域,编程行业,我们就忘了呢,大家总是着眼于最顶层的东西,总也看不到技术基础在哪里呼喊你赶紧关注它 ┻━┻︵╰(‵□′)╯︵┻━┻

我们平时用的开源框架/库,这些都是软件领域最终的成品了,就好比是数学中的公式定理,小白学习这些源码就是一个剥开公式定理外皮一层层深入的过程,随着学习的深入,这过程是这样的:

  • 公式定理 -> 方程式 -> 九九乘法表 -> 乘除法 -> 加减法 -> 数学符号 -> 阿拉伯数字

这个过程就是我上面说的反向学习,在没完全成熟、完善的、从头到位的学习课程的技术领域,这个逆向的过程是不可避免的,但是我们必须知道这种逆向学习有多大威海

  • 当你越多很多技术文章,你忽然发展了一个技术点,这个好比你看到了一个新的公式定理
  • 你打算深入去学习其中实现原理提升自己水平,那会发现这里需要方程式方面的知识,但是方程式方面的知识我没学过,也不了解,我也不知道有多少知识点,于是我阅读大量文章,囫囵吐枣的把2元1次方程式学会了,但我其实不知道还有3元1次方程式、3元2次方程式,所以我看着很费劲、费解,总觉得自己能力不行,殊不知其实这里除了2元1次方程式,还需要3元1次方程式的知识点
  • 当我历经千险终于把2元1次方程式、3元1次方程式的技能树都点开了,我想再深入的看一下,我突然发展还有一个九九乘法表的东西,还好这个东西比较好学,有规律,知识点都在一起很好学
  • 但是在我高兴的时候,我发现九九乘法表里还有大量的各种符号和简单的计算公式,但是这些我都不了解哎,于是我一个个对着查找baidu,又是一阵血雨腥风,终于,半斤八两的我终于可以能勉强看懂这个符号和公式了
  • 但是最终我有对这些数字产生兴趣了,没办法也不是我想看的,是因为大家都说面试要问,没办法只能硬着头发花时间查资料去看

以上就是反推式学习的过程,很多时候我们的确能研究到及其指令这一层,但是当我们翻回头,我很难把这些知识点全部串起来搞清晰,最多我只能比较清晰的明白部分,这就是大多数人学习的常态:耗费大量时间,总也学不明白,学不通透

但是大家再看,阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理这些东西就是基础知识啊,当我们把这些基础知识都掌握了(网络编程、设计模式、操作系统),你再去看这些框架, 你就会时不时大声呼喊:原来是这样啊,我get到了,也没有太复杂啊,我都大概都串起来了

学习基础知识还有一个非常NB的地方,就是当你把基础知识都搞定的时候,一定形成自己的一套行之有效的学习方法,这会让今后的学习、工作路程走上快车道

具体到 Android 学习

总听别人说基础、基础、底层、底层的,啥是基础,啥是底层?根据我近3年的经验来看,所谓的基础、底层就是完整的大学课程 ->

  • C/C++
  • 计算机导论
  • 计算机组成/微机原理
  • 操作系统
  • 网络编程
  • 数据结构
  • 设计模式
  • 多线程

加上语言、平台基础(JAVA 、Android) ->

  • JVM
  • 反射
  • 泛型
  • 注解、AOP、APT、JIT
  • Android 操作系统

学习是有顺序的,至少我经过亲身学习后,大概摸索出一个适合的大多数人的学习路径:

  1. C/C++ 一定要先看这个,也不用看多深,知道语法,能看懂代码,能在 Android 上写 .cpp 文件,能跑起来就行
  2. 计算机导论 看看这个,大多数人对于计算机整个结构都不清楚,好的计算机导论内容很全,会把计算机组成的部分也笼统的介绍一边,要是对硬件没什么兴趣,计算机组成/微机原理 可以略过,有计算机导论部分介绍的硬件知识就够了
  3. 操作系统 就是学 Linux 操作系统,这个很重要,后面的内容随随便便、不经意间都会涉及到操作系统的
  4. 数据结构设计模式 这2部分学习没有前后,没时间的同学数据结构可以放放,不影响后面学习
  5. 网络编程 这个算是基础部分最后的点了,但是非常重要,一定要学清楚、学明白
  6. 多线程 不用说了吧,
  7. JVM 深化对 JAVA 的理解,最好的方式就是把 JVM 从头到位的学习一遍,到这里你就能体会到学习操作系统带给我们的感受,java 就是对 C 的简化,JVM 就是用C++写的,java 的一切都是跑在C上的
  8. 反射泛型 这2个是很多人都欠缺的,一定要会,Android 的黑科技哪个离得开反射了
  9. 注解、AOP、APT、JIT 这部分从注解开始会连带很多东西,这部分是所有 Android 开源框架/库的基础,请好好学习,黑科技也不离不开它
  10. Android 操作系统 最后就是这个了,学过 操作系统 这里就不会再出现学不明白了的问题了,其实有操作系统知识打底,Android 操作系统好理解多了,没有多少难理解的点了

带着上述学习成果,再去学习 Android 应用层的东西,你会发展,学习原来是这样爽啊,看一个会一个,看一个明白一个,看每一都能理解通透,爽死了 ヾ(≧O≦)〃嗷~

学习资料:

这其中很多还没整理或者还没看完,大家见谅,我长期更新,肯定会把学习资料这块都写全的,并且这些资料都是我亲身学习、品鉴过的,保证质量,保证小白都能看懂,我的资料就是给小白准备的,因为我自己就是小白 (ノへ ̄、),干了好几年了,还是小白,感觉对不起社会的栽培啊,没办法我是跨界过来的,可不是科班出身

本文重在思想,资料不全不要开喷,也欢迎大家给我补全资料

C/C++

暂时空缺

计算机导论

视频:

  • 计算机科学速成课 40集全/精校
    这个是最好的计算机入门课程了,内容之丰富远超3本书,国外科普视频,这套视频享誉全球,内容精炼,绝对没有废话,看不懂的同学请多看几遍,我学习这块也是反复看了有4.5遍,绝对推荐 ♪(*)

操作系统

视频:

  • 南京森林警察学院-杨老师的Linxu课程博文:
  • android 筑基 - 操作系统(1)

我就是看杨老师视频把整个 linux 系统看明白的,内容质量非常高,一反大学课程啰嗦、混乱的常态,讲的就是干练、明白,然后大家结合我做的笔记博文,这块就没问题了~

数据结构

还没看

设计模式

待整理

网络编程

完成部分:

博文:

  • android 筑基 - 网络编程基础

多线程

待整理,这里东西太多,我要好好整理下

JVM

视频:

  • 尚硅谷-2020最新版 Java虚拟机从入门到精通【全203集】

博文:

  • 再看 JVM(1)
  • 再看 JVM(2)
  • JVM 面试题【初级】
  • JVM 面试题【中级】
  • JVM 面试题【高级】
  • JVM 角度看代码优化

尚硅谷的这套JVM视频我去实在太好了,JVM所有的点都说到了,203集,40+小时,值得你耗费时间去学习,看完之后,JVM不再迷茫

反射泛型

待写

注解、AOP、APT、JIT

还没看完

Android 操作系统

还没看完

代码封装、优雅

这块就是推荐大家看书了,系统的去看优雅的代码都基于哪些考虑

  • 《JAVA 开发手册-嵩山版》
  • 《代码整洁之道》
  • 《代码质量》
  • 《重构与模式》
  • 《企业应用架构模式》
  • 《大话设计模式》

最后

最后了我再抒发下感想~

前路明显,努力学就行了

技术这条路相对其他行业是最好走的一条路了,起薪高,不需要人脉,仅凭自己努力就能走的很高,只要不退缩,前路是明显可见的,就在那摆着呢。只要一路勇往直前,不给自己留退路,稳扎稳打你一定会比从事别的行业强

这行很干净

程序员的世界虽然也有996,007这样的残酷,但是相比别的行业这个行业太干净了,我之前是做港口物流的,也自己卖过水果、蔬菜,我见过太多的黑暗、剥削、残酷、无情、擦边球、不法、勾结… 心累了,就干程序员这行来了 ( _ _)ノ|

学习淂有章法

每个行业都有自己的学习脉络,程序员这行的学习脉络就是上学的那套,从基础开始一点点积累,就是这样,切忌胡乱学习浪费了宝贵的时间

为啥有的大厂校招进来的会有导师带,就是怕你自己长歪了~

学习就是一个拼图的过程,即时你把拼图都点开了,你也淂去找拼图之间淂顺序,才能得到最终淂景象,这是个非常耗时的事,没有前辈指导自己胡来是铁定要废的,只要有正确的指导,每个人都可以成为大神,这一点我是体会出来了

积累不光有面,还得有深度

看过马士兵老师的公开课,马老师说,硅谷那边面试只考2样:算法和系统设计

  • 算法代表技术深度,算法NB的人,技术基础一定好,至少美国人学习路线的就是这样,算法好的基础都好,当然投机取巧的中国人除外
  • 系统设计代表全局能力,综合应用能力,一般会通过项目来考你

软件编程这行最终就是个理论结合实践的过程,基础能力和经验同等重要,也是我们要追寻的东西

再次强调下基础知识的重要

上层知识、应用很复杂,特别丰富,各种标签、技术,各种换来换去。但是底层知识其实很少,就是我说的上面那些,学会了你就会了,你基础就扎实了,就是这么简单明了的事

底层的知识你会了,就不怕面试官刨根问底了。面试管问你 netty、redis、kafka、es、nginx,你都可以聊 mmap、select、epoll 这些底层的东西,这些都来自于系统的内核调用

大多人能是站在上层回答的,NB的面试官想听的不是这些,这些人所共知,他们觉得你肯定会,你也没必要回答太过表面的东西,他们想听见就是你从底层说起,接个技术做概括性描述

巧的是现在行业里,底层基础扎实的人实在太少了,你会了优势是很大的,不仅仅面试有用,平时学习应用也是受益匪浅~

形成适合自己的学习方法

技术是学不完的,我们在学习的过程中,必须形成一套自己的学习方法。我的方法就是从基础开始,务求学习系统,有遗漏再补充,追求知识点之间的融会贯通。通过写博客的方式,分享出来,有时大佬们也会交流一下,支持问题或是鼓励鼓励,这样对于学习非常有效,我最求的是极致的效率,适合跨界过来的小白们

程序员分级

这是看B站心静思远-9527同学说的,感觉get到点了,希望大家体会下:

  • 初级程序员
    • 面向功能实现 那代码烂的糟糕,只要业务能跑通
    • 代码不封装 相同、近似的代码哪里都是,一改起来哪个费劲啊,满世界找
    • 抄百度,抄同事,不敢自己写,不敢有自己的想法
    • 面向百度编程

面试复习笔记

这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。
节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

《960页Android开发笔记》

《1307页Android开发面试宝典》

包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。


nU-1631106106600)]

《507页Android开发相关源码解析》

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

[外链图片转存中…(img-OhwXWytq-1631106106602)]

你可能感兴趣的:(Android,android,面试,移动开发)