java自动装拆箱的小坑 但是因为b是个对象,当b为null时,由于自动拆箱的存在,b会调用intValue()方法拆成int类型,但因为b是null,所以会报NullPointerException。java的自动拆装箱是个语法糖,可以便捷开发人员的操作,比如比较Integer和int时可以直接用==,十分方便。
不需要提前设定线程数的CountDownLatch 借鉴CountDownLatch,每启动一个线程,就把AQS中的state减1,启动完所有线程后,调用await(int count) ,等待的同时把启动的线程数传进锁里,从而实现并发处理;如:查询es中的数据时,如果数据量很大,无法一次查完,就需要while循环,然后靠lastNum、searchAfter确定下次查询的起始点,分批次查出数据,再丢入线程池中处理;这样就无法在开始查询前确定需要启动多少线程,也就无法使用CountDownLatch。无法提前获知需要多少线程的场景;
JAVA--foreach与数组 今天发现了个奇怪的问题,直接看代码:package bingfa;import com.sun.javaws.IconUtil;import java.util.concurrent.ForkJoinPool;public class ForeachTest { private class Node{ private int num; private Node(int num) { this.num = num;
JAVA--HashMap在多线程下的死循环 注:文中图片来自《JDK1.7和JDK1.8中HashMap为什么是线程不安全的?》首先声明一点,在JDK1.7及之前才会发生这种情况。我们现在看下HashMap扩容的源码: void resize(int newCapacity) { Entry[] oldTable = table; int oldCapacity = oldTable.length; if (oldCapacity == MAXIMUM_CAPACITY) {
JAVA--不讲道理的Math.abs() 问题抛出:java.lang包中的Math类是个final类,其中有个方法叫abs()是取绝对值的,但我发现了个有趣的地方.Math.abs(Integer.MIN_VALUE)=-2147483648怎么样?是不是有种颠覆世界观的感觉?解析:首先,我们来看下Integer.MIN_VALUE的二进制:10000000 00000000 00000000 00000000其中首位是符号位,后边31位是数值位.然后,我们来看下Math.abs()的源码:public f
JAVA--这才是弱引用的最佳应用场景--ThreadLocal 写在前面:文中涉及到的代码均出自jdk1.8ThreadLocal是什么?ThreadLocal是线程本地变量,通俗点说就是如果一个变量是ThreadLocal类型的,那么每个线程都会创建这个变量的副本,并各自维护.这听起来有些像局部变量,是的,你可以将它理解为作用范围是全局的局部变量.(听起来真绕口,但是我觉的这样说你会懂的)它最经典的应用场景就是数据库的Connection,它可以保证同一个线程的多个方法使用同一个Connection,从而实现跨方法的事务控制.下面来看一个Thr
JAVA--关于ThreadLocal中的的几个疑惑 最近在看ThreadLocal的源码,有个问题让我纠结了好久。Thread有个ThreadLocalMap类型的变量叫threadLocals,这个变量存储着本线程所有的ThreadLocal对象。这个ThreadLocalMap类有一个Entry数组叫table。ThreadLocal有个变量叫threadLocalHashCode,它存储ThreadLocal对象的hashcode,它的作用是通过与table数组的长度做与操作,以此获得table数组的下标。这个hashcode与Thread
JAVA--HashMap查询的时间复杂度为什么是O(1) 写在前面HashMap查询的时间复杂度是O(1),这是众所周知的,但是你知道为什么是O(1)吗?正文要研究明白这个问题,我们需要从数组开始研究。数组查询的时间复杂度是O(1),为什么呢?因为在内存中,数组对象被创建时,是被分配了一块连续的内存地址,这块连续的内存地址上,存放着大小相等的引用类型,在默认情况下,如果虚拟机内存没有超过32GB,那么JVM使用的是32位的压缩指针,也就是说,在这块连续的内存地址上存放的是一个个的32位的压缩指针。现在假设我们的数组中存了10个对象,那么我们如果要找
JAVA--详细说说Float的二进制存储 基础知识:1. Float类型占4个字节,也就是32bit,其中最高位是符号位,1~9位是指数位,后边的23bit是数值位.如下所示:符号位 指数位 数值位 1bit 8bit 23bit 共32bit 2. 大部分数据的二进制形式都可以用科学计数法表示,即1.m*2^n这种形式,只要知道m和n,就能确定一个数值,float中指数位记载的就是n,数值位记载的就是m.简单示例:我们先来个简单的例子:4.5f是怎么存储的?1. 我们将十进制的4.5转.
杂记--如何重置Ubuntu16.04系统的root密码 写在前面对于长时间不用的服务器,忘记密码是件常发生的事,那么如何重置密码呢?正文我们可以利用Ubuntu的恢复模式来重置1. 重启Ubuntu系统,并在重启过程中一直按住Shift2. 选择Advanced options for Ubuntu3.选择recovery mode4. 选择root Drop to root shell prompt5. 直接回车6. 此时就进入root用户了7. 执行下面的命令充值密码passwd8....
数据结构--树--B+树--与B树的比较 定义:(以下来自百度百科)(1)每个节点至多有m个子女; (2)除根节点外,每个节点至少有floor(m/2)个子女,根节点至少有两个子女; (3)有k个子女的节点必有k个关键字。个人理解:网上对B+树的定义各不相同,如有的说有k个子女的节点必有k-1个关键字,如我研究树结构时常用的网站https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html就是如此,甚至百度百科自己也有自相矛盾的说法,如下:在定义中它说每个.
数据库--MYSQL--JAVA连接开启了SSL的MYSQL 先普及两个概念:keystore: 一个仓库,存储本地向CA机构申请的数字证书和本地的秘钥truststore:一个仓库,存储可信任的证书,也就是CA证书环境:数据库:MYSQL 5.7.29驱动: com.mysql.cj.jdbc.Driver 8.0.16介绍几个在连接时会用到的重要的参数:参数 说明 sslMode SSL的连接模式 useSSL 是否建立SSL连接 verifyServerCertificate 是否需要检验my...
数据库--MYSQL--SSL连接情况分析(5.7及以上) B:大哥!!!QAQA:咋了?B:赵傻子监控了我的数据库操作记录!!连我喜欢丽丽的秘密都被他知道了!我不活了!!QAQA:咋监控你的?它有你数据库的账号密码?B:不是,它通过通过工具从网络上抓包,把我的数据库操作记录都抓到了!!你看!!!B:这是他监控的信息!!!A:哦,tshark啊,这工具确实可以用来抓包B:大哥,咋办啊,我这都不敢操作数据库了QAQA:别哭了,你开启下数据库的SSL连接不就好了B:什么东东?A:简单来说就是开启SSL后就相当于为你传送的数据加
网络安全--数字签名/数字证书 对称加密:未加密的信息+秘钥 --> 加密的黑盒子 --> 加密后的信息加密后的信息+秘钥 --> 解密的黑盒子 --> 未加密的信息非对称加密:未加密的信息+公钥 --> 加密的黑盒子 --> 加密后的信息加密后的信息+私钥 --> 解密的黑盒子 --> 未加密的信息既可以公钥加密,私钥解密也可以私钥加密,公钥解密数字签名:A:我要给你发送条消息B:这消息万一被人改了怎么办?A:我会签上我的大名B:怎么签.
数据结构--树--红黑树--Java实现检验和删除 写在前面今儿个周末,终于有时间把前两天写的关于红黑树删除部分的代码进行测试一下,现在测试完了,暂没有发现问题,所以将代码分享出来,供大家参考学习.注意:这次的检验与删除部分跟之前的查找和插入部分一脉相承,所以重复的部分我就不粘出来了,大家可以两篇文章一起看.水平有限,难免疏漏,欢迎指正.代码部分运行环境jdk1.8intellij idea ultimate 2020.2检查红黑树是否合法 /** * 检查红黑树是否合法 * */