- 博客(7)
- 资源 (2)
- 收藏
- 关注
原创 d 111
将以下操作保存为bat文件(新建txt,然后将后缀改为bat),然后双击运行即可。reg delete "HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4" /v CacheID /f这个操作是删除BeyondCompare4注册表里CacheID的值;如果你不嫌麻烦的话,可以等到试用期到了之后自己手动执行该操作,重新打开之后试用期就又是30天了;另外你可以添加定时任务,比如每隔3周自动执行该操作,这样试用期就会自己刷新了
2021-12-10 13:53:05 193 1
原创 HashMap源码----jdk1.8 resize()方法实现
jdk1.7中,resize方法在并发时,有可能将链表变成环,导致程序无止境的循环下去。导致这种bug的产生原因是,扩容过程采用头插法,会导致链表方向逆向,从而有可以成环jdk1.8修改了1.7中的倒插法,链表的元素扩容之后,只可能分配到两个地方,1.当前所在的哈希表的下标处,2.当前所在的哈希表的下标处+当前哈希表的容量。 Node<K,V> loHead = null, loTail = null; Node<K,V>
2021-05-29 18:36:33 143
原创 HashMap源码之keyset
HashMap遍历的时候,推荐使用entrySet,不建议使用keySet。因为使用keySet相当于对hashmap遍历了两次,一次对key的遍历,一次对整个map的遍历。研究了一下keyset发现与我想象中的不太一样。原本以为hashmap会在put和remove中操作keyset,但是并没在put方法中找到任何关于keyset的操作。但是idea调试时候,能看到hashmap调用put后,keyset对应的容量变化了,并且key也能在keyset找到。一头雾水还是没能找到答案。度娘告诉我,ide
2021-03-30 11:12:39 346
原创 java中的==
java中的==,基础的用法就是,比较两者的内存地址。但是这么说是不准确的。如果比较的是数字,那么就是比较值。比如:public static void main(String[] args) { int a =10; long b =10; float d =10.0f; float e =0.5f; double f =0.5d; double c =10.0d; System.out.println(a==b); Sy
2021-03-22 22:29:20 1006
原创 循环体break、continue的另类语法
研究ThreadPoolExecutor源码中发现,addWorker方法有一个retry:的写法,第一次见,所以鼓捣了一下。retry并非关键字,这里类似goto语法中的标记位置。这里主要是为了跳出多层循环使用的,单层循环break和continue本身就可以实现。多层循环就需要在跳出的循环体之前做上标记flag:,然后内层循环跳出用break flag;或者continue flag即可...
2021-03-05 17:01:00 260
原创 聊聊ThreadLocal
重点理清楚Thread ThreadLocalMap ThreadLocal的关系。同时,ThreadLocalMap存在内存泄露问题。1.key是弱引用,存放的ThreadLocal对象,当其设置为null时,gc可以回收它。但是value是强引用。因此ThreadLocal的set方法会遍历Entry数组,所有key为null的,也会清除value。但是虽然这样设计能降低内存泄露的风险,但是依然存在泄露的可能。a.使用了Thread,但是没有调用set方法。b.使用了Thread,然后没
2021-03-04 16:36:32 118 1
原创 Shell中的变量与下划线、数字、英文字符的关系
工作中,遇到这种情况i=2echo $i_001终端输出的是空。说明:shell变量名后面要跟如下内容:非小写字符串(包括大小字符串)、数字或下划线,要么用转义字符“\”或者变量名用大括号。否则就会向本例中shell试图使用filename_作为变量名。除非出现$filename_已经存在的偶然情况,否则该语句不会打印任何内容(为null或空字符串)。在shell中,取一个变量值的方法$varname的语法实际上是常用语法${varname}的简写形式,不管是避免歧义,还是增加可读性
2021-01-21 09:39:24 907
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人