自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 利用zookeeper实现分布式锁、原子计数器、屏障

准备:在服务器上启动zkServer,引入jar包 <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId>...

2019-06-24 21:25:55 255

原创 今天我只看了ConcurrentHashMap的put方法

首先把那些恶心的变量解释一下变量名称 含义 bincount table里目标索引链表的元素个数 f table里目标索引对应链表的头结点 n table的长度 i 目标索引 fh 头结点f的哈希值 tab table数组的副本 final V putVal(K key, ...

2019-06-17 13:29:09 2022 2

原创 遇到了一个关于自增业务的分析

业务背景我目前在物流行业工作,上周遇到一个小需求,大致概况如下:1、实现一个创建用户的功能,用户分为快递用户和快运用户2、用户名快递用户为kd为前缀,快运用户以ky为前缀,后面跟上一个递增的数字,以0开始3、用户名进入创建页面自动获取不能够手动输入,然后需填写其他信息然后再创建,其中有一个选项为选择快递或者快运用户,默认为快递。需求大致如上,看起来很简单,于是我开发设计很...

2019-06-13 17:30:16 159

原创 一个老生常谈的问题:为什么说Java是只有值传递

这个问题感觉挺有意思而且在实际操作中有误导性。比如下面一个例子 public static void main(String[] args) { List list = new ArrayList(); addOne(list); System.out.println(list); } public static v...

2019-05-21 15:50:59 189

原创 最近的一些感想2019.5.18

0、女朋友的思维不像程序一样是按逻辑走的,程序出bug是总是能找到一条逻辑线去引发这个bug,而女朋友生气了就是生气了,无论怎么分析逻辑都不对,反正哄就是了。1、公司每个星期都有好多人来面试,传说的金三银四找工作的高峰时候拖到五月份了,自己有的时候也有萌生想离开这里的想法,不过只是想想,这里工作还是挺舒服的,虽然钱少了一点2、学习遇到瓶颈了,jdk源码包看的差不多了,最近想“精通”网络、“...

2019-05-18 16:07:58 99

原创 聊一聊Atomic类为什么是原子性的

在此之前准备两个例子Demo1: // 请求总数 public static int clientTotal = 5000; // 同时并发执行的线程数 public static int threadTotal = 200; public static AtomicInteger count = new AtomicInteger(0); ...

2019-05-09 21:37:05 1199

原创 AQS之CyclicBarrier源码解读

首先准备一个可以跑的Demo@Slf4jpublic class CyclicBarrierExample{ //1、实例化一个CycleBarrier private static CyclicBarrier barrier = new CyclicBarrier(5); public static void main(String[] args) throws...

2019-04-28 15:33:27 169

转载 DNS协议:网络世界的地址簿

DNS 服务器在网络世界,也是这样的。你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地址簿,就是DNS 服务器。由此可见,DNS 在日常生活中多么重要。每个人上网,都需要访问它,但是同时,这对它来讲也是非常大的挑战。一旦它出了故障,整个互联网都将瘫痪。另外,上网的人分布在全世界各地,如果大家都去同一个地方访问某一台服务器,时延将会非常大。因而,DNS 服务器,一定...

2019-04-27 16:47:01 242

原创 AQS之CountDownLatch源码解读

首先准备一个可以跑的Demo private final static int threadCount = 200; public static void main(String[] args) throws Exception { //1、创建线程池 ExecutorService exec = Executors.newCachedThreadPool...

2019-04-26 22:27:31 115

原创 通过源码参数聊聊ThreadPoolExecutor机制以及其四种线程池

ThreadPoolExecutor可以通过制定的一些参数来创建一个线程池,目前默认可以通过Executor来实例化四种线程池的执行器,简单的做一下说明:newFixThreadPool 创建一个固定长度的线程池,每当提交一个任务就创建一个线程,知道达到线程池的最大数量,这时线程池的规模将不再变化 newCacheTheadPool 创建一个可缓存的线程池,如果线程池的当...

2019-04-23 17:49:07 134

原创 Disruptor启动过程源码分析(三)

接着Disruptor启动过程源码分析(二)现在我们来看看Main.java的第三步:disruptor.start(),点开start方法看看 public RingBuffer<T> start() { final Sequence[] gatingSequences = consumerRepository.getLastSequenc...

2019-04-18 11:05:38 233

原创 Disruptor启动过程源码分析(二)

接着Disruptor启动过程源码分析(一)现在我们第一步吧Disruptor实例化好了,下面我们看看handlerEventWith(添加消费者的监听)内部都做了些什么 public EventHandlerGroup<T> handleEventsWith(final EventHandler<? super T>... handlers) { ...

2019-04-17 16:26:04 187

原创 Disruptor启动过程源码分析(一)

首先准备一个可以跑起来的demoOrderEvent.javapublic class OrderEvent { private long value; public long getValue() { return value; } public void setValue(long value) { this.value = value; } }...

2019-04-17 15:01:46 330

原创 Nginx优化

1、配置线程数和并发数worker_processes 4; #cpuevents {worker_connections 10240;#每一个进程打开的最大连接数,包含了nginx与客户端和nginx与upstream之间的连接multi_accept on; #可以一次建立多个连接use epoll; 使用epoll连接模型}2、配置后端Server的长连接...

2019-03-04 18:10:52 70

转载 HTTP1.1 与 HTTP2.0 知多少?

转自:https://www.jianshu.com/p/1ad439279974HTTP是应用层协议,是基于TCP底层协议而来。TCP的机制限定,每建立一个连接需要3次握手,断开连接则需要4次挥手。HTTP协议采用“请求-应答”模式,HTTP1.0下,HTTP1.1非Keep-Alive模式下,每个请求都要新建一个连接,完成之后立即断开连接。如果有新的请求,则要重新创建请求连接(HT...

2019-02-23 21:22:02 175

原创 Btrace使用笔记

一、简介BTrace可以动态地向目标应用程序的字节码注入追踪代码使用技术:JavaComplierApi、JVMTI、Agent、Instrumentation+ASM二、下载和使用下载页面:https://github.com/btraceio/btrace/releases/tag/v1.3.11.3下载后进行环境变量的配置,配置具体可参考其他博客把文件夹build里面...

2019-02-23 20:18:45 126

原创 记第一次在工作中用设计模式重构代码

小弟在某物流公司工作,近期临近过年需求比较松,发现项目的一个模块使用大量的if-else语句,于是乎想到用设计模式进行重构。一、业务场景以及出现的问题项目中有一个用户修改记录模块,对应数据库USER_MODIFY表,每次用户对主业务模块进行操作(如增加,删除,编辑等)会增在用户修改记录模块中增加相应信息(用户,操作名称等)。现在项目中的代码存在下列问题:使用了大量的if-else操...

2019-01-30 13:53:17 192

原创 Redis原理分析(二)

我们知道,整个Redis的数据结构是key-value形式组成的一个全局字典,还有带过期时间key集合也是一个字典。struct RedisDb{ dict* dict; //所有key-value dict* expires //所有key的过期时间 ...}struct zset{ dict* dict //所有的value-...

2019-01-29 22:12:26 137

转载 面试常问,缓存三大问题及解决方案!

原文 https://juejin.im/post/5b604b9ef265da0f626390011. 缓存来由 随着互联网系统发展的逐步完善,提高系统的qps,目前的绝大部分系统都增加了缓存机制从而避免请求过多的直接与数据库操作从而造成系统瓶颈,极大的提升了用户体验和系统稳定性。 2. 缓存问题 虽然使用缓存给系统带来了一定的质的提升,但同时也带来了一些需要注意的问...

2019-01-29 11:20:37 202

原创 Redis原理分析(一)

一、Redis字符串内部Redis内部的字符串是以数组形式储存的。在C语言中,字符串的结尾是以NULL(0x\0)作为结束符号,但是在redis里面,如果像C语言一样的话,如果需要获取某字符串,需要进行数组的遍历扫描,这样的时间复杂度为O(n),这样Redis表示我受不起。所以Redis自己定义了一种数据结构,叫做SDS(Simple Dynamic String),这种数据结构有一个很大...

2019-01-26 14:10:50 315

原创 如何把代码写的优雅之实践

小弟从毕业到现在参加工作半年多了,在review同事的代码学习到了很多优雅的地方,在此做记录,持续更新。欢迎大家向我提出意见,若有错误的地方还请大家多多指出一、Lambda表达式准备例子:@DataClass Person{ private String code; private String name; private int age; private Date b...

2019-01-20 23:45:12 271

原创 Redis的持久化

1、为什么需要Redis的持久化我们都知道,Redis的数据都是保存在内存里面的,导致了Redis有如下特点1.由于内存的容量较小,并且速度很快,所以redis相对于mysql、orcle等数据库相比,存储的容量较小,但是io速度特别快。2.由于内存的临时存储性,在机器断电之后内存里的内容将会丢失,若redis没有持久化,则数据也将全部丢失。简而言之,redis持久化是保证redi...

2019-01-20 17:39:07 83

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除