「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。
一个人最怕的不是路途遥远,而是看不到胜利曙光。我希望下面这篇文章能给你的学习之路带来一丝曙光,大家不妨试着读一下吧。
这篇文章主要内容包括(干货满满):
- 学Java有哪些就业方向?
- 数据结构和算法
- 设计模式
- 计算机基础
- Java 入门
- Java 高手进阶
- 基础框架(SSM)
- 微服务框架
- 常用中间件
- 数据库
- 分布式架构
- 必须掌握的工具软件
- 学习资源网站列表汇总
学Java有哪些就业方向?
很多 Java 入门学习者对岗位或者方向的概念非常模糊,今天学安卓、后天学大数据,三心二意的学习势必造成技术不精,这就是面试官通常说的:这位面试者基础比较差。
学习技术首先要认准一个方向专注下去,有了一定积累后再将自己的知识面扩宽,找到自己感兴趣的方向再沉下去学习,周而复始你就成为这个行业的专家了。
Java 这门语言,在公司里根据分工不同衍生出了众多的岗位或者技术方向。
我在 boss 直聘上搜索了 BAT 等大厂的岗位,目前有以下三类岗位非常热门:
(1)安卓开发
技能要求:
- 熟悉 Android UI 开发非常熟悉,对 UI 架构有理解,并了解基础的 UI 交互知识;
- 熟悉 Android 调试工具和方法,可以应付各种 Android 复杂问题;
- 熟悉 Android Framework 层,有通过 Android 源码阅读定位问题的经验;
(2)Java 后端开发
技能要求:
- 具备扎实的Java基础,对JVM原理有扎实的理解;对Spring、MyBatis、Dubbo等开源框架熟悉,并能了解它的原理和机制,具有大型分布式系统设计研发经验;
- 熟悉基于Mysql关系数据库设计和开发、对数据库性能优化有丰富的经验;
- 熟悉底层中间件、分布式技术(如RPC框架、缓存、消息系统等);
(3)大数据/数据仓库
技能要求:
- 熟悉Hadoop/Spark/sqoop/hive/impala/azkaban/kylin等大数据相关组件;
- 精通sql及性能调优,熟练使用java、python、scala其中一种编程语言;
- 掌握数据仓库 (DW) / OLAP /商业智能 (BI) /数据统计理论,并灵活的应用,具备大型数据仓库设计经验;
这里只列举了三类比较热门的技术岗位,希望大家结合自己的经验思考一下方向。
数据结构和算法
学什么?
有些同学可能要问了:我学 Java 的有必要学习算法吗?答案是:别无选择
!
国内互联网面试的流程逐渐在向国外靠拢,像字节跳动、BAT 等大厂,手撕算法题
已经成为了必选动作。
确实, Java 相对于 C、C++有着丰富的类库和三方框架,进入工作后大部分人都是在写业务代码,俗称 API boy 或者 Crud boy,算法看起来并不是那么重要,但是考算法真的是公司面试筛选人的低成本办法,如果你写出了算法并且通过了,要么你聪明要么你勤奋(刷题了)。
所以不管你是学什么语言:C、C++、python、Java、GO,算法这一关你必须得过。数据结构和算法的面试核心知识点我已经列出来了,大家可以参考学习,逐个击破。
- 栈与队列:先进先出、后进先出
- 线性链表
- 查找:顺序查找、二分查找
- 排序:交换类、插入类、选择类
- 树、二叉树、图:深度优先(DFS)、广度优先(BFS)
- 递归
- 分治
- 滑窗
- 三大牛逼算法:回溯、贪心、动态规划(DP)
怎么学?
最好或者最笨的方法就是刷题,强烈推荐力扣:leetcode-cn.com建议刷300题以上,要覆盖简单、中等、困难的题目。面试前要训练手感,不要生疏了,可以选保持每日或几日一题。
在刷题之前我建议你看一些书:
《漫画算法-小灰的算法之旅》
《算法导论》
如果你觉得看书比较枯燥,可以推荐你看一些极客时间的专栏,不过是收费,但是质量非常高。
这个专栏是文字+语音,作者是王争,前 Google 工程师。他采用最适合工程师的学习方式,不拘泥于某一特定编程语言,从实际开发场景出发,由浅入深教你学习数据结构与算法的方法,帮你搞懂基本概念和核心理论,深入理解算法精髓,帮你提升使用数据结构和算法思维解决问题的能力。
这个专栏是视频,作者是覃超,前Facebook工程师。作者会用白板带你一步一步解题,层层深入一环扣一环,每一题还会用多种解题方法。我基本看完了,收获颇多。
相关资料
【算法图解】该书语言风趣,有比较多的插图,入门很合适。电子书籍网盘链接如下:
提取码:g5vz
《剑指 offer》 和 《编程之美》 这两本书也可以看一下,对于算法面试非常有帮助。
下载地址:
提取码:rz4w
设计模式
学什么?
所以不管是学武功还是学编码,都是有一些固定的招式,也就是设计模式。
说到设计模式
很多同学可能会跳出来:这个我知道,就是单例模式、工厂模式……
巴拉巴拉说了一堆,但是真正在写代码的时候又是一脸蒙:为什么我写的代码用不到设计模式?究其原因是你的代码经验不够。
想一下设计模式是怎么来的?上个世纪四个大男人搞了一个组合叫 GoF,并出版了一本书,这本书共收录了23种设计模式,后面逐渐被人熟知。这四个人从大量的代码实践中总结了一套方法论(写代码的套路),而我们作为一个在学校的学生或者刚工作的新人,可能连代码都写的少,怎么可能轻松快速地掌握这么多设计模式。
所以说你学完了设计模式,但是还不会运用到日常的代码实践中,这个是很正常的,因为代码经验还不够。
那还学不学?当然要学,因为面试的时候有可能会问到。设计模式的理论知识我们还是要打好基础,需要掌握这些知识点:
- 设计模式的六大原则:单一职责、里氏替换、依赖倒置、接口隔离、迪米特法则、开闭原则
- UML 基础知识
- 设计模式三大分类:创建型、结构型、行为型
- 常用设计模式基本原理
经典设计模式总共有23种(现在远不止23种了,还有一些变种),全部掌握难度太大了,我们只需要掌握一些常用的就好了,必须要掌握的我用小红旗已经标出来了。
怎么学?
网上关于设计模式的学习资料非常多,质量也是参差不齐,大家找的时候可要擦亮眼睛。
在看书之前我还是推荐你熟悉一下 UML 的理论知识,因为你如果不懂 UML 那任何一本设计模式的书你都可能读不下去, UML 是设计模式的前提。
UML 学习网站:
不要花太多时间学习 UML,简单理解入门即可。
假设你已经入门 UML 了,那下面的这些书你可以考虑学习一下了:
《Head First 设计模式》
《大话设计模式》
《图解设计模式》
《设计模式-可复用面向对象软件的基础》
这几本书都要看吗?当然不是,如果你是在准备面试,我个人建议是读其中一本就够了。至于说看哪一本,你可以找对应的电子书,挑一个章节试读一下,符合你的胃口就选择这一本继续读下去。
如果你已经有几年的编码经验,又想把代码写好,建议你多挑基本读读,吸收每本书的精华。
相关资料
这里我推荐小傅哥《重学 Java 设计模式》,我看完了,写的非常通俗易懂,pdf和源码我都下载了,可以从我的百度云盘下载:
链接:
https://pan.baidu.com/s/1bMri7SgHPkwnyy1AzYSjMw
提取码:
bdbu
计算机基础
(1)计算机网络
学什么?
计算网络的协议非常非常多,很多同学学完都一头雾水,或者仅仅懂一点 HTTP,但是真正要掌握的东西可不少:
- OSI 七层模型、TCP/IP五层模型
- 常见网络协议:HTTP、TCP/IP、UDP
- 网络安全:非对称加密、数字签名、数字证书
- 网络攻击:DDOS、XSS、CSRF 跨域攻击
怎么学?
计算机网络面试有一道非常经典的面试题:说说你从URL输入到最终页面展现的过程。这一题可以覆盖大部分计网的知识点,可以从 DNS 解析到 HTTP、TCP/IP协议、物理层协议,一直到浏览器渲染页面,你技术功底有多深你就可以聊多深。希望大家学完了也能试着回答一下这个问题。
推荐几本倍受好评的书:
《网络是怎么连接的》
《图解 HTTP》
《TCP/IP详解卷1:协议》
相关资料
《网络是怎样连接的》 和 《图解 HTTP》 下载地址:
提取码:76ha
不喜欢看书的,下面也有一些好的视频资源:
- 计算机网络微课堂(有字幕无背景音乐版)(陆续更新中......)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
- 2019 王道考研 计算机网络_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
- 韩立刚计算机网络 谢希仁 第7版 2020年12月_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
- 计算机网络(谢希仁第七版)-方老师_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
(2)操作系统
学什么?
作为一名 Javaer 在平时的工作中可能不会直接跟操作系统打交道,因为 JVM 帮我们屏蔽了众多差异。但是要想学好 JVM,懂一点操作系统更有助于你深刻理解 JVM 工作原理。
Java 学习者这部分的要求可以稍微放低,但是你如果是搞 C++的,那这部分可是你的重点。
- 进程和线程的区别
- 进程间的通信方式:共享内存、管道、消息
- 内存管理、虚拟内存
- 死锁检测和避免
怎么学?
想要精通操作系统难度非常大,但是在面试中你要能讲出一些具体的操作系统知识,面试官会对你刮目相看。
相关资料
推荐一些视频学习资料:
推荐书籍资料:
《深入理解计算机系统 CSAPP》
赫赫有名的 CSAPP,全称:Computer Systems:A Programmer‘s Perspective。科班同学的圣经,哈哈,黑色大部头书籍,难啃。
【深入理解计算机系统】电子书籍百度云盘链接如下:
提取码:xh99
Java 入门
学什么?
Java 语言从诞生到现在已经有20多年了,从Tiobe排行榜上来看,Java 语言常年霸榜经久不衰,所以不要怕学完 Java 后突然不流行了,至少这几年Java 就业机会非常多。
如果你有其他语言的基础,比如之前学过 C、C++等,那学起 Java 应该是非常容易的,也容易上手。如果你没有语言基础,又不想了解太底层的东西,那学 Java 还是不错的。至于说 python,光从语言层面上看,python 确实非常简单,估计你一周内就可以学会并且代码写的还不错,但是 Java 不一样,一周你只能简单了解一下语法,想写好代码几乎不可能。另外 Go 语言势头很猛,大家也可以关注一下。
一般来说 Java 入门你需要掌握下面这些知识点:
- 面向过程 VS 面向对象
- 面向对象基本特征:封装、继承、多态
- 访问控制符:private、default、protected、public
- 数据类型:基本类型、引用类型
- 控制流程:for、while、switch 等
- 序列化
- 异常处理(有点难度)
- 泛型(有点难度)
怎么学?
如果你是零基础,建议你可以找一些 Java 入门的视频看一下,网上视频鱼龙混杂,大家注意甄别。推荐一个比较好的平台:B 站(www.bilibili.com/) 不是让你去看二次元的,里面有很多学习资源。(嘿哈)
看书是一种高效的自我学习方式,推荐基本比较好的书:
《Java 核心技术卷I》
《阿里巴巴 Java 开发手册》
《Java 编程思想(Thinking In Java)》
相关资料
对于Java开发刚入门的同学,可以看看下面的这本书,还是很不错的。
提取码:ishy
《Head First Java》和《Java 核心技术卷 1/2》下载地址:
提取码:ku9m
Java 高手进阶
学什么?
恭喜你终于Java 入门了,大牛和菜鸟的区别在于菜鸟永远止步于入门水平,而大牛已经找到新大陆了,翻过这几座山你离高手就不远了。
Java 高手进阶需要掌握的东西非常非常多,这里列举一些核心知识点,必须全部掌握的。这是 Java 面试高频考点,也是传说中 Java 八股文的一部分,面好了进入下一面,面不好回家等消息。
- Java 集合类源码
- 线程池
- Java 代理
- IO 模型
- JVM
- Java 并发编程(JUC)
怎么学?
Java 已经入门了,你都想进阶了,建议你不要再找视频看了,一边看书一边思考吧。
《Effective Java》
《Java8 实战》
《深入理解 Java 虚拟机 第3版》
《Java 并发编程的艺术》
上面推荐的几本书可能不太容易读懂,建议多读几遍。书中看不懂的地方可以在网上搜,多找一些优质的博客或者公众号看。
至此 Java 语言特性基本学习完了,就算达不到高手的水平,你也在正轨上了。
相关资料
《Java高并发编程详解》 和 《Java并发编程实践》 下载地址:
提取码:xuul
基础框架(SSM)
学什么?
学习 Java 语言特性可能比较枯燥,接下来可以学习基础框架动手做一些项目,比如 Java 领域非常流行的 Spring 框架,这就是为 Java 后端量身定做的,非常好用。
在 spring 流行之前,还出现 Struts 这样流行的框架,后面由于种种原因还是被 Spring 打败了。
大家在网上应该可以经常看到 SSM 的缩写,其实就是Spring+SpringMVC+MyBatis的缩写了。
你需要掌握以下这些:
- Spring 全家桶(Spring、Spring MVC、Spring Boot)使用
- ORM 框架(MyBatis、Hibernate)使用
- Spring 原理
- ORM 框架原理
怎么学?
学习 SSM 框架最好是动手完成一个简单的项目,建议跟着视频并且把代码敲出来,一来熟悉项目的开发流程,也可以给自己带来成就感。
有很多新手在做项目的时候非常纠结界面,作为一个 Java 后端程序员,你又不是全栈开发,纠结这个干什么,我的建议:要么不要界面只写接口,要么自己动手写点 html,不需要美观,实现功能即可。
跟着视频做完项目之后需要干什么?答案是:深入理解框架原理
。会用框架并不代表你懂框架,作为一个有追求的程序员,懂原理是永远的必修课,谁让这一行太卷了呢,人无你有你最棒。
推荐几本书:
《Spring 基础内幕》
《MyBatis 技术内幕》
关于基础框架这部分,大神们的学习方法是:使用框架 -> 懂框架 -> 造轮子。
相关资料
《Spring技术内幕》和《Spring实战》下载地址:
提取码:zc3z
微服务框架
学什么?
近些年微服务架构非常火,究其原因是因为传统的单体架构和面向服务的架构逐渐不能满足互联网快速迭代的需求。微服务可以更容易提供持续继承和持续部署的能力,让产品更快速交付推向市场。
面向服务的架构其实在五六年前就已经提出,期间经过了一段低潮期,泡沫散去后逐渐浮现了一些好用的框架,国外以 SpringCloud 为代表,国内以 Dubbo 为代表。
springCloud 和 Dubbo 有区别但是很多基本原理也是类似,大家学习的时候需要掌握技术的本质。下面列举一些核心知识点:
- Dubbo框架
- SpringCloud框架
- 服务注册与发现
- 分布式服务链路追踪
- 服务隔离、熔断、降级
- 服务网关
怎么学?
springCloud 和 Dubbo 在官网都有很详细的介绍文档:
- Dubbo官网 dubbo.apache.org/ 可以切到中文版
- SpringCloud 官网 spring.io/projects/sp…
看官网技术文档大家可能会很懵,但这些确实是最权威的资料,也是一手的。
SpringCloud 和 Dubbo 是这几年刚刚流行的技术,从目前看来相关书籍还是比较少,也缺少一些经典的书,我还是列几本,大家按需获取。
《深入理解Apache Dubbo与实战》
《Spring Cloud微服务实战》
如果技术网站和书籍还不能满足你,建议你去搜一些视频学习。推荐搜索平台:B 站、慕课网、网易云课堂。
常用中间件
学什么?
最终用户并不直接使用中间件
,换言之中间件
不是大众消费类软件产品。但是在大公司里中间件是不可或缺的,它是支撑大型网站架构的一些基础的组件和服务,所以非常非常有必要学。
业界开源的优秀中间件非常多,通常会根据业务的需要在系统中引入若干,下面列举了一些常见的,都是必学的,非可选哈。
- 缓存:Redis、Memcached( 推荐 Redis)
- 消息队列:Kafka、RocketMQ、RabbitMQ、ActiveMQ、ZeroMQ(推荐 Kafka)
- 数据库中间件:ShardingSpere、Mycat
怎么学?
每个中间件涵盖的内容都非常多,要想学精需要大量时间。
Redis 中文官方网站:
当做字典学习 redis 常见命令
Kafka 官网:
ShardingSpere 官网:
shardingsphere.apache.org/index_zh.ht…
Mycat 权威指南在线 PDF 版:
推荐几本相关的书:
《Redis 设计与实现》
《深入理解Kafka:核心设计与实践原理》
《分布式数据库架构及企业实践——基于Mycat中间件》
书看完了你还想深入学习,建议大家关注一下极客时间的两门课:
不过课程是付费的,手头紧的建议慎重哈。免费资源网上也有,靠大家搜索了~
中间件的学习是一个漫长的过程,不仅需要很多理论知识还需要实践经验。
比如你学 Redis 的时候,要思考五种基本数据类型各自使用场景、布隆过滤器是什么原理、用 Redis 怎么实现分布式锁,带着问题去学习效率非常高。
比如你学 Kafka 消息队列,要对比常见消息队列的优缺点、Kafka 为什么吞吐量高、Kafka 会不会丢消息以及怎么解决。
比如你学数据库中间件,要想数据库为什么要分库分表、分库分表 ID 如果处理等等。
数据库
学什么?
数据库非常重要,面试也是必考的,可以考的点非常多,可以考得很浅:问一下 SQL 使用,也可以考的很深:问索引和锁的实现原理。下面列了一些常见的知识点。
- 数据库基本理论:范式、索引原理、数据库引擎
- SQL 基本语法
- SQL 调优,explain 执行计划
- 数据库事务(ACID)
- 数据库锁:乐观锁、悲观锁、表锁、行锁等
怎么学?
建议数据库零基础的同学还是要先学习一下数据库的基本理论,因为我看到很多人都是一上来就学 SQL ,最终也只是会用而已,到后面 SQL 调优的时候就很迷茫了。如果你只是想用一用数据库,这部分也可以跳过。
关于原理部分有一本非常经典的教材《数据库系统概念》以供学习,经典书籍一般都比较难啃坑也比较厚,建议大家先看目录,挑重点看。大学学过这本书的可以直接跳过了。
有了一些理论后就可以开始学习 SQL 语法了,这里推荐一本《MySQL 必知必会》,一边看书一边对着电脑敲。
当然面试大厂肯定会问一下比较难的东西,你需要搞懂索引的原理、事务 ACID、锁,问数据库这些东西必考哦!
MySQL 学习书籍清单:
《数据库系统概念》
《MySQL必知必会》
《MySQL技术内幕 : InnoDB存储引擎》
相关资料
推荐书籍 《MySQL 必知必会》 和 《高性能MySQL》 。
下载地址:
提取码:fjyf
下面这个是我自己收藏的关于MYSQL的一个视频,我感觉还是挺不错的,感兴趣的可以看看。
提取码:e8vg
分布式架构
学什么?
分布式这一部分就是面试的加分项了,答好了面试官会觉得你技术功底深厚,答不好,只要你前面的基础还不错也能过。所以呢,作为一个有追求的技术人,千万不要放过加分的机会。
分布式相关的内容非常多,下面列举几个在项目中或者面试中经常会遇到的知识点:
- 分布式事务:两阶段提交(2PC)、补偿事务(TCC)
- 分布式锁:基于关系型数据库(MySQL)、基于 Redis、基于Zookeeper
- 分布式 ID:雪花算法(Snowflake)、美团 Leaf
怎么学?
这部分内容学好非常难,在很多书中都是轻轻带过,没有深入讲解原理,所以就不推荐书了。
那怎么学呢?小编我也还在学习当中,最好的还是有项目来锻炼,之后会更新,敬请期待~
必须掌握的工具软件
工欲善其事,必先利其器。作为一个 Java 开发人员,你需要学习业界常用的软件,软件工具用得越熟你的编码效率越高,下班的时间可能越早(打工人太难了)。
- Java 最聪明的 IDE:IntelliJ IDEA (请放弃使用 Eclipse,我有一堆理由睡服你)
- 地球上最好用的版本管理工具:Git
- 经久不衰的依赖管理工具:Maven
- Docker
这些软件你要是用不好,那只能说明…… 你再多学学吧。
学习资源网站列表汇总
(1)视频网站
- B站(推荐):www.bilibili.com/
- 网易云课堂:study.163.com/
- 极客学院:www.jikexueyuan.com/
- 慕课网:www.imooc.com/
(2)专栏
- 极客时间(推荐):time.geekbang.org/
- Gitchat gitbook.cn/
(3)Github
- Java 知识地图(推荐):github.com/smileArchit…
(4)技术博客:
- CSDN 博客:blog.csdn.net/
- 博客园:www.cnblogs.com/
- 掘金社区(推荐):juejin.cn/
- InfoQ:xie.infoq.cn/
- 思否:segmentfault.com/
- 开源中国:www.oschina.net/blog
(5)搜索引擎:
(6)知识问答:
- 知乎(推荐):www.zhihu.com/
- stackoverflow(推荐):stackoverflow.com/
(7)刷题:
- 力扣(推荐):leetcode-cn.com/
- 牛客:www.nowcoder.com/
(8)云笔记:
- 石墨:shimo.im/
- 语雀:www.yuque.com/
- 有道云笔记:note.youdao.com/
- 印象笔记:www.yinxiang.com/ 看个人习惯去选择,不推荐了。
(9)在线画图:
- processOn:www.processon.com/
- drawio:app.diagrams.net/ 各有特色,都推荐。
小结
我觉得学习一门新的知识,最优的学习路径应该是这样的:
- 官网(大概率是英文,不推荐初学者看) 。
- 书籍(知识更加系统完全,推荐) 。
- 视频(比较容易理解,推荐,B站上有很多学习视频,大概率能找到你想要的学习视频) 。
- 网上博客(解决某一知识点的问题的时候可以看看) 。
相信你看到这,大概能理解为什么程序员的工资会这么高了,因为要学的东西确实很多,而且技术更新还很快,需要不断学习新的东西,但是也别慌,只要你合理安排自己的时间,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。这样你学习起来就会有侧重点,效率也会提升很多。
以上的大部分基本前辈们都已经总结过了,我也还有很多东西要学,我们一起努力吧~
看到这里了,记得点赞、关注加收藏哟!!!