- 博客(73)
- 资源 (10)
- 收藏
- 关注
原创 微信小程序 发送消息 Token校验失败,请检查确认
开发者通过检验 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数内容,则接入生效,成为开发者成功,否则接入失败。如果使用的是springboot,则返回的string总是这样带引号这样的。以上即为本文全部内容,完。如上图,文档中说的是。搞了一阵子,可以了。
2024-04-15 01:11:28 201 1
原创 使用VNP时 本地服务/Dbeaver 无法连接数据库
在家使用VPN连接,启动本地Eclipse 的springboot 服务时,无法正常连接数据库。解决方法: 在启动项配置中增加。
2024-04-01 09:11:05 201 1
原创 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
新建项目时,出现报错:Communications link failure
2023-11-05 12:27:37 157
原创 Could not find acceptable representation (406 Not Acceptable)
controller 返回对象没有加 @Data 注解。也就是没有get、set 方法。
2023-07-26 16:56:16 288
原创 桥接模式——连接抽象维度和实现维度
桥接模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它是将两个不同的维度建立联系。这两个维度通常是指:抽象维度和实现维度。
2023-07-18 16:54:24 271
原创 spring(不是springboot)集成apllo方案
现在到处都是基于 springboot 的微服务项目。不巧手头碰到了一个 spring 的项目,打war包直接放到tomcat中启动的。现在要将apollo集成进来,要求 Access Key 不可以放在properties 配置文件中,要统一使用apollo来管理。其中为apollo相关配置内容。① 在src/main/resource 下新建 META-INF 文件夹,在其中添加 app.properties 文件。文件内容为:app.id=对应的appid即可。
2023-05-24 11:03:57 1136
原创 Dubbo 的 类似curl 调用
cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。我们都知道,在服务器端,可以使用 curl 来进行接口的调用,以判断接口是否连通、是否响应正常。那有什么办法,可以使得调用dubbo协议接口的时候,像使用cURL一样容易吗?假如的你服务器是linux,ip是10.188.12.10;可是,如果我使用的是dubb协议,cURL 就不支持了。
2023-04-27 11:14:41 926
原创 java.lang.TypeNotPresentException: Type org.springframework.boot.maven.RepackageMojo not present
org.codehaus.plexus.component.repository.exception.ComponentLookupException:org/springframework/boot/maven/RepackageMojo是由最新版本的Java Runtime编译的(类文件版本61.0),此版本的Java Runtime只识别52.0以下的类文件版本。我的pom.xml中 spring-boot-maven-plugin并没有设置version。一种是把JDK换成17,这个不考虑了。
2023-04-12 15:10:11 5287
原创 4个步骤实现Java版的TTS(文字转语音)
TTS是Text To Speech的缩写,即“从文本到语音”,让机器能够说话。微软自带TTS(Text To Speech) 语音引擎,可以将文本转换成语音播报。现在通过Java程序(jacob包),利用Windows自带的TTS实现语言的播报。
2023-04-07 14:28:51 5749 1
原创 Java线程基础(创建、停止、状态切换、基本操作、守护线程、上下文切换)
Java 进程中每一个线程对应着一个Thread实例。线程的描述信息在Thread的实例属性中得到保存,供JVM进行线程管理和调度时使用。虽然一个进程可以有很多个线程,但是在一个CPU内核上,同一时刻只能有一个线程是正在执行的,该线程被叫做当前线程。
2023-04-01 14:51:25 281
原创 抽象工厂模式
抽象工厂(AbstractFactory)模式的定义:是一种为访问类提供一个创建一组关联或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。使用抽象工厂模式除了具有工厂方法模式的优点外,其他主要优点如下:▷ 可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。
2023-03-08 21:28:30 291
原创 工厂方法模式
工厂方法(Factory Method )模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。我们把被创建的对象成为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”,它不属于GoF的23中经典设计模式,它的缺点是增加新产品时会违背“开闭原则”。
2023-03-07 23:19:55 109
原创 ReentrantLock 实现原理
ReentrantLock 中定义了一个Sync的同步类,它有两个实现,一个是FairSync(公平同步),一个是NonfairSync(非公平同步),两者分别代表 ReentrantLock 中锁竞争的公平和非公平特性。此后,其他线程再调用tryAcquire()方法时就会失败,直到t1线程调用unlock()方法且 state=0之后,其他线程才有机会获得锁。如果线程t1调用lock()方法,则实际上会调用tryAcquire()方法将 state通过CAS修改为1。
2023-03-06 23:55:07 87
原创 Java多线程中的CAS
CASCompareAndSwap,或者 CompareAndSet,是一个能够比较和替换的方法。这个方法能够在多线程环境下保证对一个共享变量进行修改时的原子性不变。通常,CAS方法会传递三个参数,● 第一个参数V表示要更新的变量;● 第二个参数E表示期望值;● 第三个参数U表示更新后的值。更新的方式是:如果V==E ,表示预期值和实际值相等,则将 V修改成U 并返回 true,否则修改失败返回false。开始V==E?更新变量V并设置值为U返回true。
2023-03-05 23:33:57 651
原创 java.util.concurrent 包中的三把锁(ReentrantLock、ReentrantReadWriteLock、StampedLock)
如果某个线程已经获得了锁资源,该线程后续再去抢占相同的锁时,不需要再加锁,只需要记录重入次数。上述代码中,ReentrantLockDemo 有一个add()方法,对 非原子性的 num++ 操作加了锁,能够保证 num++ 的线程安全。其实我们想做的是:允许多个线程同时调用查询方法,但是如果有一个线程在调用写入方法,那么这时其他线程不论是调用查询还是写入方法,都要阻塞。为了解决这个问题,引入来StampedLock,它优化了读锁,写锁的访问,其实它是提供了一种乐观锁策略。
2023-03-04 23:45:00 541
原创 数据结构的一些基础概念
是指一个数学模型及定义在该模型上的一组操作。:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据项是数据不可分割的最小单位。:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理。是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。:是相互之间存在一种或多种特定关系的数据元素的集合。:是性质相同的数据元素的集合,是数据的子集。是指数据的逻辑结构在计算机中的存储形式。是指数据对象中数据元素之间的相互关系。
2023-03-03 22:50:45 727
原创 Volatile 解决线程可见性的问题
Synchronized的释放,会将工作内存中的操作同步到主内存。这是因为在hotspot的server端虚拟机中,做了深度优化(client版本就没有这个问题)。加了一个Synchronized的锁,会发现线程开启执行后,会停下来。说明while循环仍在执行,那么stop的值仍为false,说明。而IO操作会涉及到与内存、硬盘的交互,它会阻塞线程。就会发现 while中的stop生效了,线程会停下来。volatile可以禁止JIT的优化过程。执行后,没有任何输出。加了IO操作,也会使线程停下来。
2023-03-02 07:27:14 258 1
原创 如何将类变量在不同线程间进行隔离?
ThreadLocal中的每一个线程,都会存在一个ThreadLocalMap的对象,这个对象是个集合,这个集合里面存储的是key-value形式的数据,key代表的是我们定义的ThreadLocal 对象,value代表的是我要存储在当前线程里的数据。main方法中,我们定义了一个线程数组,每个线程都获取number的值并且+10后打印。② 线程的拿到的值也是相互干扰后的,是被其他线程修改过的;可以看到,每个线程获得的值都是0,设置后都为10。这里返回的值,是每个线程独有的。
2023-03-01 23:35:34 139
原创 线程的通信 ( wait / notify)
下面我们使用生产者/消费者的典型场景,来描述 wait/notify 的通信过程。wait / notify 本质上是线程的通信。
2023-02-25 23:56:29 78
原创 偏向锁、轻量级锁、自旋锁、重量级锁,它们都是什么?有什么关联
加锁会带来性能开销,Java 1.6之前只有重量级锁。上图讲述了两个线程ThreadA和ThreadB两个线程在争抢锁,ThreadA进入来临界区,可以执行资源代码;ThreadB没有抢到锁,进入BLOCKED队列,等待唤醒。当ThreadA执行完后,释放锁,去唤醒ThreadB。这是重量级锁的流程。因为它会带来阻塞和唤醒,会带来开销,所以叫“重量级”锁。Java 1.6 之后做了优化,出现了“轻量级锁 和 偏向锁”,能够减少重量级锁的获得和释放的性能开销。
2023-02-25 03:41:22 742
原创 ERROR: transport error 202: bind failed: Address already in use
Tomcat关闭时报错:ERROR: transport error 202: bind failed: Address already in use
2023-02-21 12:58:29 970
原创 Java线程的6 种状态
当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,某个线程拿到对象锁,这些线程也将进入就绪状态。处于这种状态的线程不会被分配CPU执行时间,不过无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒。处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。当前线程时间片用完了,调用当前线程的yield()方法,当前线程进入就绪状态。调用线程的start()方法,此线程进入就绪状态。锁池里的线程拿到对象锁后,进入就绪状态。
2023-02-20 22:42:58 691
原创 为什么启动一个线程不用run()方法,而是用start()方法
Thread的 start 方法会调用一个native的start0() 方法,start0会调用操作系统底层的指令去创建一个线程,并且启动线程。操作系统会调用JVM的run,最终调回Java Thread的run方法。
2023-02-20 21:58:05 4421
原创 无法将“jps”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
1.jps : 无法将“jps”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。2.‘jps’ 不是内部或外部命令,也不是可运行的程序。
2023-02-20 00:30:39 1831
解决springboot 中 dubbo配置的报错问题 dubbo XML Schema 文件
2019-03-09
springCloud 入门文档(推荐)
2017-12-15
jenkins权威指南
2017-09-13
FreeMarker 操作手册
2017-09-13
使用AngularJS开发下一代WEB应用
2017-09-13
java源码反编译/.class文件转.java文件
2009-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人