Java基础
文章平均质量分 63
嗑瓜子儿溜茶水儿
这个作者很懒,什么都没留下…
展开
-
HashMap源码阅读;HashMap的put()方法;
当仔细研究HashMap的put方法后,实际对HashMap的原理已经有了基本认知。描述HashMap的原理可以从数据结构的角度展开来说,这是因为HashMap作为容器存储数据,那么数据存储一定离不开数据结构。首先,java8的HashMap需要的数据结构有三种(数组、链表和红黑树)。数组,是哈希表来作为链表的索引。哈希表会在元素个数大于扩容阈值时引发扩容,扩容是以2次幂的规模来处理,哈希表只有在第一次put元素时才会创建,所以HashMap是懒加载的。链表,是真正保存数据的位置。原创 2024-01-25 16:16:02 · 911 阅读 · 1 评论 -
Java volatile 的作用;双重检查锁中的 volatile 关键字
引入最近在学习设计模式的时候《HeadFirst设计模式》,学到了熟悉的单例模式。这个模式本应该是最熟悉的,毕竟初学时应用懒汉模式创建数据库连接。书中提到的单例代码可以看到图中有 volatile 修饰的单例对象,他引起了我的注意,而下方的注释并没有解决我的疑问。因为之前使用单例模式的时候并没有添加这个关键字,似乎也能满足单例需求,难道说只是表面上满足了需求,而问题并没有暴露出来吗?查资料JAVA中volatile介绍Java volatile关键字最全总结:原理剖析与实例讲解(简单易懂)双原创 2021-12-30 17:38:04 · 255 阅读 · 0 评论 -
奇怪的 -2147483648;为什么Java中 2147483647加一是-2147483648
发现Java int 范围 -2147483648 ~ 2147483647执行一下代码发现:int a = 2147483647;int b = a + 1; int c = b - 1;sout(b) // b = -2147483648sout(c) // c = 2147483647b 是 -2147483648c 是 2147483647似乎是一个循环?为什么原码反码补码上边这个链接看完知道,cpu二进制计算不对原码进行计算, 而是对补码进行计算。就是说计算机的运原创 2021-12-15 18:44:51 · 3640 阅读 · 1 评论 -
笔记:记录一个比较好用的 通用DTO 类
自己常用的DTO,使用在 SpringBoot 项目中,应用了 Lombok 插件。DTO://响应类:尽量将所有接口的响应信息封装到此对象中,返回给前端@Getter@Setter@AllArgsConstructor@NoArgsConstructorpublic class GeneralResp { private String error; private boolean success; //默认false private Object data;原创 2021-02-04 10:08:29 · 411 阅读 · 0 评论 -
学习:CAS算法的理解和ABA问题的解决
学习了CAS算法的原理,以及ABA问题的解决。记录个人理解。CAS 算法:全称 Compare And Swap ,比较交换算法。举个例子说明算法的思路:有一个变量 int a = 0;在多线程条件下,每个线程使变量 a 进行自增操作有一个线程 线程1线程1 对 a 的操作如下: 1. 获取 a 当前的值,并保存为 a1 2. 计算 a1 + 1 的结果 3. 检查 a 当前的值,并与 a1 进行比较如果比较结果相同,则将计算后的值赋给 a,完成自增;如果比较结果不相同,则将重复原创 2021-01-04 17:13:05 · 236 阅读 · 0 评论 -
学习:锁升级过程理解
理解锁升级过程四种锁状态: 无锁态,偏向锁,轻量级锁,重量级锁使用 synchronized 给对象加锁的过程会发生上方四种状态的迭代。锁升级:新建一个对象,他是无锁态,当A线程访问此对象发现他是无锁状态那么将此对象升级为偏向锁,并且在 markword 中使用 54bit 来保存当前线程的信息,在后三位标记为 001 。A线程下次可以直接访问这把锁。当B线程与A线程同时访问这个锁,那么撤销偏向锁标记,然后A线程与...原创 2020-11-07 16:05:40 · 192 阅读 · 0 评论 -
学习:JVM扫盲
HotSpot: 一种虚拟机,是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。TLAB: Thread Local Allocation Buffer,每个线程在Java堆中预先分配一的小块内存,即线程本地分配缓存区。是仅供当前线程存放对象的内存块,其他线程不能在此区域存放对象。可解决多线程中,新建对象时的线程安全问题。通过 -XX:+/-UseTLAB 设置。分配时线程独占,读取、使用、回收时线程共享。被 HotSpot 采用。运行时内存区java虚拟机运行时的原创 2020-11-03 18:53:49 · 91 阅读 · 0 评论 -
学习:从源码角度分析 ArrayList 和 add(E e)
尝试分析ArrayList源码。首先看一下他的 类图 的结构可序列化、可克隆、可迭代、可随机访问。可随机访问这个接口,就是说for循环遍历集合会优于迭代器遍历。间接继承了collection 和 list 接口,一般常用 list 接口的方法。常用 list 通过多态引用 ArrayList 对象。上图就是说 ArrayList 中有上方直接或间接父类、接口中的功能的集合体来看 ArrayList 中的部分参数,源码: //默认的初始容量 private static final原创 2020-10-29 22:21:17 · 130 阅读 · 0 评论 -
学习:JDBC基本使用步骤忘了还好意思学JAVA吗?
整理一下JDBC原创 2020-10-17 16:56:13 · 201 阅读 · 4 评论