Java要学到什么程度才能叫精通呢?
首先Java平台博大精深,一直被誉为互联网霸主;我们都知道互联网技术结构之复杂,所以Java的技术组件,架构也非常之多和复杂;正所谓万丈高楼平地起对吧,想要精通Java,那么首先基础知识必不可少,基础知识我有分为两部分:
1:计算机基础知识
Java也是一门计算机语言,当然暂且不表Java的特点以及和其他语言的对比之类的话。既然是计算机语言那么计算机的基础知识肯定是必备的,操作系统(这个知识最起码在学习Java多线程的时候才能真正的说理解多线程以及多线程调度等等,还有进程管理等等要不很多人动不动就是什么JVM调优,垃圾回收器呀什么什么的,JVM调优并不是简简单单的改动点参数,如果仅仅是改动一点参数就叫JVM调优...对吧其他的这里就不说了);
计算机网络基础知识(最起码的你知道HTTP,TCP/IP,UDP等最基本的这些协议吧,网络通信原理)。
2:程序基础知识
程序的基础知识:
计算机语言的运行原理(例如二进制的计算肯定比十进制的快这些基本的运行原理,还有就是要不你怎么理解JVM对吧等等);
算法(重要,很多互联网大公司很看重这个,算法都不懂,你还说什么代码运行效率;还有就是JDK源码你怎么看都需要算法知识)
数据结构(重要,你去看看Java集合类的源码,哪一个不是数据结构的东西)
下来进入到Java中来说
首先还是那句话,精通一门语言,那么你必须要从它的平台内部开始,所以JVM就是第一个需要深入了解的东西;JVM怎么进行内存管理(这就常见的堆,栈,方法区,程序计数器等等),ClassLoader(类加载的机制的层次:Bootstrap ClassLaoder,Extension ClassLoader,System ClassLoader,以及自定义类加载器,双亲委派模式原理,Clasl文件的显示加载与隐式加载),GC管理(前面了解了JVM的内存管理,这个地方才能知道GC的作用,知道新生代,老生代,永久代,GC收集算法,强引用,弱引用,软引用,虚引用等等);常用的一些Java命令(例如:Java反编译,性能监控,故障处理)这是必备的就不多说
Java基础知识
Java基础知识比较多就不一一罗列,但是例如String,StringBuffer,StringBuilder,Integer,ArrayList , LinkedList、Vector,Stack, HashMap , LinkedHashMap , TreeMap , CouncurrentHashMap、HashSet , LinkedHashSet , TreeSet , HashMap,Queue ,Deque,BlockingDeque, BlockingQueue, TransferQueue(太多了就不全列举出来)这些基本的集合,线程,线程锁,线程池,Socket,反射等类的源码要熟读;
JavaWeb部分
基本的网络知识,网络协议知识;Servlet标准,JSP的原理(虽说现在这些直接使用的少了,但是基础知识在理解其他知识绝对需要);服务器的配置和管理(这部分一会在分布式中详细说);AJAX,JSON等等;数据池,数据缓存,性能优化等等
mybatis , Spring(这个厉害了,这个都成了分布式系统生态链),Spring基础的IOC,AOP(重复一次,不是说你会使用和配置,而是要深入理解以及理解源码),SpringMVC,SpringBoot(这个加上maven,对于构建微服务有着非常重要的地位),SpringCloud,RestFull,RPC,RMI,SOAP协议,微服务的管理(Eureka,Zookeeper等),负载均衡(Nginx,Ribbon等),Dubbo,Hystrix(微服务熔断保护),Config(远程配置与管理维护),Zuul(路由),Feign,MQ(消息中间件,RabbitMQ,kafka,ActiveMQ等等),elasticsearch(搜索服务器),Memcache等等
数据库方面:
先说数据库常用的产品:mysql,oracle,redis,mongodb 这些都要会;
mycat的读写分离,数据库集群
mysql的存储引擎(这个不但要了解理论知识还要知道实际使用),索引(数据库高效的最基本的东西),存储过程(这里申明一下不是说会定义一个存储过程不是说语法,而是存储真正在实际中的运用)等,Oracle的内存结构,进程结构,SQL优化,数据库服务器管理调优等,其他的就不过多赘述;
redis,mongodb(这个不用多说,现在使用非常广泛)
操作系统:
Liunx一定要熟练使用(现在好多技术都是更加适应Liunx,再说服务器大部分肯定是Liunx居多)
实战:
所有的理论都需要实践去检验,所以最终要成为高手或者说是所谓的精通,一定且唯一的校验标准一定是在实际的项目中来完成。
所以想要精通,那么一定是非常扎实的理论,对理论能有自己的领悟,然后用来解决实际问题;在实际的问题中夯实自己的知识。
学习不要走马观花的学,每个知识重点大纲,就是学习路线都是根据每一天市场上多数公司用到的新技术整理,在学习的时候还需要结合练习题来做这里的话我也将我之前在学习过程中用到的一些学习资料整理成了文档,以及我自身之前的一个面试文案和知识点补充,有需要的朋友可以加我的QQ群697888503,这里也希望大家最终都能够学有所成,学习编程不是一天两天的功夫,勤能补拙才是硬道理,祝大家最终都能成为一名合适开发攻城狮。