java
文章平均质量分 56
earthhour
这个作者很懒,什么都没留下…
展开
-
【转载】IDEA如何将Git回退到某个版本
网上资料大多是"reset current branch to here"之后,选hard模式,然后强制push的方式。虽然能将本地及远程仓库都恢复到某次提交,但是不会产生commit记录,导致在该分支共同开发的其他人下次提交时,会把你已经回退的代码再次提交上去,你的回退失败了。后来,按照这篇文章的步骤操作,测试有效,因为可以产生一条提交记录,这样别人同步代码时会同步下来你的最新提交记录。IDEA回退Git版本_静言多思的博客-CSDN博客_idea回退git版本1.通过IDEA查看Git历史记原创 2022-04-24 10:51:23 · 9323 阅读 · 3 评论 -
方法屏蔽之传统方式
/** * 传统方式隐藏类中的method */public class MethodHide { // 这个接口职责不分明 interface Management { void read(); void write(); String state(); void stop(); } // ====================拆分成下面两个接口 // 操作 int.原创 2021-02-28 12:41:16 · 337 阅读 · 0 评论 -
方法屏蔽之lambda方式
利用lambda特性,隐藏类中的method,有两个优点:* 1.屏蔽无关方法* 2.被调用方法对调用方彻底透明import java.io.Closeable;import java.io.IOException;import java.util.Arrays;import java.util.Iterator;import java.util.List;public class MethodHideWithLambda { static class F { .原创 2021-02-28 12:01:15 · 262 阅读 · 0 评论 -
线程被唤醒后还能从上次被阻塞的位置继续执行,原理是什么?
因为程序计数器。JVM的多线程是通过CPU时间片轮转(即线程轮流切换并分配处理器执行时间)算法来实现的。也就是说,某个线程在执行过程中可能会因为时间片耗尽而被挂起,而另一个线程获取到时间片开始执行。当被挂起的线程重新获取到时间片的时候,它要想从被挂起的地方继续执行,就必须知道它上次执行到哪个位置。在JVM中,通过程序计数器来记录某个线程的字节码执行位置。因此,程序计数器是具备线程隔离的特性,也就是说,每个线程工作时都有属于自己的独立计数器。...原创 2021-02-13 21:45:41 · 759 阅读 · 0 评论 -
手写模拟Thread与Runnable的策略模式
假设我们现在需要计算一个员工的个人所得税,于是我们写了如下工具类,传入基本工资和奖金即可调用calculate得出应纳税额。税率计算类,模拟的是Thread类。/** * 税率计算类。模拟Thread类的“模板方法模式” */public class TaxCalculator { //工资 private final double salary; //奖金 private final double bonus; //构造器 public T原创 2020-11-21 17:33:20 · 322 阅读 · 0 评论 -
jdk1.8指定垃圾收集器
Java中有四种不同的回收算法,对应的启动参数为–XX:+UseSerialGC–XX:+UseParallelGC–XX:+UseParallelOldGC–XX:+UseConcMarkSweepGC原创 2020-11-07 17:21:38 · 1312 阅读 · 0 评论 -
JDK8的Parallel GC with 4 thread(s)的真正含义
JDK1.8服务器环境下,使用jmap -heap 21248查看堆时,能够看到里面有这样的内容using thread-local object allocation.Parallel GC with 4 thread(s)Parallel GC with 4 thread(s)的真正含义是:垃圾回收器新生代是Parallel Scavenge,老年代是Parallel Old。这也是JDK8在Server模式下的默认垃圾回收器。此时,通过命令行查看:java -XX:+PrintC原创 2020-11-07 17:12:58 · 1746 阅读 · 0 评论 -
Java下载https图片报错:unable to find valid certification path to requested target
图片是上传到阿里云oss,通过cdn访问,类似:https://cdn.lxxx.com/123456562456789519.jpg使用Java代码读取此图片地址时,报错:unable to find valid certification path to requested target此问题产生的原因是因为我们运维配置证书时只使用了签发的证书,java客户端无法找到可信任的上级证书,所以报错。解决方法也很简单,把中级证书、根证书附加到签发证书后面就可以了。参考:https://blog.5原创 2020-10-28 18:15:12 · 881 阅读 · 1 评论 -
jvm常用命令行工具使用
一、jps(jvm process status tool) 虚拟机进程工具参数 作用 -q 忽略主类的名称,只输出pid -m 输出启动类main函数的参数 -l 输出主类名,如果进程执行的为jar,则输出jar路径 -v 输出具体进程启动时jvm参数 1.命名格式jps [options] pid2.常用方式jps -lv: 输出启动类名与启动时jvm参数,可以方便的看到各个tomcat的自定义参数配置 jps -lv |grep ...原创 2020-08-03 15:48:12 · 591 阅读 · 0 评论 -
jmap heap输出各项参数解释
jmap -heap 21168Attaching to process ID 21168, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.92-b14using thread-local object allocation.Parallel GC with 4 thread(s) #4个gc线程 Heap Configuration.转载 2020-07-31 16:20:37 · 1353 阅读 · 0 评论 -
springboot下jvm启动参数预估
参考:https://www.cnblogs.com/zhangfengshi/p/11343102.htmlhttps://blog.csdn.net/chenming60999/article/details/100841202依据的原则是根据Java Performance里面的推荐公式来进行设置。具体来讲:Java整个堆大小设置,Xmx 和 Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍永久代(jdk8为元数据MetaSpace).原创 2020-07-31 14:50:17 · 1307 阅读 · 0 评论 -
系统频繁full gc,导致接口访问超时问题排查过程
springboot系统,访问另一微服务接口时报超时。以下是问题排查过程。[root@localhost xx-service]# top -Hp 25158top - 10:39:20 up 47 days, 24 min, 4 users, load average: 3.20, 3.42, 3.30Threads: 105 total, 1 running, 104 sleeping, 0 stopped, 0 zombie%Cpu(s): 56.7 us, 0.2 s原创 2020-07-30 15:31:07 · 2524 阅读 · 0 评论 -
MaxNewSize is equal to or greater than the entire heap . A new max generation size of will be used.
这说明新生代设置的大小已经等于或超过堆大小,jvm给新生代重新设置了一个大小。此时,需要调整新生代参数设置-Xmn一般可以设置为-Xmx的1/2以下,1/3以上。原创 2020-07-28 19:28:05 · 4920 阅读 · 0 评论 -
微信普通access_token缓存方案
/** * 从缓存查询access_token */ @Override public String getAccessToken() throws Exception { // 从缓存取 String accessToken = getAccessTokenCache(); if (StringUtils.isNotBlank(accessToken)) { return accessTo...原创 2020-07-08 17:23:22 · 1533 阅读 · 0 评论 -
获取微信小程序码,并上传到阿里云
先获取小程序码二进制流 /** * 获取小程序码 */ public static InputStream getWxacodeUnlimit(String accessToken, String path, int width) { String url = String.format(WXACODE_UNLIMIT_URL, accessToken); String[] str = path.split("[?]"); .原创 2020-07-07 19:11:18 · 741 阅读 · 0 评论 -
springboot下,JedisPool getResource导致大量线程WAITING,服务假死
环境:springboot版本2.1.4.RELEASE、jedis连接池服务配置:设置了tomcat最大线程数为1000:server: port: 9090 tomcat: uri-encoding: utf-8 max-threads: 1000jedis连接池配置: pool: max-active: 300 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1 # 连接池最大阻塞等待...原创 2020-06-19 16:50:56 · 3850 阅读 · 3 评论 -
深入源码分析springboot lettuce的shutdown-timeout
完整路径是spring.redis.lettuce.shutdown-timeout,网上的解释是:关闭超时时间,默认值100ms。通过追踪源码得知它的实际作用是:在关闭客户端连接之前等待任务处理完成的最长时间,在这之后,无论任务是否执行完成,都会被执行器关闭。下面通过源码跟踪一下。通过点击配置文件的 shutdown-timeout 打开 RedisProperties类:这个类位于spring-boot-autoconfigure包下面。在同一包下面的LettuceConnect原创 2020-06-18 18:37:24 · 7939 阅读 · 3 评论 -
zuul接口限流之spring-cloud-zuul-ratelimit
网上找到的资料大多是针对服务限流,接口限流的资料很少,而且配置复杂,于是我结合网上资料和自己的实践,去粗取精,形成了适合自己的极简配置。导入依赖<dependency> <groupId>com.marcosbarbero.cloud</groupId> <artifactId>spring-cloud-zuul-ratelimit</artifactId> <version>2.4.0.RELEASE</v...原创 2020-05-29 19:16:07 · 938 阅读 · 1 评论 -
乐观锁加重试,并发更新数据库一条记录导致:Lock wait timeout exceeded
背景:mysql数据库,用户余额表有一个version(版本号)字段,作为乐观锁。 更新方法有事务控制:@Transactional(rollbackFor = Exception.class)更新时,比对版本号,如果版本号不一致,则更新失败。 有重试机制,如果更新失败,则查询最新版本号,再次更新,重试超过5次,报错退出。 更新的核心方法: public boolean...原创 2020-04-17 19:47:56 · 1633 阅读 · 1 评论 -
如何判断微信/判断支付宝退款超期
微信退款有效期1年,支付宝3个月。交易退款的有效期限当交易状态为TRADE_SUCCESS(交易支付成功)时,可调用alipay.trade.refund(统一收单交易退款接口)。签约的当面付、App支付、手机网站支付、电脑网站支付等,默认支持退款期限一般为三个月。即调用查询接口查询交易处于trade_success状态,一般trade_success状态变为trade_finis...原创 2020-04-17 14:28:11 · 3177 阅读 · 0 评论 -
Java微信网页授权开发
1.微信网页授权access_token与普通access_token区别有效期:两者有效时间都是7200s; 使用范围:通过网页授权获得的access_token,只能获取到对应的微信用户信息,与微信用户是一对一关系;而普通的access_token在有效期内可以使用,可以获取所有用户信息。 次数限制:普通access_token每天获取最多次数为2000次;而网页授权的access_...原创 2020-04-17 11:26:15 · 616 阅读 · 0 评论 -
springboot支付宝APP支付与退款
pom依赖: <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.8.73.ALL<...原创 2020-01-13 19:29:57 · 1731 阅读 · 1 评论 -
weixin-java-pay实现APP微信支付与退款
pom依赖: <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-pay</artifactId> <version>3.6.0&l...原创 2020-01-13 17:20:08 · 2903 阅读 · 0 评论 -
weixin-java-pay实现公众号微信支付与退款
内容来自:https://www.jianshu.com/p/0a0ccc15cb80pom.xml 文件需要在 pom.xml 加入以下依赖! <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-...转载 2020-01-09 11:44:49 · 9473 阅读 · 4 评论 -
Springboot controller测试用例
import com.alibaba.fastjson.JSON;import com.google.common.collect.Sets;import org.json.JSONObject;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.spring...原创 2020-01-08 17:43:50 · 1757 阅读 · 0 评论 -
支付宝:验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配
springboot项目,公钥证书方式,进行支付宝退款时,支付宝返回:“验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配”。返回值里面,sub_code值是isv.invalid-signature。使用AlipayClient的sdkExecute和execute都不好使,改为certificateExecute,问题解决。以下是我的代码: AlipayTra...原创 2019-12-31 19:49:11 · 21128 阅读 · 9 评论 -
springcloud 根据启动的profiles启用相应代码
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Configuration;@Configurationpubl...原创 2019-12-05 16:15:27 · 215 阅读 · 0 评论 -
springcloud feign调用日志打印
import feign.Logger;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class FeignConfiguration { @Bean L...原创 2019-12-05 16:12:33 · 1590 阅读 · 0 评论 -
使用redis实现分布式锁
简介:当高并发访问某个接口的时候,如果这个接口访问的数据库中的资源,并且你的数据库事务级别是可重复读(Repeatable read)的话,确实是没有线程问题的,因为数据库锁的级别就够了;但是如果这个接口需要访问一个静态变量、静态代码块、全局缓存的中的资源或者redis中的资源的时候,就会出现线程安全的问题。案例:github地址: https://github.com/mzd123/my...转载 2019-11-01 15:00:57 · 172 阅读 · 0 评论 -
Mybatis Mapper.xml继承机制
文章来源:https://segmentfault.com/a/1190000012470056Mapper.xml继承机制github地址Mybatis实际上隐藏了一个功能:Mapper.xml可以继承,这个在官方文档中并没有提到过,不过在这个issue (commit)里提到过。Statement覆盖利用Mapper.xml的继承机制,我们可以做到ChildMapper覆盖ParentMapp...转载 2018-02-24 16:45:27 · 10436 阅读 · 0 评论 -
流式处理,获取key值
参考 https://segmentfault.com/q/1010000012710364 public static void main(String arg[]) { Map<String, String> map = new HashMap<>(); String str = "a=1&b=3.5&c=true"; Arrays.str...转载 2018-02-26 11:21:22 · 535 阅读 · 0 评论 -
403 for URL: http://www.terracotta.org/kit/reflector
java.io.IOException: Server returned HTTP response code: 403 for URL: http://www.terracotta.org/kit/reflector?pageID=update.properties&patch=UNKNOWN&tc-product=ehcache-core+2.10.1&tc-version=2.10.1&up原创 2018-02-05 18:59:53 · 5778 阅读 · 0 评论 -
spring5+spring-data-elasticsearch集成
一、搞定依赖 UTF-8 5.0.0.RELEASE 3.0.0.RELEASE UTF-8 1.8 2.9.0 2.5.5.cat-SNAPSHOT org.springframework spring-aop ${spring.version} org.springframework spring-beans ${spring.version}原创 2018-02-05 18:34:03 · 3367 阅读 · 2 评论 -
让spring5.0支持velocity
新版spring5.0已经移除了对velocity的支持,下面就说说如何让spring5.0支持velocity。spring从4.3开始不再支持velocity,官方说法是:Velocity 1.7 dates back to 2010. After more than five years of nomaintenance in the original project, it原创 2018-02-05 15:25:35 · 4426 阅读 · 3 评论 -
调用rest地址时异常:Invalid use of BasicClientConnManager: connection still allocated.
Caused by: java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated. Make sure to release the connection before allocating another one.使用Resteasy进行restful原创 2015-02-02 11:52:38 · 7076 阅读 · 0 评论 -
Spring使用SpEL表达式读取properties配置文件的两种方式
第一种:config.properties:index.version=v1spring配置文件,加载config.properties: <!-- 获取properties中的值 --> <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBe...原创 2018-03-18 19:08:01 · 7003 阅读 · 2 评论 -
Mybatis传入参数类型为Map
参考:https://www.cnblogs.com/seeusmile-cnblog/p/6221340.htmlhttps://www.cnblogs.com/huzi007/p/5969711.html方式一:mybatis更新sql语句:<update id="publishT00_notice" parameterType="Map">update test set c...转载 2018-03-21 10:06:28 · 155036 阅读 · 3 评论 -
Java多线程-并发工具类(二)等待多线程完成的CountDownLatch
参考:https://www.jianshu.com/p/1716ce690637http://ifeve.com/talk-concurrency-countdownlatch/CountDownLatch是什么CountDownLatch也叫闭锁,在JDK1.5被引入,允许一个或多个线程等待其他线程完成操作后再执行。CountDownLatch内部会维护一个初始值为线程数量的计数器,主线程执行...转载 2018-04-08 18:46:40 · 370 阅读 · 0 评论 -
什么是CAS机制
参考:https://www.cnblogs.com/myopensource/p/8177074.htmlhttps://www.jianshu.com/p/e2179c74a2e4CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的...转载 2018-04-04 14:39:31 · 552 阅读 · 0 评论 -
Java多线程-并发工具类(三)控制并发线程数的Semaphore
参考:http://ifeve.com/concurrency-semaphore/https://www.cnblogs.com/feijishuo/p/4538814.htmlhttps://zhuanlan.zhihu.com/p/29463581简介Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。很多年以来,我都觉得从字面上很...转载 2018-04-25 15:51:16 · 799 阅读 · 0 评论