学java,怎样学习Java
一、怎样学习Java
学习计划
首先,我把Java系统学习分成两个阶段。
第一阶段:建立完整的的技术栈,成为一个有富于生产力的高级软件工程师。
在这个阶段要掌握一系列的基础知识和工具。这些东西前后关联,所以学习过程成线性顺序,要从上往下进行。
下面是第一阶段的学习路线:
第二阶段:这个阶段的目标是成为Java技术专家、架构师,因此必须在上一阶段的技术上,往高处(例如设计模式、大数据)走,往深处(Spring源码、Java虚拟机)走。
这个阶段的知识,并不存在前后的关联。在完成第一阶段的学习之后,完全看工作的需要,以及个人的兴趣,安排学习的优先级。
下面是第二阶段的学习目标:
接下来,我就点一下这个学习计划中的“关键点”。
Servlet
要成为一个优秀的Javaweb专家。无论是你用SpringMVC实现的普通REST接口,还是微服务。往深地走,都要深刻理解Servlet以及容器(例如Tomcat).
因此,在深度学习微服务,以及SpringMVC之前,一定要把Servlet学精,因为他是整个Javaweb的基石。所以,在成为软件专家的路上,Servlet是最基本的垫脚石,务必重视。
SQL
在我作为程序员入行的时候,没少在SQL语言下功夫,尤其是在SQL语言优化方面,包括在存储过程中各种折腾。
但现在,SQL优化在开发过程中的优先级显著降低,有几个原因:
各种ORmap框架(例如Hibernate、Mybatis)的出现,使SQL的工作量大大降低。各种ORmap框架本身也会对编写的、自动生成的SQL进行优化。当前的服务器架构,如果要提高性能,首先应该考虑架构的横向扩展性,而不是在SQL上进行极端优化。但现在也不是说可以完全“任性”地编写SQL。只是说对于程序员,只要掌握最常见的SQL优化原则,做到工整就够了。
缓存、队列
缓存,队列。业界都有了较成熟的方案,例如Redis,ActiveMQ等。在学习的过程中,第一步是掌握核心概念,以及他们要解决的问题。然后就要亲自安装,使用这些软件,建立感性的认识。
其次就是在掌握核心概念的基础上,掌握这些开源软件的JavaAPI,然后试着在此基础上,编写典型的Demo,从而在Java语言层面上彻底掌握。
至于有些朋友提到的把概念再“实现一遍”。不知道朋友指的是使用API,还是把缓存和队列软件,用Java语言实现一下。如果是后者,不是说不可以,关键是太费时间。同时,就业界实践来说,不是特别必要。如果你真有兴趣,把优先级放低一点,作为一个更长期的目标。
Linux
这个学习计划是一个长期的,深入的学习计划。最终是要成长为技术专家、或架构师。那么有必要适时的掌握下Linux。因为在实践中,服务器往往委托于Linux服务器。而且将来,还有不少开源软件只能在linux上运行。
因此,在开始学习缓存和队列前,需要先掌握了Linux的基本用法。然后再学习的过程中,就把这些开源软件在Linux上运行。
这样,在你学习Java的过程中,顺便也把Linux学习了,这远比你将来单独学习Linux要有趣,印象要深刻。
微服务
微服务并不是一门具体的技术,而是一个设计理念,很多语言和框架都可以实现,例如Java中的SpringMVC等。
因此,如果已经掌握了SpringMVC、Springboot。那么对微服务的掌握是水到渠成的事情。你要做的就是注意力放在微服务的应用场景上。
设计模式
设计模式是较为靠上的东西。如果Java基础不是太好的话,很容易陷入空泛,眼高手低。
如果你的Java基础太薄弱,例如没有掌握“抽象类”。那么我建议你先把设计模式学习停一下,先把Java的基础知识补充下,至少要学完《Java核心技术》第六章,也就是掌握完整的现象对象的概念。然后再回来学习设计模式。
在学习设计模式的时候,一定要动手。最起码要把书中列举的设计模式,用Java语言实现一下。如果你阅读时是经典的GOF《设计模式》,其中的代码(用C++描述),就不容易用Java实现。建议你可以参照《HeadFirst设计模式》,其中的demo都是短小精悍,很适合用Java来实现。
这样,一则有利于理解设计模式。二则在学习设计模式的过程中,也进一步增强对Java基础知识的掌握。这种学习过程是一个相互促进的过程。
学习笔记很重要
特别重要的一点,学习的过程中,尽量的写学习笔记,其中包括难点和重点。
因为,系统深入的学习Java必然是一个长期的,综合的过程。到后期,一定会出现学着后面,忘了前面。如果你没有学习笔记,又没有实践中积累的代码,那么就会出现边学边忘的情况。
而有了学习笔记,可以给自己的学习留下了“踪迹”,以后复习的时候用来参考,很快就能把早前学习的记忆“唤醒”。
而且,这些学习笔记在后来的工作中,还能成为自己的参考手册,随用随查。
还有,那就是学习笔记还是一个特别好的面试宝典。因为既然你记下了笔记,这些东西往往经过你深度思考,深度消化的东西,也是你区别于其他工程师的卓越之处。
此回答转自乐字节
二、自学java
“这是一篇完整的java程序员学习线路图,一共分为六个阶段。
我以java为例,展示完整的学习步骤。
希望对于想通过java自学的朋友有帮助。
java程序员学习线路流程第一步:Java语言基础从最简单的开始,helloworld开始Java之旅
1.编程基础
常量与变量
数据类型
运算符
流程控制语句
方法
数组
2.面向对象
面向对象思想
类与对象
成员变量和局部变量
封装
this关键字
构造方法
3.集合
集合概述
集合特点
ArrayList集合
HashMap集合
常用集合优劣比较
4.输入/输出IO
字符输入流
字符输出流
字符缓冲输入流
字符缓冲输出流
复制文件
集合与文件中数据相互读写
5.练习阶段
属于你自己的helloword
第二步:java语言高级再结合java高级部分,里面的部分内容,这个阶段你不一定能理解很彻底。但有一点,如果你今后想进入高阶俱乐部,这些内容你必须掌握牢固。
举个栗子,如果你面试通过进入了公司,我一定会在早期仔细review你的代码。代码的功力是欺骗不了人的,不同人写一个接口,呈现的结果也是千差万别(所以才有了规范)。
1.面向对象
继承
多态
重写(Override)
重载(Overload)
封装
接口
java包package
2.异常处理
异常概述
异常分类
异常处理方案
自定义异常
3.多线程
Java线程:概念与原理
Java线程:创建与启动
Java线程:多线程的实现方案
Java线程:线程生命周期
Java线程:线程池
Java线程:线程状态的转换
Java线程:线程的同步与锁
Java线程:线程的交互等等
线程的几个主要概念
在多线程编程时,你需要了解以下几个概念
线程同步
线程间通信
线程死锁
线程控制:挂起、停止和恢复
4.输入与输出IO
文件和I/O
读写文件
Java流(Stream)
文件(File)
缓冲流
5.泛型(Generic)
泛型的使用场景
泛型类型
泛型方法
泛型通配符?
6.网络编程
网络机制
Socket原理机制
UDP、TCP传输等
7.反射(reflection)
类加载机制原理
反射构造方法、字段、方法
Properties配置文件
8.注解(annotation)
注解的使用和原理
三种内置annotation
自定义annotation
注解类的反射调用
动态代理类如何处理
9.Java高级特性和类库
java类加载器classloader
java程序运行的基础知识,java编译后的bytecode的整个运行机制,这一点对应.net的IL(intermediatelanguage)。
理解Javanio,关于这一点网上有非常多的教程,这一条需要重点掌握,对于高并发的掌握很重要。
javajuc(java.util.concurrent)等等
10.JVM原理和调优
JVM最重要的三个部分必须要非常清楚,内存划分、class加载机制以及GC策略。搞清楚这三部分不仅仅是为了面试,也是为了让你对于Java有更深刻的理解,这对于你的Java生涯非常有帮助。
内存划分简单说分为三个部分,YoungGeneration(年轻代)、OldGeneration(年老代)以及PermGeneration(永久代)。其中的YoungGeneration(年轻代),又分为Eden、From和To,其中From和To又统称为SurvivorSpaces(幸存区)。
关于classloader机制的学习,可以结合tomcat去学习,了解清楚tomcat的classloader机制,看tomcat是如何保证各个APP之间的类隔离的。如果可能的话,看一下tomcat中classloader的源码,当中也包含了与tomcat类加载机制相似的部分。
至于GC,需要清楚GCRoots都有哪些,以及如何判断一个对象可以被回收。此外,GC的算法和策略也要有大概的了解。
第三步:javaweb阶段1.前段技术掌握
html
css
js
jquery
bootstrap
2.动态网页技术
JavaServletAPI
Velocity
FreeMarker
JSP等常用模板引擎
比如,淘宝前端层使用的是velocity模板,部分公司采用jsp、freemarker等,基本类似。
3.linux服务器基本命令
在个阶段,也可以结合自己的情况,学习linux系统底层原理。
第四步:java框架阶段1.SSH(struts2+spring+hibernate)
2.SSM(springmvc+spring+mybatis)
备注:如果你仔细,网上有部分叫SSI,I为ibatis,后来ibatis改名为mybatis了。
框架组合,我首推SSM,比SSH灵活强大。
框架的优缺点,我会再单独写文。
如果你还有兴趣,可以自己搭建Lucene、solr框架,以及memcached/redis、activeMQ、hadoop等等搜索、分布式缓存、异步消息、数据等。
我一般建议自己搭建,从学习效果再到理解深度都不一样。有兴趣,就开始自己搭建。
第五步:开发工具阶段1.web调试工具
firefox
firebug
webdeveloper
yslow
httpwatch
ietester等
这些都是开发必用。
2.集成开发工具
eclipse(首推),STS,myEclipse,Idea
eclipse里的插件太多,推荐几个必装插件:
JadClipse、run-jetty-run(很牛的热部署调试)、veloctiy、freemarkerIDE、Subclipse、m2eclipse、mybatisEditor、EasyExplorer等等。
3.版本控制工具
svn、git(首推)
4.构建工具
maven、nexus搭建maven私服
建议自己搭建一套nexusmaven私服,成为你们公司的代码仓库员。
5.java调试工具
jProfiler(性能跟踪)
jClarity(性能监控和日志分析)
Visualvm(性能分析和调优)等
优知学院是IT人的进阶站,提供系统的互联网产品&技术的入门指南以及进阶干货。三、怎么学习Java
如果是零基础的话建议可以去一家专业的学校学习,老师会根据你的基础给你系统的指导。