自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

转载 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题

缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。 比如一个雪崩的简单过程: 1、redis集群大面积故障 2、缓存失效,但依然大量请求访问缓存服务redis 3、redis大量失效后,大量请求转向到mysql数据库 4、mysql的调用量暴增,很快就扛不住了,甚至直接宕机 5、由于大量的应用服务依赖m...

2019-03-10 23:20:13 345

转载 Redis为什么是单线程、及高并发快的3大原因详解

Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快; 2.redis是单线程的,省去了很多上下文切换线程的时间; 3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。 下...

2019-03-10 23:11:40 856

转载 Redis并发竞争key的解决方案详解

Redis高并发的问题 Redis缓存的高性能有目共睹,应用的场景也是非常广泛,但是在高并发的场景下,也会出现问题: 高并发架构系列:Redis缓存和MySQL数据一致性方案详解 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题 以及今天要谈到的Redis并发竞争问题,这里的并发指的是多个redis的client同时set key引起的并发问题。 比如:多客户端同时并发写一个ke...

2019-03-10 22:48:45 2072

转载 CountDownLatch、Semaphore等4大并发工具类详解

1.CountDownLatch 功能 CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。 原理: CountDownLatch是通过一个计数器来实现的,计数器的初始值为需要等待线程的数量。 eg:CountDownLatch c = new CountDownLatch(10); // 等待线程的数量为10 主线程调用Co...

2019-03-10 22:23:05 262

转载 ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)

哈希表 1.介绍 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。 哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。 2.链式哈希表 链式哈希表...

2019-03-10 22:19:00 879

转载 RPC框架的实现原理,及RPC架构组件详解

RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。 垂直应用架构 当访问量逐渐增大,单一应用增加机器带...

2019-03-10 22:16:21 1332

转载 分布式锁

什么是分布式锁 要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。 1.线程锁 主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如Synchronized、Lock等。 2.进程锁 为了控制同一操作系统中多个进程访问某个共享资源,因为进程具有独...

2019-03-10 22:12:09 139

转载 详解RPC远程调用和消息队列MQ的区别

RPC RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制。 RPC框架 知名度较高的有Thrift(FB的)、dubbo(阿里的)。 RPC的一般需要经历4个步骤: 1、建立通信 首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接,主要是通过在客户端和服务器之间建立TCP连接。 2、服务寻址 ...

2019-03-10 22:01:22 577

转载 多种多线程锁机制的实现方式与比较

Java提供了多种多线程锁机制的实现方式,常见的有: synchronized ReentrantLock Semaphore AtomicInteger等 每种机制都有优缺点与各自的适用场景,必须熟练掌握他们的特点才能在Java多线程应用开发时得心应手。 4种Java线程锁(线程同步) 1.synchronized 在Java中synchronized关键字被常用于维护...

2019-03-10 21:55:24 4799

转载 Java线程池的使用方式,核心运行原理、以及注意事项

线程池的处理流程 就以ThreadPoolExecutor为例,当我们把一个Runnable交给线程池去执行的时候,这个线程池处理的流程是这样的: 先判断线程池中的核心线程们是否空闲,如果空闲,就把这个新的任务指派给某一个空闲线程去执行。如果没有空闲,并且当前线程池中的核心线程数还小于 corePoolSize,那就再创建一个核心线程。 如果线程池的线程数已经达到核心线程数,并...

2019-03-10 21:46:34 154

转载 独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁

乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。 1.乐观锁 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。 乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CA...

2019-03-10 21:42:32 185

原创 多线程核心知识:原子性

1、原子性问题 原子操作定义:原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将整个操作视为一个整体是原子性的核心特征。 存在竞争条件,线程不安全,需要转变原子操作才能安全。方式:循环CAS、锁;上例只是针对一个变量的原子操作改进,我们也可以实现更大逻辑的原子操作。 解决: a、J.U.C包内的原子操作封装类 CAS...

2019-03-03 23:26:44 2740

原创 CountDownLatch学习

概述 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。用法 new CountDownLatch(n)初始化一个计数为n的CountDow...

2019-02-24 15:52:48 193

原创 CyclicBarrier学习

概述 字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。 package com.business.thread; import java.util.Map; import java.ut...

2019-02-24 15:40:55 110

原创 Semaphore学习

Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施, 也是操作系统中用于控制进程同步互斥的量。Semaphore是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。 它相当于给线程规定一个量从而控制允许活动的线程数。 利用Semaphore设计一个链接池。 package com.business.thread....

2019-02-24 15:27:41 149

原创 线程停止.interrupt

package com.business.thread; public class EndThread { private static class useThread extends Thread { public useThread(String name) { super(name); } public void run() { //isInterrupte...

2019-02-21 23:57:51 141

原创 守护线程

守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出)        所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。 守护线程在没有用户线程可服务时自动离开,在Java中比较特殊的线程...

2019-02-21 23:54:21 105

原创 创建线程的三种方式

package com.business.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /* *创建线程和启动线程的三种方式: *1、继承Thread *2、继承Ru...

2019-02-21 23:49:38 128

原创 Tomcat启动时加载SpringMvc开发的war流程

Tomcat启动 1、加载xx加载xxx.war 2、创建容器:创建Map iocMap = new HashMap(); 3、ScanbasePackage,扫描war下面的@Controller,@Service注解的类 4、实例化:将扫描到的类通过反射实例化,并存入到iocMap容器中 5、依赖注入:将存在依赖的bean进入注入 6、UrlMapping:http请求路径和Met...

2019-02-21 23:44:09 821

原创 Mybatis SqlSessionTemplate 源码解析

Mybatis SqlSessionTemplate 源码解析 在使用Mybatis与Spring集成的时候我们用到了SqlSessionTemplate 这个类。   <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg in...

2018-08-30 11:17:07 180

转载 判断子线程是否执行完毕

在使用多线程的时候有时候我们会使用 java.util.concurrent.Executors的线程池,当多个线程异步执行的时候,我们往往不好判断是否线程池中所有的子线程都已经执行完毕,但有时候这种判断却很有用,例如我有个方法的功能是往一个文件异步地写入内容,我需要在所有的子线程写入完毕后在文件末尾写“---END---”及关闭文件流等,这个时候我就需要某个标志位可以告诉我是否线程池中所有的子线

2017-12-07 10:59:23 2021

原创 将数据库1的表及表内容复制到数据库2

通过创建数据库1和数据库2之间的db link来实现数据的复制 数据库1:db1 数据库2:db2 1、在数据库2中     create public database link mydblink connect to (数据库1的用户名) identified by (数据库2的密码) using '(数据库1的服务器地址)'; 2、复制一个表的数据  create t

2017-10-31 20:27:53 1001

转载 存储过程和函数

本文部分内容转自http://www.cnblogs.com/lengbingshy/archive/2010/02/25/1673476.html 本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。       函数限制比较多,比如不能用临时表,只能用表变量.还有一些函

2017-10-28 11:38:24 652

原创 封装ArrayList

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/44786233 ArrayList很好用,可以添加任意类型,动态增长,各种库函数支持,如下是个简单示例:public class FillingList { /** * @param args * fill只会对已经存在空间填充,所以

2017-10-24 10:11:06 446

空空如也

空空如也

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

TA关注的人

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