本人0基础转JAVA。曾在传智播客进行基础班学习,后自学找工作。目前从0到现在2年余,即将就职于一家一线互联网公司(18K),以下内容是我个人学路线,供大家参考,后续会更新。
第一阶段:JAVASE(这部分可以学习传智播客刘易视频)
用书参考《疯狂java讲义》,查字典方式使用内容:
l 数据类型,基本型,引用型区别,
这里要了解内存区别,那些变量是放在哪里的。了解就行,以后有用。
l 特性:
多态,继承,在中级往高级过渡用得上,尤其是后期写比较优雅的代码。
接口与抽象类:要学习,知道是怎么回事。后期往高级有用。包括学习设计模式。
知道接口抽象类是什么,有什么区别就行。
l 数组:
数组的各种使用,排序算法要学,面试容易写冒泡排序。
l 集合框架
这是很重要的,
List接口实现类,arraylist ,LinkdList使用,重点学习arraylist使用,知道底层是数组,数据结构是队列。知道arraylist的初始化长度是多少。长度是怎么变化的(了解后期有用)
LinkdList,背几个特点和arraylist的区别就行。(后期再学习)
Set:接口使用:去重场景下使用。
Map接口使用。重点练习HasMap的使用,知道Map的的底层是哈希表+数组。知道为什么key不重复。
HashTable背几个概念和HashTable的区别就行。(后期再学习)
集合框架非常重要:据我所知这部分知识是各大一线公司最爱问的问题,因为涉及到的知识很多,很深。算法也多。如果以后的目标10K左右的代码搬运工,那么只需要熟练使用arraylist和HashMap。不然就在基础阶段对各个特点,概念有个大概了解。后期逐步深入。
结合List,Map背几个队列,链表数据结构特点(15K以下面试,若问到也只是把这个几个概念背出来就行了)
l 常见类库的使用
Striing类
Object类
Date类
File类
包装类
这都不说了。每个API的方法眼熟一遍。
l IO流
IO是很重要的,要学习字节流,字符流的接口常见实现类的使用。以及包装流使用
IO这部分重要是因为:
10-15K基本就是要运用各种流。熟练使用就行。
在后面涉及到通信,网络编程等学习,都要用到这块。
基础阶段只需要:达到读写文本。文件,图片,电影复制就行。
l 多线程
这部分知识,中级阶段,基本不用,如果要学习。但是面试容易问到
知道Thread,Runnale接口。以及写几个demo就行了。
如果要应付13K以下的面试多线程问题:把Thread和Runnable的基础类特点背几个,
了解start方法,run方法,锁,sleep,wait(背几个特点),有精力再了解死锁,假死,线程通信
l 反射:
反射纯属java中的高级知识:18K以下工作几乎不使用。但是非常重要,不用要了解,
也可以为后期做学习做铺垫。
基础阶段有学习内容:
反射是怎么回事,
类加载器,
使用反射操作类,方法,属性demo。
l 网络编程
能写几个socket demo,知道TCP,UDP.就行了。
到这里javaSE的学习基本完善。Java基础阶段主要是打好基础。对重点常用知识熟练使用,对各个技术点有个概念。知道是怎么回事。尤其是反射,多线程,网络编程。
JAVA第二阶段学习:
l Servlet的学习:
Servelet的生命周期,是个什么东西,怎么初始化,初始化干了什么事。
Request的 response的,session ,Context的使用。区别,各个APi都要熟悉
那种场景下使用。
l Html+js基础
l Jsp+JSTL标签
l JDBC操作数据库+事物
l Mysql的安装,使用
这部分学习能使用servlet +jsp+JSTL+JDBC开发一个web。实现web界面增删该查,用户能登陆,
这部分的延伸学习:
- u 会装虚拟机,会在虚拟机上使用linux。几个命令就行了。
- u 学习至少两种设计模式。单例模式+包装模式
- u 学习代理模式+动态代理(眼熟程度),+复习反射
- u 学会使用监听器request,session的监听
- u 学会使用过滤器
- u 了解xml结构,含义。能解析xml文档
- u 如果有精力装一个redis,能使用jedis操作redis。了解redis 5种数据结构
- u 其他知识积累
Java第二阶段进阶框架:
用书参考《JAVAEE轻量级web框架整合》 (疯狂java讲义同一作者)本书重点讲解了jsp SSH框架使用上讲的很不错。原理也讲的不错。
视频参考:淘宝买传智课
有了比较扎实的第二极阶段基础,那么就可以进阶学习框架,而且比较容易学习。如果一开始就学习的框架,那么需要将上面的第二阶段知识学习,弄懂,框架才能理解的比较深入。
Struts框架从使用的角度来讲,基本没有人用了,学的话,主要是学习在strtuts里面页面值怎么传递给后台的(值栈),学习这是一个基于类的框架。(弄明白什么是基于类的框架,SpringMVC是基于方法框架,二者关系,面试容易问道)
SrpingMVC:的使用,json,拦截器,
u Springmvc配置每个配置的意思
u springMC执行流程,视图解析器+控制器+前端控制器关系
Spring的使用:
Hibernate的使用:
Myabtis使用(这是使用最多的操作数据库框架)
延伸学习:
u 每个框架单独使用
u 框架整合,搭建
这部分就不多说了。反正一直学习框架就行了,重点是使用,
延伸学习:原理,执行流程。
比如:spring的IOC 是什么,是怎么加载bean的。Spring有几中实例化bean的方法,怎么用,有几种注入方式。Hibernate的使用,Hibernate的模板使用,各种对象的状态。Hibernate的一级二级缓存。
这一部分知识是工作中用的最多的,主要是工作之外去学习各种框架的执行流程。还有不知道的机制,怎么使用。对各个框架的原理初步认识理解。
本阶段延伸学习:
u Maven的使用
u Oracle 了解学习。(数据库往一种上深入学习,其他的基础学习)
u POI使用
u Eacharts,Highcahrts使用
u Webservice
u Shrio或者springscurity(推荐shrio),从表设计到页面控制到代码控制
u 缓存
u Js进一步学习:封装ajax,闭包,promise...
学到了这里只要把web阶段学的比较明白进阶框架能熟练使用。延伸的也学习了。传统行业工作基本都能干了。主要是看你的经验积累,项目能力。15K以下技术上能干了。但是不能代表你能找到15K的工作。我就是通过自己学习,以上知识大概学6成,工资8000,也就是我的第一份工作。随后工作中,又花了时间反复学习,并结合项目理解运用。大概学了3个月,
这个阶段:
要对JAVA 的面向接口,面向对象编程思想能在项目中运用。要能写出比较有质量的代码。
Java第三阶段:
如果在传统行业,15K工资到头了,除非当领导,当小组长最多的也就15K.如果想有进一步突破,就的学习这个阶段我所看的书仅供参考:
《Redis实战》
《redis运维与开发》
《RabbitMQ实战》可惜python代码,就当系统的学习下机制原理。
《Ntetty实战》《Netty权威指南》权威指南写的很不错,容易懂。
《0开始写分布式框架》此书质量很差,作者就是实现了一个简单dubbo。如果作为RPC技术入门看一眼还行,内容作为预习。
《0写WEB框架》 这本书还行,不是很深入,就是作者自己写了一套轻量级web框架。
初步复习以下反射,注解,动态代理,AOP知识。然后了解框架思想。本书作为看框架源码初期预习用书不错。
《多线程核心技术》 多线程讲解比较细,案例驱动,入门书籍,或者系统复习下多线程基础内容书籍
《java并发编程的艺术》
《TCP/IP卷一》
《java并发框架》跟多线程核心技术一个作者。一般,可以看看
互联网转型初级:
理解SOA架构。熟练Maven使用,能使用dubbo,能使用至少一种MQ,能使用redis.
如果第二阶段学好了,能够使用这些,面试吹一吹,能进入互联网,10-13k工作(第二阶段学好了)
互联网转型中级15K-20K(我现在的阶段):
Dubbo原理学习,
Zookeeper原理学习
这个阶段的学习基本上就是原理的深入学习,会发现阶段学的东西都有用。
学dubbo原理就会涉及到spi,会涉及到动态编译,动态代理,Socket,会学习到netty,学到netty就要学NIO,这里又要学socket。又要去看TCP/IP。
学netty的线程模型,又要学习多线程。学多线程就要学,多线程实现,锁,等待唤醒,生产者消费者模型,发现又跟MQ相关.
要学的要会的:
Ø 学习使用至少一种消息队列,明白知道MQ的原理机制,能够理解MQ的模型。
Ø 至少会一种NOSQL数据库使用,会使用分布式缓存。
Ø 熟悉2-3种RPC技术。懂其原理。
Ø 对分布式有一定了解,能够完成一个模块开发
Ø 能够用学到知识处理分布式事务。
延伸学习:
- u 进一步加强基础知识,反射,动态代理,注解技术。NIO,Socket
- u 能够对框架有较深的理解,看过某一框架源码(至少某部分核心源码)。知道框架如何写出来的。进一步理解java思想。设计思想。
- u 深入学习多线程。
- u 学习集合框架数据结构。
- u 学习jvm原理
- u 能使用至少5中设计模式
这个阶段很多人就跨不过了,没有持续的学习,扎实的基础,大量的学习,或者说吃透某一个技术是根本学不下去的。很多框架的书写底层用的技术就是scoket,IO,NIO,多线程。反射,动态代理。注解,动态编译,其他的就是模型,就是设计思想,比如增么装载的bean,怎么实例化的实现类,JDK很多都是自己使用的SPI,其他框架有可能自己写了一套SPI,这样理解了那么就能自己写一套框架【看一遍《0写WEB框架就行了》,不推荐自己动手造*,但是自定义注解,反射,代理这些技术要会使用】
编程的java思想。所以必须要基础扎实。这些都扎实了,学习技术就快了,就是学习某一个自己不会的技术,某一个新技术,只需要学习其模型就好了。比如我学习springboot和springcloud,一两周就搞定了(使用层面),尤其是我深入了dubbo原理,springCloud学起来异常轻松。
(同类技术,协议原理不一样)
结合项目实战,将技术能用到项目中,一边学技术,一边锻炼工程能力。
互联网进阶中高级20-25K:(后续更新)
这部分还没有经验(本人暂有半年学习规划:初步学习并发控制+JVM+JMM)
2个月:
将四本并发处理书籍读一遍,作为预习。
了解JMM概念,
读(预习)一半周志明JVM。
3-4个月:
学完JMM,周志明JVM第一遍精读完成。()
并发处理四本书精读一遍。
学完JDK cureent包下并发集合类,读部分源码。
选择某一框架(SpringMVC或者dubbo)通读源码。
了解:
学习数据库分表分库,数据库集群化
学习ngix
各种锁
(后续更新)
…………
互联网高级25K-40K:
未知………
(重点还是在:高可用+高并发的构建与手段)
注:
里面多次说到了框架源码学习,有人认为工作中根本用不到,没什么用。
其实不对:
- 如果能读懂某一框架源码:那么你的基本功是非凡的。可以说非常牛。因为涉及到的知识太多了。
- 如果你看过某一框架源码,那么你说出来,别人也会觉得技术应该不错。
- 我曾去京东面试,当时因为我说我用过dubbo,就问我看过dubbo源码没,还被问到了JVM调优。我猜测问这些问题一个就是看你的基本功在哪个层次,一个就是考察你是否喜欢钻研技术。随后我就回来看了dubbo源码。看框架源码是异常的痛苦与艰难。