![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 86
everyD_struggle
任重而道远
展开
-
java - 锁粒度
最近工作有个需求,需要加锁保证操作的原子性,但在一定程度上我想着可以根据业务类型对锁进行细化,于是简单的写了一个demo进行验证:import java.util.HashMap;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public cla原创 2021-09-23 22:02:12 · 838 阅读 · 0 评论 -
动态数据源实现原理-SpringBoot
文章目录动态数据源学会注解的使用方式核心概念@Retention@Target@Documented@Inherited@Repeatable注解的本质获取注解属性切面实现数据源原理 *动态数据源源码解析过程动态数据源 无注解动态数据源 注解(方法级)动态数据源构想使用方法加注解模式就可以切换该方法所使用的数据库源。通过spring切面进行方法的增强。故我们的搭建步骤为 注解 -》切面-》数据源原理-》实现 (顺序不分先后,仅为本文逻辑)学会注解的使用方式核心概念@RetentionRe原创 2021-09-21 12:16:23 · 2846 阅读 · 0 评论 -
EffectiveJava - 出师之路
Github免费阅读链接阿里巴巴开发者手册文章目录Item 1: Consider static factory methods instead of constructors(考虑以静态工厂方法代替构造函数)Item 2: Consider a builder when faced with many constructor parameters(当构造函数有多个参数时,考虑改用构建器)Enforce the singleton property with a private constructor原创 2021-06-18 16:25:37 · 492 阅读 · 0 评论 -
WebSocket服务端客户端实现-基于SpringBoot
文章目录1. WebSocket概述2. Server3. Client1. WebSocket概述2. Server3. Client原创 2020-06-30 22:02:50 · 466 阅读 · 0 评论 -
Java8新特性 - 新的日期与时间api
书籍 《Java实战第二版》文章目录1. 为什么要引入新的日期与时间api2. jdk8:java.time包2.1 使用LocalDate和LocalTime2.2 合并日期和时间LocalDateTime2.3 机器的日期和时间格式2.4 定义Duration或Period2.5 操纵、解析和格式化日期2.6 使用TemporalAdjuster2.7 打印输出及解析日期-时间对象java.time.format包3. 处理不同的时区和历法4. 总结1. 为什么要引入新的日期与时间api.原创 2020-06-23 19:42:48 · 710 阅读 · 0 评论 -
Java8新特性 - Optional
书籍《Java实战第二版》文章目录1. 为什么Optional取代null?2. Java8引入的Optional<\T>3. 使用方法3.1 声明一个空的Optional3.2 依据值创建一个Optional3.3 可接受空指针的Optional3.4 其他api1. 为什么Optional取代null?令人厌烦的NullPointerException异常每为方法做一次null检查就会增加一个退出语句每为方法做一次null检查就可能会造成多层嵌套,引起代码膨胀null无意义.原创 2020-06-22 20:15:59 · 202 阅读 · 1 评论 -
Java8新特性 - 函数式编程(Lambda)&流操作理解&接口
什么是函数式编程在思考问题时,使用不可变值和函数,函数对一个值进行处理,映射成另一个值。文章目录1. Java中重要的函数接口2. 重要流操作2.1 collect(toList())2.2 map2.3 filter2.4 flatMap2.5 max和min2.6 reduce1. Java中重要的函数接口依赖于java的类型推断即类型擦除,该阶段是在编译期就完成了的。了解前四个类型的接口类型即可2. 重要流操作2.1 collect(toList()) List<Str.原创 2020-06-21 17:51:31 · 299 阅读 · 0 评论 -
不使用临时变量交换数值型常量(Swap)
int a = 1;int b = 2;a=a+b;b=a-b; // b=a+b-b=aa=a-b // a= a+b-a=b原创 2020-05-13 15:04:29 · 139 阅读 · 0 评论 -
深入并发编程-ThreadLocal
文章目录1.ThreadLocal介绍2. 常用方法3. ThreadLocal类与synchronized关键字4. ThreadLocal的内部结构基本结构5. 核心方法源码5.1 set()5.2 get()5.3 remove()5.4 initialValue()6. 弱引用和内存泄漏7. hash冲突的解决1.ThreadLocal介绍/** * This class prov...原创 2020-04-24 19:32:57 · 316 阅读 · 0 评论 -
shuffle:随机打乱一个数组
1. 自己实现从最高位起,最高位与后面的随机一位进行交换,交换后最高位就是随机后的,固定再不动,逐次for循环 int length = arr.length; for ( int i = length; i > 0; i-- ){ int randInd = rand.nextInt(i); swap(arr, ra...原创 2020-04-24 16:41:53 · 339 阅读 · 0 评论 -
深入java集合类-HashSet(jdk1.8)
需要HashMap的知识文章目录1.HashSet 简介2.HashSet源码2.1 字段2.2 构造方法1.HashSet 简介对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素。HashSet 是一个 没有重复元素的集合 。不保证元素的顺序 ,而且 HashSet允许使用 null 元素 。HashSet是 非同步的 。如果多个线程同时访...原创 2020-04-22 14:38:59 · 432 阅读 · 0 评论 -
深入java集合类-ArrayList(jdk1.8)
参考:https://www.cnblogs.com/LittleHann/p/3690187.html文章目录1.集合类简介1.1 Set1.2 List1.3 Queue1.1.2 Map2.ArrayList相关深入2.1 ArrayList源码2.1.1 add()2.1.2 get()2.1.3 set()2.1.4 remove()2.1.5 SubList2.2 并发修改异常...原创 2020-04-22 13:57:54 · 226 阅读 · 0 评论 -
深入理解并发编程-FutureTask
本文为读书笔记可参考:FutureTask jdk8实现JKD1.8不再依赖AQS来实现文章目录1. FutureTask简介状态跃迁图2. FutureTask的使用3. FutureTask的实现(JKD1.8不再依赖AQS来实现)4. FutureTask (DK1.8)1. FutureTask简介Future接口和实现Future接口的FutureTask类,代表异步计算的...原创 2020-04-20 20:26:49 · 314 阅读 · 0 评论 -
深入理解并发编程- 原子类
本文为读书笔记文章目录1. 原子更新基本类型类1. 原子更新基本类型类todo原创 2020-04-19 22:01:35 · 236 阅读 · 0 评论 -
深入java并发编程-ConcurrentHashMap
1原创 2020-04-18 19:53:19 · 429 阅读 · 1 评论 -
深入java集合-HashMap
本文为读书笔记,书籍为java并发编程的艺术hashmap资料来自b站黑马1.HashMapJDK1.8 之前 HashMap 由 数组+链表组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值...原创 2020-04-18 18:00:12 · 239 阅读 · 0 评论 -
深入理解并发编程-阻塞线程状态
因为看到了LockSupport能够使线程进入阻塞状态,就想了一下还有什么方法能够使线程进入阻塞状态吗?因为我记忆里只有拿不到锁的时候才会进入阻塞状态搜了一下引发线程进入阻塞的方法网上有这样说:(1)线程睡眠:Thread.sleep (long millis)方法,使线程转到阻塞状态。(2)线程等待:Object类中的wait()方法,(3)线程礼让,Thread.yield() 方法...原创 2020-04-18 15:15:32 · 719 阅读 · 0 评论 -
深入理解并发编程-AQS(队列同步器)
本文为读书笔记,书籍为Javab并发编程的艺术1. Lock接口在finally块中释放锁,目的是保证在获取到锁之后,最终能够被释放。不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的实现)时发生了异常,异常抛出的同时,也会导致锁无故释放。与synchronized相比:2. AbstractQueuedSynchronizer(AQS)AQS主要使用方式是继承...原创 2020-04-17 22:12:58 · 276 阅读 · 2 评论 -
深入理解jvm-synchronized(线程安全的实现)
本文为读书笔记1. 实现方法-互斥同步(互斥同步属于一种悲观的并发策略)同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条线程使用。互斥是实现同步的一种手段,临界区(CriticalSection)、互斥量(Mutex)和信号量(Semaphore)都是常见的互斥实现方式。互斥是因,同步是果;互斥是方法,同步是目的。在Java里面,最基本的互斥同步手段就是syn...原创 2020-04-17 15:11:06 · 283 阅读 · 0 评论 -
深入理解jvm-java内存模型(结合volatile)
1. 结构所有的变量存储在主内存每条线程都有自己的工作内存线程的工作内存保存了该线程所使用变量的主内存副本线程对变量的所有操作必须在工作内存中进行,不得直接操作主内存线程间变量的传递必须由主内存来交互完成2.内存间交互原子操作·lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。·unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释...原创 2020-04-16 22:25:48 · 428 阅读 · 0 评论 -
深入理解jvm-泛型擦除与语法糖(拆箱装箱)
本文为读书笔记1. 泛型擦除擦除式泛型的实现几乎只需要在Javac编译器上做出改进即可,不需要改动字节码、不需要改动Java虚拟机,也保证了以前没有使用泛型的库可以直接运行在Java 5.0之上。泛型擦除的实现:擦除前:擦除后:可见:java的类型擦除是把T 在编译时直接抹去,编程类似于ArrayList list 这样的裸类型;而在调用的时候进行强制类型转换;但是问题...原创 2020-04-16 17:56:33 · 270 阅读 · 0 评论 -
深入理解jvm-栈帧&方法调用
本文为读书笔记1. 基本概念Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(VirtualMachine Stack)的栈元素。**基本组成:**局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。在编译Java程序源码的时候,栈帧中需要多大的局部变...原创 2020-04-15 20:04:55 · 1040 阅读 · 0 评论 -
循序渐进之单点登录(1)--单点登录原理
SSO 简单介绍Single Sign On 在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。单点登录的问题cookie不能跨域解决:sso登录以后,可以将Cookie的域设置为顶域,即.a.com,这样所有子域的系统都可以访问到顶域的Cookie。我们在设置Cookie时,只能设置顶域和自己的域,不能设置其他的域。session不能共享解决:共享se...原创 2020-01-04 15:49:51 · 160 阅读 · 0 评论 -
centos7下 docker配置aliyun镜像加速地址
进入dev.aliyun.com创建账户sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["阿里云会给一个属于你的加速地址"]}EOFsudo systemctl daemon-reloadsudo systemctl resta...原创 2019-07-31 11:16:33 · 369 阅读 · 0 评论 -
mysql连接数据库,navicat报错2059,docker镜像
原因报错:“Authentication plugin ‘caching_sha2_password’ cannot be loaded”百度来的原因,时间时2019/7/7mysql版本8.0+加密规则变成了caching_sha2_password,说实在话,这样变了就意味着navicat的版本解密不行,要么就是别特么玩最新的,别特么玩最新的,别特么玩最新的解决办法:方法1dock...原创 2019-07-07 14:33:36 · 134 阅读 · 0 评论 -
动态代理理解
二话不说直接上代码!注意哦!我们需要一个接口和该接口的实现类! public static void main(String[] args) { //1param: 固定值: 告诉虚拟机用哪个字节码加载器加载内存中创建出的字节码文件 //2param: 告诉虚拟机内存中正在被创建的字节码文件中应该有哪些方法 //3param: 告诉虚拟机正在被创建的字节码上的各个方法如何处理, I...原创 2019-04-14 11:55:05 · 401 阅读 · 0 评论