
在现在的互联网市场中,虽然做Web开发的语言越来越多,有很多新兴的语言貌似大有流行之势,比如最近很火的python、go语言。
但是Java作为Web世界的老大,地位依然无法撼动,Java性能优良、成熟的社区、全套(几乎最全)的开源框架支持等原因,Java在做Web开发这一方面,依然是老大哥,再加上众多大公司的支持,学习Java仍然是有必要的!
因此呢,新手小白想要学习Java Web开发,想要通过它来找到一份好职业,就必须要经过一系列系统的学习,才能稳操胜券。

我结合了个人的开发经验和学习心得,发现很多新手其实在学习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主流的分层架构思想:

MVC架构
- MVC的思想?
- 什么是DAO层?
- 什么是Service层?
- 什么是控制层?
其次是ORM思想:

- 什么是持久化?
- 什么是持久层?
- 什么是ORM?
- 为什么要使用ORM?
- ORM框架有哪些:Hibernate、Mybatis
必学框架1:大名鼎鼎的 Spring

- 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

- Hibernate工作原理及为什么要用?
- 如何延迟加载(懒加载)?
- 怎样实现类之间的关系?(如:一对多、多对多的关系)
- hibernate的三种状态,以及它们之间如何转换?
- Hibernate的缓存机制
- Hibernate的查询方式有几种?分别怎么用?
- 它的特点是什么?与mybatis有什么区别?
必学框架3-ORM(二选一):MyBatis

- 为什么说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

如果真的想更快速度的学习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

- Spring Batch:批任务处理框架

- Quartz:也是一种定时任务处理框架

- Redis:分布式key-value数据库(做缓存非常棒)

- RabbitMQ/Kafka:消息队列


- MongoDB:一个高性能的文档数据库

基本上就是这些了,新手学习Java的路线是十分陡峭的,最重要的是呢,心态要放平,不要一开始被这些东西给唬到了,其实真踏踏实实地学下来,发现也没有什么难得。贵在坚持,坚持,坚持!
加油吧!少年!
本文来自投稿,不代表程序员编程网立场,如若转载,请注明出处:http://www.cxybcw.com/199922.html