博客园 - little飞
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=93769
2022-04-28T07:43:24Z
little飞
https://www.cnblogs.com/little-fly/
feed.cnblogs.com
https://www.cnblogs.com/little-fly/p/16203120.html
Java 中的 Fail-Fast 与 Fail-Safe - little飞
一:快速失败(fail—fast)(使用原有对象)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCoun
2022-04-28T07:41:00Z
2022-04-28T07:41:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】一:快速失败(fail—fast)(使用原有对象)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCoun <a href="https://www.cnblogs.com/little-fly/p/16203120.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/16187126.html
Java动态代理Cglib代理 - little飞
JDK 动态代理有一个最致命的问题是其只能代理实现了接口的类。 为了解决这个问题,我们可以用 CGLIB 动态代理机制来避免。 CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB 通过继承方式实现代理。
2022-04-24T10:38:00Z
2022-04-24T10:38:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】JDK 动态代理有一个最致命的问题是其只能代理实现了接口的类。 为了解决这个问题,我们可以用 CGLIB 动态代理机制来避免。 CGLIB(Code Generation Library)是一个基于ASM的字节码生成库,它允许我们在运行时对字节码进行修改和动态生成。CGLIB 通过继承方式实现代理。 <a href="https://www.cnblogs.com/little-fly/p/16187126.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/15558383.html
Quartz框架使用(任务调度) - little飞
Quartz框架三大核心: 1:scheduler 代表一个Quartz的独立运行容器,Trigger和JobDetail可以注册到Scheduler中,两者在Scheduler中拥有各自的组及名称,组及名称是Scheduler查找定位容器中某一对象的依据,Trigger的组及名称必须唯一,JobD
2021-11-15T13:34:00Z
2021-11-15T13:34:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】Quartz框架三大核心: 1:scheduler 代表一个Quartz的独立运行容器,Trigger和JobDetail可以注册到Scheduler中,两者在Scheduler中拥有各自的组及名称,组及名称是Scheduler查找定位容器中某一对象的依据,Trigger的组及名称必须唯一,JobD <a href="https://www.cnblogs.com/little-fly/p/15558383.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/15426954.html
Java 堆外内存回收原理 - little飞
堆外内存简介DirectByteBuffer 这个类是 JDK 提供使用堆外内存的一种途径,当然常见的业务开发一般不会接触到,即使涉及到也可能是框架(如 Netty、RPC 等)使用的,对框架使用者来说也是透明的。 堆外内存优势堆外内存优势在 IO 操作上,对于网络 IO,使用 Socket 发送数
2021-10-19T15:03:00Z
2021-10-19T15:03:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】堆外内存简介DirectByteBuffer 这个类是 JDK 提供使用堆外内存的一种途径,当然常见的业务开发一般不会接触到,即使涉及到也可能是框架(如 Netty、RPC 等)使用的,对框架使用者来说也是透明的。 堆外内存优势堆外内存优势在 IO 操作上,对于网络 IO,使用 Socket 发送数 <a href="https://www.cnblogs.com/little-fly/p/15426954.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/14259314.html
JVM之缓存行对齐 - little飞
缓存行 缓存是由多个缓存行组成的,以缓存行为基本单位,一个缓存行的大小一般为64字节。 伪共享 因为缓存行存在,当不同的线程在操作两份不同的数据时,如果这两份数据刚好位于同一个缓存行中,那么彼此之间就会互相影响。 假设A线程操作数据C,B线程操作数据D,C、D数据位于同一缓存行,那么当C数据发生修改
2021-01-10T11:54:00Z
2021-01-10T11:54:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】缓存行 缓存是由多个缓存行组成的,以缓存行为基本单位,一个缓存行的大小一般为64字节。 伪共享 因为缓存行存在,当不同的线程在操作两份不同的数据时,如果这两份数据刚好位于同一个缓存行中,那么彼此之间就会互相影响。 假设A线程操作数据C,B线程操作数据D,C、D数据位于同一缓存行,那么当C数据发生修改 <a href="https://www.cnblogs.com/little-fly/p/14259314.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/12431090.html
多线程下ThreadLocalRandom用法 - little飞
前言 学习 ThreadLocalRandom 的时候遇到一些疑惑,为何使用它在多线程下会产生相同的随机数? 阅读源码后终于稍微了解了一些它的运行机制,总结出它在多线程下正确的用法,特此记录。 ThreadLocalRandom的用处 在多线程下,使用 java.util.Random 产生的实例来
2020-03-06T13:40:00Z
2020-03-06T13:40:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】前言 学习 ThreadLocalRandom 的时候遇到一些疑惑,为何使用它在多线程下会产生相同的随机数? 阅读源码后终于稍微了解了一些它的运行机制,总结出它在多线程下正确的用法,特此记录。 ThreadLocalRandom的用处 在多线程下,使用 java.util.Random 产生的实例来 <a href="https://www.cnblogs.com/little-fly/p/12431090.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/11183405.html
mysql 各数据类型的大小及长度 - little飞
数字型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 字节 (-8 388 608,8 388 607)
2019-07-14T02:55:00Z
2019-07-14T02:55:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】数字型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 字节 (-8 388 608,8 388 607) <a href="https://www.cnblogs.com/little-fly/p/11183405.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10851776.html
Java线程池的底层实现与使用 - little飞
正文 前言 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类、实现Runnable接口、使用Callable和Future),但是这样也有一点问题,就是如果并发的线程数量很多,创建线程、销毁线程都是需要消耗
2019-05-12T04:02:00Z
2019-05-12T04:02:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】正文 前言 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类、实现Runnable接口、使用Callable和Future),但是这样也有一点问题,就是如果并发的线程数量很多,创建线程、销毁线程都是需要消耗 <a href="https://www.cnblogs.com/little-fly/p/10851776.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10744771.html
红黑树的特性 - little飞
红黑树的特性 红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目
2019-04-21T04:57:00Z
2019-04-21T04:57:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】红黑树的特性 红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目 <a href="https://www.cnblogs.com/little-fly/p/10744771.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10720682.html
关于内存泄露的几点理解 - little飞
内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间。 一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但
2019-04-16T14:47:00Z
2019-04-16T14:47:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间。 一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但 <a href="https://www.cnblogs.com/little-fly/p/10720682.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10365109.html
Java中的公平锁和非公平锁实现详解 - little飞
前言 Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue、CopyOnWriteArrayList、LinkedBlockingQueue,它们线程安全的实现方式并非通过synchronized关键字,而是通过java.util.concurrent.locks.R
2019-02-12T06:45:00Z
2019-02-12T06:45:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】前言 Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue、CopyOnWriteArrayList、LinkedBlockingQueue,它们线程安全的实现方式并非通过synchronized关键字,而是通过java.util.concurrent.locks.R <a href="https://www.cnblogs.com/little-fly/p/10365109.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10317122.html
最全面的Redis命令行查阅手册(收藏查看) - little飞
Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更近,执行速度相对会更快。 Redis使用了单线程架构,预防了多线程可能产生的竞争问题。 作者对于Redis源代码可以说是精打细磨,曾经有人评价Redis是少有的集性能和优雅于一身的开源代码。 本文比较详细且全面的梳理了Redis使
2019-01-24T14:03:00Z
2019-01-24T14:03:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更近,执行速度相对会更快。 Redis使用了单线程架构,预防了多线程可能产生的竞争问题。 作者对于Redis源代码可以说是精打细磨,曾经有人评价Redis是少有的集性能和优雅于一身的开源代码。 本文比较详细且全面的梳理了Redis使 <a href="https://www.cnblogs.com/little-fly/p/10317122.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10247257.html
浅谈加密算法 - little飞
前言 数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文1. 数字
2019-01-09T14:26:00Z
2019-01-09T14:26:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】前言 数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文1. 数字 <a href="https://www.cnblogs.com/little-fly/p/10247257.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10164962.html
maven管理jar,pom.xml导入spring依赖 - little飞
<properties> <junit.version>4.12</junit.version> <spring.version>4.3.9.RELEASE</spring.version> <commons-logging.version>1.2</commons-logging.version>
2018-12-23T09:41:00Z
2018-12-23T09:41:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】<properties> <junit.version>4.12</junit.version> <spring.version>4.3.9.RELEASE</spring.version> <commons-logging.version>1.2</commons-logging.version> <a href="https://www.cnblogs.com/little-fly/p/10164962.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/10034579.html
帧同步与状态同步的区别 - little飞
实时游戏发展迅猛,同步技术也逐渐成为解决方案的核心之一。 本文简单讨论了帧同步和状态同步。帧同步 什么是帧同步:帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有客户端
2018-11-28T12:55:00Z
2018-11-28T12:55:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】实时游戏发展迅猛,同步技术也逐渐成为解决方案的核心之一。 本文简单讨论了帧同步和状态同步。帧同步 什么是帧同步:帧同步常被RTS(即时战略)游戏常采用。在游戏中同步的是玩家的操作指令,操作指令包含当前的帧索引。一般的流程是客户端上传操作到服务器, 服务器收到后并不计算游戏行为, 而是转发到所有客户端 <a href="https://www.cnblogs.com/little-fly/p/10034579.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/9786145.html
java多线程中的调度策略 - little飞
两种线程的调度模式: 抢占式调度: 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。 协同式调度: 协
2018-10-14T05:41:00Z
2018-10-14T05:41:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】两种线程的调度模式: 抢占式调度: 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。 协同式调度: 协 <a href="https://www.cnblogs.com/little-fly/p/9786145.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/9709618.html
关于redis实现分布式锁 - little飞
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细
2018-09-26T12:53:00Z
2018-09-26T12:53:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细 <a href="https://www.cnblogs.com/little-fly/p/9709618.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/9463911.html
Java注解入门 - little飞
注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnings) 运行时注解:能在程序运行时起作用(如spring的依赖注入) 按来源分: 来自JDK的注解 第三方的
2018-08-12T10:37:00Z
2018-08-12T10:37:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】注解的分类 按运行机制分: 源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnings) 运行时注解:能在程序运行时起作用(如spring的依赖注入) 按来源分: 来自JDK的注解 第三方的 <a href="https://www.cnblogs.com/little-fly/p/9463911.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/9363263.html
Java中字符串内存位置浅析 - little飞
String内存位置说明 显式的String常量 第一句代码执行后就在常量池中创建了一个值为holten的String对象; 第二句执行时,因为常量池中存在holten所以就不再创建新的String对象了。 此时该字符串的引用在虚拟机栈里面。 String对象 Class被加载时就在常量池中创建了一
2018-07-24T15:11:00Z
2018-07-24T15:11:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】String内存位置说明 显式的String常量 第一句代码执行后就在常量池中创建了一个值为holten的String对象; 第二句执行时,因为常量池中存在holten所以就不再创建新的String对象了。 此时该字符串的引用在虚拟机栈里面。 String对象 Class被加载时就在常量池中创建了一 <a href="https://www.cnblogs.com/little-fly/p/9363263.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/little-fly/p/9221231.html
SVN创建分支/合并分支/切换分支 - little飞
在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发 trunk是主分支,是日常开发进行的地方。 branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branche
2018-06-24T09:57:00Z
2018-06-24T09:57:00Z
little飞
https://www.cnblogs.com/little-fly/
【摘要】在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发 trunk是主分支,是日常开发进行的地方。 branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branche <a href="https://www.cnblogs.com/little-fly/p/9221231.html" target="_blank">阅读全文</a>