
码农的才思与浪漫
文章平均质量分 94
Java语言中那些惊为天人的设计分享
苦味代码
公众号:苦味代码
展开
-
Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG
历史文章推荐:1.ConcurrentHashMap中有十个提升性能的细节,你都知道吗?2. HashMap面试,看这一篇就够了3. 七种方式教你在SpringBoot初始化时搞点事情4. Java序列化的这三个坑千万要小心5. Java中七个潜在的内存泄露风险,你知道几个?6. JDK 16新特性一览7. 啥?用了并行流还更慢了Java 7的ConcurrenHashMap的源码我建议大家都看看,那个版本的源码就是Java多线程编程的教科书。在Java 7的源码中,作者对悲观锁的使用非.原创 2021-04-26 22:53:14 · 2566 阅读 · 1 评论 -
ConcurrentHashMap中有十个提升性能的细节,你都知道吗?
历史文章推荐:HashMap面试,看这一篇就够了七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?一些题外话前一篇文章我们对HashMap的实现做了详细的解析和总结,这篇文章继续剖析一下ConcurrentHashMap的实现。由于ConcurrentHashMap的内容比较多,而且Java 7和Java 8两.原创 2021-04-12 22:37:33 · 7412 阅读 · 9 评论 -
HashMap面试,看这一篇就够了
历史热门文章:七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心可以和面试官聊半个小时的volatile原理Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?前言在一场面试中最能打动面试官的其实是细节,候选人对细节的了解程度决定了留给面试官的印象到底是“基础扎实”还是“基础薄弱”,如果候选人能够举一反三主动阐述自己对一些技术细节的理解和总结,那无疑是面试过程中.原创 2021-04-04 11:50:25 · 25617 阅读 · 28 评论 -
七种方式教你在SpringBoot初始化时搞点事情
历史热门文章:Java序列化的这三个坑千万要小心可以和面试官聊半个小时的volatile原理Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理我们经常需要在容器启动的时候做一些钩子动作,比如注册消息消费者,监听配置等,今天就总结下SpringBoot留给开发者的7个启动扩展点.原创 2021-03-30 09:28:00 · 2788 阅读 · 1 评论 -
Java序列化的这三个坑千万要小心
前几天看到一个2016年挺有趣的一个故障复盘,有一哥们给底层的HSF服务入参DTO加了一个字段,秉承着“加字段一定是安全的”这种惯性思维就直接上线了,上线后发现这个接口成功率直接跌0,下游的服务抛出类似下面这个异常堆栈java.io.InvalidClassException:com.taobao.query.TestSerializable; local class incompatible: stream classdesc serialVersionUID = -71650970630942454原创 2021-03-29 09:25:50 · 2335 阅读 · 5 评论 -
JDK16新特性一览
历史文章推荐:啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理Arthas原理系列(四):字节码插装让一切变得有可能Arthas原理系列(三):服务端启动流程Arthas原理系列(二):总体架构和项目入口Arthas原理系列(一):实现一个极简的Arthas watch命令JDK16已于北美时间3月16日发布,JDK的这次更新总共带来了17个全新的原创 2021-03-17 19:47:57 · 1430 阅读 · 1 评论 -
InnoDB自增原理都搞不清楚,还怎么CRUD?
InnoDB自增原理都搞不清楚,还怎么CRUD?历史文章推荐:Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理Arthas原理系列(四):字节码插装让一切变得有可能Arthas原理系列(三):服务端启动流程Arthas原理系列(二):总体架构和项目入口Arthas原理系列(一):实现一个极简的Arthas watch命令虽然我们习惯于给主键ID指定AUTO_INCREMENT属性,但是AUTO_INCREMENT也是可原创 2021-01-18 08:30:12 · 304 阅读 · 0 评论 -
Builder注解不好用,试试SuperBuilder
历史文章:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口Arthas原理系列(三):服务端启动流程Arthas原理系列(四):字节码插装让一切变得有可能Arthas原理系列(五):watch命令的实现原理相信Lombok插件大家一定不会陌生,一个常用的注解是:@Builer, 它可以帮我们快速实现一个builder模式。以常见的商品模型为例:@Builder@AllArgsC原创 2021-01-04 08:28:51 · 1988 阅读 · 1 评论 -
Arthas原理系列(五):watch命令的实现原理
历史文章:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口Arthas原理系列(三):服务端启动流程Arthas原理系列(四):字节码插装让一切变得有可能前言通过前面几篇文章的介绍,我们可以看到Arthas是如何通过插装来获取运行时信息的,从这篇文章开始,我们开始看Arthas里面的命令具体是如何实现的,涉及到的命令有watch, trace, monitor, stack, ti原创 2020-12-22 08:39:28 · 2726 阅读 · 0 评论 -
Arthas原理系列(四):字节码插装让一切变得有可能
历史文章:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口Arthas原理系列(三):服务端启动流程Arthas原理系列(四):字节码插装让一切变得有可能前言在前面的文章中我们可以看到watch命令对原来的字节码进行了插装,并且我们以此为思路实现了一个简易版的watch命令,但真实的watch提供的能力远不止统计方法的运行时间,我们最常用他的一个功能还是观察方法的入参返回值等运行时原创 2020-12-09 23:35:54 · 1827 阅读 · 0 评论 -
Arthas原理系列(三):服务端启动流程
历史文章推荐:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口前言本篇文章主要讲我们在终端中敲入的命令是如何被 arthas 服务器识别并且解释的。要注意这个过程是 arthas 对所有命令执行过程的抽闲个,对于具体命令的执行过程我会在后面的系列文章中再说。arthas 服务端的启动在上一篇文章中,我们跟踪了整个 arthas 工程的入口方法:com.taobao.arthas原创 2020-12-06 20:45:38 · 1021 阅读 · 0 评论 -
Arthas原理系列(二):总体架构和项目入口
arthas原理系列文章:1. ognl语法规范:https://blog.youkuaiyun.com/DD_Dddd/article/details/1104565842. 消失的堆栈:https://blog.youkuaiyun.com/DD_Dddd/article/details/110457925Arthas 启动入口我们先从启动脚本as.sh看起,在这个脚本中首先会去列 Java 程序的 PID,用户选择之后再attach到目标 JVM 上,相关的代码是:"${java_command...原创 2020-12-02 00:09:27 · 1172 阅读 · 0 评论 -
Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令
往期热门文章:OGNL语法规范:https://blog.youkuaiyun.com/DD_Dddd/article/details/110456584前言在深入到 Arthas 的原理之前我们先看一个有趣的示例,我们依然使用前面文章中用到的代码示例,publicclassDemoApplication{publicstaticvoidmain(String[]args){for(inti=0;i<Integer.MAX_VALUE;i++)...原创 2020-12-01 23:59:31 · 2336 阅读 · 1 评论 -
消失的Java堆栈
前言这周的某天突然爆出线上查询卖家订单异常的报警,因为这个接口量比较大,赶紧排查马上介入看了下,找到日志后发现这个接口的实现抛了NPE,但是在日志里看不到堆栈。因为封网的时间已经很长了,应该不是发布导致的。但无论如何,要先定位到抛NPE的地方,才能知道是哪里出了问题消失的堆栈我们用下面的代码来做一次测试publicclassDemoApplication{publicstaticvoidmain(String[]args){//SpringApplication...原创 2020-12-01 23:53:25 · 282 阅读 · 0 评论