- 博客(43)
- 收藏
- 关注
原创 linux下安装docker并部署运行jar
linux下安装docker并部署运行jarlinux系统安装并启动docker服务1、安装需要的软件包2、设置yum源3、启用 edge 和 testing 镜像仓库(可选)4、安装Docker最新版本5、启动Docker6、验证安装是否成功Docker部署运行jar一、创建docker镜像1、创建Dockerfile文件2、构建Docker镜像二、运行Docker容器1、运行命令2、命令解析linux系统安装并启动docker服务Docker提供了两个版本:社区版 (CE) 和企业版 (EE)。D
2020-08-11 15:19:25 3565
原创 Linux下安装部署jenkins并完成github上springboot项目的自动化部署
Linux下安装部署jenkinsLinux下安装部署jenkins下载安装jenkins安装jdk安装maven安装git启动jenkins服务jenkins插件下载jenkins配置jdk、maven、git创建一个任务Linux下安装部署jenkins这里不仅说明如何下载安装jenkins,还会说明如何安装配置jdk1.8,maven,git。下载安装jenkins首先去jenkin...
2020-04-23 15:35:56 1983 7
原创 springboot集成sa-token来实现登录鉴权(一)
sa-token是一个轻量级的登录鉴权框架,比之前的shiro和springsecurity都要轻量,一行代码就可以实现登录功能。sa-token官网。这里我们不再赘述。直接来看具体实现代码。
2023-03-15 13:11:33 3234
原创 springboot+shiro+jwt实现基于token的无状态授权认证
springboot+shiro+jwt实现基于token的无状态登录鉴权
2022-07-11 11:30:45 2406
原创 aspose-cell将excel转pdf时,对pdf设置权限限制
aspose-cell将excel转pdf时,对pdf设置权限限制直接看代码:public static void excelToPdf(InputStream fileInput, OutputStream fileOutput) { // 验证License if (!getLicense()) { return; } String property = System.getProperty("user.dir"
2021-11-03 14:26:28 1422
原创 SpringCloud微服务搭建(Hoxton.SR8)(二)-- springcloud gateway以及其动态路由搭建
SpringCloud微服务搭建(二)-- springcloud gateway以及其动态路由搭建一、基本的gateway项目搭建1、项目说明2、代码实现3、测试二、gateway进阶之动态路由配置1、代码实现2、测试三、源码一、基本的gateway项目搭建1、项目说明这里我们不讲什么是springcloud gateway,网上类似的文章一大堆,我们直接上代码实践,这里需要用到三个项目,分别是eureka注册中心、gateway网关项目、consumer项目。其中eureka注册中心不必说,管理
2021-03-09 16:56:34 630
原创 Linux 安装nginx
一、下载nginx官网地址:nginx下载地址二、安装1、安装gcc安装nginx需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++查看是否安装了gcc:gcc --version2、PCRE pcre-devel 安装PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表
2021-03-06 17:23:12 328
原创 Redis学习(五) -- Redis持久化
Redis学习 -- Redis持久化一、RDB1、什么是RDB2、怎么使用RDB3、RDB的触发机制4、RDB如何恢复数据5、优缺点二、AOF1、什么是AOF2、AOF的配置3、AOF的使用一、RDB1、什么是RDBRDB会在指定的时间间隔内将内存中的数据集 快照写入磁盘,恢复时是将快照文件直接读到内存中。RDB保存的是 dump.rdb2、怎么使用RDBRedis中是默认开启RDB的,我们可以在配置文件中看到RDB是如何生效的:这里我们可以看到,配置文件中默认的,就是在900秒内如果有
2021-02-17 16:54:08 285
原创 Redis学习(四) -- Redis的事务
Redis学习 -- Redis的事务一、什么是Redis的事务二、创建事务并执行三、放弃事务四、事务中的异常1、编译型异常2、运行时异常一、什么是Redis的事务关于事务,我们常熟知的是mysql的事务,即隔离性、持久性、原子性、一致性。而Redis的事务呢?我们知道,redis单条命令是保证原子性的,但是redis的事务并不能保证原子性。redis事务通俗的来说,就是一组命令的集合,一次性执行。一个事务中的所有命令都会被序列化,在事务的执行过程中,会按照顺序执行。redis事务中没有隔离级别
2021-02-16 12:09:59 247
原创 Redis学习(三) -- 三种特殊数据类型geospatial、hyperloglog、bitmaps
Redis学习 -- 三种特殊数据类型geospatial、hyperloglog、bitmaps一、Geospatial类型1、添加地理位置2、获取指定位置的地理坐标3、获取另个指定位置之间的距离4、获取指定位置附近的位置5、将二维经纬度转为一维字符串6、删除一个位置元素二、Hyperloglog类型1、什么是hyperloglog?2、具体使用三、Bitmaps一、Geospatial类型这种类型指的就是地理位置,可以用来存储地理位置。也可以推算地理位置的信息,两地之间的距离,方圆几里的人详情可
2021-02-15 15:25:22 421
原创 Redis学习(二) -- 五大数据类型以及其常用命令
一、String类型1、常用的命令127.0.0.1:6379> set key1 v1 # 设置值OK127.0.0.1:6379> get key1 # 获取指定key的值"v1"127.0.0.1:6379> exists key1 # 判断指定的key是否存在(integer) 1127.0.0.1:6379> append key1 hello # 给指定的key追加字符串,若key不存在,则就相当于set命令(integer) 7127.0.0.1:6
2021-02-14 22:11:40 709
原创 Redis学习(一) -- 下载安装redis以及基础知识了解
一、Windows下安装redis1、下载安装包下载地址2、安装将上面的压缩包下载下来后,解压到自己制定的目录下,就可以了。然后进入目录中,双击 redis-server.exe 就可以了。Windows10系统中如果遇到双击 redis-server.exe 闪退的,可以在redis目录下新建一个 start.bat文件,然后里面写上:redis-server.exe redis.windows.conf,然后双击 start.bat文件就可以正常启动了。二、linux下安装redis1
2021-02-14 15:08:29 1351
原创 Elasticsearch入门(一)--下载和安装
Elasticsearch安装我们首先点击:Elasticsearch官网下载地址,下载对应系统下的Elasticsearch
2021-02-11 16:37:02 1484 2
原创 SpringCloud微服务搭建(Hoxton.SR8)(一)-- Eurka的注册与发现
这里我们不再介绍SpringCloud的知识,直接搭建框架。这里我们选择将不同的模块创建在一个父项目下。一、创建父项目1、新建一个springboot项目2、pom文件内容(依赖) <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-
2021-02-08 17:24:01 555
原创 JUC并发编程(十四)-- 死锁
JUC并发编程(十四)-- 死锁一、死锁的实现二、处理死锁1、使用 jps -l 定位死锁的进程2、使用jstack 查看问题一、死锁的实现我们这里直接跳过什么是死锁的概念,直接用代码实现死锁:package com.zhan.juc.lock;import java.util.concurrent.TimeUnit;/** * 死锁demo * @Author Zhanzhan * @Date 2021/2/6 15:10 */public class DeadLockDemo {
2021-02-06 15:32:09 259 3
原创 JUC并发编程(十三)-- 自旋锁
JUC并发编程(十三)-- 自旋锁一、什么是自旋锁二、自旋锁的实现一、什么是自旋锁自旋锁:即当一个目标线程上锁后,其他线程就会循环等待,直到目标线程释放锁为止。二、自旋锁的实现这里我们在加锁时,使用了CAS来作为自旋的条件判断上代码:package com.zhan.juc.lock;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;/** * 自旋锁demo
2021-02-06 14:58:41 251 2
原创 JUC并发编程(十二)--可重入锁
JUC并发编程(十二)--可重入锁一、什么是可重入锁二、不可重入锁三、可重入锁实现一、什么是可重入锁同一个线程可以多次上锁代码段。二、不可重入锁指的就是同一个线程不能多次上锁代码段。代码实例:package com.zhan.juc.lock;/** * 可重入锁demo * @Author Zhanzhan * @Date 2021/2/6 13:59 */public class ReentrantLockDemo { static MyLock myLock = n
2021-02-06 14:28:01 170 2
原创 JUC并发编程(十一)--深入理解CAS,以及ABA问题
JJUC并发编程(十一)--深入理解CAS,以及ABA问题一、CAS二、Unsafe类三、ABA问题四、原子引用一、CASCAS的操作过程:首先读取主内存位置M的原值到自己的工作内存,记为E,然后计算新值V,然后将主内存位置M的值与E比较(compare),如果相等,则在此过程中说明没有其它线程来修改过这个值,所以把内存位置M的值更新成V(swap)直接看代码演示:package com.zhan.juc.cas;import java.util.concurrent.atomic.Atomic
2021-02-05 22:54:36 303 2
原创 JUC并发编程(十)--Volatile、原子性以及单例模式的应用
JMM一、什么是JMMJMM是一种Java内存模型,是一种概念性的约定,而不是实际存在的东西。二、JMM的约定线程解锁前,必须把变量立即刷回主存;我们知道,一个线程工作时,会将主存中的变量复制一份给线程自己的内存,作为一个副本,线程对此变量的操作,都是在副本上的操作,所以当线程运行完毕,解锁的时候,必须将副本的值同步回主存。线程加锁前,必须读取主存中最新的变量值,然后复制到自己的工作内存中;加锁和解锁是同一把锁。三、八种操作从主存中read操作和load到线程工作内存中
2021-01-30 15:28:01 1515 5
原创 JUC并发编程(九)-- Fork/Join框架
JUC并发编程(九)-- Fork/Join框架一、什么是Fork/Join1、概述2、特点二、代码实现一、什么是Fork/Join1、概述fork/join 框架可以将一个大任务,拆分成一个个的小任务,然后分别计算,将得到的结果相加后,给出一个完整的结果。2、特点fork/join还有一个特点,叫:工作窃取。什么是工作窃取??有这样一个场景,有两个线程A和B,都分配了四个任务,A线程刚刚执行了一个任务,而B线程已经执行完了分配给它的四个任务,那么这个时候,通常情况下,B线程就会无事可做,而
2020-12-21 21:44:00 243 2
原创 JUC并发编程(八)-- 线程池
JUC并发编程(八)-- 线程池池化技术线程池的优点线程池的用法一、三大方法1、创建单个线程的线程池2、创建一个固定大小的线程池3、创建一个可伸缩的线程池二、七大参数三、四种拒绝策略1. AbortPolicy2. CallerRunsPolicy3. DiscardOldestPolicy4. DiscardPolicy池化技术我们知道,程序的运行,本质是占用系统的资源,那为了优化资源的时候,就出现了池化技术!常见的有:线程池、内存池、对象池 等待…一句话总结池化技术:事先准备好一些资源,有人需要
2020-12-05 18:01:09 627 1
原创 JUC并发编程(七)-- 阻塞队列BlockingQueue
JUC并发编程(七)-- 阻塞队列BlockingQueue什么是BlockingQueue什么场景下使用?BlockingQueue的核心APIBlockingQueue常用的实现类一、ArrayBlockingQueue二、LinkedBlockingQueue三、ArrayBlockingQueue和LinkedBlockingQueue区别什么是BlockingQueueBlockingQueues在java.util.concurrent包下,提供了线程安全的队列访问方式,当阻塞队列插入数据时
2020-12-04 22:45:55 225
原创 JUC并发编程(六)-- ReadWriteLock
什么是ReadWriteLock首先我们看jdk文档:我们可以看到,这个是读写锁,里面维护了一组锁(读锁和写锁),即读可以被多个线程同时读,而写只能有一个线程去写。这样既保证了性能,又保证了线程安全。怎么使用一般的ReentrantLock实现了标准的互斥锁,即当一个线程持有锁时,其他线程等待,直到当前持有锁的线程释放锁。这样虽然保证了多线程下数据的安全性,但会影响并发性能。拿两个线程来举个例子:一般我们我们用两个线程在加了ReentrantLock锁后操作数据会有哪些情况?读 <-&
2020-12-03 21:48:51 161
原创 JUC并发编程(五)-- 常用辅助类之CountDownLatch、CyclicBarrier、Semaphore
JUC并发编程(五)-- 常用辅助类之CountDownLatch、CyclicBarrier、SemaphoreCountDownLatch一、什么是CountDownLatch二、如何使用?CyclicBarrier一、什么是CyclicBarrier?二、怎么使用?Semaphore一、什么是Semaphore?二、怎么使用?CountDownLatch一、什么是CountDownLatch我们可以去jdk1.8中文帮助文档中查看:我们可以看到,原来CountDownLatch是一个计数器,
2020-12-02 21:59:27 195
原创 JUC并发编程(四)-- Callable
JUC并发编程(四)-- Callable什么是Callable和Runnable的不同怎么在Thread中使用Callable?什么是CallableCallable是java.util.concurrent包下面的一个接口,它和RunNable一样,可以实现Callable来创建线程。和Runnable的不同Callable有返回值;Callable可以抛出异常;方法不同,Runnable是run(),而Callable是call()。怎么在Thread中使用Callable?首先我
2020-12-01 21:59:29 198 1
原创 JUC并发编程(三)-- 集合线程安全
JUC并发编程(三)-- 集合线程安全List一、常用的Arraylist是否为线程安全二、解决方案1)使用 Collections 工具类来创建一个线程安全的 ArrayList2)使用 CopyOnWriteArrayListSet一、常用的HashSet是否为线程安全?二、解决方案1) 使用 Collections 创建2)使用 CopyOnWriteArraySet创建Map一、常用的HashMap是否为线程安全?二、解决方案1)使用 Collections 来创建同步的 HashMap2)使用 C
2020-11-29 17:05:47 726 3
原创 JUC并发编程(二)-- 线程八锁
JUC并发编程(二)-- 线程八锁1、两个线程,分别调用同一个资源类的两个方法,哪个先执行?2、两个线程A和B,分别调用同一个资源类的两个方法,A线程休眠3秒,哪个线程先执行?3、非同步方法是否会受到对象锁的影响?4、同一个类中两个对象的同步方法时候会相互影响?5、同一个类中的两个静态同步方法时候会互相影响?6、同一个类中,一个静态同步方法和一个普通同步方法,会相互影响吗?线程八锁,指的就是线程中关于锁的八个问题,用来分辨清晰Java多线程中,锁究竟锁的是什么。以下 5 和 6 两个问题分别是两个子问题
2020-11-28 22:17:28 228
原创 JUC并发编程学习(一)
线程wait和sleep区别1、来自不同的类wait 是 object类的sleep是 Thread类的2、关于锁的释放wait会释放锁,sleep不会释放锁。3、使用的范围不同wait 必须在同步代码块中使用sleep 可以在任何地方使用Lock锁synchronizedLockReentrantLockReentrantLock–>可重入锁,使用new创建的时候如下:默认无参构造为非公平锁,有参构造传true为公平锁。公平锁:线程获取锁的顺序和调用lock的顺
2020-11-28 15:15:19 319
原创 Elasticsearch入门(二)-- 基本的增删改查以及复杂查询语句
Elasticsearch入门(二),基本的增删改查操作增删改查基本操作创建一个索引创建索引,并设置字段类型获取指定索引的信息修改数据用put请求修改用post请求修改简单的条件查询删除删除索引删除文档复杂查询查询条件封装为对象只查指定的数据字段排序分页查询布尔查询must (类似mysql中的and)should (类似mysql中的 or)must_not (类似mysql中的 not )过滤器匹配多个条件使用倒排索引查询keyword类型高亮查询增删改查基本操作创建一个索引PUT /索引名/类型
2020-11-22 15:38:13 576
原创 Linux下使用Crontab构建定时任务运行删除Docker无用镜像的shell脚本
Docker删除无用的镜像命令为:docker image prune [OPTIONS]OPTIONS说明:-a或-all:删除所有未使用的映像-f:不要提示确认,强制删除–filter:提供过滤值,过滤标志(–filter)格式为“key = value”。如果有多个过滤器,则传递多个标志(例如–filter “foo=bar” --filter “bif=baz”)。例如:–filter “until=1h” 指删除一小时之前的镜像构建删除无用镜像的脚本进入要生成脚本的目录,然后通过v
2020-08-20 11:27:41 806
原创 Docker-Compose的安装和使用
Docker-Compose的安装和使用Docker-Compose的安装Docker-Compose.yml文件编写Docker-Compose运行因为介绍Docker-Compose的文章有很多,所以在此就不再介绍Docker-Compose了。只介绍如何下载安装和使用。首先,要现在服务器上安装Docker,可以参考我的另一篇文章:linux下安装docker并部署运行jar,在此基础上再使用Docker-ComposeDocker-Compose的安装网上有很多介绍怎么下载安装的方法,有yum
2020-08-13 16:50:48 230
原创 深入理解JVM
深入理解JVMJVM内存结构jdk1.8内存区域划分各区域jvm中堆的内存模型深入GC垃圾回收算法如何确定对象不可用1、引用计数器算法2、可达性分析算法回收算法1、标记—清除算法2、复制算法3、标记—整理算法4、分代收集JVM内存结构jdk1.8内存区域划分各区域程序计数器每个线程一块,指向当前线程正在执行的字节码代码的行号,每条线程都有一个独立的程序计数器,程序计数器为“线程私有”的内存,线程间不共享。Java虚拟机栈同样是线程私有的,线程间不共享。每个方法在执行的时候也会创建一个栈帧
2020-08-10 15:54:41 229
原创 Java equals()和hashCode()的区别和使用
Java equals()和hashCode()的区别和使用目录Java equals()和hashCode()的区别和使用equals()和hashCode()的作用equals()和hashCode()的区别和使用equals()和hashCode()的区别equals()和hashCode()的使用代码实例得到的结论equals()和hashCode()的作用用来比较两个对象实例是否相同equals()和hashCode()的区别和使用equals()和hashCode()的区别**equ
2020-07-30 14:00:36 154
原创 linux上查看jvm GC详情并获取jvm当前dump文件
linux上查看jvm GC情况通过命令行:jstat -gc [pid] [刷新频率ms]其中pid为要查看的java进程的id,刷新频率为每个多少毫秒刷新一次GC情况。显示内如如下图:上图中是查看进程id为12711的Java项目,每隔1秒即1000毫秒刷新一次。参数说明:1、S0C 和 S1C:Survivor(幸存区) 0/1区的容量(单位为KB);2、S0U 和 S1U:S...
2020-05-08 13:12:04 2988
原创 IDEA配置监控JVM的插件VisualVM
安装VisualVM在IDEA Plugins中搜索插件VisualVM并安装,然后重启IDEA配置VisualVM启动项目
2020-05-08 11:34:44 2247
原创 JvisualVm提示无法监视本地Java应用程序解决办法
有时候我们用jdk自带的JvisualVm来监控本地jvm的时候,会弹出一个“无法监视本地Java应用程序”的提示。处理方法根据官网的处理方法,修改一下%TMP%\hsperfdata_username就可以了。处理过程:1、要先关闭IDEA,并且关闭所有的Java程序;2、按Win + R,然后输入:%TMP%;3、找到 hsperfdata 开头的文件夹4、按用户名修改一...
2020-05-08 11:09:42 2303 2
原创 设计模式--享元模式
设计模式–享元模式享元模式应用场景享元模式的英文名又叫Flyweight,意思是轻量级,而我们翻译的中文名享元个人感觉比轻量级的直译更好。享元模式的定义是:使用共享技术有效地支持大量细粒度的对象。通俗的来说,就是建立对象池,共享对象池,已达到限制对象数量的目的。内部状态和外部状态享元模式要求共享和细粒度,于是享元模式的对象信息就分为内部和外部两种状态。内部状态,指对象共享的信息,存...
2019-11-25 13:56:14 223
原创 设计模式--观察者模式
观察者模式应用场景当对象之间形成一对多关系,并且一个对象改变状态会通知所有依赖它的对象时,可以考虑使用观察者模式。观察者模式实现正值双十一,我们就用用户购买商品来作为例子实现简单的观察者模式。想象这样一个场景:商店里没有商品,但是用户忍不住剁手的冲动,很想买,所以就不停的查看商店是否进货,这样会造成大量的无用操作。所以现在就让商店进货的时候通知这些购买者,这样就省去了大量的询问。现在,为...
2019-11-19 16:16:31 143
原创 设计模式--责任链模式
责任链模式应用场景一个事件要经过多个对象的处理,例如公司的审批流程、软件开发中的异常流程处理、前端页面的请求流程处理等,都可以考虑用责任链模式。责任链模式的实现现在让我们用公司的审批流程来作为场景举例实现。根据上图展示,我们来模拟一个最简单的场景:某公司制定了出差报销的审批流程,有三个审批角色,员工(1000元以下的审批权限)、经理(5000元)和CEO(10000元)。那么,这个时候...
2019-11-19 15:43:52 134
原创 设计模式--单例设计模式
什么是单例模式单例,顾名思义,就是整个系统中只有一个实例,不能存在其他实例。为什么要用单例模式当创建实例需要大量的资源开销,并且每个实例间都是共享资源时;当创建多余实例容易找出线程同步和安全问题时。单例模式实现我们就来创建一个计算机里的上帝吧。首先我们创建一个上帝类,并把构造方法改为私有,保证外部无法创建上帝public class God { private God(){}...
2019-11-18 16:07:24 134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人