Java学习到什么程度才能找到一份称心如意的工作?
Java 学习到什么程度可以找第一份工作?
这个问题应该是大部分初步跨入 Java 学习大门的朋友关心的问题。如果你只是为了找一份工作而学习 Java 的话,那太简单了。网上提供的什么各种学习路线我觉得都是浮云,最直接的就是看视频。视频老老实实地看完,项目老老实实的跟着做完,然后再稍微花点时间准备一下面试,我觉得找到一份工作就很容易了。
1:Java 基础
《Java 核心技术卷 1/2》 和 《Head First Java》 这两本书在我看来都是入门 Java 的很不错的书籍,我倒是觉得《Java 编程思想》有点属于新手劝退书的意思,建议有点基础后再看。你也可以边看视频边看书学习。对于 Java8 新特性的东西,我建议你基础学号之后可以看一下,暂时看不太明白也没关系,后面抽时间再回过头来看。 看完之后,你可以用自己学的东西实现一个简单的 Java 程序,也可以尝试用 Java 解决一些编程问题,以此来将自己学到的东西付诸于实践。 记得多总结!打好基础!把自己重要的东西都记录下来。 API 文档放在自己可以看到的地方,以备自己可以随时查阅。为了能让自己写出更优秀的代码,《Effective Java》、《重构》 这两本书没事也可以看看。 学习完之后可以看一下关于 Java 基础你不得不会的 34 个问题 ,检测一下自己的掌握情况,这 34 个问题都时 Java 中比较重要的知识点,最重要的是在 Java 后端面试中的出场率非常高。
2:多线程的简单使用
多线程这部分内容可能会比较难以理解和上手,前期可以先简单地了解一下基础,到了后面有精力和能力后再回来仔细看。推荐《Java 并发编程之美》 或者 《实战 Java 高并发程序设计》 这两本书。
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 常用组件。
3(可选):操作系统与计算机网络
操作系统这方面我觉得掌握操作系统的基础知识和 Linux 的常用命令就行以及一些重要概念就行了。
对于 Linux 我们要掌握基本的使用就需要对一些常用命令非常熟悉比如:目录切换命令、目录操作命令、文件的操作命令、压缩或者解压文件的命令等等。 计算机网络方面的学习,我觉得掌握基本的知识就行了,不需要太深究,一般面试对这方面要求也不高,毕竟不是专门做网络的。推荐 《网络是怎样连接的》 、《图解 HTTP》 这两本书来看,这两本书都属于比较有趣易懂的类型,也适合没有基础的人来看。
4(可选):数据结构与算法
如果你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 Leetcode。就目前国内外的大厂面试来说,刷 Leetcode 可以说已经成了不得不走的一条路。
对于想要入门算法和数据结构的朋友,建议看这两本书 《算法图解》 和 《大话数据结构》,这两本书虽然算不上很经典的书籍,但是比较有趣,对于刚入门算法和数据结构的朋友非常友好。《算法导论》 非常经典,但是对于刚入门的就不那么友好了。
另外,还有一本非常赞的算法书推荐给各位,这本书的名字就叫《算法》,书中的代码都是用 Java 语言编写。这本书的优点太多太多比如它的讲解基础而全面、对阅读者比较友好等等。我觉得这本书唯一的缺点就是太厚了 。除了这本书之外,《剑指 offer》 、《编程珠玑》 、《编程之美》 这三本书都被很多大佬推荐过了,对于算法面试非常有帮助。《算法之美》 这本书也非常不错,非常适合闲暇的时候看。
5:前端知识
这一步主要是学习前端基础 (HTML、CSS、JavaScript),当然 BootStrap、VUE 等等前端框架你也可以了解一下。网上有很多这方面资源 。推荐先把 HTML、CSS、JS 的基础知识过一遍,然后通过一个实际的前端项目来巩固。
6::MySQL
学习 MySQL 的基本使用,基本的增删改查,SQL 命令,索引、存储过程这些都学一下吧!推荐书籍 《SQL 基础教程(第 2 版)》(入门级)、《高性能 MySQL : 第 3 版》(进阶)、《MySQL 必知必会》。
7:常用框架
学习 Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis、shiro 等框架的使用, (可选) 熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下 SpringBoot。我也遇到很多公司对于应届生直接上手SpringBoot,不过我还是推荐你把 Spring、SpringMVC 好好学一下。
Spring 真的很重要! 一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。 推荐看文档+视频结合的方式,中途配合实战来学习。
8:高性能网站架构
学习 Dubbo、Zookeeper、常见的消息队列(比如ActiveMq、RabbitMQ)、Redis 、Elasticsearch 的使用。 一定要学会拓展知识,养成自主学习的意识。
9:其他
可以再回来看一下多线程方面的知识,还可以利用业余时间学习一下 NIO 和 Netty ,这样简历上也可以多点东西。如果想去大厂,JVM 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战Java虚拟机》,另外,现在微服务特别火,很多公司在面试也明确要求需要微服务方面的知识。如果有精力的话可以去学一下SpringCloud生态系统以及其他微服务常用框架。
总结
我上面主要概括一下每一步要学习的内容,对学习规划有一个建议。知道要学什么之后,如何去学呢?我觉得学习每个知识点可以考虑这样去入手:官网(大概率是英文,不推荐初学者看)、书籍(知识更加系统完全,推荐)、视频(比较容易理解,推荐,特别是初学的时候)、网上博客(解决某一知识点的问题的时候可以看看)。
这里给各位一个建议,看视频的过程中最好跟着一起练,要做笔记!!! 最好可以边看视频边找一本书籍看,看视频没弄懂的知识点一定要尽快解决,如何解决?首先百度/Google,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,一定要进行项目实战!很多人这时候就会问没有实际项目让我做怎么办?
我觉得可以通过下面这几种方式:
在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深出学。
Github 或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖。
做项目不光要做,还要改进,改善。另外,如果你的老师有相关 Java 后台项目的话,你也可以主动申请参与进来。 一定要学会分配自己时间,要学的东西很多,真的很多,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。一定不要把精力都花在了学各种框架上,算法和数据结构真的很重要!