一帆磨砺

生活所迫,一叶孤舟

0%

写在开头

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

写在开头

  1. 本次场景发生于测试场景(万幸),触发原因为服务不可用,后台日志出现大量

    1
    java.io.IOException: Too many open files

    ,基本连接mysql/redis等等相关代码都会抛出此异常,因此面向搜索引擎得出结论,该进程文件句柄数已达到该进程的上限。

  2. 本文采取的测试方法基本都会对机器以及应用造成影响,因此请尽量不要在线上环境采取相同操作,以免产生不可预期的经济损失

阅读全文 »

写在开头

  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

阅读全文 »

Tips:

  1. 如果要在集合中使用自定义类,建议重写equals函数
  2. 如果集合内元素较多,使用结束后建议清空(GC)
  3. LinkedList所提供的原生函数无批处理,所以会有线程安全的假象,但是它并非线程安全,并且因为不想ArrayList提供批处理函数(函数内针对线程安全做了一定的处理),所以在使用LinkedList时需要格外注意
  4. 链表核心在于指针(即引用),可以先行了解这部分
  5. 本次未像ArrayList提供基础代码调用实现
    阅读全文 »

Tips:

  1. 如果要在集合中使用自定义类,建议重写equals函数
  2. 如果集合内元素较多,使用结束后建议清空(GC)
  3. BitSet
  4. ArrayList是非线程安全的
    阅读全文 »