摘要: 1. 前言 无限制创建线程的不足: 1) 线程生命周期开销高; 2) 资源消耗大,尤其是内存。如果可运行的线程数量多于可用处理器的数量,那么有些线程将闲置。大量空闲的线程占用许多内存,给垃圾回收器带来压力(频繁 stop the world)。所以,如果已经拥有足够多的线程使所有CPU保持忙碌状态, 阅读全文
posted @ 2019-07-27 16:53 X_huang 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 1. 闭锁(countDownLatch) 1.1. 作用: 相当于一扇门,在闭锁到达结束状态之前,这扇门是关着的,所以的线程都不允许通过,当闭锁到达结束状态,这扇门打开并允许所有的线程通过。在闭锁达到结束状态后,将不会再改变状态,这扇门永远处于打开状态。 1.2. 闭锁使用场景 1) 确保某个计算 阅读全文
posted @ 2019-07-20 17:01 X_huang 阅读(436) 评论(0) 推荐(0) 编辑
摘要: IoC 概念 所谓控制反转,指的是获取对象的方式发生了反转。在传统面向对象编程中,我们都是在要使用某一个对象实例时创建一个对象实例,对象的控制权在我们自己手里,如果对于一个接口的多个实现类,我们要自己选择判断使用具体的实现类,使得我们进行软件开发耦合度高,维护起来不方便;spring的IOC则是将某 阅读全文
posted @ 2019-06-16 22:07 X_huang 阅读(572) 评论(0) 推荐(0) 编辑
摘要: AVL树(平衡二叉树) AVL树本质上是一颗二叉查找树,但是它又具有以下特点: AVL树解决了普通二叉查找树演化为线性导致线性查找时间问题 AVL树平衡的操作主要有: 1、左-左型:做右旋。 2、右-右型:做左旋转。 3、左-右型:先做左旋,后做右旋。 4、右-左型:先做右旋,再做左旋。 右旋:把左 阅读全文
posted @ 2019-06-01 21:56 X_huang 阅读(805) 评论(0) 推荐(0) 编辑
摘要: 三范式 第一范式(1NF) 在一张表中,组成表的每一个属性都是不能再分的属性,如果满足这一规则,则该表符合第一范式。 表1(不符合) 表2(符合) 表1的Info字段可以再拆分,故不符合1NF;表2所有属性不可再分,符合。 第二范式(2NF) 首先要满足1NF,表中的每一个非主属性必须完全依赖于本表 阅读全文
posted @ 2019-05-30 23:31 X_huang 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 线索二叉树 /** * 线索二叉树:普通二叉树的遍历操作,需要用到栈来实现递归操作,而线索二叉树,因为其保存了前驱和后继,在遍历操作中不需 * 要使用栈来递归,直接根据后继一直遍历,直到回到初始头结点,对比普通二叉树避免了频繁的入栈出栈操作,故在时间和空间上 * 都比较节省 * @author HP 阅读全文
posted @ 2019-05-12 18:12 X_huang 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 上次讲到HashMap,但是HashMap并不是线程安全的,那么有哪些线程安全的Map或者是实现线程安全的map呢? 1、 HashTable(已弃用),使用的是内置对象锁对map进行同步,并发执行的效率比较低(key和value均不能为null,因为这是用在多线程的,当get返回null时,无法确 阅读全文
posted @ 2019-05-11 01:07 X_huang 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 阅读本文假设你对java内存模型已有一些了解。 1、Java虚拟机中哪些内存需要回收? 先来看看jvm内存模型,如下图 线程隔离的区域随线程而生,随线程而灭;程序计数器可保存着虚拟机字节码指令的地址(可以看做是当前线程所执行的字节码的行号指示器);栈中的栈帧(与方法关联)随着方法的进入和退出执行压栈 阅读全文
posted @ 2019-05-05 10:47 X_huang 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 题目描述如下: 能立刻想到的就是爆破,先试试无脑爆破,时间复杂度O(n^3),然后毫无意外的超时了,爆破代码如下: public String longestPalindrome(String s) { int max = 0; int length = s.length(); // 字符串长度只有 阅读全文
posted @ 2019-04-28 17:56 X_huang 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 可见性 所谓可见性,指的是当一个线程修改了对象的状态后,其他线程能够看到该对象发生的变化。在单线程环境下,向某个变量写入值,然后在后面的操作再读取,在这个过程中该变量的值对该线程来说总是可见。但是,在多线程环境下,可见性就不一定等到保证,例如,对于一个共享变量 share = 0 来说,线程1和线程 阅读全文
posted @ 2019-04-17 19:27 X_huang 阅读(196) 评论(0) 推荐(0) 编辑