Sunfy Blog

Life is diligent, no pains, no gains.
Viewed Times
Visitors In Total

更优雅的发HTTP请求(RestTemplate)

Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。 我之前的HTTP开发是......

如何从容应对复杂性

软件的复杂性,是一个很泛的概念。但是一直都是开发过程中的一个难题,本文旨在探讨如何去从容应对复杂性。

一 软件的熵增、构造定律1 熵增定律熵的概念最早起源于物理学,热力学第二定律(又称“熵增定律”),表明了在自然过程中,一个孤立的系统总是从最初的集中、有序的排列状态,趋向于分散、混乱和无序;当熵......

高并发Redis缓存那些事儿

Redis缓存常见问题及相应问题的解决方案 缓存穿透查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义。 基本原因 自身业务代码或者数据出现问题。 一些恶意攻击、 爬虫等造成大量空命中。 解决方案1、缓存空对象 12345678910111......

LRU缓存算法的实现

一种常见的页面置换算法

LRULRU(Least Recently Used)是一种常见的页面置换算法,在计算中,所有的文件操作都要放在内存中进行,然而计算机内存大小是固定的,所以我们不可能把所有的文件都加载到内存,因......
LRU

CAS操作分析

Compare And Swap,比较并交换

CASCAS(Compare And Swap,比较并交换),通常值的是一种原子操作,针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同就给它赋值另一个值。正所谓比较并交换。 if......

深入理解 Java SPI机制

一种服务发现机制,自动加载文件里所定义的类。

SPI ,全称为 Service Provider Interface,是一种服务发现机制。在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类......
SPI

docker-compose 启动容器

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 docker-compose 是什么docker-compose 是一个用来把 docker 自动化的东西。有了 docker-compose 你可以把所有繁复的 docker 操作全都一条命令,自动化的完成。 为什么要用 docker-compose,他解决了什么用通俗的语言......

Spring推断构造方法

一个构造方法|多个构造方法

Spring推断构造方法 Spring中的一个bean,需要实例化得到一个对象,而实例化就需要用到构造方法。 一个构造方法一般情况下,一个类只有一个构造方法: 要么是无参的构造方法 要么是有......

synchronized基本使用

用于屏蔽掉各种硬件和操作系统的内存访问差异,基本使用

应用场景解决线程安全问题 解决方案加锁: 序列化的访问临界资源 java中的实现 : 阻塞: synchronized reentrantLock 非阻塞: cas+自旋 示例代码......

AQS之独占锁ReentrantLock

是一种基于AQS框架的应用实现,是一种互斥锁,可以保证线程安全。

什么是ReentrantLockReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程......

对AQS的理解

AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器

什么是AQS全名AbstractQueuedSynchronizer(简称AQS),AQS是一个抽象同步框架,可以用来实现依赖状态的同步器。是jdk1.5就有的,java.util.concur......

关于分布式唯一ID的思考

对分布式唯一ID的思考,UUID、数据库自增主键、snowflake算法

UUIDUUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一识别码。 String uuid =......

Atomic原子操作分析

操作简单, 性能高效,并能保证线程安全的类去更新基本类型变量,数组元素,引用类型以及更新对象中的字段类型。

Atomic在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过 Synchro......

并发线程池原理分析

并发线程与线程池区别以及线程池原理分析

线程池与线程对比new Thread 的弊端 创建:每次new Thread时,新建对象性能差。 管理:线程缺乏统一管理,可能无限制新建线程,相互之间竞争,可能占用过多系统资源导致死机或oom。......

并发的可见性深入分析

一个线程修改了共享变量的值,其他线程能够看到修改的值

并发可见性首先我们来回顾一下什么是并发,允许两个任务彼此干扰,同一时间点,只有一个任务运行,交替执行。 正因为并发时两个任务交替执行,两个任务间的彼此干扰,我们假设一种场景,线程A和线程B共享一......

java内存模型(JMM)

用于屏蔽掉各种硬件和操作系统的内存访问差异

JMMjava虚拟机规范中定义了java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到一致的并发效果......

并发基础概念

如何充分压榨硬件性能,充分压榨CPU计算能力

线程的生命周期?线程有几种状态线程通常有五种状态:创建、就绪、运行、阻塞、死亡。 新建状态(New):新建了一个线程对象。 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的......