![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 88
lanhai_scut
这个作者很懒,什么都没留下…
展开
-
HashMap原理
hash 函数的实现 在 get 和 put 的过程中,计算下标时,先对 hashCode 进行 hash 操作,然后再通过 hash 值进一步计算下标 resize 的实现 从 16 扩展为 32 时,具体的变化如下所示: 因此元素在重新计算 hash 之后,因为 n 变为 2 倍,那么 n-1 的 mask 范围在高位多 1 ...原创 2018-02-28 22:17:46 · 102 阅读 · 0 评论 -
JVM原理2
回收废弃常量回收废弃常量与回收Java堆中的对象非常类似。以常量池中字面量的回收为例,假如一个字符串“abc”已经进入了常量池中,但是当前系统没有任何一个String对象是叫做“abc”的,换句话说,就是没有任何String对象引用常量池中的“abc”常量,也没有其他地方引用了这个字面量,如果这时发生内存回收,而且必要的话,这个“abc”常量就会被系统清理出常量池。常量池中的其他类(接口)、方法、...原创 2018-02-28 22:38:31 · 119 阅读 · 0 评论 -
JVM原理1
1. 可作为 GC Roots 的对象:虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方法栈中JNI(即一般说的Native方法)引用的对象。 2. 强引用(StrongReference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(PhantomReference)...原创 2018-02-28 22:37:26 · 126 阅读 · 0 评论 -
并发原理2
如果在一个整型变量上维护多种状态,就一定需要“按位切割使用”这个变量,读写锁将变量切分成了两个部分,高16位表示读,低16位表示写,划分方式如图5-8所示。假设当前同步状态值为S,写状态等于S&0x0000FFFF(将高16位全部抹去),读状态等于S>>>16(无符号补0右移16位)。当写状态增加1时,等于S+1,当读状态增加1时,等于S+(1<<1...原创 2018-02-28 22:35:29 · 162 阅读 · 0 评论 -
并发原理1
volatile是如何来保证可见性? 如果对声明了volatile的变量进行 写 操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据写回到系统内存。 每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,当处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器的缓存行设置成无效状态。 当处理器对这个数据进行修改...原创 2018-02-28 22:33:51 · 113 阅读 · 0 评论 -
设计模式 - DesignPattern
1.设计模式的分类? 设计模式分为三大类: 创建型模式,共五种:工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 结构型模式,共七种:适配器模式,装饰模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 行为型模式,共十一种:策略模式,模板方法模式,观察者模式,迭代子模式,责任链模式,命名模式, ...原创 2018-02-28 22:30:56 · 222 阅读 · 0 评论 -
JSP相关
1.创建对象的几种方式? 1、使用 new 关键字 2、使用 Class 类的 newInstance 方法:这个 newInstance 方法调用无参的构造器创建对象 3、使用 Constructor 类的 newInstance 方法:这个 newInstance 方法调用有参数的和私有的构造函数 (Class 的 newInstance 方法内部调用 Cons...原创 2018-02-28 22:28:37 · 193 阅读 · 0 评论 -
SSH相关
1.MD5处理public static String md5(String str){ try { StringBuffer buffer = new StringBuffer(); char [] chars = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}...原创 2018-02-28 22:27:11 · 404 阅读 · 0 评论 -
线程安全原理
1*.怎么判断给出的类是否是线程安全的? 先行发生原则: 离散数学中曾经定义了“偏序”的概念,在Java中正是使用了这个概念。 偏序通俗的来理解就是拓扑结构,一个DAG。 如果操作A先行发生于B,那么B将能观察到A所做的所有事情(包括修改变量、发送消息、调用方法等)。 ...原创 2018-02-28 22:25:46 · 281 阅读 · 0 评论 -
树的实现
数组 表示的节点public class TreeNode { private Object mData; //存储的数据 private int mParent; //父亲节点的下标 public TreeNode(Object data, int parent) { mData = data; mParent = parent; ...原创 2018-02-28 22:24:24 · 290 阅读 · 0 评论 -
二叉树原理 - Binary Sort Tree BST
二分查找public class BinarySearchTree { private BinaryTreeNode mRoot; //根节点 public BinarySearchTree(BinaryTreeNode root) { mRoot = root; } /** * 在整个树中查找某个数据 * * @param...原创 2018-02-28 22:22:39 · 352 阅读 · 0 评论 -
红黑树原理
1.每个节点要么是红色,要么是黑色 2.根节点永远是黑色的 3.所有的叶节点都是是黑色的(注意这里说叶子节点其实是上图中的 NIL 节点) 4.每个红色节点的两个子节点一定都是黑色 5.从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点 性质 3 中指定红黑树的每个叶子节点都是空节点,而且并叶子节点都是黑色。但 J...原创 2018-02-28 22:19:35 · 1066 阅读 · 0 评论 -
JVM原理3
类加载的时机 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。注意,这里笔者写的是按部就班地“开始”,而不是按部就班地“进行”或“完成”,强调这点是因为这些阶段通常都是互相交叉地混合式进行的,通常会在一个阶段执行...原创 2018-02-28 22:39:51 · 119 阅读 · 0 评论