自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 读ngx_hash_wildcard_t有感

读了wscschool的nginx教程,感觉里面的初始化通配符的哈希表的方式很巧妙,记录一下。nginx根据不同的通配符匹配模式初始化哈希表。只记录通配符在前的匹配模式,通配符在后的匹配模式相对简单,类推即可1. 对于\*.abc.com这种通配符在前的匹配模式Q:得到一个key值如何确定其是否能与\*.abc.com通配符匹配呢?A:逆向匹配,首先将key以"."进行切分,判断最后一块的值是否是com,是的话向前进一步判断下一块的值是否是abc,是的话进一步判断是否有下一块,有的话命中。

2022-01-20 16:29:52 1611

原创 2021-05-04

关于protected修饰符的用法子类与基类不在同一包中,那么在子类中,子类实例可以访问其从基类继承而来的protected方法,而不能访问基类实例的protected方法//示例一package p1;public class Father1 { protected void f() {} // 父类Father1中的protected方法}package p1;public class Son1 extends Father1 {}package p11;pub

2021-05-04 11:46:06 75

原创 2021-04-28

java对象占用大小以ArrayList对象为例,使用jol进行分析public static void main(String[] args){ System.out.println(ClassLayout.parseInstance(new ArrayList()).toPrintable());}输出java.util.ArrayList object internals: OFFSET SIZE TYPE DESCRIPTION

2021-04-28 15:56:56 80

原创 2021-04-10

源代码public static void main(String[] args) { String s = new String("1"); String s2 = "1"; s.intern(); System.out.println(s == s2); String s3 = new String("1") + new String("1"); String s4 = "11"; s3.intern(); System.out.p

2021-04-10 16:45:53 67

原创 2020-12-18

ForkjoinPool的ctl变量初始化赋值解析private static final int AC_SHIFT = 48;private static final long AC_MASK = 0xffffL << AC_SHIFT;private static final int TC_SHIFT = 32;private static final long TC_MASK = 0xffffL << TC_SHIFT;long np =

2020-12-18 22:03:39 108 1

原创 2020-12-09

currenthashmap 1.81. 计算hash值时在原有高16位异或低16位的基础上与0x7fffffff以减少hash冲突2. 数组上的元素可能是代表链表头结点的Node,也可能是TreeBin,TreeBin中记录了红黑树的根节点3. 使用unsafe类的cas方法直接原子性地操作内存,修改获取变量值4. TreeBin的hash值等于-2,链表Node的hash值大于05. table初始化时使用懒加载,最初只是设置初始化容量大小。真正的初始化放在第一次执行put时6.

2020-12-10 11:14:58 93

原创 2020-12-10

currentHashMap定位获取指定index的Nodestatic final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { return (Node<K,V>)U.getObjectVolatile(tab, ((long)i << ASHIFT) + ABASE); }i是获取的Node在数组中的索引值正常的处理是采用arrayBaseOffset +

2020-12-10 11:10:13 218 1

原创 2020-12-08

Integer.numberOfLeadingZerospublic static int numberOfLeadingZeros(int i) { if (i == 0) return 32; int n = 1; if (i >>> 16 == 0) { n += 16; i <<= 16; } //1 i的高16位为0 if (i >>> 24 == 0

2020-12-08 19:26:47 75

原创 2020-12-05

HashMap resize部分解读if ((e.hash & oldCap) == 0)resize中有如此判断,意思是如果e的hash值与老表的容量进行与运算为0,则扩容后的索引位置跟老表的索引位置一样如何理解首先e的hash值与老表的容量进行与运算为0,例如老表容量为16,即10000,则说明e的hash值倒数第5位为0原来索引位置为hash值的低4位,现在扩容后索引位置为hash值的低5位,但是其实都是一样的,因为倒数第5位为0...

2020-12-05 14:58:42 89

原创 2020-12-04

HashMap 定位桶方法h & (length-1)为什么这个方法能达到取余的效果?首先,hashmap中桶的个数length是2的整数幂,这样length-1就是一个低位全是1的数。例如length=16,length-1=15,相当于1111h & (length-1)后,h的高位全部清为0,只保留低位数高位都是length的整数倍,取余时不需要关心。这样只保留了对于取余起作用的低位,低位就是余数...

2020-12-04 16:40:00 74

原创 2020-12-04

HashMap tableSizeFor解读static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; r

2020-12-04 15:44:33 77

原创 2020-11-20

SynchronousQueue源码总结1. 两种模式1.1 公平模式使用内部类TransferQueue单向队列实现1.2非公平模式使用内部类TransferStack栈实现2.TransferQueue2.1 单向链表,链表元素为QNodestatic final class QNode { //标识当前node的后继节点,通过next组成链表结构 volatile QNode next; //当前节点存储的数据 volatil...

2020-11-20 15:06:32 117

原创 2020-11-16

label在for循环语句中的使用public class Label { public static void main(String[] args) { /** * for循环嵌套for循环,通过continue label直接继续外层for循环的遍历 跳过剩余的内层for循环 */ L1: for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { if (i > .

2020-11-16 10:38:38 67

原创 2020-10-24

java security policy文件内容解读 grant codebase "file:C:/Users/workspace/project/bin" { permission java.io.FilePermission "C:/Users/workspace/project/bin/*", "write"; }; 授予file:C:/Users/workspace/project/bin 下的代码(class类或者jar包)对C:/Us.

2020-10-24 16:50:12 77

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除