Java学习掌握技能

Java方面的技能来说,主要有两个大的部分,包括Java编程和JVM。

先来看一下Java编程部分,这也是Java工程师最最基础的技能。

  • IDE: 目前用的最多的Java IDE当属Eclipse和Intellij IDEA。前者是老牌IDE,逐步淘汰了Jbuilder以及Netbeans,占领了大部分Java IDE市场。后者则是后起之秀,由于其增量编译、智能分析代码等带来的性能提升,现在已经得到了大规模使用,大有取代Eclipse之势。
  • 核心语法:目前用的最多的当属JDK6的Java语法。而到了Java7引入了try with resource、switch string、diamonds等语法。Java8则又引入了lambda、stream等语法。
  • 集合类:集合类是Java语言中非常精华的部分,包括:HashMap、ArrayList、LinkedList、HashSet、TreeSet以及线程安全的ConcurrentHashMap、ConcurrentLinkedQueue等线程安全集合。了解他们的实现原理以及查询、修改的性能以及使用场景是非常必要的。
  • 工具类:Google Guava、Apache commons、FastJson提供了很多JDK本身没有的工具类、集合等。此外,ASM字节码操作以及CGLIB代码生成能够提供更底层的java编程功能。
  • 高级特性:抛开Java核心的基本编程,并发编程、泛型、网络编程、序列化RPC都属于Java的高级编程特性。其中并发编程需要掌握Executors提供的各种并发工具、Java7带来的fork/join框架以及CountDownLatch、Semaphore、CyclicBarrier等同步工具;网络编程要区分好BIO、NIO以及AIO;序列化中除了JDK自带的序列化实现之外,Protobuf和Kryo是比较高效的第三方实现;RPC的实现中,Thrift、Hessian、Dubbo以及RMI则是比较常用的几个协议,其中的Hessian是基于Http协议的,Dubbo是基于TCP协议,而Thrift则同时支持。
  • JavaEE: JavaEE现在是Java应用最为普遍的一个领域。Servlet是JavaEE中最根本的组件之一。而Servlet3.0带来的异步Servlet提高了其处理请求的性能。
  • 项目构建:目前用的最多的Java项目构建工具包括Maven和Gradle,提供了源码包依赖管理、编译、打包、部署等一系列功能。
  • 编程框架:Spring是Java编程中避不开的一个框架,发展到现在除了Spring核心的IOC、AOP之外,SpringMVC、Spring Data、Spring Cloud、Spring Boot等等都给Java开发者们带来了开发上的便利,大大提高了开发效率;ORM框架MyBatis也是Java领域比较火的框架之一,实现了数据库记录到Java对象的映射操作;Jersey则提供了从客户端到服务端的一整套符合RESTful规范的开发框架。此外,Vert.x、Spring Flux这种非常适用于IO密集型应用的异步响应式编程框架也开始兴起。
  • 测试:测试是任何编程都需要的一步。黑盒测试主要指的通常进行的功能测试,白盒测试则主要指的对代码功能、质量进行的测试。此外,关键的单元测试则是开发工程师需要着重注意的地方,“测试驱动开发”的理念也是值得推崇的开发方式。JUnit是目前Java中实现单元测试的主流方案。

一般来说掌握上面所述的Java编程技能是能够应付大多编程工作的。但是如果在代码层面已经做到最大努力却还是达不到性能要求的时候,就需要在JVM虚拟机层面做一些努力了。可以说掌握JVM相关技术是Java开发进阶的一个关键步骤。

  • 虚拟机实现: Java的虚拟机实现除了我们常用的HotSpot外,还有JRockit、J9以及移动平台的Dalvkit、ART(Android4.4后引入)。我们通常所描述的JVM优化绝大多是是针对HotSpot虚拟机来说的。
  • 类加载机制:JVM的类加载机器遵循双亲委派原则,即当前类加载器需要先去请求父加载器去加载当前类,如果无法完成自己才去尝试进行加载。OSGI框架则打破了此机制,采用了平等的、网状的类加载机制,以实现模块化的加载方案。
  • 运行时内存组成: 程序计数器、堆栈、方法区、堆、堆外内存,这些一起组成了JVM的运行时内存。
  • Java内存模型:Java的主内存+线程私有内存的模型是线程安全问题产生的根本。
  • GC原理和调优:与C、C++这些语言相比,GC是Java的优势,但因为GC的细节被JVM屏蔽了,在对内存、性能要求非常苛刻的情况下难以进行自由控制,某种程度这也是劣势。如果想在某些场景下发挥GC的最大性能,能做的就是对GC的各种参数做优化配置,如新生代和老年代的垃圾回收器选择、各种垃圾回收参数的配置等。此外,很多时候由于代码质量或者外部客观因素,造成了JVM频繁GC,需要使用相关的工具快速进行问题定位和解决。
  • 性能调优和监控工具:JDK自带了很多强大的调优和监控工具,包括jmap、jstack、jcmd、jconsole、jinfo等。此外,btrace是一款非常强大的在线问题动态排查工具,能够无须重启Java进程,动态的插入一些代码逻辑,拦截代码执行逻辑打印日志,从而排查问题。

 

本内容来源于《Java工程师修炼之道》

 

你可能感兴趣的:(Java学习掌握技能)