自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

booleandev

深自缄默,如云漂泊

  • 博客(96)
  • 资源 (17)
  • 收藏
  • 关注

原创 设计模式之代理模式

代理模式(Proxy Pattern)是软件工程中的一种设计模式,它属于结构型模式,用于在不直接访问实际对象的情况下,通过一个或多个代理对象来间接访问某个对象或执行某些操作。

2024-07-17 17:20:31 841

原创 PGSQL数据膨胀问题排查

但是,因为数据库的数据需要同步至 数据仓库 ,因此使用了 Flink-CDC 进行同步,Flink-CDC 会开启一个复制槽,正常运行的情况下, Flink-CDC 会实时消费复制槽中的 WAL 日志,如果 Flink-CDC 同步任务关闭,但是又未关闭复制槽,复制槽为了保证订阅者数据完整性,会自动记录 FLink-CDC 上一次消费的位置,方便 Flink-CDC 下一次重启,重新监听 WAL 日志。我们一起来慢慢解决这个问题吧!,但是此方案会锁全库,因此执行的时候,必须停服执行,对业务的影响较大。

2024-07-12 10:56:04 569

原创 PGSQL 批量更新

在我们的平常业务中,经常需要批量更新数据,例如:现阶段需要更新 1000 个包裹的上网时间,每个包裹的上网时间是不一样的,假如我们一个一个包裹更新,则需要与数据库进行 1000 次的交互,很大的消耗数据库的性能,并且更新的速度也很慢,因此,我们通常需要进行批量更新数据。以上是各种执行 PGSQL 批量更新的方案,个人的推荐度是 插入更新 > 子表 > 实体表 > 临时表。插入更新比较推荐的理由是这种方案 SQL 写起来结构比较清晰。

2024-07-12 10:54:09 322

原创 Spring Aop 获取入参和出参

本次,我利用 Spring Aop 的注解方式获取切入点的入参和出参,因为比较简单,所以就直接上代码了。

2024-07-12 10:51:32 205

原创 Spring AOP 切面执行顺序

Aspect:切面,由一系列切点、增强和引入组成的模块对象,可定义优先级,从而影响增强和引入的执行顺序。事务管理(Transaction management)在java企业应用中就是一个很好的切面样例。Join point:接入点,程序执行期的一个点,例如方法执行、类初始化、异常处理。在Spring AOP中,接入点始终表示方法执行。Advice:增强,切面在特定接入点的执行动作,包括 "around," "before" and "after"等多种类型。

2024-07-12 10:37:53 533

原创 zuul 网关超时优化

前段时间,线上的服务不知道为啥,突然全部的服务都超时,所有的请求经过网关都超时,后来进行链路追踪排查,发现有一个服务链接 RDS 数据库,一个查询花费了 20S 的查询时间,导致后续调用该服务的应用都超时。然后超时的连接占满了 zuul 的转发池,最终导致了所有经过 gateway 的服务都在等待,导致全体服务全部超时。

2024-07-12 10:37:05 659

原创 Hibernate Type源码解析

BasicType: 基础类型,例如 long,int,string 等基础类型。AssociationType: 关联类型的 type,主要用于外键等相关。IdentifierType: 主键相关的类型 type。

2024-07-12 10:34:00 253

原创 idea 修改 git 提交用户名

修改当前项目目录下的 config 文件。

2024-07-12 10:33:07 137

原创 链表常见算法

我这写的是两个链表合并,例如1->2->3->4和2->3->4,这里合并为1->2->3->4->2->3->4。但是我觉得题目的意思是合并为1->2->2->3->3->4->4,我这里应该写错了。主要的实现方式是在类中设置一个。的内部类,用来存储链表的节点。

2024-07-12 10:31:30 121

原创 Gateway 聚合swagger文档

‍在微服务架构下,通常每个微服务 都会使用 Swagger 来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,因此,我们需要把其它系统的 Swagger 文档聚合到 Gateway ,方便我们统一查看接口文档。

2024-07-12 10:20:27 309

原创 zuul 源码解析

路由定位器,在 Spring Cloud Zuul 中,RouteLocator 的主要作用是加载 zuul 路由配置信息(如yml配置文件或数据库)到zuul中,再由过滤器将这些信息一步步去匹配,主要的 RouteLocator 有如下几种。复合路由定位器,主要集成所有的路由定位器(如配置文件路由定位器,服务发现定位器,自定义路由定位器等)来路由定位。服务发现的路由定位器,去注册中心如Eureka,consul等拿到服务名称,以这样的方式。路由刷新,只有实现了此接口的路由定位器才能被刷新。

2024-07-12 10:19:03 572

原创 转-Java 异常处理的 20 个最佳实践,你知道几个?

异常的英文单词是 exception,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误,在编译期间出现的错误有编译器帮助我们一起修正,然而运行期间的错误便不是编译器力所能及了,并且运行期间的错误往往是难以预料的。假若程序在运行期间出现了错误,如果置之不理,程序便会终止或直接导致系统崩溃,显然这不是我们希望看到的结果。

2024-07-12 10:17:57 593

原创 ZUUL超时配置

zuul相关问题connect-timeout-millis和socket-timeout-millis的区别connect-timeout-millis连接服务的时间connect-timeout-millis=1socket-timeout-millis服务器连接及响应时间socket-timeout-millis=1+2+3

2024-07-12 10:16:52 199

原创 shading-jdbc数据库读写分离

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。

2024-07-12 10:15:44 918

原创 【转】-多线程之Callable

而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。因为Future只是一个接口,所以是无法直接用来创建对象使用的,因此就有了下面的FutureTask。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。可以看到,这是一个泛型接口,call()函数返回的类型就是传递进来的V类型。

2024-07-10 09:58:21 590

原创 【转】-synchronized与Lock的区别与使用

***//***//***//***//***/lock():获取锁,如果锁被暂用则一直等待unlock():释放锁tryLock(): 注意返回类型是boolean,如果获取锁的时候锁被占用就返回false,否则返回truetryLock(long time, TimeUnit unit):比起tryLock()就是给了一个时间期限,保证等待参数时间。

2024-07-10 09:49:32 996

原创 【转】-Java实现生产者和消费者的5种方式

生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。现在用四种方式来实现生产者消费者模型。

2024-07-10 09:44:18 903

原创 【转】-Java并发编程:阻塞队列

注意,非阻塞队列中的方法都没有进行同步措施。前面谈到了非阻塞队列和阻塞队列中常用的方法,下面来探讨阻塞队列的实现原理,本文以ArrayBlockingQueue为例,其他阻塞队列实现原理可能和ArrayBlockingQueue有一些差别,但是大体思路应该类似,有兴趣的朋友可自行查看其他阻塞队列的实现源码。本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。

2024-07-10 09:43:10 932

原创 【转】-Java 中的阻塞队列

阻塞队列()是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。方法\处理方式抛出异常返回特殊值一直阻塞超时退出插入方法add(e)offer(e)put(e)移除方法remove()poll()take()检查方法。

2024-07-10 09:42:13 717

原创 【转】-Java并发之CyclicBarrier

但是其他运动员都领会的裁判正确的指令,剩余的运动员在起跑线上无限地等待下去,并且裁判看到运动员没有到齐,也不会打发令枪。屏障是多线程各自做自己的工作,如果某一线程完成了工作,就等待在屏障那里,直到其他线程的工作都完成了,再一起做别的事。运动员在赛跑的时候都会准备一段时间,当裁判发现所有的运动员都准备完毕的时候,就举起发令枪,比赛开始。相反,它跟条件变量一样,是用来协同多线程一起工作的。,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入。

2024-07-10 09:41:20 713

原创 【转】-CountDownLatch详解

CountDownLatch中count down是倒数的意思,latch则是门闩的含义。整体含义可以理解为倒数的门栓,似乎有一点“三二一,芝麻开门”的感觉。CountDownLatch的作用也是如此,在构造CountDownLatch的时候需要传入一个整数n,在这个整数“倒数”到0之前,主线程需要等待在门口,而这个“倒数”过程则是由各个执行线程驱动的,每个线程执行完一个任务“倒数”一次。

2024-07-10 09:40:07 632

原创 【转】-Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore该博客转载自​**Matrix海 子​的​Java并发编程:CountDownLatch、CyclicBarrier和Semaphore**在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。  以下是本文目录大纲:  一.CountDownLatch用法  二.C

2024-07-10 09:38:24 680

原创 【转】-java多线程读写锁ReadWriteLock

读写锁分为读锁和写锁,多个读锁之间是不需要互斥的(读操作不会改变数据,如果上了锁,反而会影响效率),写锁和写锁之间需要互斥,也就是说,如果只是读数据,就可以多个线程同时读,但是如果你要写数据,就必须互斥,使得同一时刻只有一个线程在操作。

2024-07-10 09:37:20 326

原创 【转】-Java锁解析

Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。本文Java中常用的锁以及常见的锁的概念进行了基本介绍,并从源码以及实际应用的角度进行了对比分析。

2024-07-10 09:36:11 618

原创 【转】-并发下的集合

有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁。在读多写少的高并发环境中,使用 CopyOnWriteArrayList 可以提高系统的性能,但是,在写多读少的场合,CopyOnWriteArrayList 的性能可能不如 Vector。类的源码可知,在add操作上,是使用了Lock锁做了同步处理,内部拷贝了原数组,并在新数组上进行添加操作,最后将新数组替换掉旧数组。

2024-07-10 09:34:38 867

原创 【转】-Java CAS操作的ABA问题

比较并交换(CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。CAS操作基于CPU提供的原子操作指令实现,各个编译器根据这个特点实现了各自的原子操作函数。来源维基百科:C语言:由GNU提供了对应的__sync系列函数完成原子操作。Windows:通过WindowsAPI实现了。C++ 11:STL提供了atomic系列函数。提供了系列函数。C#:通过方法实现。

2024-07-10 09:33:03 558

原创 【转】-Java CAS 原理剖析

CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。,乐观锁的含义就是假设没有发生冲突,那么我正好可以进行某项操作,如果要是发生冲突呢,那我就重试直到成功,乐观锁最常见的就是。

2024-07-10 09:31:37 509

原创 volatile关键字解析

然后线程2对变量进行自增操作,线程2也去读取变量inc的原始值,由于线程1只是对变量inc进行读取操作,而没有对变量进行修改操作,所以不会导致线程2的工作内存中缓存变量inc的缓存行无效,所以线程2会直接去主存读取inc的值,发现inc的值时10,然后进行加1操作,并把11写入工作内存,最后写入主存。也就是,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。

2024-07-10 09:30:23 610

原创 nginx部署vue项目

此文档主要介绍如何使用nginx部署vue等前端项目,并配置SSL证书部署的前提下是服务器已经安装nginx,前端项目已打包成静态文件。

2024-07-09 17:59:25 345

原创 【转】-Java反射

我想这篇博客如果你认真的看完,肯定会有收获的!最后,因为内容较多,知识点较多,如果文中有任何错误或欠妥的地方,还望指正。欢迎留言交流!

2024-07-09 17:58:34 294

原创 转-OAuth2.0 原理流程及其单点登录和权限控制

传统的多点登录系统中,每个站点都实现了本站专用的帐号数据库和登录模块。各站点的登录状态相互不认可,各站点需要逐一手工登录。认证(authentication): 验证用户的身份;授权(authorization): 验证用户的访问权限。

2024-07-09 17:57:16 679

原创 手写MyBatis

本篇博客,将使用JDK动态代理、注解、反射等技术,编写一个最简单的MyBatis,可基本实现对象的增删查改/*** @Descriiption 删除注解**/这次的编写简单的mybatis,让我对java基础有了进一步的了解,明白了反射、注解的厉害之处,也了解了JDK动态代理设计模式,总之,收获很大!!源码路径。

2024-07-09 17:55:56 438

原创 OAuth2.0登录的四种方式

第一步,A 应用在命令行向 B 发出请求。

2024-07-09 17:49:13 1117

原创 git提交emoji指南

【代码】git提交emoji指南。

2024-07-09 17:47:26 250

原创 swagger注解文档

作用于类,放置于 controller 的一个类上,标志这个类是 swagger 资源。作用于方法之上,解释请求参数里边添加@ApiImplicitParam()注解。作用于方法之上,用户表示一个 http 的请求。作用于类,对类进行说明,用于实体类接收或者返回。作用于实体类,用于实体类中某个字段。作用于方法,用于参数字段的说明。

2024-07-09 17:46:35 251

原创 各种软件启动方式

【代码】各种软件启动方式。

2024-07-09 17:45:18 404

原创 gson无法正常将时间戳转化成date

添加一个long转date的解析器。

2024-07-09 17:44:12 204

原创 java+selenium+autoIt 实现下载(打印)功能

因为业务需求,需要把一个html网页转化成PDF,本来准备考虑用iText来对html转为PDF,但是我们已经拥有html的网页了,用iText感觉太麻烦,然后又找了一个第三方html->pdf,结果需要收费等一些其它原因,最终决定采用selenium+chrome+java+autol对网页进行导出PDF。selenium是一个自动化测试框架,可以模拟用户的浏览器操作,可以和几门热门的语言相结合,例如java,python,接下来我将使用selenuim来操作chrome来模拟用户将网页保存为PDF。

2024-07-09 17:41:15 750

原创 设计模式之策略模式和工厂模式的区别

本篇博客转载于策略模式与工厂模式比较。

2024-07-09 17:39:33 614

原创 设计模式之工厂模式

最近在看《大话设计模式》这本书,虽然大学也学过设计模式,但是那时候还没有进行过开发,那么多的设计模式,看了也不知道用在哪种场景,最近又突然有时间了,就想着重新理解一遍软件的设计模式,本篇博客的原地址为runoob工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

2024-07-09 17:38:34 711

传智播客javase全套笔记

传智播客全套笔记,挺全的,基本上所有java的知识点都有

2017-07-20

w3cschoo离线文档

W3Cschool离线手册,与其一起上传的还有JDK1.8谷歌翻译版帮助文档,JDK1.8英文原版文档,jdk1.6帮助文档,如果大家需要的话,可以到我上传的资源里边找,个人觉得使用JDK1.8谷歌翻译加原版最好。w3cschool离线手册基本包含了html+css+js+jquery等等前端知识。另jdk1.8谷歌翻译和英文原版皆来自http://blog.466dd.com/posts/21004/,感谢这位大神的贡献

2017-07-20

JDK1.8谷歌翻译版中文文档

JDK1.8谷歌翻译帮助文档,与其一起上传的还有JDK1.6帮助文档,JDK1.8英文原版文档,W3Cschool离线手册等帮助文档,如果大家需要的话,可以到我上传的资源里边找,个人觉得使用JDK1.8谷歌翻译加原版最好。w3cschool离线手册基本包含了html+css+js+jquery等等前端知识。另jdk1.8谷歌翻译和英文原版皆来自http://blog.466dd.com/posts/21004/,感谢这位大神的贡献

2017-07-20

JDK1.8英文帮助文档

JDK1.8英文帮助文档,与其一起上传的还有JDK1.8谷歌翻译版帮助文档,JDK1.6帮助文档,W3Cschool离线手册等帮助文档,如果大家需要的话,可以到我上传的资源里边找,个人觉得使用JDK1.8谷歌翻译加原版最好。w3cschool离线手册基本包含了html+css+js+jquery等等前端知识。另jdk1.8谷歌翻译和英文原版皆来自http://blog.466dd.com/posts/21004/,感谢这位大神的贡献

2017-07-20

银行家算法

前段时间要做计算机操作系统的实验,于是在网上找了一些银行家算法的代码,发现网上很多代码都不能运行,而且有些功能很简单,于是参照网上的代码自己花了一个下午写了下,银行家算法的基本功能都能实现,里边还包含一份演示的PPT,程序的语言是Java。

2016-06-03

银行家算法Java

银行家算法Java

2016-05-31

贪吃蛇Java

贪吃蛇小游戏,具有图形界面,食物的种类分为4种,具有加速、减速、吃食和减短功能,可以调节游戏的难度,已有关卡三个。

2016-05-31

学生成绩管理系统

2016-05-31

学生成绩管理系统C++

学生成绩管理系统C++

2016-05-31

旅游网页设计

旅游网页设计

2016-05-31

通讯录管理系统C++

通讯录管理系统C++

2016-05-31

学生成绩管理系统C语言

学生成绩管理系统C语言

2016-05-31

万年历C语言

万年历C语言

2016-05-31

银行家算法PPT

2016-05-31

mysql-connector-java-5.1.22

2016-05-31

银行家算法(C++代码)

银行家算法(C++代码)

2016-05-17

空空如也

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

TA关注的人

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