自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 MapStruct 1.5.0.Final发布,终于支持Map到Java bean的转换

MapStruct 1.5新特性一览

2022-06-08 23:23:49 1348

原创 包装类这颗语法糖,其实并不甜

Java包装类防坑指南

2022-06-01 23:49:36 413

原创 不用到2038年,MySql的TIMESTAMP就能把我们系统搞崩

历史文章推荐:细数ThreadLocal三大坑,内存泄露仅是小儿科Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUGConcurrentHashMap中有十个提升性能的细节,你都知道吗?HashMap面试,看这一篇就够了七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心MySql中常见的时间类型有三种DATE, DATETIME和 TIMESTAMP,其中DATE类型用于表示日期,但是不会包含时间,格式为YYYY-MM-DD,而.

2021-06-15 17:31:08 1423 1

原创 你真的了解时间吗?

历史文章推荐:不用到2038年,MySql的TIMESTAMP就能把我们系统搞崩Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUGConcurrentHashMap中有十个提升性能的细节,你都知道吗?HashMap面试,看这一篇就够了七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心时间回到2012年2月29日,微软的云产品Azure出现了一个严重的故障,部分主机停机时长达到8小时,而造成故障的原因竟是用错了时间。你真的了解闰.

2021-06-15 17:15:14 200

原创 细数ThreadLocal三大坑,内存泄露仅是小儿科

历史文章推荐:Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUGConcurrentHashMap中有十个提升性能的细节,你都知道吗?HashMap面试,看这一篇就够了七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心Java中七个潜在的内存泄露风险,你知道几个?我在参加Code Review的时候不止一次听到有同学说:我写的这个上下文工具没问题,在线上跑了好久了。其实这种想法是有问题的,ThreadLocal写错难,但是用错就.

2021-05-07 09:18:30 2081 4

原创 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 2443 1

原创 ConcurrentHashMap中有十个提升性能的细节,你都知道吗?

历史文章推荐:HashMap面试,看这一篇就够了七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?一些题外话前一篇文章我们对HashMap的实现做了详细的解析和总结,这篇文章继续剖析一下ConcurrentHashMap的实现。由于ConcurrentHashMap的内容比较多,而且Java 7和Java 8两.

2021-04-12 22:37:33 7243 9

原创 HashMap面试,看这一篇就够了

历史热门文章:七种方式教你在SpringBoot初始化时搞点事情Java序列化的这三个坑千万要小心可以和面试官聊半个小时的volatile原理Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?前言在一场面试中最能打动面试官的其实是细节,候选人对细节的了解程度决定了留给面试官的印象到底是“基础扎实”还是“基础薄弱”,如果候选人能够举一反三主动阐述自己对一些技术细节的理解和总结,那无疑是面试过程中.

2021-04-04 11:50:25 24955 28

原创 七种方式教你在SpringBoot初始化时搞点事情

历史热门文章:Java序列化的这三个坑千万要小心可以和面试官聊半个小时的volatile原理Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理我们经常需要在容器启动的时候做一些钩子动作,比如注册消息消费者,监听配置等,今天就总结下SpringBoot留给开发者的7个启动扩展点.

2021-03-30 09:28:00 2700 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 2231 5

转载 Java 多线程发展简史

历史热门文章:可以和面试官聊半个小时的volatile原理Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理引言首先问这样一个问题,如果提到 Java 多线程编程,你会想到什么?volatile、synchronized 关键字?竞争和同步?锁机制?线程安全问题?.

2021-03-25 23:15:17 289

转载 可以和面试官聊半个小时的volatile原理

原文地址:https://www.cnblogs.com/paddix/p/5428507.html作者:liuxiaopeng历史热门文章:Java中七个潜在的内存泄露风险,你知道几个?JDK 16新特性一览啥?用了并行流还更慢了InnoDB自增原理都搞不清楚,还怎么CRUD?Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理一、volatile的使用1.1 防止CPU指令重排我们从一个最经典的例子来.

2021-03-24 23:46:05 442

原创 Java中七个潜在的内存泄露风险,你知道几个?

虽然Java程序员不用像C/C++程序员那样时刻关注内存的使用情况,JVM会帮我们处理好这些,但并不是说有了GC就可以高枕无忧,内存泄露相关的问题一般在测试的时候很难发现,一旦上线流量起来,立刻就是一个线上故障。1. 内存泄露的定义如果GC无法回收内存中不再使用的对象,则定义为内存有泄露2. 未关闭的资源类当我们在程序中打开一个新的流或者是新建一个网络连接的时候,JVM都会为这些资源类分配内存做缓存,常见的资源类有网络连接,数据库连接以及IO流。值得注意的是,如果在业务处理中异常,则有可能导致程序不

2021-03-22 09:24:33 7880 2

原创 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 1317 1

原创 啥?用了并行流还更慢了

历史文章推荐:InnoDB自增原理都搞不清楚,还怎么CRUD?Lombok的Builder注解不好用,试试SuperBuilder吧Arthas原理系列(五):watch命令的实现原理Arthas原理系列(四):字节码插装让一切变得有可能Arthas原理系列(三):服务端启动流程Arthas原理系列(二):总体架构和项目入口Arthas原理系列(一):实现一个极简的Arthas watch命令前言Java 8给大家带来了一个非常便捷的多线程工具:并行流,一改往日Java多线程繁琐的编程规范

2021-03-10 09:04:57 558

原创 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 239

原创 Builder注解不好用,试试SuperBuilder

历史文章:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口Arthas原理系列(三):服务端启动流程Arthas原理系列(四):字节码插装让一切变得有可能Arthas原理系列(五):watch命令的实现原理相信Lombok插件大家一定不会陌生,一个常用的注解是:@Builer, 它可以帮我们快速实现一个builder模式。以常见的商品模型为例:@Builder@AllArgsC

2021-01-04 08:28:51 1634 1

原创 Arthas原理系列(五):watch命令的实现原理

历史文章:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口Arthas原理系列(三):服务端启动流程Arthas原理系列(四):字节码插装让一切变得有可能前言通过前面几篇文章的介绍,我们可以看到Arthas是如何通过插装来获取运行时信息的,从这篇文章开始,我们开始看Arthas里面的命令具体是如何实现的,涉及到的命令有watch, trace, monitor, stack, ti

2020-12-22 08:39:28 2302

原创 Arthas原理系列(四):字节码插装让一切变得有可能

历史文章:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口Arthas原理系列(三):服务端启动流程Arthas原理系列(四):字节码插装让一切变得有可能前言在前面的文章中我们可以看到watch命令对原来的字节码进行了插装,并且我们以此为思路实现了一个简易版的watch命令,但真实的watch提供的能力远不止统计方法的运行时间,我们最常用他的一个功能还是观察方法的入参返回值等运行时

2020-12-09 23:35:54 1507

原创 Arthas原理系列(三):服务端启动流程

历史文章推荐:OGNL语法规范消失的堆栈Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令Arthas原理系列(二):总体架构和项目入口前言本篇文章主要讲我们在终端中敲入的命令是如何被 arthas 服务器识别并且解释的。要注意这个过程是 arthas 对所有命令执行过程的抽闲个,对于具体命令的执行过程我会在后面的系列文章中再说。arthas 服务端的启动在上一篇文章中,我们跟踪了整个 arthas 工程的入口方法:com.taobao.arthas

2020-12-06 20:45:38 842

原创 Arthas原理系列(二):总体架构和项目入口

arthas原理系列文章:1. ognl语法规范:https://blog.csdn.net/DD_Dddd/article/details/1104565842. 消失的堆栈:https://blog.csdn.net/DD_Dddd/article/details/110457925Arthas 启动入口我们先从启动脚本as.sh看起,在这个脚本中首先会去列 Java 程序的 PID,用户选择之后再attach到目标 JVM 上,相关的代码是:"${java_command...

2020-12-02 00:09:27 1047

原创 Arthas原理系列(一):利用JVM的attach机制实现一个极简的watch命令

往期热门文章:OGNL语法规范:https://blog.csdn.net/DD_Dddd/article/details/110456584前言在深入到 Arthas 的原理之前我们先看一个有趣的示例,我们依然使用前面文章中用到的代码示例,publicclassDemoApplication{publicstaticvoidmain(String[]args){for(inti=0;i<Integer.MAX_VALUE;i++)...

2020-12-01 23:59:31 2142 1

原创 消失的Java堆栈

前言这周的某天突然爆出线上查询卖家订单异常的报警,因为这个接口量比较大,赶紧排查马上介入看了下,找到日志后发现这个接口的实现抛了NPE,但是在日志里看不到堆栈。因为封网的时间已经很长了,应该不是发布导致的。但无论如何,要先定位到抛NPE的地方,才能知道是哪里出了问题消失的堆栈我们用下面的代码来做一次测试publicclassDemoApplication{publicstaticvoidmain(String[]args){//SpringApplication...

2020-12-01 23:53:25 203

原创 OGNL语法规范

1 什么是OGNLOGNL(Object-Graph Navigation Language)是一种表达式语言(EL),简单来说就是一种简化了的Java属性的取值语言,在传统的Struts框架,以及MyBatis中都有大量使用,开源Java诊断利器Arthas也使用它做表达式过滤,简单但不失灵活的设计衍生出来了好多高阶玩法。更多ognl的使用可以看下知乎回答《ognl表达式,只能用在struts标签中吗?可以用在什么地方,怎么个用法,相比于el表达式有什么优点,缺点?》:https://www.zh

2020-12-01 23:50:51 730

原创 C++中的单例模式

单线程版本template&amp;amp;amp;lt;typename T&amp;amp;amp;gt;class Singleton {public: T &amp;amp;amp;amp;getInstance() { if (value_ == nullptr) {//判断语句 vaule_ = new T(); } return *value_; }pr...

2018-06-11 10:40:12 240

原创 分享一个有趣的BUG

题目来源:Triangle 这道题目并不复杂, 要求求出一个数字组成的等腰三角形中从底到顶点的最小路径和,这里的路径的父子关系指的是三角形中的每个元素与下一层相邻的两个元素:[ [2], [3,4], [6,5,7], [4,1,8,3]]比如在上面的例子中第二行的第一个元素3可以和第三层的6, 5相通, 但是不能和7相通。方法一:写法上最简单, 时...

2018-04-08 16:20:46 1018

原创 C++中特殊的临时变量

C++中特殊的临时变量C++中产生的临时变量主要产生于计算表达式中间, 函数传参或者返回时候的类型转换中间, 旧一点的书上说在C++中产生的临时变量默认的是const的, 很容易让人产生混乱。先说结论, C++中间的临时变量并不是const的,之所以大家有这样的困惑大概是经常能碰到下面的这段代码:void f(int &amp;x){}void g(const int &amp;x){}...

2018-03-23 21:58:13 495

原创 C++对象在64位机器上的内存布局

前两天读了陈皓两篇关于虚函数表的博客, 正如他在博客中说的那样, 由于年代久远, 所有的测试代码都是在32位机上跑的, 按照作者的思路, 针对64位机, 我仿写了那些代码, 在移植到64位的过程中碰到了一些坑, 也学到了一些小工具, 现在记录在这里。1. 如何在GCC环境下得到类在内存中的布局:只要我们在编译的时候加上-fdump-class-hierarchy选项, 就可以在源文件件的同

2018-01-10 15:47:36 722

原创 function适配可调用对象的陷阱

function对象是一个很适用的适配器, 只要函数的调用类型相同就可以用同一个function对象表示,堪称万金油, 但需要注意的是有时候参数的const属性会影响function对象的表现, 比如有下面的例子:void foo(const int *p) { cout "const" << endl;}void bar(int *p) { cout "nomal"

2018-01-07 19:58:38 283

原创 std::bind()详解

在《C++ Primer》中关于std::bind()的用法主要是调整函数的参数个数以及参数顺序, 本文展示了std::bind()如何绑定类的成员。根据cppreference的描述, std::bind()可绑定的对象有: Callable object (function object, pointer to function, reference to function, poin

2018-01-06 16:13:03 5137

原创 C++中的类型转换细节

我们在C++常用四种类型转换: static_cast, const_cast,reinterpret_cast,以及dynamic_cast。其中static_cast转换如果出错, 则发生在编译时, 其他三种类型转换需要谨慎, 使用了他们代表着程序员事先清楚运行时不会出现错误。static_cast主要用于下面三种情况: 1. void指针转换为目标指针或者相反 2. 改变通常的标

2018-01-05 18:20:56 271

原创 如何做大数乘法?

当运算的数据量超过语言自身的基本类型能表达的范围的时候就,那些内置的运算就没法进行了,需要我们另外想办法。如果给我们两个代表正整数的字符串,我们如何快速得到代表它们两个乘积的字符串呢?

2016-11-09 20:54:34 437

原创 数组区间和的一种变体

这组问题依然来自leetcode,题目的背景是这样的: 给定一个数组代表一个街上的所有人家,每个数字代表小偷可以从这家得到的钱数,并且侵入相连的两家都会导致他们报警,那么问题来了,这篇文章的题目应该是如何抢劫吗?不瞒您说,还真是。那怎么安排“做事”的顺序才能使得今晚得到的财富最多呢?如果允许连续抢劫,那不就是数组区间和的问题么(有关数组区间和的问题,见另一篇博客如何找到区间数组的最大和?最大积?),

2016-11-04 12:08:00 395

原创 浅说二叉树路径和

当我们沿着二叉树遍历的时候可以记录经过的节点,并且把这些节点的和加起来,这个和就是路径和。遍历的路径可以从根节点开始,也可以更加宽泛,从任何一个节点开始,只要方向是从双亲节点向孩子节点就行。与路径和最相关的问题就是找指定和的路径,如果从根节点开始,找一个二叉树中是否有路径的路径和与给定数字相同,应该怎么找呢,这个问题并不难,先看代码:public boolean hasPathSum(TreeNo

2016-11-02 19:37:49 339

原创 如何用Boyer–Moore选举算法解决问题?

Boyer–Moore选举算法是一个经典的用于找一组元素中出现次数超过元素个数一半的算法,该算法有线性时间复杂度和常数空间复杂度,是从现实生活中的选举问题抽象出来的。

2016-10-27 11:25:13 545

原创 如何找到区间数组的最大和?最大积?

给定一个整数数组,需要找一个子数组,使得该子数组的和是所有的子数组里边最大的,或者该子数组相乘的积是所有的子数组中最大的。 先看前者,求和具有最优子结构,也就是说前n个元素的最大和子区间和前n+1个元素的最大和子区间是有关系的,如果我们用dp[k]记录前n个数组元素中的最大和,并且规定这个子区间的最后一个元素必须是n,那么当我们计算的数组长度扩展为k+1的时候就需要考量dp[k]了,如果

2016-10-26 21:59:28 1407

原创 如何找到二叉树两个节点的最近公共双亲?

二叉树中两个节点的最近公共双亲(Lowest Common Ancestor)是所有这两个节点的双亲节点中离根节点最远的节点,如果其中一个节点是另一个节点的双亲节点,那么符合这个定义的节点就是这个双亲节点,如何快速简单的找到任意的两个节点的最近公共双亲节点是这里要讨论的话题。

2016-10-26 17:08:40 5417

原创 如何合并两个已排序的表?

这里的表可以是数组或者是链表等,并且已经从小到大排好顺序,我们的任务就是将这两个表合并成一个表。

2016-10-26 16:08:42 632

原创 如何运用反向思维解决问题?

Codeforces Round #370 (Div. 2)C. Memory and De-Evolution 解题思路和两种实现,以及针对反向思考的一个拓展。

2016-09-27 15:59:44 794

原创 应用ruby打造个性化的有道单词本 (二)

在上一篇文章中,我们做了最基本的事情,我们自己写处理URL重定向的代码,我们自己保存这cookie,感觉很累是吧,其实的确是这样的。并且,文章的题目不是”打造个性化的又到单词本“,如果只是把最原始的html文档抓取下来,谈何个性化,应该换名成复古化吧。其实在ruby的世界里,有很多现成的包可以用的,由于gem的出现,各种包的管理更加方便了,就我们在第一篇文章中做的这些事情用mechanize这个包就可以做的很简单。

2016-05-05 21:36:50 832

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除