- 博客(118)
- 收藏
- 关注
原创 Spring AOP @Around增强处理实现方法级防重
1 定义 PointCut 连接点注解类/** * DB 锁 */@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD) //表示该注解只能用在方法上public @interface DbLock { public BusiType type(); // 锁定的类型 public String[] key() default {}; // 锁的值,只能用在第一个参数上}2 定义切面类.
2021-05-11 12:13:42
1318
转载 Http协议与TCP协议简单理解
编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解。TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Htt...
2020-09-23 14:14:44
293
原创 《深入理解 Java 内存模型》 整理
目录基础JAVA 内存模型的抽象重排序1, 处理器重排序2 ,内存屏障指令3, HAPPENS-BEFORE4 , 数据依赖性5 ,AS-IF-SERIAL 语义6, 重排序对多线程的影响顺序一致性1, 顺序一致性内存模型2, 同步程序的顺序一致性效果3,未同步程序的执行特性 Volatile1,VOLATILE 特性2,VOL...
2020-09-23 14:13:29
318
原创 高并发下的限流解决方案
目录限流的目的传输层中的限流基于漏桶(Leaky bucket)与令牌桶(Token bucket)算法的流量控制限流算法的实际应用单机玩法1,SemaPhore2,RateLimiter分布式中的玩法redis+lua:令牌桶算法实现使用延迟队列限流的目的限流的目的是防止恶意请求流量、恶意攻击、或者防止流量超过系统峰值限流是对资源访问做...
2019-09-24 17:01:41
1876
1
原创 多线程五 线程池 ThreadPoolExecutor
目录什么是线程池线程池的优势Java 中提供的线程池 APIExcutorsThreadpoolExecutor线程池初始化以后做了什么事情newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutor线程池原理分析(FixedThreadPool)源码分析execute状...
2019-09-12 16:58:19
646
原创 多线程四 JUC的阻塞队列和原子类
目录生产者消费者的实际使用阻塞队列的使用案例注册成功后增加积分J.U.C 中的阻塞队列J.U.C 提供的阻塞队列阻塞队列的操作方法 1. 插入操作 2. 移除操作ArrayBlockingQueue 原理分析1,构造方法2,Add 方法3,offer 方法4,enqueue方法5,put 方法6,take 方...
2019-09-10 19:33:53
226
原创 多线程三 JUC之Reentrantlock
目录J.U.C 简介Lock1 Lock 的实现2 Lock 的类关系图3 重入锁 Reentrantlock4 ReentrantReadWriteLock5 ReentrantLock 的实现原理6 ReentrantLock 的源码分析ReentrantLock 和 Synchronized 区别使用condition实现线程通信...
2019-08-23 20:51:24
283
原创 多线程二
对象头对象在jvm中是如何存储的在 Hotspot 虚拟机中,对象在内存中的存储布局,可以分 为三个区域:对象头(Header)、实例数据(Instance Data)、对 齐填充(Padding)每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。当我们在Java代码中,使用new创建一...
2019-08-18 16:57:19
128
原创 多线程一
目录一 实现多线程的三种方式二 线程的生命周期三 线程的开启,中断,复位四 yield与join方法的区别一 实现多线程的三种方式继承Thread类实现Runnable接口实现Callable接口public class DothreadDemo extends Thread { @Override public void run() {...
2019-08-16 16:44:06
112
原创 rabbitmq总结
rabbitmq简介rabbitmq 是spring所在公司Pivotal自己的产品 是基于AMQP(advanced message queue protocol)高级队列协议的消息中间件 采用erlang开发 因此安装需要erlang环境 具体安装根据自己的环境 因为跟spring有共同的血缘关系 所以spring 全家桶对其的支持应该是相当完善的简单概念一般消息队列 都是生产...
2019-06-19 17:37:32
721
转载 SpringBoot 一 CommandLineRunner接口
目录前言一 如何使用CommandLineRunner接口1)和@Component注解一起使用2)和@SpringBootApplication注解一起使用3)声明一个实现了CommandLineRunner接口的Bean二 用@Order注解去设置多个CommandLineRunner实现类的执行顺序前言Spring boot的CommandLineRunner...
2019-06-06 09:52:39
122
原创 mysql一锁概述一
目录一 数据库锁设计的初衷二 全局锁:对整个数据库实例加锁。全局锁的典型使用场景是,做全库逻辑备份。1 )加全局读锁 命令是 Flush tables with read lock (FTWRL)。2 )既然要全库只读,为什么不使用set global readonly=true的方式呢?3) 如何在不加锁的情况下保证视图的一致性?二 表级锁1,表锁2...
2019-05-27 16:08:30
265
原创 mysql一索引概述二
目录一 索引的常见模型1 哈希表2 有序数组3 二叉搜索树3 多叉树二 InnoDB 的索引模型三 索引维护 -----从性能、存储空间的角度四 离散性原则、覆盖索引、最左前缀原则、索引下推一 索引的常见模型用于提高读写效率的数据结构很多,这里我先给你介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树1 哈希表是一种以键-值...
2019-04-30 16:56:46
173
原创 Redis 分布式锁--MySQL事务使用实践
正确的示范:A相关数据操作的事务的开启和结束 在Redis 分布式锁的范围内的情况下 @Override @Transactional public void productOccupyOperate(Integer operateType, Long productId, String orderCode){ String lockKey...
2019-04-28 11:58:11
1109
1
原创 Redis 分布式锁--基于Spring-boot-start-data-redis
目录1 build.gradle 引入JAR 2 配置文件:bootstrap-dev.yml3 RedisConfig.java4 CacheService.java目前Java操作redis的客户端有jedis跟lettuce。 在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce。 因为我...
2019-04-12 19:34:07
914
原创 SpringBoot配置Cors解决跨域请求问题
目录一、同源策略简介什么是源什么是同源是否是同源的判断哪些操作不受同源策略限制跨域如何跨域二、CORS 简介三、Spring Boot 配置 CORS1、使用@CrossOrigin注解实现2、原理剖析一、同源策略简介同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写...
2019-04-09 17:12:50
603
转载 Spring IO Platform简介及示例
目录为什么要用Spring IO Platform什么是Spring IO PlatformMaven使用Spring IO PlatformSpring IO Platform中维护了哪些依赖如何使用Spring IO Platform在Maven中使用Spring IO Platform在Gradle中使用Spring IO Platform一个完整的示例,基于...
2019-03-31 17:13:08
868
原创 mysql一事务及ACID特性的实现原理
MySQL 事务基础概念事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个 sql 语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL 支持事务,本文介绍基于 MySQL 5.6。首先回顾一下 MySQL 事务的基础知识。逻辑架构和存储引擎如上图所示,MySQL 服务器逻辑架构从上往下可以分为三层: ...
2019-03-28 14:49:09
229
原创 Git Step by Step -- git remote
本地git项目的相关配置信息可以从 .git/config 文件中查看[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true[remote "origin"] url = http://...
2019-03-28 10:40:06
127
原创 Gradle、Gradle Wrapper区别和联系
首先用一段通俗易懂但是不是非常专业的话描述一下三者的概念、区别和联系。 Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。 Gradle Wrapper的作用是简化Gradle本身的安装、部署。wrapper的意思:包装。那么可想而已,这是gradle包装不同版本的项目可能需要不同版本的Gradle,手工部署的话...
2019-03-08 17:50:15
1986
原创 Gradle相关配置
初识GradleGradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。怎么看上面都是一段很官方的解释,对于入门的人来说简直是一个噩梦般的解释(包括以前的我)。那下面我就用通俗一点语言说说我的理解...
2019-03-08 16:25:11
227
转载 Git Step by Step – (2) 本地Repo
Table of ContentsGit基本概念创建仓库添加更新git diff撤销更新撤销WorkSpace中的更新撤销Stage中的更新撤销repo中的更新删除文件总结Git基本概念在Git中,我们将需要进行版本控制的文件目录叫做一个仓库(repository),每个仓库可以简单理解成一个目录,这个目录里面的所有文件都通过Git来实现...
2019-03-08 11:38:22
170
原创 微服务之Swagger
一:swagger是什么?1、是一款让你更好的书写API文档的规范且完整框架。2、提供描述、生产、消费和可视化RESTful Web Service。3、是由庞大工具集合支撑的形式化规范。这个集合涵盖了从终端用户接口、底层代码库到商业API管理的方方面面。方法一:使用第三方依赖(最简单的方法)1、在pom.xml文件中添加第三方swagger依赖() <dependen...
2019-03-04 15:48:44
2744
转载 mysql一间隙锁
MySQL InnoDB支持三种行锁定方式:行锁(Record Lock):锁直接加在索引记录上面。 间隙锁(Gap Lock):锁加在不存在的空闲空间,可以是两个索引记录之间,也可能是第一个索引记录之前或最后一个索引之后的空间。 Next-Key Lock:行锁与间隙锁组合起来用就叫做Next-Key Lock。默认情况下,InnoDB工作在可重复读隔离级别下,并且以Next-Key ...
2019-02-13 15:23:58
735
转载 mysql一组合索引
命名规则:表名_字段名1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用4、符合最左原则联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组...
2019-02-12 16:17:26
1689
1
原创 SpringCloud 之 consul
Table of ContentsConsul 基础概念consul与eureka比较将基于SpringBoot的微服务应用注册到Consul上成为服务提供者从consul中安全注销服务实例Consul 基础概念Consul 是一个分布式高可用的系统,它包含多个组件,但作为一个整体在微服务架构中提供服务发现和服务配置的工具。Spring Cloud Consul 项目是针对...
2019-01-25 16:44:35
5500
原创 SpringBoot 一 SpringApplication
目录SpringApplication :Spring Boot 驱动 Spring 应用上下文的引导类一 定义SpringApplication的三种方式二@SpringBootApplication 注释解析 1. @SpringBootConfiguration :等价于 @Configuration -->Configuration Class 注解 ...
2019-01-21 11:36:00
190
转载 Java中值传递和引用传递的理解
一、基本类型和引用类型的理解Java中的数据类型分为两种为基本类型和引用类型。1、基本类型的变量保存原始值,所以变量就是数据本身。 常见的基本类型:byte,short,int,long,char,float,double,Boolean,returnAddress。2、引用类型的变量保存引用值,所谓的引用值就是对象所在内存空间的“首地址值”,通过对这个引用值来操作对象。 ...
2019-01-17 15:28:17
174
原创 POI导出execl demo
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.*;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Da...
2018-12-25 09:28:26
158
原创 RestTemplate使用总结
一. 什么是RestTemplate传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。二.一个简单的例子。定义一个简单的restful接口@RestControllerpublic class TestController...
2018-12-18 18:50:23
380
原创 maven 知识点总结 四 archetype模板
生成一个archetypemvn installcd /target/generated-sources/archetypemvn archetype:create-from-project从archetype创建项目 mvn archetype:generate -DarchetypeCatalog=local //选择从本地创建 如下图创建一个已testtt 项目为...
2018-11-06 16:57:35
144
转载 maven 知识点总结 三 向nexus3私服上传jar包
原文地址:https://blog.csdn.net/u013887008/article/details/79429973向nexus3私服上传jar包一般向私服上传jar包有三种方法:直接浏览器 cmd模式 IDE集成环境准备环境1.创建3rd_part库使用默认用户admin/admin123登陆点击左侧的repository\repositories后,在...
2018-11-06 14:43:49
2157
原创 maven 知识点总结 二 搭建maven 私服
目录私服介绍Nexus介绍几种repository的类型:Sonatype Nexus Repository OSS下载与安装Nexus的web界面功能介绍如何在项目中使用私服介绍私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构建。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私...
2018-11-05 17:35:23
112
原创 mysql一索引概述
Table of Contents索引:帮我们高效查询数据的数据结构。衡量索引高效的标准:IO渐进复杂度1,索引的种类:2,索引的优点:3,索引的缺点:4,B-Tree和B+tree5,MYISAM引擎与INNODB引擎索引:帮我们高效查询数据的数据结构。衡量索引高效的标准:IO渐进复杂度1,索引的种类:hash索引 1,有hash冲突 ...
2018-10-25 09:22:53
195
原创 maven 知识点总结一
目录1 超级pom 2 MAVEN_HOME的配置3 maven是使用java编写的 4 maven读取配置文件setting.xml的优先级5 pom标签解析 6 dependence 依赖关系7 生命周期8 版本管理9 常用命令10 maven 插件1 超级pom 在 lib中的maven-model-builder-3.5.0....
2018-10-11 16:52:38
424
原创 深入volatile
1,volatile 是如何保证happens-before 规则(内存可见性)的问题使用 缓存锁线程的本地内存是cpu寄存器和高速缓存的抽象描述。物理层面分析高速缓存从下到上越接近 CPU 速度越快,同时容量也越小。现在大部分的处理 器都有二级或者三级缓存,从下到上依次为 L3 cache, L2 cache, L1 cache. 缓...
2018-09-29 10:01:11
188
原创 锁总结--Synchronized
目录1. synchronized简介2. synchronized实现原理2.1 对象锁(monitor)机制2.2 synchronized的happens-before关系2.3 锁获取和锁释放的内存语义3. synchronized优化3.1 CAS操作3.1.1 什么是CAS?3.1.2 CAS的操作过程3.1.3 CAS的应用场景3.1...
2018-09-27 14:43:16
202
原创 JAVA并发编程--上下文切换问题
上下文切换即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现 这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切 换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。 CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个 任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这...
2018-09-25 15:06:07
701
1
原创 JVM 二 垃圾回收
目录一 什么样的对象需要被GC二 何时回收-对象生死判定 1 ,可达性分析算法2, 引用计数算法 (废弃)三 GC原理- 垃圾收集算法 1, 分代收集算法 a) 新生代使用-复制回收算法 MinorGCb) 老年代(主要存放应用程序中生命周期长的内存对象)-标记清除算法 MajorGCc) Full GCJVM常用配...
2018-09-18 17:11:07
250
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人