自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ消息应答概念

因为这种模式如果消息在接受之前,消费者那边出现连续或者channel关闭,那么消息就丢失了,自动应答:当消费者接收到信息的时候,自动告诉mq处理完毕信息,及消息发送后立即被认为已经传送成功,但是实际上还没有处理完毕。生产者发送消息到队列中,消费者需要完成这个任务,并且处理信息,那么队列中的信息就会被删除掉;那么如果消费者处理这个任务所需要的时间很长,队列中的信息已经被删除了,而消费者线程挂掉了;这种自动应答模式适用的前提是,有一个良好的环境,不能出错、消费者处理信息的速率相当高。

2023-06-16 10:23:01 1192

原创 前端不能直接访问本地资源问题

记录一下自己瞎弄的时候遇到的一个坑 -_-一开始我是要做一个视频上传,然后将视频保存到本地,视频保存的地址就存到数据库种;然后页面上通过查询数据库中的路径赋值到video标签的src上,以此来展示上传的视频;但是后来发现不能直接访问本地资源,通过网上查阅(人都看疯了),发现springboot可以配置一个类就可以实现跨域访问本地资源,就是设置虚拟路径。...

2022-07-07 16:34:27 1251

原创 FileFilter优化

//获取当前目录下,所有指定格式的文件 public static void getAllFile(File dir){ File[] files = dir.listFiles(new FileFilter() { public boolean accept(File pathname) { return pathname.isDirectory() || pathname.getName().toL.

2022-05-10 18:20:28 192

原创 FileFilter过滤文件

在上一篇File文件搜索中,需要过滤掉一些文件,我们还可以用第二种方式来实现。File对象中的listFiles()方法,可以传递一个FileFilter的实现类(需要我们创建过滤器FileFilter的实现类,重写过滤方法accept,定义过滤规则),以此来达到过滤的目的。listFiles()一共做了三件事情: 1.listFiles方法会对构造方法中传递的目录进行遍历,获取目录中的每一个文件/文件夹-->封装为File对象; 2.listFiles方法会调用参数传递的过...

2022-05-10 18:08:08 902

原创 File文件搜索

//获取当前目录下,所有指定格式的文件 public static void getAllFile(File dir){ File[] files = dir.listFiles(); for (File file : files) { //判断是否为文件夹 if (file.isDirectory()){ getAllFile(file); }e.

2022-05-10 16:30:44 254

原创 File打印多级目录

打印多级目录可以使用到递归,遍历的时候判断是否为文件夹,是文件夹就继续遍历,不是文件夹就直接打印。public class Demo03File{ public static void main(String[] args) { File file = new File("G:\\better-Vip"); getAllFile(file); } public static void getAllFile(File dir){

2022-05-10 16:03:43 146

原创 Response下载文件

public class FileServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1. 要获取要下载文件的路径 //String realPath = req.getRealPath("/1.pn.

2022-04-28 15:11:01 438

原创 Response验证码实现

后端实现:需要用到java的图片类,生产一个图片public class ImageServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //如何让浏览器每3秒刷新一次 resp.setHeader(".

2022-04-27 15:15:38 626

原创 多线程-线程池

背景:经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。思路:提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。 可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。好处: 1、提高相应速度(减少了创建新线程的时间) 2、降低资源消耗(重复利用线程池中线程,不需要每次都创建) 3、便于线程管理(....) corePoolSize:核心池的大小 maximumPoolSize:最大线程数...

2022-04-09 16:18:50 94

原创 生产者消费者问题--信号灯法

通过标志位来判断什么时候等待,什么时候释放。//测试生产者消费者问题2:信号灯法,标志位解决public class TestPc2{ public static void main(String[] args) { Tv tv = new Tv(); new Player(tv).start(); new Watcher(tv).start(); }}//生产者-->演员class Player exten

2022-04-09 15:44:16 121

原创 生产者消费者问题

应用场景: 1、假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费。 2、如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。 3、如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间相互依赖,互为条件。 1、对于生产者,没有生产产品之前,要通知消费者等待,而生产了产品之后,...

2022-04-09 15:10:14 933

原创 Lock锁

Lock锁:1、从JDK5.0开始,java提供了更强大的线程同步机制--通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当。2、java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock对象。3、ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性和内存语义,在实现线程安全的控制中,比较常用的是

2022-04-09 12:41:28 121

原创 多线程死锁

死锁:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有"两个以上对象的锁"时,就可能会发生"死锁"的问题。死锁避免的方法:产生死锁的四个必要条件: 1、互斥条件:一个资源每次只能被一个进程使用。 2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3、不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。 4、循环等待条件:若干进程之...

2022-04-08 18:24:09 266

原创 CopyOnWriteArrayList

//测试JUC安全类型的集合public class TestJUC{ public static void main(String[] args) throws InterruptedException { CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<String>(); for (int i = 0; i < 10000; i++) .

2022-04-08 17:46:50 222

原创 线程同步机制

线程同步:由于同一进程的多个线程共享同一块储存空间,在带来方便的同时,也带来了访问冲突问题,为了保证数据在方法中被访问时的正确性,在访问时加入锁机制synchronized,当一个线程获得对象的排它锁,独占资源,其他线程必须等待,使用后释放锁即可。存在一下问题: 1、一个线程持有锁会导致其他所有需要此锁的线程挂起; 2、在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题; 3、如果一个优先级高的线程等待一个优先级低的线程释放锁 会导致优先级倒置,引起...

2022-04-08 16:58:50 500

原创 守护(daemon)线程

守护(daemon)线程:1、线程分为用户线程和守护线程2、虚拟机必须确保用户线程执行完毕3、虚拟机不用等待守护线程执行完毕4、如,后台记录操作日志,监控内存,垃圾回收等待..//测试守护线程//上帝守护你public class TestDaemon{ public static void main(String[] args) { God god = new God(); Persons persons = new Persons()

2022-04-05 18:31:56 120

原创 线程优先级

java提供了一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行。线程的优先级用数字表示,范围从1~10 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_PRIORITY = 5;使用以下方式改变或获取优先级 getPriority() setPriority(int xxx)(优先级低只是意味着获得调度的概率低,并不是优先级低就不会被调...

2022-04-05 16:43:46 211

原创 观测线程状态

public static enum Thread.Stateextends Enum<Thread.State>线程状态。线程可以处于以下状态之一:NEW 尚未启动的线程处于此状态。 RUNNABLE 在Java虚拟机中执行的线程处于此状态。 BLOCKED 被阻塞等待监视器锁定的线程处于此状态。 WAITING 正在等待另一个线程执行特定动作的线程处于此状态。 TIMED_WAITING 正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。 TERM..

2022-04-05 15:12:59 78

原创 静态代理模式

静态代理模式总结:1、真实对象和代理对象都要实现同一个接口2、代理对象要代理真实对象好处:1、代理对象可以做很多真实对象做不到的事情2、真实对象专注做自己的事情public class StaticProxy{ public static void main(String[] args) { //new Thread(()-> System.out.println("我爱你")).start(); new WeddingCo

2022-04-05 14:32:25 113

原创 线程强制执行_join

Join:1、join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞2、可以想象成插队public class TestJoin implements Runnable{ @Override public void run() { for (int i = 0; i < 1000; i++) { System.out.println("线程vip来了"+i); } }

2022-04-05 14:25:14 263

原创 多线程礼让

线程礼让:1、礼让线程,让当前正在执行的线程暂停,但不阻塞2、将线程从运行状态转为就绪状态3、让cpu重新调度,礼让不一定成功!看cpu心情//测试礼让线程//礼让不一定成功,看cpu心情public class TestYied{ public static void main(String[] args) { MyYield myYield = new MyYield(); new Thread(myYield,"a").start();

2022-04-05 13:55:34 146

原创 多线程小结

1、继承Thread类:子类继承Thread类具备多线程能力启动线程:子类对象.start()不建议使用:避免OOP单继承局限性2、实现Runnable接口实现接口Runnable具有多线程能力启动线程:传入目标对象+Thread对象.start()推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用3、实现Callable接口实现Callable接口,需要返回值类型重写call方法,需要抛出异常创建目标对象创建执行服务:ExecutorService execut

2022-04-05 13:41:44 69

原创 RabbitMQ 消息的分发策略

MQ消息队列有如下几个角色:1、生产者2、存储消息3、消费者那么生产者生成消息以后,MQ进行存储,消费者是如何获取消息的呢?一般获取数据的方式无外乎推(push)或者拉(pull);两种方式,典型的git就有推拉机制,我们发送的http请求就是一种典型的拉取数据库数据返回的过程,而消息队列MQ是一种推送的过程,而这些推机制绘话用到很多的业务场景也有很多对应推机制策略。发布订阅:生产者发送消息到消息队列进行存储,消费者们只要订阅了,就会收到消息队列中的消息,是一种推的机制。这是它一个最基础的功能。

2022-03-12 23:25:58 3998

原创 判断数字字符

笔记public static boolean isInteger(String str) { Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); return pattern.matcher(str).matches(); }

2022-02-21 14:26:22 153

原创 Gateway_predicate(After)

在配置文件中增加After,设置时间,当实际时间到达设置的时间时才会生效时间的获取可以写一个测试类public class T2{ public static void main(String[] args) { ZonedDateTime zbj = ZonedDateTime.now(); System.out.println(zbj); }}...

2022-02-10 16:16:52 391

原创 Gateway_动态路由

Spring Cloud Gateway作为Spring Cloud生态系统中的网关,使用异步非阻塞模型,目标是替代Zuul;SpringCloud Gateway 使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架;目标是为了提供统一的路由方式且基于Filter链的方式提供了网关基本的功能;例如:安全,监控/指标,和限流。三大概念:Route(路由):路由时构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由。

2022-01-27 10:56:34 935 2

原创 Hystrix图形化Dashboard监控

Dashboard是Hystrix的仪表盘监控界面,可以对其他服务进行图形化的监控,方便查看其它服务的情况。新建模块 cloud-consumer-hystrix-dashboard9001pom文件加入依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dash

2022-01-25 16:36:40 602

原创 Hystrix服务熔断

服务熔断:熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。在Spring Cloud框架里,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用到一定阀值,比如缺省是5秒内20次调用失败,就会启动熔断机制。熔断机制的注解是@HystrixCommand。在cloud-provider-hystr..

2021-12-23 16:27:21 231

原创 Hystrix服务降级(4)

在上一篇 Hystrix服务降级(3)中,通过全局服务降级解决了代码膨胀的问题,但是处理异常的方法和业务逻辑混在了一起,所以再做小小的改动。新增service类,实现接口,将兜底的方法全部写在这里面@Componentpublic class PaymentFallbackService implements PaymentHystrixService{ @Override public String paymentInfo_ok(Integer id) {

2021-12-21 18:02:04 111

原创 Hystrix服务降级(3)

在前两篇文章中使用的服务降级方式存在一些弊端,每一个方法上都加上注解,每个方法都有一个兜底的方法,会使代码膨胀;处理异常的方法和业务逻辑混在了一起,非常混乱;那么为了解决这些问题,则配置全局服务降级 DefaultProperties在 cloud-consumer-feign-hystrix-order80 controller类中略微修改;将 paymentInfo_TimeOut 上的注解注释掉,替换成@HystrixCommand;在class类上添加注解@DefaultPropert.

2021-12-17 16:19:27 89

原创 Hystrix服务降级(2)

在上一篇 Hystrix服务降级(1)中,cloud-provider-hystrix-payment8001是通过服务降级来处理自己的问题;现在有一个端口来调用cloud-provider-hystrix-payment8001的接口,而cloud-provider-hystrix-payment8001服务降级设置的时间是3秒,但是如果调用端等不了那么久,超过1.5秒或者2秒超时就会报错,那么这种情况就需要调用端自己也做好降级的保护措施。创建module(cloud-consumer-feign-.

2021-12-17 15:30:47 254

原创 Hystrix服务降级(1)

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,它能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。在分布式系统中,服务与服务之间的调用难免会发生调用失败、超时、异常等情况;为了解决这些问题,可以用到Hystrix的服务降级。在前面OpenFeign调服务的基础上,我们可以新增一个模块来进行服务降级的测试首先编写pom 文件 <dependencies> <dependency> .

2021-12-16 18:05:04 235

原创 OpenFeign日志打印功能

在通过OpenFeign调用服务进行联调的时候,我们需要更加明细的了解OpenFeign的调用,如头、状态码、时间、接口等等;OpenFeign就自身就提供了一个详细的日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节,也就是对Feign接口的调用情况进行监控和输出。日志级别: NONE:默认的,不显示任何日志; BASIC:仅记录请求方法、URL、响应状态码及执行时间; HEADERS:除了BASIC中定义的信息之...

2021-12-15 10:23:13 1722

原创 OpenFeign超时控制

在上一篇的OpenFeign服务调用中,虽然可以使用OpenFeign来实现服务之间的调用,但是一旦调用提供服务方的时候超时就会报错;所以这里就需要了解到OpenFeign的超时控制。在提供服务端暴露一个接口,设置睡眠3秒钟,方便测试@GetMapping(value = "/feign/timeout") public String paymenyFeignTimeout() { try { TimeUnit.SECOND.

2021-12-14 17:53:29 2889

原创 设计模式(单例模式)

确保一个类的实例只有一个,任何时间任何位置,获得的该类实例总是同一个。而单例模式又分为饿汉模式和懒汉模式。饿汉模式/** * 饿汉模式 */public class Dog{ private String name; private int age; //准备该类的实例 private static Dog obj = new Dog(); //准备一个方法获得这个实例 public static Dog getInstance(){

2021-12-13 17:13:16 925

原创 设计模式(简单工厂模式)

简单工厂模式,属于一种创建型设计模式,创建对象使用。通常是创建一个类体系(类家族)中的对象。个别类创建也不用设计模式了。1.准备类体系/** * 车父类 */public abstract class Car{ public abstract void run();}/** * 子类 */public class ArcFox extends Car{ @Override public void run() { Sy.

2021-12-13 17:07:31 293

原创 OpenFeign服务调用

学习笔记~~摸鱼时间~~对于服务的调用,除了RestTemplate还可以使用OpenFeign,当然Feign已经停更了。在这里我创建了两个服务提供模块(cloud-provider-payment8001\cloud-provider-payment8002),分别注册到了eureka上首先引入OpenFeign的pom依赖<dependency> <groupId>org.springframework.cloud</groupId>

2021-12-10 17:02:00 594

原创 Ribbon手写轮询算法

学习笔记~~最近在看Ribbon轮询源码的时候,觉得很有兴趣,尝试手写轮询。开始是注册eureka的时候 配置了两个提供者服务 一个消费者在config配置中将@LoadBalanced注释掉 不然默认的就会有轮询 影响测试创建接口LoadBalancerpublic interface LoadBalancer{ ServiceInstance instances(List<ServiceInstance> serviceInstances);}..

2021-12-08 11:42:00 176

原创 ABA问题的解决

ABA线程小测试import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent.atomic.AtomicStampedReference;/** * ABA问题的解决 AtomicStampedReference */public class ABADemo{ // 初始化 100 static .

2021-12-07 19:52:19 138

原创 Ribbon负载均衡原理

负载均衡算法:rest接口第几次请求数%服务器集群总数量 = 实际调用服务器位置下标 ,每次服务重启动后rest接口数从1开始。List<ServiceInstance> instance = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");如: List[0] instance = 127.0.0.1:8002 List[1] instance = 127.0.0.1:8001 8001+8002组...

2021-12-06 17:38:02 190

空空如也

空空如也

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

TA关注的人

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