自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java将数据集合转换导出为图片

Java将数据集合转换导出为根据数据自适应大小的图片,并且保证数据的完整展示

2023-07-20 14:51:05 1009 3

原创 Java将数据集合转换为PDF

Java依赖itext7将数据集合转换导出为PDF文件

2023-07-20 14:22:09 474

原创 OpenFeign开启Hystrix时,实现服务间并且调用时传递header以及新增header, header透传

场景:web端调用A服务,A服务调用B服务A服务将web端通过header中的token解析,获取到user信息,A调用B服务时需要将token或者用户信息传递给B服务暴力解决的方案为:直接把user作为一个对象传递就可以了,但是这种做法导致每个接口都需要传递user对象,非常麻烦我们的做法是将token或者user信息统一封装在feign的header中传递给B服务,如果没有开启hystrix,这种方式一点问题也没有,但是开启了hytrix后,出现了大问题!!我们定义一个FeignIntercep

2022-06-28 09:45:49 945 1

转载 synchronized 加锁 this 和 class 的区别

synchronized 加锁 this 和 class 的区别前言synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰不同对象时,其意义也是不同的,下面我们一起来看synchronized 用法synchronized 可以用来修饰普通方法、静态方法和代码块。① 修饰普通方法/** * synchronized 修饰普通方法 */public sy

2021-08-18 15:41:35 1267 1

转载 synchronized 中的 4 个优化

synchronized 中的 4 个优化前言synchronized 在 JDK 1.5 时性能是比较低的,然而在后续的版本中经过各种优化迭代,它的性能也得到了前所未有的提升,上一篇中我们谈到了锁膨胀对 synchronized 性能的提升,然而它也只是“众多” synchronized 性能优化方案中的一种,那么我们本文就来盘点一下 synchronized 的核心优化方案。synchronized 核心优化方案主要包含以下 4 个:1.锁膨胀2.锁消除3.锁粗化4.自适应自旋锁1.锁膨

2021-08-18 15:10:31 350

转载 synchronized 优化手段之锁膨胀(锁升级)机制

synchronized 优化手段之锁膨胀机制前言synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized。然而这个情况在 JDK 1.6 时就发生了改变,JDK 1.6 中对 synchronized 进行了各种优化,性能也得到了大幅的提升,这也是目前版本中还能经常见到 synchronized 身影的重要原因之一。当然除了性能之外,synchronized 的使用也非常便利,这也是它流行的重要原因。在众多优化方案中,锁膨

2021-08-18 11:26:42 338

原创 记一次Linux系统下安装nginx,部署前端dist包

记一次Linux系统下安装nginx,部署前端dist包Linux系统下nginx的离线安装nginx的离线安装包下载linux离线安装nginxnginx的配置与启动查看启动的nginx进程Linux系统下nginx的离线安装nginx的离线安装包下载nginx离线安装包官网下载地址:链接: http://nginx.org/en/download.html.Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版Stable version:最新

2020-09-27 10:41:02 3212

原创 如何通过Redis实现分布式锁

什么是分布式锁(进程之间)?分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁的实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰,进而保证一致性分布式锁需要解决的问题互斥性任意时刻只能有一个客户端获取锁,不能同时有两个客户端获取到锁安全性锁只能被持有该锁的客户端删除,不能由其他客户端删除死锁获取锁的客户端因为某些原因而宕机而未能释放锁,其他客户端再也无法获取到该锁而导致了死锁,此时需要有机制来避免这个问题的发生容错当部分节点,比如r

2020-05-23 10:42:09 210

原创 Linux性能查看相关命令

查看系统整机性能//查看系统性能top//系统性能命令的精简版uptime查看CPU//查看CPU性能(可以但不仅限于CPU)vmstat -n 2 3//查看所有CPU核信息(每2秒采样一次)mpstat -P ALL 2//某个进程使用CPU的信息(每1秒采样一次)pidstat -u 1 -p 进程编号查看内存freefree -gfree -m//查看某个进程的内存占用数pidstat -p 进程号 -r 采样间隔秒数查看硬盘dfd

2020-05-21 10:48:52 371

原创 Linux常用文件指令

查找特定文件://在当前目录下查找递归查找target.java文件find -name "target.java"//全局范围内递归查找target.java文件find / -name "target.java"//查询当前用户下所有以target打头的文件//此时只能查找出来以target打头的,不能查找出来Target打头的,也就是区分大小写find ~ -name "target*"//不区分大小写fing ~ -iname "target*"//更多关于fing指令的

2020-05-21 09:33:32 184

原创 MySQL当前读和快照读

1.当前读和快照读当前读:读取的是记录的最新版本,并且读取之后还要保证其他并发事务不能修改当前记录,对读取的记录加锁当前读:select…lock in share mode,select…for update当前读:update,delete,insert快照读:可能读取的并不是当前记录的最新版本,可能是之前的历史版本快照读:不加锁的非阻塞读,select不加锁的条件是在当前事务隔离级别是非serializable前提下才成立,在SE下面,由于是串行读,所以此时的快照读也退化成当前读,

2020-05-13 14:27:28 3265

原创 数据库的隔离级别

1.事务事务只是一个改变,是一些操作的集合用专业的术语讲,事务是一个程序的执行单元事务的本身并不包含这4个特性我们需要通过一定的手段,让这个程序的执行单元满足这四个特性,那么我们可以称它为一个事务,或者说是一个正确的事务,完美的事务2.四特性原子性:满足原子操作单元,事务的操作要么全部成功,要么全部失败一致性:事务的开始和完成,必须保证数据是一致的隔离性:事务之间是独立存在的,事务操作中间状态彼此对外不可见持久性:事务一旦提交,数据是被持久化到数据库中去的3.隔离级别3.1并发情况

2020-05-12 11:33:34 176

原创 Mysql数据库锁模块之MyISAM与InnoDB关于锁方面的区别

MyISAM与InooDB关于锁方面的区别是什么?MyISAM默认用的是表级锁,不支持行级锁InnoDB默认用的是行级锁,也支持表级锁注:MyISAM与InnoDB存储引擎都是针对某张具体表而言的,而非数据库级别的MyISAM表级锁首先准备两个数据库的session(会话),这里用sessionA和sessionB来表示,来对同一张表进行操作先上读锁(默认共享锁)情况:首先sessionA先去执行一个select查询操作:情况1:此时sessionB去执行一个更改数据(增、删、改)的操作,会

2020-05-11 16:40:46 272

原创 Redis和Mysql数据库数据一致性问题

双库数据一致性问题产生的原因Redis与Mysql双库的数据一致性问题为何会出现呢?其实我们可以考虑这么一个业务场景:我们需要更新部分数据,我们首先更新数据库数据,然后清除Redis缓存中的数据。但是数据库更新操作成功了,然而Redis清除缓存出现异常了,这样会导致出现这么一种情况:数据库中的数据已经更新为最新数据,但是Redis缓存中的数据依旧还是老数据,这时候就会出现Redis与Mysql...

2020-05-08 14:11:11 1372

原创 微服务架构理论基础

微服务架构的维度服务注册与发现服务调用服务熔断负载均衡服务降级服务消息队列配置中心管理服务网关服务监控全链路追踪自动化构建部署服务定时任务调度操作Boot和Cloud版本选型SpringBoot版本选择git源码地址https://github.com/spring-projects/spring-boot/releases/为什么建议使用2.0以上版本,下...

2020-05-07 14:03:41 229

原创 MQ之ActiveMQ消息中间件粗谈

MQ(Message Queue)消息队列或消息中间件那么作为一个消息中间件应该满足哪些呢,有哪些技术维度?API的使用完成消息的发送和接收MQ的高可用性MQ的集群和容错机制MQ的持久化延时发送/定时投递签收机制Spring整合…在什么场景下引入消息中间件?为什么要引入消息中间件?或者说目的何在?分布式系统发送消息的系统去调用一个接收消息的系统;在未引入消息中间件之前...

2020-05-07 14:01:46 247 1

原创 谈谈equals和==&谈谈HashSet

谈谈equals和==首先“等等”既能比较基本类型,也能比较引用类型基本类型比较值,引用类型比较地址凡是new 出来的对象,都是引用类型,用“等等”比较都是比较地址,永远为falseequals比较的是什么?它只能比较引用类型首先要明确equals并不是String类的方法,而是Object类的方法如果该equals方法没有被重写过,那么默认使用object类的equals方法,方法内...

2020-05-07 13:57:32 185

原创 Redis的缓存穿透、缓存击穿和缓存雪崩问题

缓存穿透:关注点:要查询的数据缓存中没有,数据库中也没有情景:就是在使用了缓存的基础上,去查询一个缓存中没有,数据库中也没有的空数据,也就是压根不存在的数据如果被人写一个程序去频繁的调用这个查询空数据的请求,那么就有可能把数据库搞崩溃解决方案:1)缓存空对象:第一次查询缓存中没有,去查询数据库也没有,然后我们把查询关键字当做缓存的key,然后对应的value用空对象代替,然后将这条数据...

2020-05-07 13:54:17 219

原创 MySQL批量插入数据脚本

作为测试环境,往往需要大数据量的情况下来测试SQL查询性能这里编写一个批量插入数据的数据脚本:1)设置log_bin_trust_function_creators//创建函数,假如报错:This function has none of DETERMINISTIC…查看是否开启:show variables like 'log_bin_trust_function_creators...

2020-03-30 08:04:05 1128

原创 MySQL用show Profile进行sql日志分析和全局查询日志

show Profileshow Profile是什么?show Profile是mysql提供的用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优分析默认情况下该会话开启参数是关闭状态,并且保存最近15次的执行的SQL语句,即最近15次的运行结果分析步骤:1)查看当前mysql版本是否支持,是否开启:Show variables like 'profiling';或...

2020-03-30 08:03:39 309

原创 MySQL存储引擎和索引简介

Linux操作系统下:存储引擎1.如何用命令查看你当前mysql已经提供了哪些存储引擎:mysql>show engines;2.看你的mysql默认的存储引擎:mysql>show variables like '%storage_engine%';3.常用两种Mysql存储引擎MyISAM和InnoDB简单对比:索引优化分析SQL性能下降原因性能下降SQL慢...

2020-03-30 08:02:59 209

原创 MySQL慢查询日志和日志分析工具mysqldumpslow

慢查询日志(慢SQL的抓取)什么是MySQL慢查询日志?慢查询日志是MySQL一种记录日志,用于记录执行时间超过设定的一个规定时间的SQL语句开启慢查询日志MySQL默认没有开启慢查询日志,需要手动设置参数开启如果不是调优需要的话,一般不建议开启该参数,因为开启慢日志会或多或少带来一定的性能影响慢查询日志支持将日志记录写入文件查看慢日志是否开启show variab...

2020-03-30 08:01:44 385

原创 线程池七大参数和拒绝策略

由Executors源码中常用的三个获得线程池的方法可见他们都是通过ThreadPoolExecutor线程操作类来实现的再看ThreadPoolExecutor的源码实现该线程操作类的实现是有七大参数的这七大参数的含义:用一个银行处理业务的场景来模拟解释七大参数的含义关于KeepAliveTime就是当来办理银行业务的人越来越少,即请求线程越来越少,加班窗口(扩容的线程)慢慢的不再...

2020-03-04 20:21:18 427

原创 线程池的使用(实际中的应用)

线程池的使用(实际中的应用)我们前边说过3中比较重要的线程池的获得方式但是在实际的工作中获得线程池并不使用这三种方式,阿里巴巴开发手册中有关线程资源的获取和线程池的使用规定如下:意思即这几种自带的创建线程池的方法中:FixedThreadPool和SingleThreadPool中定义的阻塞队列为LinkedBlockingQueue类型,它的默认阻塞边界值为Integer.MAX_...

2020-03-04 20:20:16 4758

原创 获得多线程的方式之线程池

获得多线程的方式之线程池谈谈你对线程池的理解什么是线程池?优势?线程池的主要作用控制运行的线程的数量,简单来说,存放多个线程的池子,用到的时候从池中取线程去执行队列任务,执行完任务线程的释放主要特点:线程复用(避免重复方法创建和销毁线程,降低资源消耗,提高了响应速度)控制并发线程数(可以设置线程的数量)管理线程(对多个线程进行统一的分配,调优和监控)优势:降低资源消耗,提高了响应...

2020-02-29 17:23:11 199

原创 Callable获得多线程

获得多线程的方式之通过Callable接口先看一下Callable的接口源码与Runnable接口的区别1)Runnable接口没有返回值,该接口有返回值(带返回值的线程工作内容)2)Runnable接口方法不会抛异常,该接口方法会抛异常3)Runnable接口方法是run()方法,该接口的接口方法是call()方法怎么使用Callable接口Thread有Thread(Ru...

2020-02-29 17:22:01 356

原创 线程通讯之生产者消费者(生产一个,消费一个)传统版和阻塞队列版

线程通讯之生产者消费者线程 操作(方法) 资源类判断 执行 通知防止虚假唤醒(await()的判断逻辑必须放到一个循环while里面,不能放在if里面)实例:一个初始值为0的变量,两个线程对其进行交替操作,一个加1一个减1(生产一个,消费一个),来5轮实现方式传统版 1): Synchronized锁、aw...

2020-02-29 17:20:09 227

原创 阻塞队列BlockingQueue

阻塞队列BlockingQueue队列:一种数据结构,先进先出(排队取餐)阻塞队列:(交通拥堵)1)阻塞队列有没有好的一面(一种情况:海底捞火锅,消费者越多,越阻塞证明生意越好,欢迎阻塞)2)不得不阻塞,你如何管理?什么是阻塞队列(BlockingQueue):当阻塞队列中元素为空的时候,从队列中获取元素的操作将被阻塞当阻塞队列中元素为满的时候,往队列中插入元素的操作将被阻塞...

2020-02-17 11:23:50 170

原创 Java并发编程之Semaphore(信号量)

SemaphoreSemaphore是Java并发编程中常用到的,也叫信号量一:用于多个共享资源的互斥访问,二:控制并发线程数(这是相较于Synchronize的优势,当控制的并发线程数为1时,就等同于Synchronize,Lock锁)模拟示例模拟分车位,比如6个车抢占3个共享车位,同时最多只能3个车拥有车位,其他车排队等待,当车位空出来时,新的车进入车位,有增就有减代码及注...

2020-02-14 16:14:15 183

原创 设计模式:简单工厂模式/工厂方法模式/抽象工厂模式

简单工厂模式简单工厂模式:并不是23种设计模式的一种而是一种常用的开发编码方式,简单来说就是编写一个类专门用来创建其他类的实例,被创建的实例通常都具有共同的父类示例:创建一个鼠标工厂,专业生产鼠标,给参数 0,生产戴尔鼠标,给参数 1,生产惠普鼠标类图:示例代码实现:/** * 简单工厂模式:并不是23种设计模式的一种 * 而是一种常用的开发编码方式,简单来说就是编写一个类专门...

2020-01-14 11:23:02 162

原创 CountDownLatch:计数类

CountDownLatch作用和原理:Java1.5后引入,作用:使得一个线程等待其他线程执行完之后再执行该线程实现原理:通过一个计数器实现,该计数器的初始值就是需要等待执行完的线程的数量,每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0的时候,表示需要等待执行完的线程都执行完了,此时在闭锁上等待的线程就可以恢复工作了源码:countDownLatch类中只提供了一个构...

2020-01-09 13:45:42 191

原创 设计模式:单例模式的使用场景和注意事项

单例模式在JDK源码中的应用Runtime类Runtime runtime = Runtime.getRuntime();看Runtime类的源码:由此可见,该类是典型的单例模式,并且是静态常量的饿汉式使用单例模式注意事项:要记住获得实例的方法,而不是通过new来创建一个对象实例...

2020-01-04 10:22:11 249

原创 设计模式:单例模式(枚举,强烈推荐)

通过枚举实现单例模式最佳的单例实现模式就是枚举模式。利用枚举的特性,让JVM来帮我们保证线程安全和单一实例的问题。除此之外,写法还特别简单。还可以规避可能还存在反射攻击或者反序列化攻击,完全保证单例模式代码示例和注释:/** * 单例模式:枚举方式 * 1.建一个枚举类 */public class SingletonEnumDemo { public static void ...

2020-01-02 15:05:24 369 1

原创 java锁:读写锁

独占锁/共享锁独占锁:同一时间内只允许一个线程持有该锁,保证数据一致性,Synchronized/ReentrantLock都是独占锁共享锁:同一时间内允许多个线程持有该锁,多个线程可以操作读写锁: ReentrantReadWriteLock读写锁:写操作是独占锁,读操作是共享锁,写独占保证数据一致性,读共享保证并发性就好比一个成绩单需要签名,但是又可以供多个人一起读,此时同一时...

2019-12-31 14:56:49 367 2

原创 Java锁:自旋锁

自旋锁实现原理(while循环+CAS(compareAndSet))一个锁已经被一个线程锁持有,其他尝试获取该锁的线程并不会立即阻塞,而是采用循环的方式不停地尝试去获取锁,直至获取成功,跳出循环现实生活中的例子:公用洗衣机,一个人想去洗衣服,但是此时洗衣机正在被占用着,那么这个人有两种选择,要么一直在洗衣机前等待,等到该洗衣机洗完,另一种每隔一段时间再回来看看,洗衣机是否已经洗完代码...

2019-12-30 13:26:50 107

原创 Java锁:可重入锁(递归锁)

可重入锁也叫递归锁:递归传递同一把锁理解:同一个线程在进入外层同步方法获得锁之后,同样可以进入该外层同步方法中所拥有的内层同步方法,它们此时所拥有的是同一把锁这种设计可以避免死锁(如果不是可重入锁,在进入外层同步方法之后,无法进入该外层同步方法所拥有的内层同步方法,这种情况下就会出现死锁)synchronized/ReentrantLock都是可重入锁代码示例和解释:import j...

2019-12-30 10:04:42 386

原创 设计模式:单例模式(静态内部类)

单例模式(静态内部类)JVM装载部类不会实例化外部类对象,装载内部类时候才会实例化外部类对象三步:1.构造器私有化2.创建私有静态内部类,在静态内部类中创建私有静态对象实例3.对外提供共有方法(以供外部调用),返回对象实例代码示例和解释/** * 单例模式:静态内部类实现(推荐使用) * 1.构造器私有化 * 2.创建私有静态内部类,在静态内部类中创建私有静态对象实...

2019-12-29 20:37:30 335

原创 设计模式:单例模式(懒汉式)

单例模式(饿汉式)两步:1.构造器私有化2.对外提供一个公有方法,用于获得对象实例,(使用到该类,才去实例化对象)方式一:单线程情况下没问题,多线程情况下会出现线程安全问题/** * 单例模式:懒汉式 * 1.构造器私有化 * 2.对外提供一个公有方法,用于获得对象实例,(使用到该类,才去实例化对象) */public class Singleton { public st...

2019-12-27 16:47:02 343

原创 设计模式:单例模式(饿汉式:静态常量、静态代码块)

单例模式简单说:一个对象只有一个对象实例饿汉式(静态常量):饿汉式(饥饿,一上来就想吃,一装载就实例化)三步:1.构造器私有化(外部不能通过new来新建一个对象实例)2.类内部创建一个对象实例3.提供一个共有的静态方法(供外部调用):返回实例对象代码示例和注解: * 单例模式: * 饿汉式(静态常量) * 1.构造器私有化(外部不能通过new来新建一个对象实例) * ...

2019-12-27 11:19:35 569

原创 设计模式七大设计原则:

设计模式的七大设计原则:单一职责、接口隔离、依赖倒转、里式替换、开闭原则、迪米特法则(最少知道原则)、合成复用原则设计原则的核心思想:为松耦合而设计单一职责: 一个类只具有一个职责,而不具有多个职责,,比如一个用户服务类中应该只有与用户有关的功能实现,而不是包含比如其他模块的职责(类的细分)接口隔离: 每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。(接口的细分)*...

2019-12-27 10:54:50 137

flowable-6.3.0(下).zip

flowable 6.3.0 ZIP包,包含了文档、lib包,5个War包(因为上传资源大小限制,分两部分上传)

2019-10-31

flowable-6.3.0(上).zip

flowable 6.3.0 ZIP包(上),包含了文档、lib包,5个War包(因为上传资源大小限制,分两部分上传)

2019-10-31

空空如也

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

TA关注的人

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