首页
生活
归档
分类
标签
动态
相册
友链
关于
1
Dream 主题使用手册 - 基础篇
2
Ubuntu 22.04 桌面美化之Mac Big Sur风格
3
网站访问速度优化之ServiceWorker
4
OpenVPN 介绍以及服务端和客户端部署
5
Dream 主题预览
殇雪
投资未来的人,是忠于现实的人。
累计撰写
140
篇文章
累计创建
68
个标签
累计收到
442
条评论
导航
首页
生活
归档
分类
标签
动态
相册
友链
关于
目录
搜索
标签搜索
网盘拉新
副业
黄金
Swagger
编辑器
Gin
Web
Go
Nginx
保险
Halo-Plus
信用卡
Spring
数字货币
搜索
Lucene
区块链
IDEA
故事
单点登录
MySQL
Nacos
Java
旅行
反欺诈
Dream
ServiceWorker
Docker
容器
集合类
锁系列
领域驱动设计
JWT
Oauth
缓存
加密算法
SEO
Hexo
Redis
Ignite
分布式
源码分析
Vue
类加载器
博客
动态规划
排序算法
多线程
JVM
软考星题库
MyBatis
Git
图数据库
应用部署
Nodejs
CDN
软件测试
SpringBoot
Maven
Linux
Python
汇编
内网穿透
Frp
Spring Security
Shiro
沙雕
MQ
玖涯博客
望仔的秘密基地
分类
JAVA与JVM
CGLIB 和 JDK 两种动态代理方法对比
Spring 动态代理时提供了 JDK 代理和 CGLIB 两种方式,一般而言,代理的目标是接口时 AOP 使用 JDK 代理来实现,CGLIB 则负责对类进行代理,两种代理方法结合使用。
1 年前
884
0
1
114.4℃
JAVA与JVM
在 Java 中,什么条件下两个 String 会是同一个对象?
这段时间工作上经常用遇到 String 对象比较的问题,这是一个比较基础的问题,但有时候对其原因还是有些迷惑,所以稍微总结一下。
1 年前
784
0
0
102.4℃
JAVA与JVM
Java 锁系列(四)——ReentrantLock源码Condition实现分析
Condition 是个接口,依赖于 Lock 接口的实现,基本的方法就是 await() 和 signal() 方法,是在 java 1.5 中才出现的,用于替代 Object 的 wait()、notify() 实现线程间的协作,相比使用 Object 的 wait()、notify(),使用 Condition 的 await()、signal() 这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来模拟线程间协作。
2 年前
1644
1
2
195.4℃
分布式与高并发
JAVA与JVM
Java 并发系列(二)——Semaphore源码分析
Semaphore 通常叫它信号量, 可以用来控制同时访问特定资源的线程数量,也可以用来保持资源生产者和消费者之间的资源限制关系,通过协调各个线程,以保证合理的使用资源。Semaphore 具有公平和非公平两种模式,本文通过源码对 Semaphore 的实现做简单分析。
2 年前
1437
1
2
174.7℃
分布式与高并发
JAVA与JVM
Java 并发系列(一)——CountDownLatch源码分析
CountDownLatch 构造一个用给定计数初始化的并发计数器,能够协调多个线程之间的同步,当前线程在计数器倒计数至零之前一直等待,除非线程被中断。一般用于流程控制之类的场景,大流程分成多个子流程,子流程全部结束后大流程开始操作。
2 年前
1801
0
5
214.1℃
分布式与高并发
JAVA与JVM
Java 集合类系列(二)——常见List源码分析
List 是对有序集合的分装,可对其中每个元素的插入位置进行精确地控制,并通过索引来访问、遍历元素。List 集合中,常用的是 ArrayList 和 LinkedList 这两个类。其中,ArrayList 底层通过数组实现,随着元素的增加而动态扩容,LinkedList底层通过双向链表来实现,随着元素的增加不断向链表的后端增加节点。
2 年前
1420
0
1
168℃
应试
JAVA与JVM
Java 集合类系列(一)——HashMap源码分析
HashMap 在 java 里用于存储 Key-Value 结构的数据,它允许 key 和 value 为 null,是一种无序并且线程不安全的集合对象。HashMap 基于 hashing 的原理,内部使用的是数组加链表的结构,在 JDK 1.8 上对查询性能进行优化,链表长度大于一定值过后链表将重构为红黑树。本文对 HashMap 源码进行分析,了解其实现原理。
2 年前
1389
0
1
164.9℃
应试
JAVA与JVM
Java 基础之迭代器的使用
迭代器是一种设计模式,迭代器可以用于遍历集合,开发人员不必去了解这个集合的底层结构。迭代器封装了数据获取和预处理逻辑,屏蔽了容器的实现细节,无需暴露数据结构内部。在数据量非常庞大时使用迭代器进行数据迭代获取,避免全部取出占用过多的服务器资源,且可以对部分数据进行预加载,提升性能。本文将对 java 提供的 Iterator、Iterable 和 Spliterator 三个数据迭代接口做介绍,了解其使用场景。
3 年前
1457
0
2
173.7℃
JAVA与JVM
Java 锁系列(七)——StampedLock源码分析
StampedLock 是读写锁的实现,对比 ReentrantReadWriteLock 主要不同是该锁不允许重入,多了乐观读的功能,使用上会更加复杂一些,且仅支持非公平锁,但是具有更好的性能表现。StampedLock 的状态由版本和模式组成。 获取锁方法返回一个邮戳,表示和控制与锁状态相关的访问; 这些方法的“尝试”邮戳可能会返回特殊值 0 来表示获取锁失败。 锁释放和转换方法需要标记作为参数,如果它们与锁的状态不匹配则失败。本文对 StampedLock 的实现源码进行分析。
3 年前
1479
0
1
173.9℃
分布式与高并发
JAVA与JVM
Java 锁系列(六)——StampedLock使用
StampedLock 是读写锁的实现,对比 ReentrantReadWriteLock 主要不同是该锁不允许重入,多了乐观读的功能,使用上会更加复杂一些,但是具有更好的性能表现。StampedLock 的状态由版本和模式组成。 获取锁方法返回一个标记,表示和控制与锁状态相关的访问; 这些方法的“尝试”版本可能会返回特殊值 0 来表示获取锁失败。 锁释放和转换方法需要标记作为参数,如果它们与锁的状态不匹配则失败。本文描述 StampedLock 的基础使用场景,入门教程。
3 年前
1546
0
2
182.6℃
分布式与高并发
JAVA与JVM
Java 锁系列(五)——ReentrantReadWriteLock源码分析
ReentrantReadWriteLock 是读写锁的实现,读锁可以在没有写锁的时候被多个线程同时持有,写锁就是和 ReentrantLock 类似的独占锁,它同样有包含公平锁和不公平锁两种实现方式,在实例化时将同时实例化 ReadLock 和 WriteLock 实例,本文主要聚焦于 WriteLock 的实现分析,因为 ReentrantReadWriteLock 中的部分实现与 ReentrantLock 一样基于 AbstractQueuedSynchronized 的实现,对于一些相同的逻辑本文不再赘述。
3 年前
1494
0
2
177.4℃
分布式与高并发
JAVA与JVM
Java 锁系列(三)——ReentrantLock源码分析
ReentrantLock 是一个可重入的独占锁,是基于 AQS(AbstractQueuedSynchronized,抽象队列式同步器)实现的,它有公平锁和不公平锁两种实现方式。简单查看源码,可以发现 ReentrantLock 其实是一个代理的模式,Reentranlock 的核心是其内部继承自 AbstractQueuedSynchronized 的抽象类 Sync,将 Sync 作为锁的同步基础,其中加锁/解锁等操作其实都是由 Sync 对象完成的,也是通过实例化 FairSync 或 NonfairSync 分别对应公平锁和非公平锁的实现。
3 年前
1527
0
0
176.7℃
分布式与高并发
JAVA与JVM
Java 锁系列(二)——ReentrantLock 和 ReentrantReadWriteLock基础运用
Lock 接口提供了与 synchronized 相似的功能,和 synchronized 不同的是,Lock 在使用的时候需要显示的获取和释放锁。虽然牺牲了隐式获取释放锁的便捷性,但是对于锁的操作具有更强的可操作性、可控制性以及提供可中断操作和超时获取锁等机制。本文将描述 ReentrantLock 和 ReadWriteLock 锁的基础使用。
3 年前
1495
0
2
177.5℃
分布式与高并发
JAVA与JVM
Java 锁系列(一)——锁分类和基础概述
在多线程在获取资源的时候,锁用于保证资源获取的有序性和占用形,可以控制多个线程访问共享资源的顺序。Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对 java 主流的锁进行分类,梳理锁相关的基础知识。
3 年前
1437
0
2
171.7℃
分布式与高并发
JAVA与JVM
JVM原理(一)——JVM概述
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行,文章从虚拟机底层讲解虚拟机的设计与实现。
4 年前
1556
0
1
181.6℃
JAVA与JVM
java取得对象占用的内存大小
Instrumentation类提供了编写Java编程语言代码所需的服务。 Instrumentation是将字节码添加到方法中,以收集工具使用的数据。由于这些更改纯粹是通过代理方式附加的,因此这些工具不会修改应用程序状态或行为。此类工具的示例包括监视代理、探查器、覆盖率分析器和事件记录器。
4 年前
2830
0
0
307℃
JAVA与JVM
java操作Neo4j
图数据库是NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。图形数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息,在 社交网路、知识图谱等场景应用广泛。本文描述了常用图数据库Neo4j的java连接配置,和内嵌neo4j方法。
4 年前
1419
0
0
165.9℃
数据库
JAVA与JVM
java实现多线程的四种方式及多线程源码分析
本文使用到的东西eclipse 2019-11java1.继承Thread类1.1实现代码class MyThread extends Thread{private int num=0;public void run() {for(int i=0;i<6;i++) {System.out.pr
4 年前
1412
0
0
165.2℃
分布式与高并发
JAVA与JVM
java多线程共享数据、线程同步与互斥
写在前面本文全文以售票系统为例,简诉了java多线程间共享数据的两种方式、线程同步。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西javaeclipse 2019-111.多线程共享数据1.1 共享Runnable 当多个线程执行的内容相同,可以采用共享Runnable接口实现
4 年前
1290
0
0
153℃
分布式与高并发
JAVA与JVM
java常见排序算法
写在前面本文描述了常见的几种排序算法,文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西java1.选择排序1. 1 算法思想 从未排序的区间中找出最小的元素,将该元素与未排序区间中第一个元素交换,第一个元素即为排序好的元素,再继续比较余下未排序的区间...1.2 算法实现impo
4 年前
1481
0
0
172.1℃
JAVA与JVM
算法
JVM系列(一)——类加载器以及双亲委托机制
写在前面本文主要介绍了四种类加载器,以及算清委托机制。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西java1.类加载器1.1 类加载器作用:类加载器负责从文件或者网络中加载Class信息,加载的类信息存放于方法区的内存空间。1.2 启动类加载器(BootStrap ClassL
4 年前
1545
0
0
178.5℃
JAVA与JVM
弹