自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 springsecurity源码(oauth2)

首先从/oauth/token入手@RequestMapping(value = "/oauth/token", method=RequestMethod.POST) public ResponseEntity<OAuth2AccessToken> postAccessToken(Principal principal, @RequestParam Map<String, String> parameters) throws HttpRequestMethodNotSuppor

2021-01-16 14:21:47 396

原创 springmvc源码

待更新一,springmvc主要分两个步骤把url和方法的映射,注册到map中1,Web容器启动的时候,同时会启动Spring的IOC容器,RequestMappingHandlerMapping Bean也会随着IOC容器而实例化。RequestMappingHandlerMapping这个class覆盖了afterPropertiesSet方法。其超类AbstractHandlerMethodMapping的afterPropertiesSet方法代码如下:@Override public v

2021-01-07 12:24:56 217

原创 springsecurity源码(密码登陆)

UsernamePasswordAuthenticationFilterpublic class UsernamePasswordAuthenticationFilter extends AbstractAuthenticationProcessingFilter { 。。。 public UsernamePasswordAuthenticationFilter() { super(new AntPathRequestMatcher("/login", "POST"));

2020-12-30 20:41:52 228

原创 rabbitmq源码

本文以rabbitmq接收端最核心的类SimpleMessageListenerContainer作为切入点,做源码解析

2020-12-30 13:44:44 1566 3

原创 java8新特性

1,List转mapMap<Integer, String> categoryMap = categoryList.stream().collect(Collectors.toMap(Category::getId,Category::getName ));2,从redis获取的数据结构//从redis获取购物车 List<Map<String, Object>> oderItemList = cartService.findNewOrderIt

2020-12-25 16:45:33 135

转载 mysql innodb的死锁问题

先了解下innodb锁机制,实现原理:InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁! 索引分为主键索引和二级索引两种,如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条...

2019-06-29 04:42:57 141

原创 spring security 微服务权限认证架构图(jwt版和jwt+redis版)

标题一,jwt版,代码比较简洁,但是不能控制jwt失效标题二,jwt+redis版,服务端能用reids控制jwt失效

2019-06-23 21:59:56 2681

转载 Hive数据倾斜案列(大表join大表)

业务背景用户轨迹工程的性能瓶颈一直是etract_track_info,其中耗时大户主要在于trackinfo与pm_info进行左关联的环节,trackinfo与pm_info两张表均为GB级别,左关联代码块如下:from trackinfo a left outer join pm_info b on (a.ext_field7 = b.id) 使用以上代码块需要耗时1.5小时。...

2019-05-04 01:26:17 1079

转载 并发编程10-LinkedHashMap原理

1 前言LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先了解下hashmap。本文的LinkedHashMap是jdk1.7版的2 LinkedHashMap使用与实现先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-valu...

2019-05-03 21:16:18 478

转载 并发编程9-CyclicBarrier

前言JDK的并发包中提供了几个非常有用的工具类,这些工具类给我们在业务开发过程中提供了一种并发流程控制的手段,本文会基于实际应用场景介绍如何使用CyclicBarrier,以及内部实现机制。CyclicBarrier是什么CyclicBarrier也叫同步屏障,在JDK1.5被引入,可以让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,所以被阻塞的线程才能继续执行。CyclicB...

2019-05-03 19:06:06 137

转载 并发编程8-线程池的原理和使用

在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来...

2019-05-03 15:52:22 148

转载 并发编程5-AQS的Condition实现原理

在经典的生产者-消费者模式中,可以使用Object.wait()和Object.notify()阻塞和唤醒线程,但是这样的处理下只能有一个等待队列。在可重入锁ReentrantLock中,使用AQS的condition可以实现设置多个等待队列,使用Lock.newCondition就可以生成一个等待队列,相比较来说这种方式就很灵活。本篇文章将介绍Condition的实现原理和基本使用方法,基本过...

2019-05-03 00:02:41 808

转载 并发编程7-ArrayBlockingQueue底层实现和原理

ArrayBlockingQueue的原理和底层实现的数据结构 :ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列,可以按照 FIFO(先进先出)原则对元素进行排序。线程安全是指,ArrayBlockingQueue内部通过“互斥锁”保护竞争资源,实现了多线程对竞争资源的互斥访问。而有界,则是指ArrayBlockingQueue对应的数组是有界限的。 阻塞队列,是指多...

2019-05-02 22:36:07 1922

转载 并发编程6-ReentrantLock

1.什么是可重锁ReentrantLock?就是支持重新进入的锁,表示该锁能够支持一个线程对资源的重复加锁。底层实现原理主要是利用通过继承AQS来实现的,也是利用通过对volatile state的CAS操作+CLH队列来实现;支持公平锁和非公平锁。CAS:Compare and Swap 比较并交换。CAS的思想很简单:3个参数,一个当前内存值V、预期值A,即将更新的值B,当前仅当预期值A...

2019-05-02 16:00:39 148

转载 并发编程4-AQS同步器原理

1.什么是AQS? AQS的核心思想是基于volatile int state这样的volatile变量,配合Unsafe工具对其原子性的操作来实现对当前锁状态进行修改。同步器内部依赖一个FIFO的双向队列来完成资源获取线程的排队工作。2.同步器的应用同步器主要使用方式是继承,子类通过继承同步器并实现它的抽象方法来管理同步状态,对同步状态的修改或者访问主要通过同步器提供的3个方法:get...

2019-05-02 13:47:21 268

转载 并发编程3-CAS原理

cas和volatile关键字 一起使用同样能够实现线程安全,是java并发包实现的基础。今天着重来分析CAS。CAS:Compare and Swap, 翻译成比较并交换。java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。本文先从CAS的应用说起,再深入原理解析。...

2019-05-01 20:53:21 244

转载 并发编程2-volatile原理

volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。以下是本文的目录大纲:一.内存模型的相关概念二.并发编程中的三个概念三.Java内...

2019-05-01 18:56:28 137

转载 并发编程1-Synchronized及其实现原理

一、Synchronized的基本使用Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。从语法上讲,Synchronized总共有三种用法:(1)修饰普通方法(2)修饰静态方法(3)修饰代码块接下来我就通过几个例子...

2019-05-01 17:19:51 154

原创 数据库事务

数据库事务四大特性-ACID事务的:原子性、一致性、分离性、持久性事物(transaction)是由一些列操作序列构成的执行单元,这些单元要么都做,要么不做,是一个不可分割的工作单元。数据库事物的四个基本性质(ACID)1.原子性(Atomicity)指的是事物中包含的所有操作要么全做,要么全不做(all or none)。例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可...

2019-05-01 01:30:30 142

转载 mysql中innodb和myisam对比及索引原理区别

InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了1、事务和外键InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能MyISAM管理非事务表。它提供高速存储和检索,以及全...

2019-05-01 00:21:53 578

原创 B+树

B+树是数据库索引的底层数据结构,具有优异的范围查询性能一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包...

2019-04-30 22:47:55 172

转载 ConcurrentHashMap原理分析(1.7与1.8)

前言以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相同,可能出现同时在同一数组下用链表表示,造成闭环,导致在get时会出现死循环,所以HashMap是线程不安全的。...

2019-04-30 14:51:45 139

转载 jdk1.7版hashmap在多线程环境下的死循环问题

一、背景介绍:在看JDK1.7的HashMap源码是看到了resize()的源代码,当时发现在将old链表中引用数据复制到新的链表中时,新table[]的列表采用LIFO方式,即队头插入。这样做的目的是:避免尾部遍历。(尾部遍历是指新列表插入数据时,每次遍历旧列表队尾的位置)因为,直接插入的效率更高。然而直接采用队头插入,会使得新链表数据倒序二、存在的问题:采用队头插入的方式,导致了Has...

2019-04-30 12:19:00 1556 3

转载 HashMap JDK1.8实现原理

转自https://www.cnblogs.com/duodushuduokanbao/p/9492952.htmlHashMap概述HashMap存储的是key-value的键值对,允许key为null,也允许value为null。HashMap内部为数组+链表的结构,会根据key的hashCode值来确定数组的索引(jdk1.7版确认放在哪个桶里),如果遇到索引相同的key,桶的大小是2,...

2019-04-30 10:43:46 255

转载 红-黑树

转自https://blog.csdn.net/eson_15/article/details/51144079红黑树是非常重要的数据结构,具有优异的综合性能,是hashmap的基础。红-黑树是基于二叉搜索树的,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项。但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入...

2019-04-29 22:30:38 124

原创 spring aop 的主要流程和设计模式

创建对象的时候 spring调用后置处理器 获取对象方法的通知(增强器) @Overridepublic List<Object> getInterceptorsAndDynamicInterceptionAdvice( Advised config, Method method, @Nullable Class<?> targetClass) { // Th...

2019-04-29 20:05:16 4607

原创 一次mysql的sql优化

mysql一次sql优化先上原sql语句(萌新写的),四张表,TPS_QMCH 1万左右数据,TPS_WWFCT表 5万,TPS_XMCH和ST_LPM各10万执行时间20秒SELECT M.* FROM ( SELECT DISTINCT N.ID, N.qxdm, N.ywslid, N.x...

2019-04-29 12:06:42 248

spark自己编写的例子程序

非常好用,自己测试过,非常好用,自己测试过,非常好用,自己测试过

2018-07-09

空空如也

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

TA关注的人

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