前言:本文主要说说Java的学习路线,学习途径,学习方法。
一.学习路线
我个人推荐最扎实的学法,就是不仅限于语言的学习,对计算机基础也要系统的学习,基础是内功,千万不能小觑,如果你想成为一名真正优秀的程序员,内功必须扎实,否则当出现瓶颈的时候就追悔莫及了。
1.计算机基础
数据结构:链表,栈,队列,树,图,排序算法等。
计算机网络:OSI模型,TCP/IP协议,UDP,HTTP/HTTPS,DNS,XSS/CSRF等。
操作系统:进程/线程/死锁,存储管理,文件系统,输入输出系统等。
计算机组成原理:二进制运算,存储/Cache,中断,CPU原理等。
这四门是计算机学科的基础课程,原理非常之重要,是你理解计算机原理的必经之路,这里只是罗列它们当中我认为最重要的基础,当然这四门学科想要弄懂弄透,那还是要花费很大精力的。
2.Java基础
集合:ArrayList/LinkedList,HashMap/HashTable/ConcurrentHashMap,HashSet,TreeMap,BlockingQueue等。
IO:BIO,NIO,AIO,多路复用的模型(select,poll,epoll区别)
多线程:锁,线程创建,线程通信,JUC包,线程池等。
JVM:内存模型,内存划分,类加载机制,垃圾回收,调优等。
Java8/9/11新特性:Lambda,StreamAPI,ZGC等。
3.JavaWeb
前端:HTML/CSS/JavaScript/jQuery/BootStrap/Ajax/JSON等。
Tomcat/Weblogic:tomcat架构原理,weblogic集群搭建。
HTTP协议:协议组成,http1.0/1.1/2.0区别,常见协议状态
XML:命名空间,DOM/SAX/DOM4J解析。
Servlet/JSP:Servlet生命周期,转发/重定向,过滤器/监听器,Cookie/Session,EL表达式,jstl标签库。
4.框架
Struts2/SpringMVC:Struts2虽然被诟病过时,但还有很多老系统在用,两者可以对比着学。
Spring:Spring是重中之重,要对Spring ioc/aop原理深入学习,会使用Spring注解。
Mybatis/Hibernate:两者都得学,Mybatis的通用Mapper和Mybatis-plus推荐学习,Hibernate则是后续SpringData JPA的默认实现,两者有各自独自的优势,可以对比着学。
要能熟练掌握SSH和SSM的整合开发,其实大量工作中的项目还是基于这种经典MVC模式。
除此之外如果你有极客精神,可以学学Blade和JFinal框架,可以进行极速开发。
5.J2EE相关组件
搜索:solr和elasticsearch。
安全:shiro和SpringSecurity。
网络:Netty。
5.分布式/集群
理论:CAP,BASE,了解Paxos和Raft算法。
Nginx:高性能服务器,主要做反向代理和静态分离,加强版阿里的Tengine也值得关注。
Dubbo: 阿里出品的高性能RPC框架。
Zookeeper:分布式协调服务。
消息中间件:ActiveMQ,RocketMQ,RabbitMQ,Kafka,推荐学习RabbitMQ。
7.微服务
微服务概念(和分布式SOA的细微区别)
详情参见马丁·福勒论文,https://martinfowler.cn/bliki/MicroservicePrerequisites.html。
SpringBoot:Spring的集大成者。
SpringCloud:微服务体系套件。
SpringData JPA:DAO层解决方案。
JHipster :Java代码的脚手架,最时髦的Java解决方案集合。
Docker:容器部署。
8.数据库
数据库连接池:C3P0,DBCP,Druid,深入学习Druid即可。
关系型数据库:MySQL,Oracle,SQLServer,PostgreSQL,主要以MySQL为主,值得留意的是PostgreSQL目前也越来越流行。
非关系型数据库(NoSQL):Redis,MongoDB,Memecache。主要以Redis为主。
9.工具
IDE:eclipse/idea,idea是大势所趋,不过eclipse短期也难以被取代,工具而已,不必特别纠结。
构建工具:以Maven为主,不过也可以学习一下Gradle。
版本控制:集中式SVN和分布式Git,Git/Github需要深入学习,尤其是要把github当做宝库,多浏览多学习。
持续集成:Jenkins。
10.方法论
软件设计原则。
23种设计模式。