一帆磨砺

生活所迫,一叶孤舟

0%

引用参考文档链接

  1. jdk11特性列表
  2. nest class和inner class的区别
  3. JDK11中增加了一个常量池类型:CONSTANT_Dynamic
  4. new-jvm-features-jdk-11
  5. hands-on-java-constantdynamic

写在开头

  1. 直接影响编码的功能几乎没有,大多数都是幕后工作的更新
  2. ZGC是一个核心内容,不过JDK11中是实验版
  3. JFR的加入方便了性能监控,建议上手实际操作几次,非常好用
  4. 加密算法的几个新增实现未进行深入了解(未涉足领域,功力不足)
    阅读全文 »

引用参考文档链接

  1. JDK10特性列表
  2. megamorphic-virtual-calls
  3. class-data-sharing
  4. javah

写在开头

  1. JDK10的更新内容不多,核心就是局部变量类型推断
  2. Heap Allocation on Alternative Memory Devices可能在未来会发挥相当重要的作用,不过是在运维层面了,是和机器的物理架构相结合的技术
  3. 有一些面对运行性能的优化,比如G1的全并行Thread-Local Handshakes基于 Java 的 JIT 编译器,分别针对垃圾回收、多线程场景、代码编译,并且这几项技术启用需要做额外的性能测试,以确认是否在生产环境使用
阅读全文 »

引用参考文档链接

  1. Oracle Java9官方文档
  2. JDK 9 Release Notes
  3. Module System Quick-Start Guide
  4. JDK9迁移指南
  5. Milling Project Coin
  6. jlink: The Java Linker
  7. The Java Shell

写在开头

  1. 本文仅涉及部分JDK9变更,完整可查看官方文档Standard Edition What’s New in Oracle JDK 9
  2. 除了模块化,其他改动对日常开发影响不多,可以着重关注模块化和接口私有函数
  3. 在后续的学习中发现,在模块化后,类似于ServiceLoader.load的类加载的方法都有变动,大多数都和模块之间的类可视化有关,如果是从低版本迁移,需要额外注意
阅读全文 »

写在开头

  1. 本书适合刚学习编程,并对编程十分感兴趣的同学,此书无法立刻提升编码能力,仅仅只能提供认知拓展;
  2. 设计模式是一种经验总结,并非发明创造,因此不能刻版的使用,需要因地制宜,甚至有些场景下,不适用任何设计模式解决问题反而会是最佳方案;
  3. 有一定的项目编码经验的同学更适合其他学习方式,如文字版的网页菜鸟教程或者视频类其他知识分享者上传的视频教程,本人更推荐文字版的,比较方便,更能快速的了解;
  4. 学习设计模式主要核心是弄清楚要解决的问题即使用场景,最好是能根据教材/教程的案例,自己手敲一遍代码并运行去理解,仅仅靠定义去了解是远远不够的;
  5. 还想更进一步了解使用场景的同学可以去阅读各大开源项目的代码,尤其是中间件一类,因为更多会考虑性能和拓展问题,设计模式使用频率会远高于一般的业务项目;
  6. 思维导图中的一些优点缺点是结合部分网络教程的观点罗列而来,并非标准答案;
  7. 本文的思维导图仅是本人的读书笔记,不可作为权威版本去学习参考,可以简单浏览,如果感兴趣可以购买正版书籍学习;
    阅读全文 »

写在开头

  1. 本书推荐按章节顺序读取,但是不同篇章需要不同程度的深入了解;
  2. 对于Java开发人员,本书最重要的篇章就是自动内存管理机制部分(第2章-第5章),可以在日常的OOM和StackOverflow场景中提供巨大帮助,尤其其中提供的几个案例,更能帮助读者更好的理解内存管理;
  3. 其次就是高效并发篇章,该篇章可以帮助读者更深入的理解并发竞争的模型,理解为什么死锁,不过部分内容除了需要本书的其他篇章内容支撑外i,还需要额外了解操作系统知识(信号量),并且无死锁场景的排查案例,因此需要读者需要额外通过其他方式学习如何在死锁时定位;
  4. 其他篇章内容对于Java开发人员基本只需要阅读产生印象即可,无需更深入了解(对大部分常规日常工作无明显帮助);
  5. 平台(中间件)开发人员,需要额外深入阅读虚拟机执行子系统篇章,尤其是类加载内容,其中的双亲委派模型尤为重要;
  6. 思维导图不适合作为学习材料,可以简单一阅,建议购买正版书籍。
    阅读全文 »

写在开头

  1. 扩容是一个特别耗性能的操作,因此建议使用HashMap时,尽量指定一定大小的初始容量
  2. HashMap是线程不安全的,并发环境中建议使用ConcurrentHashMap
  3. JDK8中引入的红黑树优化了大量hash碰撞时的性能
  4. HashMap中的红黑树代码作者实在没力气看了,因此这篇文章不涉及内部红黑树分析
  5. 该篇文章纯粹是作者个人观点,并非官方权威,阅读请勿迷信
    阅读全文 »

Tips:

  1. 红黑树是搜索二叉树的变种,可以先行理解AVLTree
  2. 根据多方资料查找,很多人说2-3树和2-3-4树有助于理解红黑树(个人未进行深入了解,有兴趣可以自行搜索相关资料,或者等我再一次诈尸) 红黑树是2-3-4树的一种等同。换句话说,对于每个2-3-4树,都存在至少一个数据元素是同样次序的红黑树。在2-3-4树上的插入和删除操作也等同于在红黑树中颜色翻转和旋转。这使得2-3-4树成为理解红黑树背后的逻辑的重要工具,这也是很多介绍算法的教科书在红黑树之前介绍2-3-4树的原因,尽管2-3-4树在实践中不经常使用。 (wiki)
  3. 红黑树与AVL树不同,不具备部分AVL树的特性,如:每个节点的左右节点的高度差值不超过1
  4. 关于为什么新增节点一定是红色,个人未找到合理解释(目前仅理解为红色可以避免部分需要修复的情况),可能会在2-3-4树中找到原因

demo代码
主要参考于TreeMap

阅读全文 »