如何增强性功能的方法 如何提高功能性质量( 二 )

  • JDK源码中包含大量Java的高阶知识,比如弱引用、Unsafe、CAS、锁原理、伪共享等,不看源码是很难学会这些知识的 。
  • JDK 源码阅读顺序:
    1. java.lang 包下的基本包装类(Integer、Long、Double、Float 等),还有字符串相关类(String、StringBuffer、StringBuilder 等)、常用类(Object、Exception、Thread、ThreadLocal 等) 。
    2. java.lang.ref 包下的引用类(WeakReference、SoftReference 等)
    3. java.lang.annotation 包下的注解的相关类
    4. java.lang.reflect 包下的反射的相关类
    5. java.util 包下为一些工具类,主要由各种容器和集合类(Map、Set、List 等)
    6. java.util.concurrent 为并发包,主要是原子类、锁以及并发工具类
    7. java.io 和 java.nio 可以结合着看
    8. java.time 主要包含时间相关的类,可以学习下 Java 8 新增的几个
    9. java.net 包下为网络通信相关的类,可以阅读下 Socket 和 HTTPClient 相关代码
    源码量那么大,不要妄想一口气都看完 。最好符合你当前的目的,比如你想搞懂多线程,你就主要看 JUC,想搞懂IO 就多去看 NIO,想看常量池就去看 ClassFileParser 。看模块的时候,要注意接口大于一切,或者说函数大于一切 。先不要妄想搞懂所有细节,先找几个比较关键的函数,搞懂函数的作用(比如应该仔细分析一下函数名称和参数名称)然后再往下进行 。
    在看 Java 类库的时候要多注意类是不是 abstract 的,是不是用的模板方法,多关注函数前的修饰词,这一般说明这个函数是给谁用的 。多注意这些细节而不是傻傻过一遍逻辑,能从里面学到不少关于设计的东西 。还可以注意什么地方是为了之前的设计而委曲求全的做法,毕竟一个这么多年的类库,肯定不是什么地方都是完美的 。
    JDK 源码一定要看 Java 并发相关的源码,Doug Lea 的并发源码比较漂亮,一行行都是精华,非常值得阅读学习 。
    工具看类库首推IDEA,多用 Structure,多自动生成 UML 图 。先搞清楚接口和类之间的关系,再去分析函数 。
    最后在学习源码的过程中,不要介意看别人的博客,不要介意手抄笔记 。
    Spring-FrameworkSpring Framework 是一个开源的 Java/Java EE 全栈(full-stack)应用程序框架,以 Apache 许可证形式发布,也有 .NET 平台上的移植版本 。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由 Rod Johnson 和 Juergen Hoeller 等开发 。Spring Framework 提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类 。
    如何增强性功能的方法 如何提高功能性质量

    文章插图
    图片出处:Spring官方文档
    Spring 是一个开源的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 。包括在此基础上衍生的 Spring MVC、 Spring Boot 、Spring Cloud 等,在现在企业中的应用越来越广泛 。无论是设计思想,代码规范,还是设计模式,接口设计,类加载,都是非常优秀的源码 。
    个人学习心得如下:先去看视频,大概熟悉一下 Spring 的使用情况,然后再去学习源码,此处可以阅读《Spring源码深度解析》,除了看书之外,记得打开 IDEA 查看对应的源码,如果能调试看看具体调用逻辑那就更好了 。
    Google GuavaGoogle Guava 是 Google 公司内部 Java 开发工具库的开源版本 。Google 内部的很多 Java 项目都在使用它 。它提供了一些 JDK 没有提供的功能,以及对 JDK 已有功能的增强功能 。其中就包括:集合(Collections)、缓存(Caching)、原生类型支持(Primitives Support)、并发库(Concurrency Libraries)、通用注解(Common Annotation)、字符串处理(Strings Processing)、数学计算(Math)、I/O、事件总线(EventBus)等等 。


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。