序言
大三的这时候,我实际上碰触过 C 词汇,对 C 词汇的掌握程度实际上是能完成老师精心设计的课外解题。那这时候我的主要的心力都放在了参加各种社团组织活动,跟着一个很极好的社团组织试著了许多我之前未曾试著过的事情:野餐、室外露天、出租车演说、环跑城垣、远足、跨县冒险、圣诞卖苹果公司等等。
到了大三我才碰触到 HTML、CSS、JS、Java、Linux、PHP 这些术语。最已经开始碰触 Java 的这时候因为工作的须要我选择的Android路径,我他们是在自学了大概 3 个月的Android路径的知识后才转向 Java 前台路径的。最已经开始他们自学的这时候,走了一些急弯,但是总体走线相对而言还是没难题的。我读的第一篇 Java Web 方向的书刊是《Java Web 整合开发战神启航》,这两本我那时已经不所推荐别人看了,一是内容太粗陋,二是年代较为盛于导致许多东西在那时都不适用了。
许多人在修完 Java 此基础之后,不晓得后面该怎样展开下一步地展开自学,或是不晓得怎样去自学。怎样深入细致自学 Java 一直是所苦着许多初学者或是期待在 Java 路径高阶的爸爸妈妈的一个难题。我也在chan上回答了三四个类似的难题,我真的既然许多人都须要这点的
由于我对个人能力有限,上面的自学路线和方式所推荐一定还有许多缺乏的地方。热烈欢迎有想法的好友在文章区说一下他们的看法。责任编辑适合刚高阶或是刚高阶不久的好友,较为此基础。
自学走线和方式所推荐
上面的自学走线和方式是笔主根据对个人自学经历总结改进后得出结论,我相信照著这条自学走线来你的自学工作效率会非常高。Java 自学必不可少书刊所推荐Sigarette!。提议采用 Intellij IDEA 展开代码,能原则上抽空自学 Intellij IDEA 的采用。
step 1:Java 此基础
《Java 关键技术卷 1/2》 和 《Head First Java》 这两两本事实证明都是高阶 Java 的很极好的书刊 (《Java 关键技术卷 1/2》 解题更全,我更所推荐这两本),我倒是真的《Java 程式设计思想》有点儿属于初学者扫地出门书的意思,慎看,提议有点儿此基础后再看。你也能边看视频边看书自学(黑马、尚硅谷、慕课网的视频都还行)。对于 Java8 新特性的东西,我提议你此基础学好之后能看一下,暂时看不太明白也没关系,后面抽空再回过头来看。
看完之后,你能用他们学的东西实现一个简单的 Java 程序,也能试著用 Java 解决一些程式设计难题,以此来将他们学到的东西付诸于实践。
记得多总结!打好此基础!把他们重要的东西都记录下来。API 文档放在他们能看到的地方,以备他们能随时查阅。为了能让他们写出更优秀的代码,《Effective Java》、《重构》 这两两本没事也能看看。
自修完之后能看一下关于 Java 此基础你不得不会的 34 个难题,检测一下他们的掌握情况,这 34 个难题都时 Java 中较为重要的解题,最重要的是在 Java 后端面试中的出场率非常高。
step 2:多线程的简单采用
多线程这部分内容可能会较为难以理解和上手,前期能先简单地了解一下此基础,到了后面有心力和能力后再回来仔细看。所推荐《Java 并发程式设计之美》 或是 《实战 Java 高并发程序设计》这两两本。我目前也在重构一份我之前写的多线程自学指南,后面会更新在
自修完多线程之后能通过上面这些难题检测他们是否掌握,上面这些难题的答案和常见多线程解题的总结 在这里:https://github.com/Snailclimb/JavaGuide。
Java 多线程知识此基础:
什么是线程和进程?
请简要描述线程与进程的关系,区别及优缺点?
说说并发与并行的区别?
为什么要采用多线程呢?
采用多线程可能带来什么难题?
说说线程的生命周期和状态?
什么是上下文切换?
什么是线程死锁?怎样避免死锁?
说说 sleep() 方式和 wait() 方式区别和共同点?
为什么我们调用 start() 方式时会执行 run() 方式,为什么我们不能直接调用 run() 方式?
Java 多线程知识高阶:
synchronized 关键字:①说一说他们对于 synchronized 关键字的了解;②说说他们是怎么采用 synchronized 关键字,在项目中用到了吗;③讲一下 synchronized 关键字的底层原理;④说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,能详细介绍一下这些优化吗;⑤谈谈 synchronized 和 ReentrantLock 的区别。
volatile 关键字: ①讲一下 Java 内存模型;②说说 synchronized 关键字和 volatile 关键字的区别。
ThreadLocal:①简介;② 原理;③ 内存泄露难题。
线程池:①为什么要用线程池?;②实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方式和 submit() 方式的区别是什么呢?;④ 如何创建线程池。
Atomic 原子类: ①介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的采用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。
AQS :①简介;②原理;③ AQS 常用组件。
step 3(可选):操作系统与计算机网络
操作系统这点我真的掌握操作系统的此基础知识和 Linux 的常用命令就行和一些重要概念就行了。
我没啥操作系统方面的书刊能所推荐,我所推荐一个 Github 上开源的哈工大《操作系统》课程给大家吧!地址:https://github.com/hoverwinter/HIT-OSLab 。
对于 Linux 我们要掌握基本的采用就须要对一些常用命令非常熟悉比如:目录切换命令、目录操作命令、文件的操作命令、压缩或是解压文件的命令等等。
计算机网络方面的自学,我真的掌握基本的知识就行了,不须要太深究,一般面试对这点要求也不高,毕竟不是专门做网络的。所推荐《网络是怎样连接的》 、《图解 HTTP》 这两两本来看,这两两本都属于较为有趣易懂的类型,也适合没有此基础的人来看。
step 4(可选):数据结构与算法
如果你想进入大厂的话,我所推荐你在自修完 Java 此基础或是多线程之后,就已经开始每天抽出一点时间来自学算法和数据结构。为了提高他们的程式设计能力,你也能坚持刷 Leetcode。就目前国内外的大厂面试来说,刷 Leetcode 能说已经成了不得不走的一条路。
对于想要高阶算法和数据结构的好友,提议看这两两本 《算法图解》 和 《大话数据结构》,这两两本虽然算不上很经典的书刊,但是较为有趣,对于刚高阶算法和数据结构的好友非常友好。《算法导论》 非常经典,但是对于刚高阶的就不那么友好了。
另外,还有一本非常赞的算法书所推荐给各位,这两本的名字就叫《算法》,书中的代码都是用 Java 词汇编写。这两本的优点太多太多比如它的讲解此基础而全面、对阅读者较为友好等等。我真的这两本唯一的缺点就是太厚了 (小声 BB,可能和作者讲解某些解题的这时候优点啰嗦有关)。除了这两本之外,《剑指 offer》 、《程式设计珠玑》 、《编程之美》 这三两本都被许多大佬所推荐过了,对于算法面试非常有帮助。《算法之美》 这两本也非常极好,非常适合闲暇的这时候看。其他算法资源,详见算法自学资源所推荐:https://github.com/Snailclimb/JavaGuide/blob/master/docs/dataStructures-algorithms/算法自学资源所推荐.md。
step 5:前端知识
这一步主要是自学前端此基础 (HTML、CSS、JavaScript),当然 BootStrap、VUE 等等前端框架你也能了解一下。网上有许多这点资源,我只所推荐一个大部分初学这些知识都会看的网站:http://www.w3school.com.cn/,这个网站用来回顾知识也很极好 。所推荐先把 HTML、CSS、JS 的此基础知识过一遍,然后通过一个实际的前端项目来巩固。
step 5:MySQL
自学 MySQL 的基本采用,基本的增删改查,SQL 命令,索引、存储过程这些都学一下吧!所推荐书刊《SQL 此基础教程(第 2 版)》(高阶级)、《高性能 MySQL : 第 3 版》(高阶)、《MySQL 必知必会》。
MySQL 学习资源所推荐和重要解题总结: https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/MySQL.md
step 6:Maven
提议自学常用框架之前能提前花半天时间自学一下Maven的采用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,采用 Maven 能为你省许多事情)
step 7:常用框架
自学 Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis、shiro 等框架的采用, (可选) 熟悉 Spring 原理(大厂面试必不可少),然后很有必要自学一下 SpringBoot。我也遇到许多公司对于应届生直接上手SpringBoot,不过我还是所推荐你把 Spring、SpringMVC 好好学一下。
Spring 真的很重要!一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等解题都是非常重要的,一定要搞懂。
所推荐看文档+视频结合的方式,中途配合实战来自学。
step 8:高性能网站架构
自学 Dubbo、Zookeeper、常见的消息队列(比如ActiveMq、RabbitMQ)、Redis 、Elasticsearch的采用(这些东西能通过黑马视频最后一个分布式项目来学,边看视频,边他们做,查阅网上博客,效果更好)。
一定要学会拓展知识,养成自主自学的意识。黑马项目对这些解题的介绍都较为蜻蜓点水。
step 9:其他
能再回来看一下多线程方面的知识,还能利用业余时间自学一下 NIO 和 Netty,这样简历上也能多点东西。如果想去大厂,JVM 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)所推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战Java虚拟机》,如果嫌看书麻烦的话,你也能看我整理的文档:。
另外,那时微服务特别火,许多公司在面试也明确要求须要微服务方面的知识。如果有心力的话能去学一下SpringCloud生态系统和其他微服务常用框架。
总结
我上面主要概括一下每一步要自学的内容,对自学规划有一个提议。晓得要学什么之后,怎样去学呢?我真的自学每个解题能考虑这样去入手:官网(大概率是英文,不所推荐初学者看)、书刊(知识更加系统完全,所推荐)、视频(较为容易理解,所推荐,特别是初学的这时候)、网上博客(解决某一解题的难题的这时候能看看)。
这里给各位一个提议,看视频的过程中最好跟着一起练,要做笔记!!!最好可以边看视频边找一两本刊看,看视频没弄懂的解题一定要尽快解决,怎样解决?首先百度/Google,通过搜索引擎解决不了的话就找身边的好友或是认识的一些人。另外,一定要展开项目实战!许多人这这时候就会问没有实际项目让我做怎么办?我真的能通过上面这几种方式:
在网上找一个符合他们能力与找工作需求的实战项目视频或是博客跟着老师一起做。做的过程中,你要有他们的思考,不要浅尝辄止,对于许多解题,别人的讲解可能只是满足项目就够了,你他们想多点知识的话,对于重要的解题就要他们学会去往深出学。
Github 或是码云上面有许多实战类别项目,你能选择一个来研究,为了让他们对这个项目更加理解,在理解原有代码的此基础上,你能对原有项目展开改进或是增加功能。
他们动手去做一个他们想完成的东西,遇到不会的东西就临时去学,现学现卖。
做项目不光要做,还要改进,改善。另外,如果你的老师有相关 Java 前台项目的话,你也可以主动申请参与进来。
一定要学会分配他们时间,要学的东西许多,真的许多,搞清楚哪些东西是重点,哪些东西实际上了解就够了。一定不要把心力都花在了学各种框架上,算法和数据结构真的很重要!
自学的过程中有一个能参考的文档很重要,非常有助于他们的自学,我当初弄 JavaGuide: https://github.com/Snailclimb/JavaGuide的很大三部分目的就是因为这个。JavaGuide 目前已经 40K+ star,关闭了 128 个 issue 和 169 个 pr。客观来说,相比于博客,JavaGuide 里面的内容因为更多人的参与变得更加准确和完善。
所推荐阅读
不就是个短信登录API嘛,有这么复杂吗?
Java 8 新特性最佳指南
盘点一下Github上开源的Java面试/自学相关的仓库,看完弄懂薪资至少增加10k( 2018-12-24)
可能是一份最适合你的后端面试指南(部分内容前端同样适用)
听说又被 JVM 内存区域方面的面试题给虐了?看看这篇文章吧!
点个再看