自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis(3)-主从复制及哨兵模式

一、Redis主从复制一般从节点提供读操作,主节点提供写操作。(对于读多写少的情况,可给主节点配置多个从节点,从而提高相应效率) 主从复制是指主节点将当前的数据同步给从节点,后续如果有写命令也会持续发送给从节点,达到主从数据同步效果。主从复制过程: (1)从节点执行slaveof[masterIP][masterPort],保存主节点信息。 (2)从节点中的定时任务发现主节点信息,建立和主节点的Socket连接。 (3)从节点发送ping信号,主节点...

2021-01-24 21:12:56 70

原创 Redis(2)-Redis的一些问题及策略

一、Redis缓存问题缓存和数据库一致性问题 分布式环境下非常容易出现缓存和数据库一致性问题,如果想要缓存跟数据库强一致性,那就不要使用缓存。 我们只能通过采取合适的策略来降低缓存与数据库一致性问题的概率。 合适的策略包括合适的缓存更新策略、更新数据库后及时更新缓存、缓存失败时增加重试机制等。二、缓存穿透、缓存击穿、缓存雪崩(1)缓存穿透:指用户不(黑客)不断请求缓存和数据库中都没有的数据。这样不断的攻击会导致数据库压力非常大,严重会击垮数据库...

2021-01-24 20:52:37 45

原创 Redis(1)-基本概念及使用

一、Redis是什么Redis是一个由C 语言开发的一个高性能键值对(key-value)的内存数据库,可以用作数据库、缓存、消息中间件等。 它是一种NoSQL(not-only sql,泛指非关系型数据库)的数据库。 特点: 1.性能优越,数据存储在内存中,读写速度非常快,支持10W QPS。 2.单线程单进程,线程是安全的,同时避免了线程上下文的切换带来的损耗。 3.采用多路IO多路复用机制。 ...

2021-01-24 20:44:05 88

原创 Spring事务

Spring中七种事务传播行为事务传播行为类型 解释说明 个人理解 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择 必须确保有一个事务 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行 对于事务,有就有,没有就算了 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常 必须依附当

2021-01-24 20:19:37 22

原创 Spring Bean 是什么及其生命周期阶段

一、Spring Bean是什么Spring Bean是被实例的,组装的及被Spring容器管理的Java对象。Spring容器会自动完成@Bean对象的实例化二、Spring Bean生命周期Spring Bean的生命周期只有四个阶段: 实例化 -> 属性赋值 -> 初始化 -> 销毁 1.实例化Instantiation 2.属性赋值Populate 3.初始化Initialization ...

2021-01-17 22:52:04 121

原创 Spring AOP介绍及其原理

一、Spring AOP是什么AOP:面向切面,是一种编程思想,OOP的延续。 将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。二、Spring AOP源码AOP源码中用到了两种动态代理来实现拦截切入功能:jdk动态代理和cglib动态代理。(1)jdk动态代理:由java内部的反射机制来实现的。反射机制在生成类的过程中比较高效,但前提是目标类基于统一的接口,如果没有jdk代理不能应用。/**** jdk动态代.

2021-01-17 22:30:57 35

原创 Spring IOC介绍及其原理

一、Spring IOC是什么IOC:控制反转,是一种设计模式。 一层含义是控制权的转移,由传统的在程序中控制依赖转移到由容器来控制。 第二层是依赖注入:将相互依赖的对象分离,在Spring配置文件中描述他们的依赖关系,他们的依赖关系只在使用的时候才建立,简单来说就是不需要的NEW一个对象了。 二、Spring IOC简单原理实现步骤:加载并且保存Spring配置文件路径信息,然后保存到configLocation中。 刷新Spring上下文。 创建并且载入DefaultL...

2021-01-17 22:28:03 488

原创 SpringBoot是什么?原理是怎么样的?

一、SpringBoot是什么是一个快速开发的框架吗,能够快速整合第三方框架。 整合的基本原理是Maven依赖关系,Maven的集成,完全采用注解化,简化XML配置,内嵌HTTP服务器(Tomcat,jetty),默认嵌入Tomcat,最终以Java应用程序进行执行。二、为什么要用SpringBoot以往的项目整合起来是比较繁琐复杂的,而且存在架构包冲突的问题。SpringBoot的设计目的就是用来简化Spring应用的创建。三、SpringBoot的核心功能1.可独立运行的...

2021-01-17 21:18:26 57

原创 总结篇(34)---JUC工具类(4)Exchanger

ExchangerExchanger用于两个线程间的数据交换,它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。 使用场景:两个线程相互等待处理结果并进行数据传递。 一、Exchanger使用public void latch() throws InterruptedException,IOException{ int count = 5; Exchanger<String> exchanger = new Exchanger<>...

2021-01-07 22:42:51 27

原创 总结篇(33)---JUC工具类(3)Semaphore

SemaphoreSemaphore信号量维护一个许可集,每次使用时执行acquire()从Semaphore获取许可,如果没有则阻塞,每次使用完执行release()释放许可。 使用场景:Semaphore对用于对资源的控制,比如数据连接有限,使用Semaphore限制访问数据库的线程数。一、Semaphore的使用:public void latch() throws InterruptedException,IOException{ int count = 5; S...

2021-01-07 22:39:18 24

原创 总结篇(32)---JUC工具类(2)CyclicBarrier

CyclicBarrier它允许一组线程相互等待,直到达到某个公共屏障点,也就是阻塞在调用cyclicBarrier.await()的地方。 使用场景:类似CountDownLatch,但CyclicBarrier提供了几个countDownLatch没有的方法以应付更复杂的场景。备注:看上去功能跟CountDownLatch差不多,但CountDownLatch的计数无法被重置,如果需要重置,还是需要考虑使用CyclicBarrier。 另外,CyclicBarrier初始化时还可添..

2021-01-07 22:36:42 26

原创 总结篇(31)---JUC工具类(1)CountDownLatch

CountDownLatchCountDownLatch初始化时会给定一个计数,然后每次调用countDown()计数减1,当计数未达到0之前调用await()方法会阻塞直到计数减到0; 使用场景:多用于划分任务由多个线程执行,例如:最近写个豆瓣爬虫,需要爬取每个电影的前五页短评,可以划分成5个线程来处理线程。通过latch.await()保证全部完成再返回。 一、CountDownLatch使用样例:public void latch() throws Interrupte...

2021-01-07 22:32:33 29

原创 总结篇(30)---Java并发及锁(4)常见锁及分类

一、公平锁和非公平锁公平锁:指多个线程按照申请锁的顺序来获取锁 非公平锁:没有顺序完全随机,所以会造成优先级反转 举例: synchronized就是非公平锁 ReentrantLock(使用CAS和AQS实现)通过构造参数可以决定是非公平锁还是公平锁,默认构造是非公平锁,非公平锁的吞吐量性能比公平锁大好。二、可重入锁和不可重入锁可重入锁:又名递归锁,指同一线程在外层方法获取锁的时候进入内层方法会自动获取锁 不可重入锁...

2021-01-05 23:16:16 62

原创 总结篇(29)---Java并发及锁(3)Lock

Lock是一种用于控制多个线程对共享资源的访问工具一、Lock使用public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long var1, TimeUnit var3) throws InterruptedException; void unlock()...

2021-01-05 23:09:43 52

原创 总结篇(28)---Java并发及锁(2)Volatile

Volatile被volatile修饰的变量能够保证每个线程能够获取该变量的最新值,从而避免出现数据脏读的现象。一、Volatile使用private volatile boolean flag = false;二、Volatile特性及原理一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层含义:1. 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 ...

2021-01-05 22:58:08 32

原创 总结篇(27)---Java并发及锁(1)Synchronized

Synchronized在java中synchronized关键词具有使每个线程依次排队操作共享变量的功能。一、Synchronized使用当锁住的是实例对象,它是作用于该实例的范围,其它不同的实例对象仍然可以执行。 当锁住的是类对象,他是作用于某个类的范围,只要是该类的实例对象都会受到影响。二、Synchronized原理当使用了synchronized,会在生成的class信息中出现下面两种情况:(1)同步代码块使用了monitorenter和monitorexit指令..

2021-01-05 22:50:13 37

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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