自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

luoyoub的博客

路漫漫其修远兮,吾将上下而求索

原创 JAVA同步工具类——Semaphore信号量

信号量 计数信号量(Counting Semaphore)用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量; Semaphore管理着一组虚拟许可(permit),许可的初始数量可通过构造函数来指定;在执行操作时先获取许可(只要还有剩余的许可),使用完成后释放许可;如果没有许...

2018-09-29 22:20:00 124 0

原创 JAVA同步工具类——CountDownLatch

闭锁 在学习CountDownLatch之前,让我们先了解一下闭锁的概念。 闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态;闭锁的作用相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有线程通过;当闭锁到达结束状态后...

2018-09-29 20:46:28 129 0

原创 java集合之CopyOnWriteArrayList

CopyOnWriteArrayList CopyOnWriteArrayList是juc中提供的并发安全的ArrayList,我们拆分一下类名"Copy"“On”“Write”“ArrayList”,从字面意思我们推断出,这个是以在Write时进行Copy数组元素的Array...

2018-09-29 17:03:29 95 0

原创 Java中集合类遍历性能

集合元素在内存如何存放 数据元素在内存中,主要有2种存储方式: 1、顺序存储,Random Access(或直接存储,Direct Access): 这种方式,相邻的数据元素存放于相邻的内存地址中,整块内存地址是连续的。可以根据元素的位置直接计算出内存地址,直接进行读取。读取一个特定位置元素的平均...

2018-09-29 15:44:17 392 0

原创 Java语法糖之foreach

JAVA集合foreach for-each其实只是java提供的语法糖。语法糖是编程语言提供的一些便于程序员书写代码的语法,是编译器提供给程序员的糖衣,编译时会对这些语法特殊处理。语法糖虽然不会带来实质性的改进,但是在提高代码可读性,提高语法严谨性,减少编码错误机会上确实做出了很大贡献; Jav...

2018-09-29 11:20:49 302 0

原创 设计模式之迭代器模式

迭代器模式 定义:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节 迭代器模式的结构 抽象迭代器(Iterator)角色:此抽象角色定义出遍历元素所需的接口; 迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代,并保持迭代过程中的游标位置; 抽象容器:一般是一个接口,提供一...

2018-09-29 00:06:03 61 0

原创 JAVA类初始化顺序总结

类的初始化 {#articleHeader1} 初始化顺序 首先来看下,当一个类从main入口方法,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序: public class ClassLoadTest { private static User user = new Use...

2018-09-27 23:16:24 5985 0

原创 JAVA对象实例化方式总结--及Unsafe黑科技

JAVA对象实例化的方法 本贴主要对JAVA实例化方式做个简单的总结,尤其是Unsafe的方式,可能很多人都没了解过,这个是sun工程师留的一个后门,可以称为“黑科技” New对象实例 // 直接new对象实例 Productor productor = new Productor(); ...

2018-09-27 17:47:27 426 0

原创 JAVA8 TreeMap学习笔记

TreeMap TreeMap集合是基于红黑树(Red-Black tree)的 NavigableMap实现。该集合最重要的特点就是可排序,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。这句话是什么意思呢?就是说TreeMa...

2018-09-24 10:34:43 689 0

原创 JAVA8 TreeSet学习笔记

TreeSet TreeSet是基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。这句话什么意思呢?就是说,跟HashSet底层是一个HashMap来维护类似,TreeSet的底层实...

2018-09-24 00:28:25 349 0

原创 JAVA8 HashSet学习笔记

HashSet Set集合的最主要特性就是没有重复元素,HashSet是Set的一个字类,其内部基于HashMap实现,因此HashSet的实现比较简单,相关HashSet的操作,基本上都是直接调用底层HashMap的相关方法来完成 // 底层使用HashMap来保存HashSet的元素 priv...

2018-09-24 00:27:27 295 0

原创 JAVA——TreeSet学习笔记

TreeSet TreeSet是基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。这句话什么意思呢?就是说,跟HashSet底层是一个HashMap来维护类似,TreeSet的底层实...

2018-09-24 00:20:45 90 0

原创 常见的缓存失效策略

常见的缓存失效策略 常见的几种缓存失效策略,总结一下: FIFO ,first in first out ,最先进入缓存的数据在缓存空间不够情况下(超出最大元素限制时)会被首先清理出去 LFU , Less Frequently Used ,一直以来最少被使用的元素会被被清理掉。这就要求缓存的元...

2018-09-19 13:30:03 1754 0

原创 JVM--Native Method Stack(本地方法栈)

Native Method Stack(本地方法栈) 定义:本地方法栈为虚拟机使用到的Native方法服务,虚拟机规范未对本地方法栈中方法使用的语义、使用方式与数据结构进行强制规定,因此具体的虚拟机可以自由实现 特性 线程私有 后进先出(LIFO)栈 作用是支撑Native方法的调用、执行...

2018-09-07 23:21:10 558 0

原创 JVM -- 程序计数器(Program Counter Register)

程序计数器(Program Counter Register) 定义:程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码行号指示器,也可称之为PC寄存器;字节码解释器工作时通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依...

2018-09-07 23:19:02 623 0

原创 JAVA8 Stack学习笔记

栈-Stack 定义:栈的元素是按后进先出(LIFO)的方法进行处理的,最后入栈的元素最先出栈;栈是一种线性集合,其添加和删除都在一端进行;Stack类继承了Vector类 public class Stack<E> extends ...

2018-09-03 16:43:13 305 0

原创 Socket三次握手四次挥手

Socket 起源于 Unix,而Unix基本哲学之一就是一切皆文件,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符...

2018-09-03 15:05:00 1202 0

原创 CAP理论&ZK&Eureka

如果我们期待实现一套严格满足ACID(Atomicity原子性、Consistency一致性、Isolation隔离性、Durability持久性)的分布式事务,很可能的情况就是系统的可用性和严格一致性出现冲突。在可用性和一致性之间永远无法存在一个两全其美的方案。 CAP理论 2000年7...

2018-09-01 17:57:43 383 0

转载 【转】Jedis常见异常汇总

【转载】Jedis常见异常汇总,总结的相当详细!! 详见:https://yq.aliyun.com/articles/236384?spm=a2c4e.11153940.blogcont236383.20.d17a1c96Lm3AHM#cc8

2018-08-28 21:52:49 843 0

原创 JVM相关知识总结

本文主要是关于JVM相关知识的总结,大纲: Summary * 前言 * 概述 * JVM运行时数据区 * 程序计数器 * JAVA虚拟机栈 * 栈帧 * 局部变量表 * 操作数栈 * 本地方法栈 ...

2018-08-22 22:37:44 97 0

原创 记Jedis客户端并发问题

先来看问题,在对分布式锁进行压测时抛出异常: java.lang.ClassCastException: java.lang.Long cannot be cast to [B at redis.clients.jedis.Connection.getStatusCodeReply(Co...

2018-08-18 23:32:28 435 0

原创 springcloud分布式限流问题

最近项目上需要在zuul网关进行限流,查阅了一些限流方案,比较好的方案是使用redis进行分布式限流,主要考虑到redis性能好,且redis本身是单线程操作,解决了并发问题。目前在github上开源的Spring Cloud Zuul RateLimit 就刚好满足了这些需求:https://g...

2018-08-18 22:16:45 1613 0

原创 idea热启动插件Jrebel免费激活

之前介绍过如何使用facebook或twitter账号免费获取jrebel的激活码,但是官方在7月份关闭了这个通道,已经激活的用户因为jrebel启动时实时校验的问题也无法是用了,后来网上找到个免费的激活服务器,亲验成功 首先需要部署反代服务器,具体可参考:https://github.com/...

2018-08-18 19:32:48 2472 0

原创 JAVA线程及线程池异常处理

JAVA线程异常处理 在run方法上增加异常处理 new Thread(() -> { try { System.err.println(3 / 2); System.err.println(3 / 0); } catch (Exception e) { System.err...

2018-08-10 23:45:51 1413 0

原创 分享一款“暗黑系列”Idea主题插件Material Theme

偶然发现一款“暗黑系列”idea主题插件,感觉非常不错,分享一下~ github:https://github.com/equinusocio/material-theme 安装 plugins -> browse repositories -> search “...

2018-06-29 18:19:18 59466 20

原创 缓存穿透与缓存雪崩

缓存穿透 缓存穿透:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透 解决方案: 1. 最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定...

2018-06-14 16:29:50 266 0

原创 Redis淘汰策略

失效策略上,Redis支持多大6种的数据淘汰策略: 1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰; 2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要...

2018-06-14 16:26:52 798 0

原创 Spring自定义Bean创建与销毁方式的总结

1.注解方式 在 bean 初始化时会经历几个阶段,首先可以使用注解 @PostConstruct, @PreDestroy 来在 bean 的创建和销毁阶段进行调用: @Component public class AnnotationBean { private final s...

2018-06-14 16:25:47 1363 0

原创 JVM内存溢出和内存泄露

定义 内存溢出out of memory:指程序运行过程中无法申请到足够的内存而导致的一种错误; 内存泄露memory leak:指程序中动态分配内存给一些临时对象,但是对象不会被GC所回收始终占用内存;即被分配的对象可达但已无用 内存溢出: 堆内存溢出(outOfMemoryEr...

2018-06-13 16:40:00 334 0

原创 synchronized和Lock的区别

Lock以及它的一个实现类ReentrantLock是jdk5新增加的, Lock也可以用于实现多线程的同步 区别 synchronized既可以加在方法上,也可以加载特定代码块上,而lock需要显示地指定起始位置和终止位置; synchronized是托管给JVM执行(底层使用mutex ...

2018-06-10 15:15:02 1067 0

原创 一致性hash算法学习

概述 在解决分布式系统中负载均衡的问题时候可以使用Hash算法让固定的一部分请求落到同一台服务器上,这样每台服务器固定处理一部分请求,起到负载均衡的作用。 但是普通的余数hash(hash(比如用户id)%服务器机器数)算法伸缩性很差,当新增或者下线服务器机器时候,用户id与服务器的映射关系会...

2018-06-09 23:56:36 92 0

原创 关于Thread.sleep的几个问题

Thread.sleep sleep就是正在执行的线程主动让出CPU,CPU去执行其他线程,在sleep指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了CPU,但其他被同步锁挡住了的线程也无法得到执行...

2018-06-09 19:49:09 8217 0

原创 JUC五种常见同步工具类总结

JUC常用工具类 Semaphore CountDownLatch CyclicBarrier Exchanger Phaser 使用场景 这五种同步辅助类适用于的同步场景: Semaphore 信号量是一类经典的同步工具。信号量通常用来限制线程可以同时访问的(物理或逻辑)资源数量。...

2018-06-09 19:46:10 2628 0

原创 Future模式核心思想

Future模式核心思想 Future模式的核心在于:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑(根据《Java程序性能优化》) Future模式有点类似于商品订单。在网上购物时,提交订单后,在收货的这段时间里无需一直在家里等候,可以先干别的事情。类推到程序设计...

2018-06-09 19:41:39 263 0

原创 java notify和notifyAll的区别

notify和notifyAll的最主要的区别 notify只是唤醒一个正在wait当前对象锁的线程,而notifyAll唤醒所有。值得注意的是:notify是本地方法,具体唤醒哪一个线程由虚拟机控制;如果有多个线程等待,则线程规划器任意挑选出其中一个wait()状态的线程来发出通知 调用n...

2018-06-09 19:39:04 142 0

原创 Synchronzied底层实现

synchronized的底层是使用操作系统的mutex lock实现; Mutex Lock 监视器锁(Monitor)本质是依赖于底层操作系统的Mutex Lock(互斥锁)来实现的。每个对象都对应于一个可称为” 互斥锁” 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象;...

2018-06-09 17:03:27 207 0

原创 Synchronzied锁对象之包装类

synchronized锁对象为包装类型(修饰变量) synchronized锁对象为包装类型时,需要考虑包装类型的缓存,如Integer默认缓存-127~128之间的数值,所以下例中锁a和锁b实际锁的是同一个对象;另外其它包装类也需要注意类似问题(如Byte/Short); public s...

2018-06-09 16:57:56 349 0

原创 Java类的初始化

平常在写代码的过程中,一般不会注意到类的初始化过程,如果类中有代码块,静态域时,初始化的顺序是怎么样的? 先上代码: public class Application { public static void main(String[] args) { Studen...

2018-06-08 18:56:17 147 0

转载 【转载】Jar包冲突问题及解决方案

作者:sherlockyb 链接:https://www.jianshu.com/p/100439269148 关于JAR包冲突问题,几乎是码农经常会遇到的问题,博客看到这篇文章,总结的非常棒,以下是转载的原文 概述 Jar包冲突是老生常谈的问题,几乎每一个Java程序猿都不可避免...

2018-06-08 13:02:34 1211 0

原创 聊一聊SpringCloud版本号管理

版本命名 Spring Cloud是一个拥有诸多子项目的大型综合项目,原则上其子项目也都维护着自己的发布版本号。那么每一个Spring Cloud的版本都会包含不同的子项目版本,为了要管理每个版本的子项目清单,避免版本名与子项目的发布号混淆,所以没有采用版本号的方式,而是通过命名的方式。 这些...

2018-06-07 23:34:14 930 0

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