自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

狗狗大蛇

码农一枚

  • 博客(72)
  • 资源 (1)
  • 收藏
  • 关注

原创 Springboot整合Redission分布式锁使用实例

4.2 lockTest2 在业务1执行时候尝试去获取锁,看是否能获取到锁,同时等30秒后锁过期再去获取锁,是否可以正常获取到锁;3.等待30秒以后,test_lock锁自动过期,再次执行lockTest2,可以正常获取到锁;2.lockTest2 执行时候就是锁占用,证明“test_lock”已经被占用,无法获取;4.1 lockTest1方法对锁进行锁定,让现场睡眠1分钟,模拟业务一直占用锁的场景;二、配置redis链接信息:实际各配置信息根据项目具体情况而定。

2024-01-15 15:18:44 695

原创 CompletableFuture多线程聚合结果示例

在Java 8中, 新增加了一个包含50个方法左右的类: CompletableFuture,结合了Future的优点,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。异步编程意味着在主线程之外创建一个独立的线程,与主线程分隔开,并在上面运行一个非阻塞的任务,然后通知主线程进展,成功或者失败。使用这种并行方式,极大地提升了程序的表现。

2023-10-31 10:25:38 205

原创 模板方法模式介绍与示例

目录一、模板方法模式简介二、代码示例三、总结一、模板方法模式简介模板方法模式的核心设计思路是通过在抽象类中公开定义抽象方法的执行顺序,并将抽象方法的设定为只有子类去实现,但不设计独立的访问方法。即子类实现的抽象方法不能被其它类访问,所有抽象方法的执行顺序逻辑由抽象类中的公开方法进行控制。解决的问题:系统中一些业务场景的方法能够通用,每一个子类却都需要重新实现这一方法。何时使用:有一些通用实现方法的时候就可以使用。使用场景: 1、有多个子类共有的方法,且逻辑相同。 2.

2022-05-25 23:49:43 305

原创 享元模式的介绍与使用

目录一、享元模式:二、代码实现:三、总结一、享元模式:享元模式主要是共享通用对象的模式,是一种对象实例的创建策略,其目的是减少内存占用和提高系统访问的性能。比如一些较大的对象通常比较消耗内存,需要查询大量的接口或数据库资源,因此有必要统一抽离出来作为共享的对象使用。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。何时使用:1、系统中有大量对象。2、这些对象消耗大量内存。3.

2022-05-18 23:56:50 304

原创 外观模式的介绍与使用

目录一、什么是外观模式?二、代码示例三、总结一、什么是外观模式?概念:我们用举例子的形式来阐述一下什么是外观模式?在我们生活中,送外卖已经是一件很平常的事,夏天到了,你点了一份蒜蓉大龙虾外加20份羊肉串,店家在接收到你订单的时候开始制作蒜蓉小龙虾与羊肉串,这个美食的制作过程可能很复杂。做好以后,外卖小哥在规定的时间去取你的外卖,然后快马加鞭的给你送过来。最后,你只需要接收外卖小哥给你的外卖,你就可以吃到美滋滋的小龙虾和羊肉串了。在上面的这个例子中:点外卖的你需要关系如何制

2022-05-16 23:41:24 397

原创 装饰器模式的介绍与使用

目录一、装饰器模式介绍二、代码演示三、总结一、装饰器模式介绍概念:允许向一个现有的对象添加新的功能,同时又不改变其结构的设计模式叫做装饰器模式。简单的说:就是用一个装饰类A包装一个原有的类B,在不改变B类完整性的情况下扩展其某些功能的设计模式;这么做的好处就是可以动态的给B添加一些额外的功能,但是又不影响到B类本身的职责。使用场景:1.扩展一个类的功能 2.动态增加功能,装饰器模式的特点:抽象接口类:定义抽象接口(被装饰的类) 接口具体实现类:实现抽象接口的一

2022-05-10 23:00:39 453

原创 桥接模式介绍与使用

目录一、桥接模式的概念二、代码示例一、桥接模式的概念桥接模式的主要作用是通过将抽象部分与实现部分分离,将多种可以相互匹配的使用进行组合,其核心实现是在A类中含有B类接口,通过构造函数传递B类的实现,这个B类就是设计的桥。桥接模式将继承的关系转化为关联的关系,这样做的优点就是降低了类与类之间的耦合度,减少系统中类的数量,也减少了代码量。以上的概念听起来比较的晦涩难懂,但是呢其本质也不复杂,重点就是红色字体的部分。桥接模式主要有以下几个角色:1.抽象类:某个业务抽取

2022-05-06 20:59:45 2478 3

原创 适配器模式介绍与使用

一、适配器模式介绍适配器模式的主要作用是把原本不兼容的接口通过适配器修改做到统一,方便调用方进行使用;解决的问题:主要解决如何针对差异化类型的接口实现统一输出;关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。模式的结构:1.目标接口:当前系统所期望的接口,可以是抽象类或接口;2.适配转换器:它是转换器,通过继承或引用适配者对象,并把它转换成目标接口;3.待适配者:它是被访问和适配的现有组件接口;它比如我们平时很常见的转接头,万能充等物体,也是一种适配器.

2022-04-25 22:30:03 614

原创 原型模式简介及作用

目录一、概念:二、代码示例一、概念:原型模式主要解决的是创建重复对象的问题,用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和实例原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。该模式最显著的一个特征就是对象的克隆;模式的结构特点:1.抽象原型类:具体原型对象继承后必须要实现的接口;2.具体原型类:实现抽象原型类的clone()方法,它是可以被复制的对象,即原型模式中的那个原型对象;3.访问类:使用具体原型类中的clone()方法来复制新

2022-04-23 17:30:52 885

原创 抽象工厂模式介绍与实现

目录一、抽象工厂模式二、UML图示例三、代码示例四、优缺点之前的一篇文章我们介绍了简单工厂模式,今天我们就来介绍一下抽象工厂模式;一、抽象工厂模式其实抽象工厂模式相比于简单工厂模式,本质上就是多了一层创建简单工厂的超级工厂,该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。抽象工厂的组成:抽象工厂

2022-04-19 22:39:57 940

原创 单例模式介绍与使用

目录一、单例模式概念:二、单例模式的组成套路(3个条件)三:几种类型示例四、本节总结单例模式在java编程的过程中经常被使用到,比如日常开发中,数据库的连接池不会反复创建,及在spring框架中创建的bean默认都是单例的。一、单例模式概念:如果一个类只允许创建一个对象(实例),保证在一个 JVM 中只存在单一实例,那这个类就是一个单例类,这种设计模式就叫单例模式。作用:主要解决一个全局的使用类被频繁地创建与销毁问题,,从而提升代码的整体性能;种类:饿汉式、懒汉.

2022-04-18 22:48:49 729

原创 JAVA设计模式之简单工厂模式

目录一、什么是简单工厂模式二、简单工厂模式的结构三、代码示例四.总结分析一、什么是简单工厂模式简单工厂模式提供了按需创建对象的最佳方式,是创建型设计模式的一种;简单工厂模式又称为静态工厂模式,实质是一个工厂类根据传入的参数,动态决定应该创建哪个具体实现类(这些类是继承自一个父类或接口)的一种设计模式。二、简单工厂模式的结构简单工厂模式通常由以下几个部分组成1.Factort:工厂类,其中有能根据不同的请求创建具体产品类的方法;2.Produc

2022-04-15 21:36:34 775

原创 建造者模式介绍与使用

建造者模式介绍与使用目录建造者模式介绍与使用一、建造者模式是什么?二、代码示例1.代码示例(一种复杂对象)2.分析代码总结一、建造者模式是什么?建造者模式的核心概念:通过多个简单对象一步步的构建出一个复杂的对象,将复杂对象的构造与它的表示分离,是同样的构建过程可以创建不同的表示。平时开发的过程中,我们经常遇到复杂对象的创建情况。比如《王者荣耀》游戏中的不同英雄角色:眼睛,发型,技能等等;《坦克世界》里面不同的坦克:防护能力,火力,装甲,涂装等等;对于建造者模式的概念,我们说说它的重点组成部分:

2022-04-14 22:38:54 715

原创 代码重构技巧总结

重构-改善既有代码的设计何为重构:在对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。为何重构:代码结构的流失是有累积性的,如果开始就很难看出代码所表达的设计意图,那么后续的人就越难保护好其中的设计,就会导致越改越腐 败的结果。所以,重构不仅可以让代码维持自己该有的形态和行...

2021-03-20 19:19:15 515

原创 接口多实现的注入方式

实际开发的过程中,我们经常会遇到一个接口有多个实现的这种情况;如果接口只有一个实现的时候,当控制层需要注入某个接口实现类的时候,我们经常使用@Autowire去注入即可;但是当一个接口有多个实现的时候,只使用@Autowire注解的时候,可能项目启动就会失败!解决的办法有几种:1.具体的某个实现类上添加@Primary注解,当@Autowired引入时候,如果没有配合@Qualifier注解指定具体的实现类,默认引入添加了@Primary的注解2.@Autowired配合@Qualifier

2021-02-22 21:24:49 3088 7

原创 使用redis的zset数据类型延时下架商品的功能

前段时间,紧急突击了一个终端商城的项目,既然涉及到商城,自然少不了商品上下架这些基本的功能了;除此以外,还有一个延时下架的功能,考虑到业务对执行下架时间点并没有特别高精确的要求,于是选择了使用定时线程和redis 的zset数据类型来实现,zset中的分数用来存储到期的时间。由于是分布式部署的模块,所以还使用到了redis锁等功能!代码的具体流程大概如下,有兴趣的同学可以参考代码实现:1,提供一个接口,供商品管理人员提交延时下架或直接下架的请求:1.1:请求对象:impor.

2021-02-08 16:35:07 360

原创 策略模式的介绍与使用

目录一、策略模式介绍二、代码实现2.1 定义一个接口:UserService;2.2 定义2个策略实现类:2.3 定义一个封装多实现的配置:UserServiceConfig;2.4 定义一个工厂类:UserTypeFactory;2.5定义用户接口:UserController2.6 swagger测试一、策略模式介绍策略模式:指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。优点:1.算法可以自由切换对应实现,避免大量的if-else,..

2021-01-30 21:21:13 207 1

原创 Mysql关于事务的几个常见概念

目录一、事务二、事务4大属性(ACID)三、事务4种隔离级别四、mysql事务查看与隔离级别设置补充:InnoDB支持显示锁定:一、事务首先,我们要理解什么是事务?在计算机中,事务是指访问并可能更新数据库中数据的一个独立工作单元。这个工作单元可能由一条或者多条sql语句组成,事务内的语句要么全部执行成功,要么全部执行失败,以此保证数据库中数据的完整一致性。举个生活中比较容易理解的例子:例子中的每一条信息假设是一条sql。1.我先去银行取款机查看卡里有多少..

2021-01-23 22:28:38 1093 5

原创 springboot整合elasticsearch案例

目录1.添加关于elasticsearch的依赖:2.application.yml配置关于es连接信息3.定义数据的model对象:4.定义接口,继承ElasticsearchRepository5.定义业务操作接口6.具体的业务实现7.定义接口controller8.启动服务,测试效果9.备注上一篇文章简单的介绍了elasticsearch,下面重点展示springboot整合es的方式:本文使用springboot自身的依赖来实现:为了数据查看的方便,我们使

2021-01-18 23:50:59 350

原创 Elasticsearch简介

Elasticsearch我们又常称其是ES,是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。也是一个分布式文档数据库,每个字段均是被索引的数据且可被搜索,具有庞大的数据处理能力,能扩展至数百台服务器以及处理PB级的数据。运用场景: 1.ES经常被用于日志系统分析,典型的组合就是ELK(Elasticsearch+Logstash+Kibana) 2.检索功能:比如大型电商类网站的商品搜索系统一.特点:高扩展性、高可用性;下面引用来自百度上...

2021-01-18 16:54:13 150

原创 OOM问题排查思路与常用指令

OOM问题排查思路与指令实际生产项目中,不可避免的会遇到服务器内存不足引发告警的问题,很多时候可能就是因为部署的服务占用了太多的内存导致的。当然,我们可以通过设置java的内存参数来控制内存的最大占用量,但是JVM内存不足了也是一个很头疼的问题。如果服务部署的时候,允许外部内存检查等VM之类的工具远程连接还好,但是很多公司出于性能等种种原因,并不会开放远程连接的功能。这样的话,就只能通过指令来定位问题了!常用指令:1.top指令:类似windows环境的任务管理器,可..

2021-01-17 15:18:15 3222

原创 Redis分布式锁在实际项目中使用的样例

目录1.pom文件添加依赖:2.redis锁编码3.redis客户端操作编码:4.使用redis锁代码:直接上代码:1.pom文件添加依赖:<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.20.RELEASE

2021-01-16 15:39:17 1612 6

原创 redis的介绍与简单使用

目录一、简介二、redis的5种基本数据类型介绍1.字符串String类型:2.列表list:3.散列hash:4.集合set:5.有序集合zset:三、redis作为缓存会遇到的问题1.缓存穿透:2.缓存击穿:3.缓存雪崩:一、简介redis是一种完全开源的非关系型key_value数据库,很多公司也叫其为缓存数据库,为什么这么称号呢?就是因为很多公司都是通过高可用redis集群去实现项目上缓存数据的目的。为什么 用redis作为缓存呢?有的公司用m

2021-01-16 14:24:28 91

原创 springboot整合mongoDB案例

目录1.版本说明:2.代码演示:2.1: 目录结构如下2.2: pom 文件依赖引入2.3 配置application.yml文件2.4: 抽象出一个存入mongoDB的数据对象,加入需要往mongoDB中存入一个用户;2.5 这里就直接在controller接口里面进行mongoDB的增删改查操作了。2.6 controller中的Result等是通用返回对象,可以根据自己需要定义3.测试效果:mongoDB是一种非关系型的数据库,对mongoDB的数据操作类似操作

2021-01-11 17:52:03 624 8

原创 nginx反向代理配置

一、反向代理介绍反向代理:将代理的软件nginx部署在服务器上,通过访问这台代理服务器去访问其它的网络地址,这就是反向代理了。示意图:​​​​​​​​二、nginx配置反向代理进入nginx的安装目录,进入/conf目录,打开nginx.conf文件,建议提前先备份;如果是windows,还需要提前配置host文件,配置好ip和域名对应关系:例如:配置域名对应到本地的ip;127.0.0.1 www.testNginx.com127.0.0.1 www.yangshilei.com127

2021-01-11 17:28:43 320

原创 JMM图解

1.jmm介绍

2021-01-10 20:17:40 162

原创 Java中synchronize与ReentrantLock两种锁特点介绍

一、两种锁特性总览:synchronize:隐式锁(内置锁),重量级锁,重入锁,非公平锁;ReentrantLock:显式锁,轻量级锁,重入锁,具有公平锁和非公平锁两种方式;二、锁特点介绍:2.1 隐式和显式隐式锁:程序能够自动获取锁和释放锁,无需手动创建和删除,在非逻辑问题的情况下,是不会出现死锁问题的。synchronize修饰普通方法:public synchronized void method() { }synchronize修饰静态方法:pub...

2021-01-07 11:48:22 359

原创 springboot的starter机制

springboot自定义starter

2021-01-03 13:15:26 13501

原创 Linux离线安装java8的环境

linux安装java环境的步骤还是比较简单的。1.下载java8的包,并上传到服务器/usr/local目录下2.解压:注意自己包的名称tar -zxvf /usr/local/jdk-8u181-linux-x64.tar.gz解压后包名:jdk1.8.0_1813.配置环境变量:vim /etc/profile将下面这段信息添加的配置文件中,注意包名;export JAVA_HOME=/usr/local/jdk1.8.0_181export PATH=$JAVA_HOME

2020-12-30 14:19:10 692 2

原创 docker构建springboot项目遇到的问题

1.pull access denied for frolvlad/alpine-oraclejdk8, repository does not exist or may require 'docker login'咋一看好像是docker没有登陆的问题,于是就去注册了docker的账号,也docker login了,燃鹅毛用没有。查询了网上,业有类似的问题,说声的docker中没有jdk,所以,就说安装jdk了。docker pull carsharing/alpine-oraclejdk.

2020-12-30 11:14:41 746

原创 Feign实现远程接口的调用

Feign实现远程接口的调用一.Feign介绍在开发中,我们常用httpClient去远程调用其他系统的接口,一般情况下,需要我们指定调用的url,feign也实现了一套远程调用的方法,并且更为优雅。前提:1.被调用的模块注册到eureka中,能正常运行 2.feign接口文件夹要和启动类在同一个目录下, 否则需指定包名,@EnableFeignClients(basePackages="com.**.***")二.Feign使用步骤不同版本依赖可...

2020-12-28 18:12:08 6574 1

原创 docker部署springboot项目流程

实战:springboot开发的某项目部署流程案例公司项目代码保存在svn上面,由于自动化部署功能等尚未完成,所以每次新提交代码之后的发布流程大概如下,克隆代码等操作基本是一次性的,每次代码修改后主要是从第二步开始重复操作!------------1.下载项目------------如果项目代码不存在,需进行下载svn下载指定项目命令:svn checkout 项目路径例:svn checkout https://********:8443/svn/MIGUMS_PROJECT/trunk/c

2020-12-28 17:46:25 217

原创 docker使用国内镜像库方法

安装好docker以后,如果直接使用docker下载镜像,速度是非常缓慢的,甚至还会断掉通过修改或者创建daemon配置文件/etc/docker/daemon.json来使用加速器1.中国区官方镜像:vi /etc/docker/daemon.json在文件中(若无此文件则创建)添加如下内容:{ "registry-mirrors":["https://registry.docker-cn.com"]}2.其它国内镜像:网易http://hub-mi...

2020-12-28 17:36:20 799

原创 个人实际开发docker使用笔记

docker默认安装位置:/var/lib/docker一、镜像类操作指令1.docker help|grep image:查看docker中与镜像相关的所有操作指令2.docker search mysql: 在docker的库中查找mysql的镜像3.docker pull <镜像名称>:下载某个镜像比如安装mysql:docker pull mysql:tag(:版本号,默认是最新版)4.docker push <11.181.1...

2020-12-28 17:22:50 178

原创 docker中关于镜像和容器的常用指令

目录一.docker介绍二.docker镜像操作三.docker容器操作一.docker介绍Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。Docker在容器的基础上, 进行了进一步的封装, 从文件系统、 网络互联到进程隔离等等, 极大的简化了容器的创建和维护。 使得 Docker 技术比虚拟机技术更为轻便、 快捷。使用dockers可以很方便的管理不同版本的镜像和之前发布的容器等等。docker三个基本的概念镜像(images):一个特殊的文件系统,

2020-12-28 16:51:25 101

原创 Linux环境安装maven以及仓库和国内镜像的配置

目录一、maven下载二、maven安装linux2.1:以root权限登陆linux服务器,进入磁盘/usr/local/目录,并将下载好的maven包放到改文件夹下2.2:解压apache-maven-3.6.3-bin.tar.gz文件2.3:配置maven的存放jar包的仓库,添加阿里国内的镜像地址2.4:配置maven环境变量,编辑vi /etc/profile 文件,在最后加上maven的环境配置信息。2.5:重新加载profile文件2.6:测试是否安装成功:m

2020-12-25 16:04:44 3231 2

原创 java学习知识图谱

都说活到老学到老,作为一名半路出家的程序员,工作越久,越发现要学习的东西太多太多,所以整理了一份java从业者的技术学习路线,或许不能涵盖所有公司使用的技术,但是应该也算是比较主流的技术体系了,如果能全部掌握的伙伴,估计进大厂是没什么问题的。我也在按照这个路线学习爬坑中,共同加油吧!地址:https://www.processon.com/view/link/5fa2a6427d9c081baf150ee3#map...

2020-12-25 13:58:02 176 1

原创 springboot整合sftp文件服务器实现文件上传下载功能

直接上模块代码完整项目源码地址(参考ideal-sftp-1018模块):https://github.com/yangshilei/springCloud1、项目结构下面红圈中是主要的几个关于sftp客户端操作的对象方法。2、添加sftp核心配置依赖 <!--sftp核心依赖包--> <dependency> <groupId>com.jcraft</groupId>

2020-12-23 23:27:35 2302 2

原创 linux搭建sftp服务器

linux搭建sftp服务器目录一、sftp服务器介绍二、安装步骤一、sftp服务器介绍在开发的过程中,一定避免不了向服务器上传下载文件的操作,我们可以用ftp进行文件上传,但是ftp传输数据是不安全的,很多时候我们都是选择sftp进行上传下载文件。sftp相对于ftp在数据传输的过程中对数据进行了加密,当然这也是有代价的,就是损耗了数据传输的一些效率,以此来保证数据的安全性。使用ftp需要进行安装,但是使用sftp就无需进行安装,sftp基于默认的22端口,是ssh内含的协议,

2020-12-23 10:29:48 1140 3

原创 java事件监听处理机制

java事件监听处理机制一、java事件3大组成要素1.EventObject:事件状态对象,一般自定义事件对象来继承该父对象2.EventSource:事件源,比如一个点击事件,一个数据修改变动等等均可以作为事件源3.EventListener:事件监听器,对于发生的事件,我们可能需要采取相应的操作,这个时候就需要使用监听者来实现。EventListener是一个接口,具体从操作实现方法可以实现该接口。伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.u

2020-12-22 12:03:29 514

JVM思维导图,个人整理笔记

JVM思维导图,个人整理笔记

2023-03-23

设计模式之美PPT,个人学习整理

设计模式之美PPT,个人学习整理

2022-05-23

空空如也

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

TA关注的人

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