![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 62
蛇皮皮蛋
求大佬笔下留情……
展开
-
SpirngBoot集成验证码生成EasyCaptcha
POM依赖 <dependency> <groupId>com.github.whvcse</groupId> <artifactId>easy-captcha</artifactId> <version>1.6.2</version> </dependency>DEMOimport javax.原创 2021-04-30 22:26:59 · 801 阅读 · 1 评论 -
RocketMQ消息存储篇(二)
RocketMQ存储文件RocketMQ存储路径为${ROCKET_HOME}/store原创 2021-04-29 22:15:40 · 1124 阅读 · 0 评论 -
RocketMQ消息存储篇(一)
存储概要设计RocketMQ主要存储的文件包括Comitlog文件、ConsumeQueue文件、IndexFile文件。RocketMQ将所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件,尽最大的能力确保消息发送的高性能与高吞吐量。但由于消息中间件一般是基于消息主题的订阅机制,这样便给按照消息主题检索消息带来了极大的不便。为了提高消息消费的效率,RocketMQ引入了ConsumeQueue消息队列文件,每个消息主题包含多个消息消费队列,每一个消息队列有一个消息文件。IndexFile索引文原创 2021-03-05 15:20:40 · 1715 阅读 · 1 评论 -
求两个字符串的最长公共子串(动态规划)
最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。public class A { private static int getCommonStrLength(String str1, String str2) { //创建一个二维数组大小,行列为str1.length()+1,str2.length() //这一步主要是为了生成网格数组 int len1 = str原创 2021-03-05 10:55:40 · 3564 阅读 · 1 评论 -
算法——归并排序
归并排序算法是基于归并(Merge)操作的一种有效排序算法,是采用分治法(Divide and Conquer)的典型应用。基本思想:归并排序的原理是先将原始数组分解为多个子序列,然后对每个子序列进行排序,最后将排好序的子序列合并起来。/** * @Classname A * @Description TODO * @Date 2020/12/30 11:15 * @Created zzf */public class A { public static void main原创 2020-12-30 14:40:53 · 1080 阅读 · 0 评论 -
算法——插入排序
插入排序的基本思路是将一个数据插入已经排好序的序列中,从而得到一个新的有序数据,该算法适用于少量数据的排序,是稳定的排序方法。代码: for (int i = 1; i < a.length; i++) { //插入的数 int val = a[i]; //被插入的位置和前面一个数比较 int index = i - 1; //只要index值>=0原创 2020-12-29 16:45:27 · 1007 阅读 · 0 评论 -
使用Mybatis中分表插件shardbatis
1.POM依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </depen...原创 2020-05-06 17:02:39 · 1928 阅读 · 0 评论 -
Condition的实现分析
对比Object的监视器方法和Condition接口对比项 Object Monitor Methods Condition 前置条件 获取对象的锁 调用Lock.lock() 调用Lock.newCondition()获取Condition对象 调用方式 直接调用,如:object.wait() 直接调用,如:conditi...原创 2019-04-02 18:29:55 · 3948 阅读 · 0 评论 -
队列同步器(AbstractQueuedSynchronizer)(一)
队列同步器AbstractQueuedSynchronizer是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。队列同步器的接口 同步器的设计是基于模板方法模式的,也就是说,使用者需要继承同步器并重写指定的方法,随后将同步器组合在自定义同步组件的实现中,并调用同步器提供的模板方法,而这些模板方法...原创 2019-03-28 16:05:09 · 4102 阅读 · 0 评论 -
重入锁、读写锁实现
前置知识AQS:https://blog.csdn.net/qq_37598011/article/details/88871352重入锁实现重入重进入是指任意线程在获取到锁之后能够再次获取该锁而不会被锁所阻塞,该特性需要解决以下两个问题。线程再次获取锁:锁需要去识别获取锁的线程是否为当前占据锁的线程,如果是,则再次成功获取。 锁的最终释放:线程重复n次获取了锁,随后在第n次释放...原创 2019-04-01 15:48:44 · 4391 阅读 · 1 评论 -
队列同步器(AbstractQueuedSynchronizer)(二)
独占式同步状态获取与释放获取 通过调用同步器的acquire(int arg)方法可以获取同步状态,该方法对中断不敏感,也就是由于线程获取同步状态失败后进入同步队列中,后续对线程进行中断操作时,线程不会从同 步队列中移出。 public final void acquire(int arg) { if (!tryAcquire(arg) &&...原创 2019-03-29 15:51:00 · 4031 阅读 · 0 评论 -
Spring Boot启动原理解析(执行流程篇)
SpringApplication.run @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); ...原创 2019-06-06 14:49:09 · 7031 阅读 · 0 评论 -
RPC架构
RPC的全称是Remote Procedure Call,它是一种进程间通信方式。允许像调用本地服务一样调用远程服务,它的具体实现可以不同,如Spring的HTTP Invoker,Facebook的Thrift二进制私有协议通信。它在80年代由Bruce Jay Nelson提出,它的定义如下:简单:RPC概念的语义十分清晰以及简单,这样建立分布式计算就更容易。 高效:过程调用...原创 2019-03-15 21:03:25 · 3948 阅读 · 0 评论 -
Spring源码分析(三)(@Autowired实现)
依赖注入的实现:https://blog.csdn.net/qq_37598011/article/details/84451591 在自动装配中,不需要对Bean属性做显示的依赖注入声明只需要配置autowiring属性,它具体的实现也在依赖注入中的populateBean方法中,Ioc容器会根据这个属性的配置使用反射自动查找属性的类型或者名称,然后根据属性的类型或者名称自动匹配Io...原创 2019-05-02 13:20:34 · 5007 阅读 · 1 评论 -
CopyOnWriteArrayList 实现原理
CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全的ArrayList,写操作通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的容器还有CopyOnWriteSet,不过在CopyOnWriteSet中任然是调用的是CopyOnWriteArrayList。实现原理 ...原创 2019-05-21 12:40:06 · 4151 阅读 · 0 评论 -
Spring Boot启动原理解析(注解篇)
SpringBoot内置的自动配置使开发变得很方便,所以这次就来看看它的启动源码和它的自动化配置的实现原理。 启动类:@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run...原创 2019-06-05 23:10:57 · 4800 阅读 · 0 评论 -
HttpClient简单使用
导入pom文件 <!--HttpClient--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> ...原创 2019-07-16 16:21:20 · 4093 阅读 · 0 评论 -
resolution will not be reattempted until the update interval of XX has elapsed or updates are……
mvn clean install 打包aliyun-java-sdk-dybaseapi:jar是出现下面的异常:问题是本地仓库有该jar包,但是中央仓库没有该包,mvn编译时一直出现问题。解决方法找到你的这个包的位置,一般是:C:\Users\……\.m2\repository\……然后编辑_remote.repositories文件:改为:#NOTE: Th...原创 2019-09-06 17:49:40 · 7677 阅读 · 1 评论 -
前端/后端(Java)的AES加密和解密
前端代码<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head> <meta http-equiv="Content-Type" content="text/html...原创 2019-09-18 14:27:45 · 4374 阅读 · 1 评论 -
JDK并发包(线程池)(2)
在线程池中寻找堆栈首先来看下这段代码package thread.pool;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class Demo { p...原创 2018-08-08 22:59:00 · 4026 阅读 · 0 评论 -
JVM性能监控及处理
JDK命令行工具JDK监控和故障处理工具 jps JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程 jstat JVM Statistics Monitoring Tool,用于收集 HotSpot 虚拟机各方面的运行数据 jinfo Configuration Info for Java,显示虚拟机配置信息 jm...原创 2019-03-11 16:13:40 · 4012 阅读 · 0 评论 -
JVM垃圾收集算法
判断一个对象是否能被回收有两种方式:引用计数算法:给对象添加一个引用计数器,每当有地方引用它时,计数器加1;当引用失效时,计数器减1。任何时刻计数器为0的对象就是不能再被使用的。(它无法解决对象之间循环引用的问题。) 可达性分析算法:在主流的程序语言的实现中,都是通过可达性分析来判断对象是否存活。这个算法的基本思想就是通过一系列的“GC Roots”的对象作为起始点,从这些节点开始向下搜索,...原创 2019-03-09 14:01:52 · 3802 阅读 · 0 评论 -
Spring Cloud Eureka(服务治理)(1)
Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能。1.服务治理服务治理是微服务架构中最核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现。服务注册:在服务治理框架中通常会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主...原创 2018-09-02 22:27:02 · 4387 阅读 · 0 评论 -
Spring Cloud Eureka(服务治理)(3)
配置详解在 Eureka 的服务治理体系中,主要分为服务端和客户端两个不同的角色,服务端为服务注册中心,而客户端为各个提供接口的微服务应用。当我们构建了高可用的注册中心之后,该集群中所有的微服务应用和后续将要介绍的一些基础类应用(如配置中心、API网关等)都可以视为该体系下的一个微服务(Eureka客户端)。服务注册中心也一样,只是高可用环境下的服务注册中心除了服务端之外,还为集群中的其他客户...原创 2018-09-05 01:04:49 · 3992 阅读 · 0 评论 -
Future模式
Future模式是多线程开发中常见的设计模式,它的核心思想是异步调用。对于Future模式来说,它无法立即返回你需要的数据,但是它会返回一个契约,将来你可以凭借这个契约去获取你需要的信息。这是传统的同步方法,调用一段耗时的程序。当客户端发出call请求,这个请求需要很长的一段时间才会返回,客户端一直在等待直到数据返回随后再进行其他任务的处理。而使用Future模式:这个模型展示...原创 2018-08-23 22:57:42 · 13093 阅读 · 0 评论 -
函数式编程(基础部分)
函数式编程是Java1.8新增内容:1.FunctionalInterface注释Java8提出了函数式接口的概念。简单来说就是只定义了单一抽象方法的接口。比如下面的定义:package function;@FunctionalInterfacepublic interface Functions { void handleFunctions(int i);}注释Fun...原创 2018-08-28 00:13:30 · 5169 阅读 · 0 评论 -
ThreadLocal使用及原理
1.ThreadLocal的简单使用从ThreadLocal的名字上可以看到,这是个线程的局部变量。也就是说只有当前线程可以访问,既然是只有当前线程池可以访问的数据自然是线程安全的。package thread;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Da...原创 2018-08-13 00:00:37 · 12317 阅读 · 0 评论 -
JDK并发包(线程池)(1)
1.什么是线程池为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用。如同数据库连接池一样当系统使用数据库时不是创建一个新的连接,而是从连接池中获取一个可用的连接,反之当需要关闭连接是,并不是真的进行关闭连接,而是将这个连接返还给连接池。通过这种方式,可以节约很多创建和销毁对象的时间。线程池也是类似的概念。线程池中总有几个活跃的线程,当你需要使用线程时,可以从池中拿一个空闲线程,...原创 2018-08-07 22:17:44 · 4185 阅读 · 0 评论 -
JDK并发包(2)
1.允许多个线程同时访问:信号量(Semaphore)从广义的来说,信号量是对锁的扩展。无论是内部锁synchronized还是重入锁ReentrantLock一次都只允许一个线程访问一个资源,而信号量可以指定多个线程,同时访问某一个资源。信号量主要提供以下两个构造器:public Semaphore(int permits);public Semaphore(int permits,...原创 2018-08-02 23:54:25 · 4050 阅读 · 0 评论 -
JDK并发包(3)
1.循环栅栏:CyclicBarrierCyclicBarrier是另一种多线程并发控制实用工具。它和CountDownLatch非常类似,它也可以实现线程间的计数等待,而且他的功能比CountDownLatch更加复杂强大。假如将计数器设为10,那么在凑足10个线程后,计数器会归零,然后接着凑下一批10个线程。这就是它循环栅栏的内在含义。CyclicBarrier可以接受一个参数作为ba...原创 2018-08-03 22:00:31 · 4052 阅读 · 0 评论 -
Spring Cloud Eureka(服务治理)(2)
1.服务发现与消费下面来尝试构建一个服务消费者,它主要完成两个目标,发现服务以及消费服务。其中服务发现的任务由Eureka的客户端完成,而服务消费者的任务由Ribbon完成。Ribbon是一个基于HTTP和TCP的客户端负载均衡器,它可以在通过客户端中配置的ribbonServerList的服务端列表去轮询访问以达到负载均衡的作用。当Ribbon与Eureka联合使用时,Ribbon的服务实例...原创 2018-09-04 00:25:08 · 4093 阅读 · 0 评论 -
Java动态代理实现
在java的动态代理机制中,有两个重要的类和接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。下面先贴上代码:首先需要一个接口:/* * @author zzf * @date 2018年12月5日 上午10:11:34 */public interface Peop...原创 2018-12-05 16:42:07 · 4110 阅读 · 0 评论 -
OutOfMemoryError异常
1.Java堆溢出代码如下:import java.util.ArrayList;import java.util.List;/* * @author zzf * @date 2019年3月6日 下午2:48:03 */public class HeapOOM { static class OOMObject{} public static void main(...原创 2019-03-06 17:13:37 · 6133 阅读 · 0 评论 -
JDK1.8 JVM内存划分
首先先来看看1.7和1.8的时候JVM的划分是什么样的:(原图地址:https://www.processon.com/view/link/5b61ea2ae4b0555b39cfa842) 从这张图可以看到JDK1.8和JDK1.7相比最大的区别是:元空间区取代了永久代,永久代原本主要存放Class和Meta的信息。而元空间的本质和永久代类似,都是对JVM规范中方法区的实现。不...原创 2019-03-05 16:21:47 · 13817 阅读 · 2 评论 -
RabbitMQ(客户端开发)
连接 RabbitMQ常用的连接RabbitMQ的方式有两种: ConnectionFactory factory=new ConnectionFactory(); factory.setHost(IP_ADDRESS); factory.setPort(PORT) ; factory.setUsername( "Spring...原创 2019-02-28 00:45:08 · 5676 阅读 · 0 评论 -
视频截取某一帧(Linux/Windows)
预备条件:首先在服务器上执行如下命令,安装必要文件!yum install libXv*yum install libXv.so.1pom文件如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://...原创 2019-01-16 16:06:38 · 6444 阅读 · 7 评论 -
Jsoup+HtmlUnit获取懒加载数据
需要的包: <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> <version>1.16.20原创 2019-01-15 17:47:51 · 6866 阅读 · 1 评论 -
图片转字符画&图片转灰度图
import java.awt.image.BufferedImage;import java.io.BufferedOutputStream;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java....原创 2019-01-15 10:23:25 · 4678 阅读 · 3 评论 -
OpenCV+Java+JFrame视频/摄像头人脸检测器
配置部分请参照前一篇博客:https://blog.csdn.net/qq_37598011/article/details/86521560pom文件如下: <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg</...原创 2019-01-18 13:07:35 · 5833 阅读 · 0 评论 -
字符串转点阵
话不多说贴上代码:import java.io.BufferedOutputStream;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import...原创 2019-01-10 17:22:39 · 5945 阅读 · 3 评论