
java
文章平均质量分 70
pilaf1990
操千曲而后晓声,观千剑而后识器~
展开
-
Maven生命周期与插件
本文详细介绍maven生命周期和插件及插件目标的关系,为maven插件开发铺平道路。原创 2022-08-30 18:42:58 · 869 阅读 · 0 评论 -
Spring框架新手快速上手系列:(二)体验一把自己配置低级容器
Spring框架快速上手系列二:手动配置低级容器,感受Spring框架内部的工作原理,开启源码研究之路。原创 2022-08-24 19:38:11 · 430 阅读 · 0 评论 -
Spring框架新手快速上手系列:(一)鸟瞰Spring框架
Spring框架新手快速上手系列,第一篇,鸟瞰Spring框架工作流程原创 2022-08-23 19:28:39 · 484 阅读 · 0 评论 -
Gradle新手指南
本文通过探索Groovy脚本的语法来更好地理解Gradle项目中的build.gradle文件原创 2022-08-21 14:28:23 · 399 阅读 · 0 评论 -
guava缓存使用不当导致的FullGC
java使用guava cache不当,导致的fullgc研究原创 2022-08-20 20:30:06 · 3651 阅读 · 3 评论 -
guava RateLimiter均匀限流
java的guava RateLimiter均匀限流原创 2022-08-10 19:25:27 · 516 阅读 · 0 评论 -
聊一聊Java中的线程中断
Java中的线程在运行的时候,有办法强制让它中断运行么?在JDK的Thread类中有stop和destroy方法,但是已经被标记为过时的,stop方法之所以不推荐使用是因为它是不安全的,比如它会让线程释放它持有的锁,这样可能会导致它保护的资源处于不一致的状态,destroy方法则直接抛出NoSuchMethodError异常。正确的、优雅的中断线程的方式应该是给线程发出中断信号(即调用线程实例的interrupt方法,用余春龙大佬的话来说,interrupt这个词很容易让人产生误解,从字面含义看好像是线程原创 2022-05-04 16:17:03 · 2018 阅读 · 0 评论 -
为什么Java的wait和notify必须要在synchronized代码块中调用?
让我们看一个例子,如果我们不在synchronized代码块中调用wait()方法会发生什么问题。假设我们要自己实现一个阻塞队列(当然JDK中已经有了BlockingQueue,这儿只是为了说明问题)。没有同步(synchronization)的代码可能像下面这样:class BlockingQueue { Queue<String> buffer = new LinkedList<String>(); public void give(String翻译 2022-05-04 12:30:59 · 1257 阅读 · 1 评论 -
一次线上频繁FullGC的排查
背景一日,线上的某个服务的某个节点突然告警,频繁地FullGC,这个服务已经有半个月没有进行过发布和容器重启了。处理步骤首先将告警的容器隔离,从网关上摘掉这个节点,让流量不再进入到这个节点。通过jmap将节点的内存快照dump下来。通过jprofiler分析hprof文件。分析原因有很多工具可以方便地分析hprof文件,如MAT、JProfiler。我们通过JProfiler分析,在JProfiler的启动中心打开单个快照。选择下载到本地的hprof文件,等待一会解析,然后直奔“最大原创 2022-03-12 13:29:53 · 4051 阅读 · 0 评论 -
javassist中的类名前缀Ct是什么意思?
javassist中有CtClass、CtField、CtBehavior等类,那么这些类名中的Ct是什么意思呢?Ct是Compile Time的缩写,即“编译时”的意思。因为CtClass表示一个class还没有被装载进java虚拟机,而java.lang.Class表示一个运行时class,它已经被装载进java虚拟机。刚开始的时候Javassist不能和类加载器一起配合工作,所以Ct也不是什么坏的叫法。那么为什么不叫Lt(Load Time)呢?作者Shigeru Chiba也想重命名,但是为时原创 2021-11-22 20:05:05 · 700 阅读 · 0 评论 -
用java8 API实现列表元素去重
import lombok.AllArgsConstructor;import lombok.Data;import java.util.Arrays;import java.util.List;import java.util.function.Function;import java.util.stream.Collectors;/** * @author pilaf * @description 用java8 API实现列表元素去重 * @date 2021/7/29 12:55原创 2021-07-29 15:20:10 · 234 阅读 · 0 评论 -
MongoDB分组取每组中一条数据
需求背景有一个mongo collection,里面存放了运送货物的司机位置信息,字段主要有_id: mongodb默认的主键字段orderId:订单idpositionTime:位置上报时的时间戳lon:经度信息lat:纬度信息现在需要支持根据一批订单id,查询它们最新位置的经纬度。需求分析根据需求背景,可以知道,查询的条件是按照订单id作为分组,每个分组内按照positionTime降序排序,然后将分组内的第一条记录的所有字段返回即可。在NoSQL Booster中查询的语句:db原创 2021-05-29 08:43:06 · 5609 阅读 · 1 评论 -
牛客网设计LRU缓存结构Java实现
题目描述设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。当缓存的大小超过K时,移除最不经常使用的记录,即set或get最久远的。若opt=1,接下来两个整数x, y,表示set(x, y)若opt=2,接下来一个整数x原创 2020-12-09 18:50:01 · 665 阅读 · 2 评论 -
Spring中的Aware接口的本质
Spring Aware接口允许你“卷入”(hook into)Spring框架的内部工作。通过Spring Awawre接口,你可以访问Spring上下文或者Spring的Bean生命周期事件。 你的Spring bean可能需要...原创 2019-12-12 09:54:26 · 364 阅读 · 0 评论 -
查看java对象占用内存大小
引入maven依赖: <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version>...原创 2019-10-31 21:44:22 · 4427 阅读 · 1 评论 -
类静态字段初始化错误导致的ExceptionInInitializerError和NoClassDefFoundError
JDK中对ExceptionInInitializerError的描述是:在静态初始化程序中发生了意料之外的异常的信号。在一个静态初始化程序求值的时候,或者静态字段初始化的时候发生了异常,就会抛出一个ExceptionInInitializerError异常。JDK中对NoClassDefFoundError的描述是:JVM(Java虚拟机)或者类装载器(ClassLoader)实例...原创 2019-05-20 13:56:03 · 2309 阅读 · 1 评论 -
高效的java异常(Effective Java Exceptions)
摘要Java开发人员可以做出的最重要的架构决策之一是如何使用Java异常模型。Java异常一直是社区争论的主题。 有些人认为Java语言中的checked(受检)异常是一个失败的实验。 本文认为,错误不在于Java模型,而在于Java库设计者未能认知到方法失败的两个基本原因。 本文提倡一种思考异常情形性质的方法,并描述有助于您设计的设计模式。 最后,本文讨论了异常处理作为面向切面编程模型中的横切...翻译 2019-05-13 20:58:34 · 738 阅读 · 0 评论 -
AOP的应用场景(异常处理、安全检查和缓存)
本文内容摘自于王福强的《Spring揭秘》(由于已经绝版,出版社按需出版,购买链接)第11章,这是我见过的最好的一本讲解Spring背后原理、设计思想的书籍,虽然讲解的Spring版本有点老,但是基本上不影响Spring的学习。一.异常处理 或许你已经在使用AOP的方式进行异常处理,但是可能不知道这实际上对应着一...原创 2019-05-04 18:25:52 · 1324 阅读 · 0 评论 -
微信小程序开发中需要用的Http请求工具类
本工具类主要用于发送get、post请求用到的maven依赖<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.3</version> <...原创 2019-04-23 17:01:52 · 1475 阅读 · 0 评论 -
SpringBoot单元测试@SpyBean的方法被模拟却仍然进入的问题
在SpringBoot中用@SpyBean来表示一个“间谍对象”,允许它的某些方法被模拟,而剩下的方法仍然是真实的方法。import com.**.hydra.account.HydraAccountApplication;import com.**.hydra.account.config.DataSourceConfiguration;import com.**.hydra.clien...原创 2019-04-26 20:09:45 · 6828 阅读 · 0 评论 -
解决springboot maven多模块项目打包的时候某个被依赖的模块报错找不到main class
springboot maven 多模块项目打包的时候某个被依赖的模块报错[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.3.RELEASE:repackage (repackage) on project **-client: Execution repackage of...原创 2019-03-29 11:59:11 · 8819 阅读 · 5 评论 -
springboot+mybatis打包时,单元测试类报错
报错信息:2019-04-01 14:33:10.703 ERROR 1957 --- [ main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.boot.test.mock.mock...原创 2019-04-01 14:45:33 · 3374 阅读 · 0 评论 -
maven项目查看依赖树
通过在项目跟路径下执行mvn dependency:tree查看项目的完整依赖树,例如:pilafs-MacBook-Pro:content-admin pilaf$ mvn dependency:tree[INFO] Scanning for projects...[INFO] [INFO] ------------------< com.**:content-admin >...原创 2019-07-22 14:48:11 · 26841 阅读 · 0 评论 -
vue+freemarker中遇到的坑
java后端开发者做后台管理系统,用模版技术还是挺方便的,但是如果在页面上对数据进行修改,怎么办呢?可以用jQuery选中各个dom节点的值,然后组装成后台接口中需要的Form,再用ajax请求后台,这种方式的缺点在于,如果数据字段比较多,需要手动选择很多个dom节点,再取值,想想都可怕。由于笔者之前做过Angul...原创 2019-03-31 18:16:35 · 10229 阅读 · 1 评论 -
Spring Boot、Spring MVC、Spring对比
Spring Boot、Spring MVC、Spring中都有spring这个单词,让我们来看看你应该在哪儿、何时使用这些工具。在本文,你将鸟瞰Spring、Spring MVC和Spring Boot,了解它们都处理哪些问题,它们最佳应用场景。你将认识到最重要的一点是,它们不是在同一个领域内竞争,它们都在各自的领域很出色地处理问题。1.Spring框架处理的核心问题是什么?好好想想,Sp...翻译 2019-05-20 21:07:02 · 332 阅读 · 0 评论 -
Maven工程生成源码包jar包
有时候开发一个公共jar包给别人引用,当别人打开包中的类的时候,默认情况下是IDE工具反编译出来的.class文件,类中的注释什么的都看不到,此时IDE工具会提示你可以Download sources,但是如果你打包的时候没有同时打一个以"-sources.jar"结尾的source code jar,那么调用方下...原创 2019-05-16 11:27:58 · 4026 阅读 · 0 评论 -
理解JUnit的Runner架构
几星期前,我开始创建一个小型的JUnit Runner(Oleaster),它允许你在JUnit中用Jasmine的方式写单元测试用例。从中我学习到写单元测试用例其实很简单。在这篇博客中,我将向你展示JUnit Runners内部是怎么工作的,还有你可以如何自定义Runner来更改JUnit的测试用例执行过程。什...翻译 2019-05-17 13:58:08 · 6243 阅读 · 0 评论 -
Spring Boot读取yml配置信息到配置对象
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spring Boot允许配置外部化,这样同样的代码可以运行在不同的环境中,比如生产环境、测试环境用同一套代码,但是连的数据库信息可以放在应用的外部。可以使用properties文件,ymal文件,环境变量和命令行参数来使得配置外部化。属性值可以通过@Value注入到bean中,或者通过Spring的环境变量拿到配原创 2018-08-09 20:25:29 · 12433 阅读 · 1 评论 -
java8 Comparator升序降序排序
package com.pilaf.stream;import lombok.AllArgsConstructor;import lombok.Data;import lombok.ToString;import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util....原创 2019-10-10 09:57:35 · 32423 阅读 · 0 评论 -
Spring Boot maven插件debug
想在IDEA中用maven的spring-boot插件方式debug Spring Boot应用。Spring Boot项目的pom.xml文件中有<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>...原创 2019-08-28 14:52:03 · 1590 阅读 · 1 评论 -
spring RestTemplate中文乱码,替换StringHttpMessageConverter后报500 Internal Server Error
在使用RestTemplate请求url获取字符串的时候,发现中文乱码了。然后发现RestTemplate的默认构造器中,添加了很多HttpMessageConverters,其中的StringHttpMessageConverter的默认charset是ISO_8859_1: /** * The default charset used by the converter. ...原创 2019-08-15 18:38:55 · 3882 阅读 · 0 评论 -
IDEA中suppress warnings
有时候java类名没有遵循驼峰命名,其实也不是没有遵守,而是IDEA认为你没有遵守,或者它识别不出来我们定义的类名中的单词,然后就会有个波浪线提示你:Typo: In word …SpellChecker Inspection helps locate typos and misspelling in your code, comment and literals, and fix them ...原创 2019-08-06 11:00:46 · 3038 阅读 · 0 评论 -
如何在IDEA中给源码中不存在的默认构造器打断点?
一个类源码中没有声明构造器,那么它会有一个默认构造器。那么问题来了,如果我想debug一下,看看这个默认构造器都在哪儿被调用了,要在默认构造器上打个断点(breakpoint)怎么办?按照IDEA官网上的说明:If you want to set a breakpoint in the default class...原创 2019-08-01 13:51:51 · 718 阅读 · 0 评论 -
微信小程序消息推送功能开发(java实现)
先好好把官方文档看一看,链接https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html#option-url主要用到的maven依赖: <dependency> <groupId>org.projectlo...原创 2019-07-30 20:48:59 · 3781 阅读 · 2 评论 -
springboot web项目中js变量值因profile不同而不同
一个springboot的web项目,前端上传图片到公司图片服务器上,因为有开发环境dev、生产环境prod,上传的地址也就不一样了。上传的服务器地址写在了js文件中。那么js中的变量的值可以根据spring的不同环境的配置文件变化而变化么? ...原创 2019-06-28 19:36:45 · 942 阅读 · 3 评论 -
IDEA快捷键总结
1.快速将一个变量用System.out.println()输出变量名称后输入.sout回车补全原创 2019-07-07 17:45:52 · 184 阅读 · 0 评论 -
微信小程序获取二维码scene报错40129
java后端向微信服务端https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN获取二维码的时候,由于自定义的scene中包含了"=",在用Gson将请求体转成json的时候,"="被转义了,然后获取二维码报错:{“errcode”:40129,“errmsg”:“invalid scene hint: [o...原创 2019-06-04 20:23:44 · 7207 阅读 · 2 评论 -
springboot maven "lib"模块的单元测试
由于在springboot maven的项目中分了模块,对于dao层模块来说,它没有@SpringBootApplication修饰的启动类,也就是说这个模块是没有spring ApplicationContext的,在单元测试的时候,报了错误:java.lang.IllegalStateException: ...原创 2019-03-29 17:41:24 · 505 阅读 · 0 评论 -
重新认识spring的BeanFactory和ApplicationContext
首先BeanFactory、ApplicationContext都只是接口,ApplicationContext也间接继承了BeanFactory。DefaultListableBeanFactory是一个类,一个功能完备的,可以直接使用的容器,它只有XmlBeanFactory一个子类,还被标记为过时的。DefaultListableBeanFactory的继承体系如下:从Applica...原创 2019-03-13 18:44:50 · 1151 阅读 · 0 评论 -
Spring容器扩展点(Container Extension Points)
容器扩展点的概念&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Spring的IoC部分被设计成可扩展的。应用程序开发者通常不需要继承各种各样的BeanFactory或者ApplicationContext的实现类(BeanFactory和ApplicationContext都是接口)。通过插入(plug原创 2019-03-12 21:34:00 · 4667 阅读 · 0 评论