java
岸河
这个作者很懒,什么都没留下…
展开
-
jvm调优经验总结
jvm调优分析原创 2023-03-01 18:04:15 · 551 阅读 · 1 评论 -
final修饰方法参数的意义或者作用是什么
方法参数上加final字段,再对参数进行赋值操作时会直接提示编译报错Cannot assign a value to final variable 'user'个人觉得更大的意义在于提示开发者,不要对方法参数进行变更,以免引起不必要的问题...原创 2022-03-06 07:14:37 · 450 阅读 · 0 评论 -
StringBuilder使用tips
StringBuffer太粗糙了,或者说锁的粒度太大了,只是简单粗暴的加在方法上,所以很少人使用。StringBuilder使用tipsnew StringBuilder的时候,如果拼接的字符串比较简单,可以直接new一个带初始化容量大小的StringBuilder,比如RocketMQ源码会有类似写法private String buildKey(final String topic, final int queueId) { StringBuilder sb = new String原创 2022-03-05 07:15:39 · 253 阅读 · 0 评论 -
【Java基础】Integer.parseInt(s)与Integer.valueOf(s)的区别
区别valueOf内部调用的是parseIntvalueOf返回的是包装类型,parseInt返回的是基本类型,基本类型不能equals比较数据大小valueOf内部会走Integer的静态内部类IntegerCache的判断逻辑,使用Integer数组存储一些缓存值,在其范围内的值会从缓存中取。最下范围是[-128, 127],最大值可以通过jvm参数值进行自定义配置,java.lang.Integer.IntegerCache.high但是不能小于127...原创 2022-03-04 21:40:46 · 356 阅读 · 0 评论 -
Bean Validation 与 hibernate-validator
Bean Validation碎碎念基本介绍大家所知道的JSR 303,是参数校验Bean Validation的第一版规范,也称为Bean Validation 1.0,通过类似@Null,@NotNull,@NotBlank,@Valid的注解,帮助我们对参数进行校验。避免在业务代码中写长长的if else的判断。版本介绍但实际上,到2019年8月份的时候,这个参数校验的的规范已经到了到了Bean Validation 2.0 版本,规范也变了,Bean Validation 2.0是属于JSR原创 2022-01-16 12:38:27 · 1267 阅读 · 1 评论 -
CompletableFuture
CompletableFuture常用方法CompletableFuture的join方法可以直接拿到返回值supplyAsync,开启异步任务thenCompose,接收前面的返回值,前面执行完了再执行后面的thenCombine,两个任务一起执行thenApply,把前面异步执行的结果,交给后面的异步任务,同一个线程thenApplyAsync,把前面的几个结果交给后面的异步任务,不同线程 和thenCompose 比较像applyToEither,要么,上个任务和这个任务一起运行,哪个原创 2022-01-15 23:23:12 · 1697 阅读 · 0 评论 -
Bean Validation 从JSR 303到JSR 349到JSR 380
参数校验,是我们绕不过去的话题。Controller参数校验,Service层参数校验。如何形成一套标准的,满足各场景的参数校验规范,是一件很重要的事,本篇文章,就来聊一聊参数校验相关规范与发展。Java(也就是Jakarta,从18年以后,Java EE 正式改名为 Jakarta EE 了。)参数校验的官网地址:https://beanvalidation.org/java中参数校验版本变化如图是官网中的Bean Validation的版本历史,从JSR 303到JSR 349到JSR 3.原创 2022-01-15 23:19:05 · 447 阅读 · 0 评论 -
Spring-Boot参数校验规范 Bean Validation ; Hibernate Validator
Spring-Boot引入版本依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></dependency>注意,高版本的Spring-boot,不需要再单独引入validation-api或者hibernate-validator了,我原创 2022-01-15 20:31:27 · 297 阅读 · 0 评论 -
【业务线程池】 业务线程池实现多个任务并行处理
@RestControllerpublic class ApplicationTaskExecutorController { /** * 使用spring的默认线程池 */ @Autowired private ThreadPoolTaskExecutor applicationTaskExecutor; /** * 串行计算 */ @RequestMapping("save1") public String原创 2022-01-13 23:34:49 · 548 阅读 · 0 评论 -
Liunx查看一个进程有多少线程
在Liunx中进程和线程是没有区别的,平时我们可以使用# 拿java应用进程举例# top命令按cpu使用率查看top -Hp 19597# pstree查询列表pstree -p 19597| grep java# pstree查询线程总数pstree -p 19597| grep java|wc -l...原创 2022-01-07 06:50:40 · 263 阅读 · 0 评论 -
Spring-Boot中Redis的应用,lettuce与jedis
基本认识lettuce是什么?redis客户端,也是spring-boot中redis客户端的默认实现jedis是什么?redis客户端,如果在Spring-boot中使用jedis,需要额外添加jedis依赖,然后指定client-type为jedis讲讲Spring-boot项目中redis相关依赖一般来讲,Spring-boot项目中的redis都是spring-boot-starter-data-redis<dependency> <groupId>原创 2022-01-05 23:09:48 · 3932 阅读 · 0 评论 -
线上异常堆栈不打印了
昨天晚上发布之前,遇到一个问题线上有一个异常问题,频繁打日志,由于是非核心业务,已经很晚了,就决定第二天再看。结果第二天的时候一看,搜不到完整的异常堆栈了,只能看到2行堆栈信息各种grep,tail都没找到完整的堆栈信息最后终于找到原因了jdk1.5之后的一个优化,频繁抛出的异常,JIT会重新编译后抛出没有堆栈的异常...转载 2022-01-05 15:09:12 · 458 阅读 · 0 评论 -
代码整洁之道 阿里规约
命名:类名一般用名词,方法名一般用动词,表名不用tableif方法一般内部只放一行代码,一个方法的参数最好不要超过3个,同一块代码多个方法的层级应该保持一致常量的好处是便于检索,见名知意,且常量更要见名知义,长点无所谓方法参数尽量不要传布尔值方法名称可以长点,见名知义多层级的if,else也可以用try catch来优化复杂的&& ||布尔表达式,直接用一个函数命名除了BO/DO/DTO/VO/AO/PO/UID,其他的都要按驼峰的规则来...原创 2021-12-29 08:32:27 · 374 阅读 · 0 评论 -
BIO(Blocking IO)单线程版本
BIO(Blocking IO)单线程版本java 阻塞性IO,又称为BIO,OIO,或者经典IO,下面是经典IO的单线程版本代码示例public static void main(String[] args) throws IOException { ServerSocket socket = new ServerSocket(8081 ); while (true) { try{原创 2021-12-26 12:22:19 · 712 阅读 · 0 评论 -
Circular view path would dispatch back to the current handler...This may be the result of an unspeci
问题背景项目升级了SpringBoot 2.2.7之后,项目中少数遗留的前后端未分离的界面出现问题完整报错信息Circular view path would dispatch back to the current handler…This may be the result of an unspecified view, due to default view name generation解决办法添加配置spring.freemarker.suffix=.ftl...原创 2021-10-27 14:28:16 · 957 阅读 · 0 评论 -
记录两个IDEA源码调试的小技巧
记录两个IDEA源码调试的小技巧当某个类的实现类比较多的时候,不知道具体代码走的是哪个实现类,这个时候可以启动项目debug跟一下,在关键代码那一行打个断点,然后看一下实现类是什么,然后进入实现类,debug再打一个断点,再验证一下能不能debug进去就OK了当我想验证一下某个项目有没有调用一个底层方法,可以直接在底层方法加个断点,比如我想验证一下SpringBoot启动的时候有没有使用堆外内存,或者什么时候使用的堆外内存,可以在java.nio.ByteBuffer#allocateDirect里加原创 2021-10-09 16:43:03 · 336 阅读 · 0 评论 -
一些常见的即将废弃的jvm参数说明
jdk1.8.0_171,在应用启动的时候,配置如下jvm参数,会出现警告信息-XX:+UseFastAccessorMethods含义:get,set 方法转成本地代码(对于jvm来说是冗余代码,jvm将进行优化)说明: UseFastAccessorMethods option is harmful and has been removed in JDK 9. You need to delete this option from run configuration.-XX:+UseCo.原创 2021-10-04 14:27:30 · 1712 阅读 · 0 评论 -
.java文件转换成jvm指令
方法一将.java文件转成.class文件windows上javac编译带有汉字的.java文件,会出现错误编码 GBK 的不可映射字符,这个是字符集问题,我们需要加上一个参数 javac -encoding UTF-8 Hello.java将.class文件转成jvm指令javap -v Hello.class -v verbose表示 输出附加信息(包括行号、本地变量表,反汇编等详细信息)javap -c Hello.class -c表示对代码进行反汇编方法二IDEA安装插件A原创 2021-09-21 14:33:41 · 244 阅读 · 0 评论 -
@ConditionalOnProperty注解
简单来讲,总结一下,在类上添加此注解基本配置为app.name = tom配置类为@ConditionalOnProperty(prefix = "app",name="name",matchIfMissing = false)@Configurationpublic class ConfigureOne { public ConfigureOne() { System.out.println("--------构造ConfigureOne---------");原创 2021-06-28 19:10:18 · 30342 阅读 · 10 评论 -
简单聊一聊HttpMessageConverter
简单聊一聊HttpMessageConverterorg.springframework.http.converter.HttpMessageConverter技术背景问题点项目重构,表结构重构,主键从自增id换成了 雪花算法生成的id。雪花算法生成的id是19位的,但是js超过16位就会出现精度损失,导致拿到的id不准确。简单解决后端将Long类型转成String传给前端,简单粗暴,十分有效,但是不优雅,而且要伴随着多次类型转化。统一处理Spring Framework里有个类,叫Http原创 2021-06-12 09:20:33 · 291 阅读 · 0 评论 -
java.util.ConcurrentModificationException
相关文章:https://www.cnblogs.com/bluestorm/p/6347227.html相关文章:https://www.cnblogs.com/dolphin0520/p/3933551.html首先来看下面四段代码,平平无奇,看起来像是我们经常写的代码,但是有些就是报错了List<String> list = new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");list.fo原创 2021-06-02 21:01:57 · 346 阅读 · 0 评论 -
重学CMS
重学CMSCMS,并发标记清除。他的垃圾回收分为4个过程初试标记(可能发生STW)并发标记重新标记(可能发生STW)并发清除CMS设计的初衷是为了达到低停顿,适用于互联网应用。但是他还远远达不到完美的程度,他还有三个缺点:1.CPU资源敏感,4核以下不建议CMS,因为他的垃圾回收线程=(核数+3)/4,如果是4核的话,会使用25%的CPU资源,如果是2核的话,要使用一半的CPU资源,这个对应用程序的影响还是比较大的。2.浮动垃圾。CMS并发清除的时候,用户线程还在运行,由于已经过了标记的阶段原创 2021-05-31 23:52:46 · 94 阅读 · 0 评论 -
SpringBoot优雅停机
通用做法public class GracefulShutdownListener implements TomcatConnectorCustomizer,ApplicationListener<ContextClosedEvent> { private final Logger logger = LoggerFactory.getLogger(GracefulShutdownListener.class); private volatile Connector connect原创 2021-05-01 08:34:03 · 304 阅读 · 1 评论 -
第三方接口如何设计
1.接口功能职责清晰2.接口安全,加密方式(临时凭证的方式,appid与appsecret的加密,验签)3.接口幂等(高并发时的幂等,redis分布式锁,业务上的幂等字段。)比如防止客户端重试4.接口限流,防刷(对外)5.接口约定,良好的代码规范,接口文档与请求示例与返回示例,错误码定义,版本迭代说明6.如果有可能,做接口统计分析,做应用监控与报警...原创 2021-04-30 14:40:02 · 819 阅读 · 0 评论 -
List对象如何判断重复数据
List对象如何判断重复数据开发中常见的场景就是前端传过List<VO>数据,我们需要根据VO对象的某个或者某几个参数特征来判断VO对象是否重复。这里给出一种个人觉得比较简介的方法,工作中我通常是这么处理的// 使用stream表达式进行分组,自定义分组的keyMap<String, List<ProductVO>> groupedProductVoMap = productVOs.stream().collect(Collectors.groupingBy(th原创 2021-04-16 16:39:44 · 6708 阅读 · 2 评论 -
ArrayList转String[],或者其他数组
String[] strings = list.toArray(new String[list.size()]);原创 2020-12-31 16:59:51 · 1340 阅读 · 1 评论 -
如何保证接口幂等性
幂等性:即多次操作,返回的结果是一致的,保持接口幂等性,才能保证数据安全,不重复,不混乱;总所周知,GET请求是天然幂等的,多次GET操作,结果是一致的。POST请求在生产型项目中也要保持幂等,比如支付时的POST请求,如果不幂等,可能会出现重新支付的情况;注册用户时的POST请求,如果不是幂等的,可能会产生重复用户。做到接口幂等,不仅仅是为了防止单个用户重复点击,在高并发的时候它的作用显得更加重要。如何做到接口幂等?0.基本要求:业务逻辑层数据状态的校验。比如支付前校验..原创 2020-10-14 10:32:48 · 1438 阅读 · 0 评论 -
spring-webmvc和spring-web模块的联系与区别
两者都是属于web处理框架,都是spring的spring-webmvc只依赖乐一些spring的模块,包括spring-web模块spring-web的主要依赖序列化技术protobuf,gson,hession,http工具,httpclient,okhttpnetty依赖spring框架依赖,spring-aop,spring-beans,spring-context,spring-core,spring-oxm,还有servlet依赖javax.servlet-api.原创 2020-09-27 11:46:11 · 1662 阅读 · 0 评论 -
SpringBoot常用拦截器(HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor)
SpringBoot常用拦截器(HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor)上面3种拦截器,都是http拦截器,在处理业务逻辑之前对http请求信息进行处理,比如获取请求头,请求参数,设置请求头,请求参数等等思路清晰,先说jar包:HandlerInterceptor—>spring-webmvc项目,org.springframework.web.servlet.HandlerInterceptor原创 2020-09-27 11:10:02 · 9465 阅读 · 0 评论 -
IntStream.iterate的简单使用
IntStream.iterate的简单使用注意:IntStream是jdk1.8新增的一个接口,iterate是他的一个静态实现方法(注意jdk1.8开始,接口中的default方法或者static方法可以定义方法体,而不是只能定义抽象方法了,上面的IntStream接口就是。)看他的方法介绍:Returns an infinite sequential ordered IntStream...原创 2020-03-18 10:53:04 · 4208 阅读 · 0 评论 -
静态内部类(Static Inner Class)和嵌套类(Static Nested Class)之间的区别?
近期看到一个po主强调静态内部类与嵌套类的区别,才开始关注起来。究竟哪种叫法更准确?在《Java编程思想》第四版这本书里,单独有一章叫:内部类。里面关于内部类的定义如下:可以将一个类的定义放在另一个类的定义内部,这就是内部类。按照这本书的章节,可以将内部类分为:成员内部类,局部内部类,匿名内部类,嵌套类。具体定义不再阐述,不是本文的细节。这篇文章的描述的比较详细:Java的几种内部类...原创 2019-10-21 15:16:09 · 553 阅读 · 0 评论