1. 首页
  2. IT资讯

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线

在现在的互联网市场中,虽然做Web开发的语言越来越多,有很多新兴的语言貌似大有流行之势,比如最近很火的python、go语言。

但是Java作为Web世界的老大,地位依然无法撼动,Java性能优良、成熟的社区、全套(几乎最全)的开源框架支持等原因,Java在做Web开发这一方面,依然是老大哥,再加上众多大公司的支持,学习Java仍然是有必要的!

因此呢,新手小白想要学习Java Web开发,想要通过它来找到一份好职业,就必须要经过一系列系统的学习,才能稳操胜券。

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线

我结合了个人的开发经验和学习心得,发现很多新手其实在学习Java道路上走了弯路,很多新手想要去速成Java,这一点其实是无可厚非的,但是真的能够速成的却很少,这是为什么呢?

心急吃不了热豆腐,一心想着速成,是学不到什么深入的东西的。还是要脚踏实地,踏踏实实的静下心来学习才行。

但是Java的知识体系又过于庞大,很多其实是新手一开始没必要去学习的东西,一旦学习了一些旧的技术,很容易发现,学过的技术都被淘汰了,去面试会被笑话的。

所以,我就特别的整理了这篇文章,抛砖引玉,把我知道的,我认为非常有助于新手学习的成长路线分享给大家。真的适合非常非常新的新手!

从认识编程开始

  • 什么是编程?

通常是由一个实际问题而引起的,我们为了解决这个问题,通常会想一些解决办法,这些解决办法可以是人工,也可以是机器来执行,从而得到答案或者结果。

那么编程就是人们为了解决某个实际问题,从而通过一种编程语言实现某种解决办法(算法),让计算机去执行编写的代码(含有算法的执行逻辑),并最终得到结果的过程。

为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。

  • 什么是Java?

Java是一门面向对象编程语言,它吸收了C++语言的各种优点,摒弃了C++里难以理解的多继承、指针等概念,对C++进行取其精华去其糟粕,优化了很多内容,使得程序开发完全面向对象、简单好用。Java具有功能强大和简单易用两个特征,它作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

  • 什么是面向对象?

学习Java,就必须要懂这个概念,这也是目前编程语言开发中的主流思想(OOP)。

面向对象是一种思想,是基于面向过程而言的。

就比如你要吃饭,你得经历:

摘菜 –> 洗菜 –> 切菜 –> 炒菜 –> 出锅 –> 开吃

这些步骤,而这些步骤都是你要亲自去做的。这就是面向过程。

然后你觉得自己做法太累了,你雇了一个保姆,对你来说,流程就大大简化了:

等保姆把饭做好 –> 开吃

这就是面向对象,保姆具备了做饭一系列的行为动作,你不再像之前那样需要关心才是怎么做的,水放多了放少了的杂七杂八问题,把做饭的所有活都打包让保姆去做了,做饭这些活动就属于保姆自己的行为。

把一些功能、属性、行为封装到一起形成一个对象,然后只需要指挥这个对象做他能做的事情,这就是面向对象的思想。

有了这些基本概念,下面就可以进入正题了,后面我将只列出问题和知识点,具体不做解答,因为这是提供给小白学习的路线嘛,并不专注于具体问题的解答,只提供建议。


Java基础知识

推荐学习Java选择版本从JDK 1.8开始,因为是速成,所以尽量不要选择过老的版本,也不要选择过于新的版本,目前Java8应该是最为普遍使用的版本。

学习过程中,也暂且忽略Java7和Java8之间的变动、区别等等,只关注Java8的特性即可,完全没必要关注Java7(除非你学有余力)。

推荐书籍:疯狂Java讲义(第四版),不是打广告哈,这是我个人觉得讲的比较好的一本书,真的非常基础,所以推荐大家买书的话就买这个。

下面我列出一些学习过程中需要重点关注的问题:

基础要求(这是必须要掌握的):

基础概念篇:

  • 什么是java?
  • JVM、JRE和JDK的关系
  • 什么是跨平台?
  • Java语言有哪些特点?
  • 什么是字节码?
  • 什么是Java注释?
  • 什么是类、对象、属性、字段?
  • Java和C++的区别

基础语法篇:

  • Java有哪些数据类型?
  • 算数运算符、逻辑运算符
  • 访问修饰符(包含类、属性、方法等)
  • 常量、静态变量、静态方法、静态代码段等
  • 关键字
  • 流程控制语句

面向对象篇:

  • 面向对象和面向过程的区别?
  • 面向对象的三大特性
  • 类与接口(尤其加深理解抽象类、匿名内部类)
  • 构造函数(有参、无参、默认)的定义、作用
  • 成员变量和局部变量、静态变量与实例变量、普通变量的区别
  • 静态方法和实例方法的区别
  • 方法及返回值的作用
  • 重写与重载的区别、具体用法
  • 对象相等判断:== 和 equals的区别,什么是hashcode以及它的作用
  • 为什么 Java 中只有值传递
  • 值传递和引用传递有什么区别

集合篇:

  • 什么是集合?
  • 集合的特点
  • 集合和数组的区别
  • 常见的集合类有哪些?
  • List,Set,Map三者的区别?List、Set、Map 是否继承自 Collection 接口?List、Map、Set 三个接口存取元素时,各有什么特点?
  • 哪些集合类是线程安全的?哪些是线程不安全的?
  • 怎么确保一个集合不能被修改?
  • 集合底层数据结构是怎么实现的?
  • 什么是迭代器?
  • 各种集合的各种遍历方法以及区别
  • 队列的用途以及特点、如何使用
  • HashMap的一些特征,链式存储的优点,null可不可以用作key或者value,有什么区分?
  • HashMap的初始长度是多少,它是怎么自动扩容的?
  • HashMap、HashTable、ConcurrentHashMap的区别
  • 集合的排序、集合工具类的使用

并发编程篇:

  • 为什么要使用并发编程(并发编程的优点)
  • 多线程实现的几种方式?
  • 如何保证线程安全?
  • 什么是锁,有哪些锁?怎么使用锁?(可重入锁、读写锁、计数递减锁)
  • 什么是线程死锁?
  • 形成死锁的四个必要条件是什么?
  • 如何避免线程死锁?
  • 线程线程的生命周期及五种基本状态
  • sleep() 、wait() 、yield()方法有什么区别?什么场景下使用?
  • 为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
  • 同步方法、同步代码块、锁机制这三种方式的优缺点?什么情况下哪种方式更适合?
  • 线程同步和互斥
  • 线程池有哪些、怎么使用?
  • ThreadLocal 是什么?有哪些使用场景?
  • 什么是原子操作?在 Java Concurrency API 中有哪些原子类(atomic classes)?
  • 说一下 atomic 的原理?

IO篇:

  • Java中IO流有哪些,都怎么用?
  • BIO,NIO,AIO 有什么区别?
  • Files的常用方法都有哪些?

网络篇:

  • TCP/IP协议
  • TCP三次握手机制
  • TCP、UDP的区别以及各自如何使用
  • 什么是HTTP,HTTP 与 HTTPS,以及他们的区别是什么?
  • 常用HTTP状态码
  • GET和POST区别
  • 什么是Session会话,什么是Cookie?

数据库访问篇:

  • 什么是JDBC、ODBC以及区别?
  • 什么是游标?
  • 如何使用JDBC增删改查?
  • 如何防止SQL注入?
  • Statement和PreparedStatement的区别?
  • 如何进行批量提交操作(比如批量提交insert语句)?

进阶知识(可以后续再回来学习,但是也同样非常重要的知识):

反射篇:

  • 什么是反射机制?
  • 反射机制优缺点
  • 反射机制的应用场景有哪些?
  • Java获取反射的三种方法
  • 通过反射获取类的类型、字段类型、方法执行等等

JVM篇:

  • jvm主要组成部分以及相关作用?
  • 堆空间和栈空间的区别、作用?
  • 深拷贝和浅拷贝
  • Java会存在内存泄漏吗?出现内存溢出怎么办?
  • java的垃圾回收机制
  • 什么是gc,gc的目的和时机是什么?
  • 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • 垃圾回收算法有哪些?
  • 类加载机制
  • 各种类加载器及执行过程
  • 什么是双亲委派模型?
  • jvm如何调优,调优参数有哪些,有哪些工具?

设计思想篇:

  • 23种设计模式原理、怎么使用?

动态代理篇:

  • 什么是动态代理?
  • 动态代理和反射的关系?
  • JDK 原生提供的动态代理是怎么实现和使用的?
  • cglib 动态代理的实现方式有何不同?
  • cglib 动态代理有什么优点?

JavaEE进阶(Java Web)

工欲善其事,必先利其器。Java最强大的地方,在于它的工具种类繁多,框架层出不穷,当一个先进的思想出现时,往往Java就是最先成熟运用的那一个。学习利用优秀的框架(尤其是开源框架),对于开发非常有帮助,提升开发效率,避免重复造轮子。

首先要了解Java Web主流的分层架构思想:

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线

MVC架构

  • MVC的思想?
  • 什么是DAO层?
  • 什么是Service层?
  • 什么是控制层?

其次是ORM思想:

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • 什么是持久化?
  • 什么是持久层?
  • 什么是ORM?
  • 为什么要使用ORM?
  • ORM框架有哪些:Hibernate、Mybatis

必学框架1:大名鼎鼎的 Spring

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • Spring框架的设计目标,设计理念,和核心是什么?
  • Spring容器是什么?干什么用?
  • 什么是依赖注入?
  • 依赖注入解决了哪些现实的、棘手的问题?
  • 依赖注入的基本原理和使用规则
  • 什么是Spring bean?
  • 什么是bean的自动装配?装配方式有哪些?Autowired和Resource注解的区别?
  • 什么是控制反转(IOC)?有什么作用
  • IOC的优点是什么?
  • 学习Spring各种注解,尤其是@Component, @Controller, @Repository, @Service 有何区别?
  • Spring中的分层架构思想:表现层、控制层、服务层、数据访问层
  • JdbcTemplate如何使用?
  • 在Spring框架中如何更有效地使用JDBC?
  • 解释JDBC抽象和DAO模块
  • spring DAO 有什么用?
  • spring JDBC API 中存在哪些类?
  • 使用Spring通过什么方式访问Hibernate?使用 Spring 访问 Hibernate 的方法有哪些?
  • Spring支持的事务管理类型, spring 事务实现方式有哪些?
  • 什么是切面(AOP)?为什么要面向切面编程?
  • Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?
  • AOP有哪些应用场景?
  • 如何实现基于注解的切面?

必学框架2-ORM(二选一):Hibernate

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • Hibernate工作原理及为什么要用?
  • 如何延迟加载(懒加载)?
  • 怎样实现类之间的关系?(如:一对多、多对多的关系)
  • hibernate的三种状态,以及它们之间如何转换?
  • Hibernate的缓存机制
  • Hibernate的查询方式有几种?分别怎么用?
  • 它的特点是什么?与mybatis有什么区别?

必学框架3-ORM(二选一):MyBatis

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
  • 传统JDBC开发存在的问题
  • JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
  • Mybatis优缺点
  • MyBatis框架适用场景
  • Hibernate 和 MyBatis 的区别
  • MyBatis的工作原理
  • Mybatis是否支持懒加载?如果支持,它的实现原理是什么?
  • 在mapper中如何传递多个参数?
  • MyBatis实现一对一,一对多有几种方式,怎么操作的?
  • Mybatis动态sql是做什么的?它的执行原理是什么?
  • Mybatis怎么进行分页查询?
  • Mybatis的一级、二级缓存的原理,怎么使用?

必学框架4-MVC:Spring MVC

  • 什么是Spring mvc,它的核心组件是什么?
  • 什么是控制器(Controller)?
  • 什么是DispatcherServlet?(会涉及servlet知识,但是可以了解一下,新手没必要去学,等后面可以再补充这方面的知识,还是说一个目的:速成)
  • 常用注解,怎么使用
  • 怎么进行异常处理?
  • 中文乱码问题怎么解决?
  • 如何实现监听器、拦截器?
  • 各种参数绑定的使用

如果要买书看的话,我觉得李刚出品的《轻量级Java Web企业应用实战》这本还不错,当然如果你还有更好的选择,可以在评论区说明哈。我只是凭借个人经验推荐。

学会了上面几个框架之后,基本上就可以开发后段项目了,这时要学习的是如何整合这些框架到同一个项目里,搭建一个spring-mvc-hibernate项目(简称ssh,为了避免Struts2歧义,一次我写全吧),或者是搭建个spring-mvc-mybatis(ssm)框架的项目。

也许你会发现,上面几个框架整合开发过程中,会有很多的麻烦,比如一大堆配置文件,每个框架都有自己单独的配置文件,各个配置中也相当地复杂,新手很容易会搭建一个整合项目可能一星期都搞不定。

那么这时候,我的建议是,前面几种框架的思想和知识点你学到了就行,为了让你不受打击,免去被上面几个框架整合时出现的问题烦扰,可以直接学习下面这个框架,让你体会到什么叫简单。

必学框架5:Spring Boot

小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线

如果真的想更快速度的学习JavaWeb,可以直接来学习这个框架,它是Spring、Spring Mvc更高程度的一个封装,提供了更简单上手的开发方式,真的是足够简单。但是前面的框架知识和思想依然非常重要,在Spring Boot里面都会涉及。

在有了上面那些框架知识的基础之上,再来学习Spring Boot是非常容易的。

具体我就不多说了,可以买本书来看。推荐:《SpringBoot编程思想(核心篇)》、《Spring Boot 实战》

学习过程中,注意思考下面这些问题:

  • 为什么会出现Spring Boot?它有哪些优点?
  • Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
  • 什么是 JavaConfig?
  • Spring Boot 自动配置原理是什么?以及配置加载顺序是怎样的?
  • 什么是 YAML?YAML 配置的优势在哪里 ?
  • spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ?
  • Spring Boot 中如何解决跨域问题 ?

学到这里,你就已经从一个新手小白变身成为一名初级JAVA后端开发工程师了!恭喜恭喜!

接下来,想要进一步提高自己的技术,下面的这些框架也要学习:

  • Spring Data:对Hibernate做了个封装,无缝对接Springboot
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • Spring Batch:批任务处理框架
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • Quartz:也是一种定时任务处理框架
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • Redis:分布式key-value数据库(做缓存非常棒)
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • RabbitMQ/Kafka:消息队列
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线
  • MongoDB:一个高性能的文档数据库
小白想学Java开发,不知道怎么学?这篇文章帮你梳理学习路线

基本上就是这些了,新手学习Java的路线是十分陡峭的,最重要的是呢,心态要放平,不要一开始被这些东西给唬到了,其实真踏踏实实地学下来,发现也没有什么难得。贵在坚持,坚持,坚持!

加油吧!少年!

本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/199922.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code