Clear Blog

Look what's happening here,it's magical

Spring中bean相互依赖

在我们日常开发中,通过会将业务代码分层三层,controller、service和dao。 随着需求的迭代,会有越来越多的service,很难避免的有些service之间要耦合, 那么随之带来的问题就是bean之间的相互依赖问题,尤其是多个bean之间相互依赖, 无法直接判断是从哪个bean开始就导致相互依赖的问题。代码混乱,各层各模块之间耦合严重, 后期迭代或者维护都会变得非常困难. 这...

transient关键字

我们最常用的transient场景就是当对象中某些字段不需要序列化,则可以在该字段上添加transient修饰。 1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 (换个通俗点的说法:将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。) 2)transient关键字只能修饰变量,...

HashMap源码解读

HashMap其实也是一个线性的数组实现的。 HashMap内部实现一个静态内部类Entry,Entry的属性有key,value,next.

ConcurrentHashMap和HashMap对比

ConcurrentHashMap 两种数据结构最大的区别就是线程安全了。 ConcurrentHashMap是线程安全的,采用的是锁分段技术, 首先将数据分成一段一段的存储,然后给每一段数据配一把锁, 当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。 ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。 Segment是一...

(设计模式)单例模式

线程安全的单例模式实现。 使用单例模式可以带来下面几个好处: 对于频繁使用的对象,可以省略创建对象所花费的时间, 这对于那些重量级对象而言,是非常可观的一笔系统开销; 由于 new 操作的次数减少,因而对系统内存的使用频率也会降低, 这将减轻 GC 压力,缩短 GC 停顿时间。 内部类实现 1 2 3 4 5 6 7 8 9 public class Sing...

Disruptor

Disruptor是一个高性能的异步处理框架, 或者可以认为是最快的消息框架(轻量级的JMS), 也可以认为是一个观察者模式的实现, 或者事件监听模式的实现。 首先我们可以理解它为一种高效的”生产者-消费者”模型, 其性能远远高于传统的BlockingQueue容器。 Disruptor存储数据的核心叫做RingBuffer,我们通过Disruptor实例 拿到它,然后把数据生产出来,把数...

数据库事务

事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。 数据库默认事务是自动提交的,也就是发一条sql它就执行一条,如果想多条sql放在一个事务中执行,则需要显示的声明事务开始结束: start transaction … … commit 事务的四大特性:ACID A:atom 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚, 因此事务的操作如果成...

可视化算法

今天在知乎上发现了一个好玩的可视化算法网站,我觉得还是很有意思的。 可视化算法网站

ReentrantLock

在java多线程中可以使用synchronized关键字来实现线程之间同步互斥, 在jdk1.5中新增加了ReentrantLock类,能够达到同样的效果,还扩展了更强大的功能。 比如说嗅探锁定,多路分支通知。 重点说明下多路分支通知。 它的基本原来也就是之前的wait,notify,notifyAll方法。在此基础上进行了选择性通知。 接下来我以伪代码做说明: 1 2 3 4 5 6 ...

TCP协议

TCP协议是面向连接、保证高可靠性(数据无丢失,无失序,无错误,无重复到达),全双工的传输层协议。 TCP Header Format 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 0 1 2 3 ...