自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring boot OAuth2 JWT的认证中心

文章目录说明 本文较长,要想直接使用脚手架,请移步至githubOauth2概要Oauth2的基本流程以及角色说明角色说明流程说明(基于code模式)Oauth2客户端的授权模式JWT概要JWT原理Spring Security OAuth2的使用1. AuthorizationServerConfigurerAdapter说明 本文较长,要想直接使用脚手架,请移步至githubOauth2概...

2019-09-17 13:31:18 5163

原创 Ubuntu安装Mysql8.0

说明:以下所有的命令如果是普通用户需要使用sudo来执行本人是安装到/usr/local下的没有出现问题读者最好也安装在这个目录下1 下载Mysql二进制文件8.0.11下载地址2.安装mysql所需要的依赖使用以下两个命令需要联网apt install numactlapt install libaio-dev3.添加用户groupadd mysqluseradd -r ...

2019-03-15 15:27:11 2418

原创 Linux下安装redis任意IP连接

文章目录一.redis的下载二.redis的安装三.客户端连接redis一.redis的下载太过简单不做介绍下载地址 下载地址二.redis的安装redis的安装比较简单1 将下载好的tar包进行解压tar zxvf 后面是下载好的tar包2 解压后会有一个文件夹进入文件夹使用make 命令编译等待一段时间就完成安装了3 redis的启动进入安装redis文件夹下的src文件下...

2019-03-15 15:02:01 2731

原创 并发系列(十三)-----ReentrantReadWriteLock源码解析

一 简介读写锁如何正确的使用在上一篇的文章中简单的介绍了,并且已经知道读写锁内部维护了两个锁分别是读锁和写锁。下面是这两个锁的特点1,写锁是独占的、排他的,当一个线程持有写锁是,其他任何线程都不允许获取到锁不管是读锁还是写锁。2.读锁是共享的,允许多个线程同时访问资源。3.一个线程同时既可以持有读锁也可以写锁,获取顺序是先获取写锁后是可以获取读锁的这种现象较锁降级,但是不可以先获取...

2018-12-10 11:30:12 376

原创 并发系列(十二)-----ReentrantReadWriteLock的使用

一 简介ReentrantReadWriteLock翻译过是读写锁的意思。并发编程中我们可能会遇到读多写少的情况,面对这种情况的时候我们可以使用ReentrantLock或者synchronized来保证数据的正确性。如果上述两种方法的话,这样的话不管是读操作还是写操作都要去获取锁和是释放锁,但是实际上我们可能只需要在写的时候保证线程线程是安全的,并且写完之后读线程得到的是修改后的数据,也就是...

2018-12-05 17:38:12 313

原创 并发系列(十一)----- ReentrantLock的使用

一 简介ReentrantLock在中文的意思是重入锁与synchronized同步语意一样(具体的区别下面会总结),重入的意思是一个线程可以多次加锁,但是释放锁的时候要释放加锁的次数。ReentrantLock实现就是利用AQS独占模式,内部维护了一个AQS的子类Sync,Sync有两个子类FairSync和NofairSync这两个分别是ReentrantLock的两种锁,公平锁和非公平锁...

2018-11-27 18:51:19 300

原创 并发系列(十)-----AQS详解等待队列

一 简介前面几篇已经将AQS的框架,AQS的同步队列,AQS中的独占模式下资源获取,AQS共享模式下的资源的获取总结了一下,接下来就剩最后一部分了,等待队列。等待队列又叫条件队列,它只能使用在独占模式下。在我们阅读等待队列的时候要知道的一点是,等待队列中的线程是不会直接获取资源state的,它也是通过同步队列来获取资源的。一会在看源码中会说明。二 源码解析我们知道同步队列和条件队列都共...

2018-11-23 18:50:25 1561

原创 并发系列(九)-----AQS详解共享模式的资源获取与释放

一 简介 到目前为止已经知道了AQS中同步队列的基本的工作原理可以总结为维护同步队列,获取资源和改变线程状态。上一篇文章中主要总结了独占模式下的资源获取AQS详解独占模式资源的获取与释放。这篇主要总结一下AQS中的共享模式。 共享模式从字面上理解就是,这个资源可以被多个线程共享。在独占模式下,我们知道state的状态最初的值是0.如果某个线程获取到资源了state就加了1释放资源...

2018-11-22 16:27:00 912

原创 并发系列(八)-----AQS详解独占模式资源的获取与释放

一 简介上一篇总结了AQS的整体架构,以及它的组成,和它们之间的关系。AQS主要的三部分分别是volatile修饰的变量、同步队列和等待队列其中,同步队列在上篇总结中已经介绍过了,不知道的话可以点这里AQS的框架组成以及同步队列源码解析。这一片文章主要总结独占模式下资源的获取。二 资源的获取源码解析在上一篇总结中,最后过源码的时候看到addWater(),同时我们也提出两个猜想获取资源...

2018-11-19 17:04:59 387

原创 并发系列(七)-----AQS详解同步对列

一 简介 AbstractQueuedSynchronizer,即队列同步器(简称AQS)。它是构建锁或者其他同步组件的基础框架。它的设计是基于模板方法模式的,也就是说,使用者需要继承同步器并重写指定的方法,随后将同步器组合在自定义同步组件的实现中,并调用同步器提供的模板方法,而这些模板方法将会调用使用者重写的方法。二 AQS的框架说明 AbstractQueuedSyn...

2018-11-15 14:29:20 398

原创 并发系列(六)-----concurrent的简单介绍

一 简介 concurrent包是jdk1.5引入的重要的包,主要代码由大牛Doug Lea完成。这个包下的一些类如果用好了可以很方便的保证数据在多线程下操作的正确性。就比如说线程共享的i++,如果使用concurrent包下的Atomic系列类可以很方便的解决这个问题。这篇文章简单的介绍Concurrent包,让你对Concurrent的整体有一个大体的了解,以及简单的了解它的实现原理。...

2018-10-26 17:22:39 653

原创 并发系列(五)-----线程详解

一 简介线程这个话题,不管是在面试中还是在工作中会经常的遇见。而并发编程的目的就是为了在尽量不影响程序的执行效率的情况下保证数据的安全性和正确性。要想理解线程首先要明白一些概念性的东西。进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自...

2018-10-19 13:42:43 214

原创 并发系列(四)-----CAS

一 简介保证Java中的原子操做方式有两种方式 1 加锁(可以理解悲观锁机制) 2 CAS(可以理解为乐观锁机制) CAS全称是Compare and Swap 即比较并替换。在JDK中许多地方都可以看到它的身影,比如AQS同步组件,Atomic原子类操作等等都是以CAS实现的。其中java.util.concurrent 中的许多概念源自 Doug Lea 的 util.con...

2018-07-30 11:30:16 239

原创 并发系列(三)-----volatile

一 简介 volatile关键字是轻量级的synchronized,volatile在并发编程中保证共享变量的可见性,当一个线程修改被volatile修饰的共享变量时,另外一个线程就能读到这个修改的值。volatile可以保证共享变量的可见性但不能保证复合操做的原子性:比如像i++这样的操做是volatile是不能保证的。二 volatile变量的特性被volatile修饰的变量...

2018-07-17 09:31:32 280

原创 并发系列(二)-----Java内存模型

一简介 在并发编程中,两个线程(A,B)同时操作一个普通变量的时候,会出现线程甲在操作变量时线程乙也将变量操作了,此时线程甲是无法感知变量发生变化的,造成变量改变错误。根据以上例子我们需要解决的问题就是线程之间的通信以及同步。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。java并发采用的是共享内存模型,Java的线程之间的通信总是隐式进行,整个通信对程序员玩完全透明。...

2018-07-07 16:16:44 317

原创 并发系列(一)-----synchronized关键字

一 简介说到并发不得不提的synchronized,synchronized关键字是元老级别的角色。在Java SE 1.6之前synchronized被称为是重量,在1.6之后对同步进行了一系列的优化,使它的“重量”发生变化。这篇文章主要介绍同步的原理和它“重量”变化二 表现形式 同步代码在表现的形式有三种同步在代码的表现形式有三种1.对于同步方法,锁是当前...

2018-07-02 14:32:50 329

原创 Redis 缓存的应用

问题最近刚完成一个需求,这个需求是有关于数据分析.设计到数据分析肯定避免不了计算,对于有些数据的计算规则可能会比较非常复杂,,如果用户去多次请求必然会影响用户的体验,用户可能会觉得这是什么垃圾玩意怎么这么慢.为了提升速度就不的不添加缓存了,这样可以很大的提高接口的响应速度.从而使用户觉得不是那么卡.但是要牺牲一些东西那就是数据的准确性.但是有些数据它是对准确性要求较高的.那么你这一套缓存就要去监听...

2018-04-23 21:09:35 284

转载 聊聊高并发系统之限流特技一

原文链接:http://www.jianshu.com/p/2596e559db5c最近一直都在研究压力测试客户端的问题,如果突破客户端压力测试线程,端口等问题,如果服务器端处理网络请求处理不过来,严重会造成宕机,在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流--------下面的原文链接----------------限流限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的...

2018-04-17 14:26:42 290

原创 MarkDown 学习笔记

认识 MarkdownMarkdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版、字体设置。它使我们专心于码字,用「标记」语法,来代替常见的排版格式。例如此文从内容到格式,甚至插图,键盘就可以通通搞定了。目前来看,支持 Markdown 语法的编辑器有很多,包括很多网站(例如 简书)也支持了 Markdown ...

2018-04-09 15:22:33 432

原创 Spring boot 上传文件以及解析Excel

最近工作忙,产品在推广阶段,市场那别的需求猛如虎,而且还使必须做的,基本上两天就要完成一个需求.压力大啊.其中就用到了解析Excel的东西和生成Excel的技术,当然这些东西以前用过,当再次用的时候发现自己忘了,看来知识还是需要记录的.下面就将这次用到的技术做一个记录,是希望可以帮到其他人.我们公司用的是Spring boot 我就集成POI完成了这次任务,使用IEDA搭建Spring boot特...

2018-03-30 15:41:30 19311 3

原创 Java 自定义注解的使用

最近在做关于Redis缓存相关的东西,涉及到刷新缓存的问题,我用了注解加AOP实现的缓存的刷新,这样的话只要在增删改的时候加一个注解就可以实现对缓存的刷新.发现自己对注解和String 中的AOP的东西不是太了解,现在就对这些做一些总结和再次学习.注解一.定义.Java中的注解在官方的文档中的解释Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型...

2018-03-24 15:06:51 291

转载 UML类图详解

看懂UML类图这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系; 能看懂类图中各个类之间的线条、箭头代表什么意思后,也就足够应对 日常的工作和交流; 同时,我们应该能将类图所表达的含义和最终的代码对应起来; 有了这些知识,看后面章节的设计模式结构图就没有什么问题了;本章所有图形使用Enterprise Architect 9.2来画,所有示例详见根目录下的design_patte...

2018-03-12 20:21:36 326 2

原创 Java实现定时任务

在工作中不免会碰到定时任务,我将我这次编写定时任务做一个记录,java中JDk提供了两种定时任务实现一.TimerTimer是最简单的一种定时任务实现代码如下import java.util.TimerTask;/** * <p> * 创建一个类继承TimerTask重写run方法 * </p> * * @author Alemand * @since 20...

2018-03-04 15:08:36 322

转载 IntelliJ IDEA 内存优化最佳实践

原文地址:http://blog.oneapm.com/apm-tech/426.html【编者按】本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响。Don’t be a Scrooge and give your IDE some more memory不要做守财奴,给IDE多留点内存吧。昨天,大家就是否自定义...

2018-02-11 09:59:12 325

转载 一名三年工作经验的程序员应该具备的技能

原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的。简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2...

2018-02-10 21:01:23 308

原创 设计模式---代理模式

问题的抛出:上大学的时候,一到星期天就躺在床上动也不想动,要不是饿得话连吃饭也可以不吃,有什么办法可以让我们在宿舍躺在床上就可以吃饭呢?我上大学的时候是这样干的,点个外卖让让在地下的舍友去取一下,这个舍友就是一个代理定义:为其他对象提供一种代理以控制对这个对象的访问结构组成:Subject接口:定义了RealSubject和Proxy的公用接口这样在任何使用RealSubject的地方都可以使用P...

2018-02-09 19:41:25 213

转载 算法---时间复杂度空间复杂度总结

通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。       算法执行...

2018-02-09 17:46:11 394

原创 设计模式---外观模式

问题的抛出:你组装了一套杀手级的系统用来看电影,内含DVD播放器、投影机、自动屏幕、环绕立体声等.每一次你看电影德1时候都要先经历下面一段痛苦的过程1.将灯光调俺2.放下屏幕3.打开投影机4.将投影的输入切换到DVD......,当你弄完了看电影的热情也就没有了,那么有没有什么可以让我看电影的时候按一下按钮就可以了呢?当然有啊!你可以弄一个遥控啊,这个遥控有个按钮,一按就可以,这个遥控就的操做就那

2018-02-05 18:58:59 237

原创 设计模式---装饰者模式

问题的抛出现在有一个人叫小明,小明会唱歌,我想再让小明会弹钢琴怎么办呢,再让他...,如果用继承的话,你会不停的去加类.现在有一种模式就可以解决这个问题.可以灵活的添加职责的装饰者模式装饰者模式的定义动态的给一个对象添加一些额外的职责.就增加功能来说,装饰者模式比生成子类更为灵活.结构Component:定义一个对象的接口,可以给这些对象动态的添加职责ConcreteCom

2018-01-28 14:44:08 259

原创 设计模式---适配器模式

问题提出假设已有一个软件系统,你希望它能和一个新的厂商类库搭配使用,但是这个新厂商所设计出来的接口不同于旧厂商的接口你不想改变现有的代码解决这个问题,所以应该怎么做的.这个你可以写一个类将新厂商接口转接成你所期望的接口.新编写的类就是一个适配器,这个适配器就相当于是中间人,它将客户所发的请求转化成厂商能理解的去请求.适配器模式的定义:将一个类的的接口,转换成客户期望的另一个接口

2018-01-24 16:47:37 275

原创 设计模式---工厂设计模式之抽象工厂模式

工厂模式是用来创建产品的,工厂方法模式是用来创建一种产品的,但有时我们会创建一组产品.这就需要用抽象工厂.在抽象中有两个概念需要了解产品族和产品等级结构产品等级结构:产品的等级结构也就是产品的继承结构.(也就是说是子父类之间的关系,就比如说你有一个抽象类,子类继承这个抽象类那么子类和抽象类之间就构成了产品等级结构)纵向看产品族:在抽象工厂模式中,由同一个工厂生产的,位于不同等级结构中的一组

2018-01-20 10:39:35 239

原创 设计模式---工厂设计模式之工厂方法模式

工厂设计模式在一些阅读源码的时候会经常遇到.他可以是创建复杂对象的代码具有复用性,同时还可以是实现解耦.是一个非常有用的设计模式.工厂设计模式主要分为两种一工厂方法模式和抽象工厂模式,至于简单工厂方法在一书中被称为是一种编码习惯.在这里我就将我看到的一些工厂方法模式做一个总结.工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂发法让类的实例化推迟到子类.我的理解

2018-01-11 11:33:13 273

原创 设计模式----单例设计模式

单例设计模式:看名字就可以大体的理解单例设计模式是什么了,它是用来创建独一无二的对象的,是能有一个实例的对象的模式.(我的理解是在整个内存中只能存在一个该实例对象)单例模式在常用的有种实现方式一.懒汉式 二.饿汉式他们的特点就是构造私有并提供获得该实例的方法从而获得该实例 一,饿汉式饿汉式可以理解为非常的迫切在你没有用该对象的时候就已经实例化了具体代码如下./** * <...

2018-01-10 11:50:28 273

转载 红黑树详解

(友情提示,红-黑树是基于二叉搜索树的,如果对二叉搜索树不了解,可以先看看:二叉搜索树 )               从第4节的分析中可以看出,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项。但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有序或者逆序的数据,那么二叉搜索树的执行速度就变得很慢

2018-01-05 21:17:11 313

原创 Java关于时间的工具类的编写

在开发中遇到这么一个问题就是,要查选今天的,昨天的,本周的,上周的,本月的以及上个月的数据,数据数据库中存的是时间戳,所以要查询的话就要的到一个时间戳的范围,并且要得到的是00点到下一天的00点的时间戳范围,下面是我写的点做一下记录   /** * 更据时间戳获取当天的00的时间戳 * * @param now 时间戳 * @return 得到的00点的时间戳 */private st...

2018-01-04 16:26:40 574

原创 使用java代码实现简单的ID自增的工具类

在一些简单的业务中可能需要一些ID.这些ID是使用java代码实现的并不是通过数据库的自增实现的.下面是我写的一个简单的ID工具类,在使用的过程中你需要将最后一次的编号保存下来,你可以建一张表来维护这个自增的ID这个自增的ID生成是线程安全的,而且在一定线程竞争不是很激烈的情况下比synchronized的效率高其中count是一个类的成员变量,通过使用count.incrementAndGe

2018-01-04 15:02:41 23757 2

原创 Spring AOP中定义切点的详细介绍

AOP的切点定义大部分的人都知道excecution()其实在AOP中有很多关旭切点的参数,用好可这些参数可以让我们的工作事半功倍,一.excecution()关于excecution必须要介绍的就是怎么写这个括号里面的内容了.execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pat

2017-12-14 19:25:47 8836

原创 将json文件转化为java对象的编写

批量递归将Json文件通过Gson转化为Map,在转化为POJO在插入数据库中.

2017-12-08 11:33:00 4393

原创 乐观锁与悲观锁使用场景

乐观锁是相对与悲观锁的存在的,也就是说,A和B达成了一个协议,而且A很乐观他认为其他人不会来操作仓库所以他没有加锁,但是他们操作仓库的时候多加一个字段如仓库的版本(还可以是时间戳)

2017-12-05 10:58:24 641

原创 HashMap的底层原理分析二

Hash函数 ,关于HashMap的扩容以及以及原因.HashMap的初始长度为16,,没次扩容的时后,扩大的长度必须是2的幂.这里没有提到负载因子是因为我了解到负载因子可能引起HasnMap的死循环准备单独分析一下,在这里先说一下负载因子的默认大小为0.75,它是用来决定HasHMap的容量的临界值的.具体的东西在总结一下在

2017-11-28 14:06:01 300

空空如也

空空如也

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

TA关注的人

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