自定义博客皮肤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)
  • 收藏
  • 关注

原创 spring 源码分析网站

1spring 源码分析网站https://www.bilibili.com/video/av95201780/

2020-12-28 23:58:30 220

原创 面向对象三大特性五大原则 + 低耦合高内聚

面向对象三大特性五大原则 + 低耦合高内聚面向对象的三大特性是"封装、"多态"、"继承",五大原则是"单一职责原则"、"开放封闭原则"、"里氏替换原则"、"依赖倒置原则"、"接口分离原则"。什么是面向对象面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发

2020-12-16 20:14:18 250

原创 Spring IOC原理总结(一)

注意:因为代码比较多,这里的流程图只画出了大概的流程图,具体的深入代码。一、Spring 容器高层视图Spring启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。说明:Bean缓冲池:HashMap实现BeanFactory体系架构先看下B...

2020-03-27 00:11:36 155

原创 解决redis缓存穿透、redis缓存雪崩问题

redis缓存雪崩如果我们的缓存挂掉了,这意味者我们的请求全部都跑去数据库了。数据未加载到缓存中,或者缓存在同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以redis需要对数据设置过期时间,并采用的惰性删除+定期删除两种策略对过期键进行删除。如果缓存数据设置的过期时间是相...

2020-03-24 23:56:13 629

原创 volatile原理深入分析

1、引入工具(Javap )1、使用javap,主要用于帮助开发者深入了解Java编译器的机制,主要选项有:-c分解方法代码,即显示每个方法具体的字节码-public|protect|package|private 用于指定显示那种级别的类成员-verbose指定显示更进一步的详细信息输入:javap -c Test.classD:\my-workspace\mayun\JUCDe...

2020-03-23 23:20:59 168

原创 线程池的4种常见创建方式

每次启动一个线程都要创建一个新的浪费资源,还有时间线程过多的时候会造成服务器崩溃,所有有了线程池来管理线程,下面介绍几种常见创建线程的方式:一、创建大小不固定的线程池这是具有缓冲功能的线程池,系统根据需要创建线程。线程会被缓冲到线程池中,如果线程池大小超过了处理任务所需的线程,线程池就会回收线程,当任务增加时,线程池可以增加线程来处理任务,线程池不会对线程的大小进行限制,线程池的大小依赖...

2020-03-22 23:13:15 1315

原创 Java面试题汇总(持续补充)。。。。

待持续补充中。。。。

2020-03-22 10:46:24 78

原创 线程池ThreadPoolExecutor实现

一、使用线程池的目的在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程。使用线程池管理线程主要有以下好处:1、降低资源消耗:通过复用已经存在的线程和降低线程关闭的次数来尽可能降低系统损耗;2、提供系统的响应速度:通过复用线程,省去创建线程的过程,因此整体上提升系统的响应速度;3、提高线程的可管理性:线程是稀缺...

2020-03-22 02:30:03 116

原创 Restful接口设计说明

前言REST(Respresentational State Transfer) 架构风格是一种风格,把信息提升为架构中的一等公民。通过REST可以实现系统的高性能、可伸缩、简单性、可修改性和可扩展等特性。1、简介REST架构风格不是一种可以购买的技术,也不是一个可以添加到软件开发项目中的开发库。首先也是最重要的,REST风格是一种世界观,把信息提升为构建架构中的一等公民。总结一下,RES...

2020-03-21 21:47:51 803

原创 接口交易实现幂等性4种方式

如何实现幂等性,通常实现手段有以下几点:数据库建立唯一索引,可以保证插入数据库的只有一条数据;Token机制,每次接口请求前先获取一个token,然后再下次请求的时候在header体中加上这个token,然后进行后天验证,如果验证通过删除token,下次请求再次判断token;悲观锁和乐观锁,悲观锁可以保证每次for update的时候,其他sql无法update数据(在数据库引擎是inn...

2020-03-21 12:04:44 1087

原创 Java中的并发工具类

Java并发工具类1、Java常见的并发工具类CountDownLatchCyclicBarrierSemaphoreExchangerCountDownLatch用过Thread的join()都知道,join让主线程等待“子线程”,结束之后,才能继续运行,Jdk1.5之后提供了CountDownLatch。它提供了比Join更丰富的功能,一种共享锁;常见api构造函数接收...

2020-03-20 23:48:54 91

原创 Spring aop的实现原理

简介说起Spring 的AOP,不得不说下OOP。OOP中引入封装,继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合,但是,如果我们需要为部分对象引入公共部分时,oop就会引入大量重复的代码。例如:日志功能。Aop技术利用一种“横切”的技术,解剖封住的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,这样就能减少系统的重复代码,减低模块的耦合度,并有利于未...

2020-03-19 00:04:40 73

原创 Java类ForkJoin的详解

在古代,皇帝要想办成一件事情,肯定不会亲自动手,而是任务细分给下面的大臣。下面的大臣也懒,于是把任务继续分给几个部分,继续下发,于是到了最后负责的人手里就完成一个小功能。上面的领导再把这些结果一层一层汇总。最终返回给皇帝,这就是分而制之的思想,也是我们今天的主题ForkJoin。一、简介从JDK1.7开始,Java就提供ForkJoin框架用于并执行任务,它的思想就是一个大任务分割成小任务...

2020-03-17 23:18:17 265

原创 JUC包下CountDwonLatch使用

CountDwonLatch(倒计时器),通常用来控制线程等待直到倒计时结束再开始执行。CountDownLatch的构造函数接受一个整数作为参数,即当前这个计数器的个数:public CountDownLatch(int count);CountDownLatch常用的方法:countdown方法,指倒计时器减一,await()方法,在某个线程等待倒计时器为0后再继续执行。应用示例:...

2020-03-16 23:44:19 171

原创 Java并发线程读后续(二)

续上一篇文章(https://blog.csdn.net/weixin_39617728/article/details/104871845)

2020-03-15 11:12:33 116

原创 Java并发编程艺术读后笔记

作为一本Java多线程开发圣经级别的书,第一遍读完整理一下本书知识的目录结构,以便后续回顾和知识点自查;

2020-03-15 00:29:49 109

原创 JAVA知识体系汇总

最近有空,自己整理一下JAVA的知识体系,https://www.processon.com/mindmap/5da565a0e4b002a64486461f

2020-03-14 21:07:56 184 1

原创 ConcurrentHashMap原理深度分析

一、背景线程不安全的HashMap因为多环境下,使用HashMap进行put操作会引起循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。效率低下的HashTable容器HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下HashTable的效率非常非常底下,因为当一个线程访问HashTable的同步方法时,可能会进入阻塞状态,...

2020-03-14 11:42:51 110

原创 分布式锁的三种实现方式-绝对经典

1、 基于数据库:a、利用唯一索引约束;b、利用数据自带的排他锁2、基于缓存:利用setnx()返回值3、基于ZooKeeper:a、利用Zookeeper同一个目录下只能有一个唯一文件名b、利用Zookeeper分布式锁客户端Curator注意:需要考虑的因素:单点、可重入、阻塞、失效时间一、基于数据库的实现方式基于数据库的方式的核心思想是:在数据库中创建一张表,表中包含方法名...

2020-03-12 21:17:02 173

原创 CAS算法、原子变量

1、CAS算法CAS(Compare-And-Swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊的命令,用于管理对共享数据的并发访问。CAS 是一种无锁的非阻塞算法的实现;CAS 包含了3个操作数,需要读写的内存值的V,进行比较的值A,拟写入的新值B;当且仅当V的值等于A时,CAS通过原子方式用新值B来更新V的值,否则不会执行任何操作;模拟CAS算法/**...

2020-03-11 22:47:45 97

原创 volatile关键字用法

**####JAVA提供一种稍弱的同步机制,即volatile变量,用来确保将线程变量同步到其他线程,可以将volatile看做一个轻量级的锁,但是又与锁有些不同:**对于多线程,不是一种互斥关系不能保证变量状态的“原子型操作”原子性操作的解释:例如i++;这个操作,它不是一个原子性操作,在实际执行是需要三步操作“读-改-写”int temp =i;temp =temp+1;i...

2020-03-11 21:54:57 74

原创 Java IO知识总结

java IO体系的学习总结1.Java Io流的概念,分类,类图。1.1 Java Io流的概念java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。stram是从起源(source)到接收的(sink)的有序数...

2020-02-26 18:41:02 116

原创 Redis实现分布式锁

一、分布式锁一般有三种实现方式1、数据库乐观锁2、基于Redis的分布式锁3、基于Zookeeper的分布式锁二、确保分布式锁可用的四个条件条件原因不会发生死锁即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能正常加锁互斥性在任意时刻只有一个客户端能持有锁容错性只要大部分的Redis节点,客户端就可以加锁和解锁解铃还...

2019-11-27 11:49:18 91

原创 SpringBoot启动流程分析

一、介绍SpringBootSpring Boot是一个简化Spring开发的框架。用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件,简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配...

2019-11-27 10:54:02 331

空空如也

空空如也

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

TA关注的人

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