liuzhihang_社区达人页

个人头像照片
liuzhihang
已加入开发者社区2037

勋章 更多

个人头像照片
专家博主
专家博主
个人头像照片
星级博主
星级博主
个人头像照片
技术博主
技术博主
个人头像照片
开发者认证勋章
开发者认证勋章
个人头像照片
初入江湖
初入江湖

成就

已发布91篇文章
1条评论
已回答0个问题
0条评论
已发布0个视频
github地址

我关注的人 更多

技术能力

兴趣领域
  • Java
  • 前端开发
  • Linux
  • 数据库
擅长领域
  • Java
    高级

    能力说明:

    精通JVM运行机制,包括类生命、内存模型、垃圾回收及JVM常见参数;能够熟练使用Runnable接口创建线程和使用ExecutorService并发执行任务、识别潜在的死锁线程问题;能够使用Synchronized关键字和atomic包控制线程的执行顺序,使用并行Fork/Join框架;能过开发使用原始版本函数式接口的代码。

技术认证

暂时未有相关云产品技术能力~

个人公众号:『 程序员小航 』

暂无精选文章
暂无更多信息

2022年05月

  • 05.25 16:03:47
    发表了文章 2022-05-25 16:03:47

    Spring 源码学习 08:register 注册配置类

    看完无参构造的源码及流程之后,后面将会执行 register 方法。
  • 05.25 16:02:05
    发表了文章 2022-05-25 16:02:05

    Spring 源码学习 07:ClassPathBeanDefinitionScanner

    AnnotationConfigApplicationContext 构造函数除了初始化一个 reader ,还有一个 scanner,下面来一起看看 ClassPathBeanDefinitionScanner 都有什么逻辑。
  • 05.25 15:59:30
    发表了文章 2022-05-25 15:59:30

    Spring 源码学习 06:AnnotatedBeanDefinitionReader

    BeanDefinition 的概念也了解了,也知道一个 Bean 在 Spring 中定义的信息有哪些之后,继续言归正传。
  • 05.25 15:58:03
    发表了文章 2022-05-25 15:58:03

    Spring 源码学习 05:BeanDefinition 概念及其实现

    BeanDefinition:顾名思义,就是 Bean 的定义,是用来描述一个 Bean 都有什么信息。前面说在初始化 DefaultListableBeanFactory 时,会初始化一个 Map<String, BeanDefinition>,这个 Map 的功能暂且不说,(PS:查资料说的是存储 bean),所以今天就结合官方文档以及源码,一起了解一下 BeanDefinition!
  • 05.25 15:55:57
    发表了文章 2022-05-25 15:55:57

    Spring 源码学习 04:初始化容器与 DefaultListableBeanFactory

    在前一篇文章:创建 IoC 容器的几种方式中,介绍了四种方式,这里以 AnnotationConfigApplicationContext 为例,跟进代码,看看 IoC 的启动流程。
  • 05.25 15:54:06
    发表了文章 2022-05-25 15:54:06

    Spring 源码学习 03:创建 IoC 容器的几种方式

    在上一篇文章末尾画了一幅简图,现在从简图这入手,先来看看如何创建容器!
  • 05.25 15:52:20
    发表了文章 2022-05-25 15:52:20

    Spring 源码学习 02:关于 Spring IoC 和 Bean 的概念

    在前一篇文章中介绍了如何构建源码阅读环境,既然构建好了源码环境,本地也可以正常运行,那就开始阅读源码吧! 在阅读源码时,会参考官方文档,很多概念在官网都可以得到答案,有兴趣的小伙伴们可以继续阅读,当做复习,写的不足之处,希望多多指导
  • 05.25 15:50:02
    发表了文章 2022-05-25 15:50:02

    Spring 源码阅读环境的搭建

    本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑!当前版本:5.3.2-SNAPSHOT。
  • 05.25 15:48:18
    发表了文章 2022-05-25 15:48:18

    DocView 现在支持自定义 Markdown 模版了!

    有小伙伴反馈说希望可以自定义 Markdown 模版,这样就可以导出自己想要的样式了!这个功能可以有,毕竟大家不可能都生成一模一样的文档。现在来一起看看如何实现自定义模版吧!
  • 05.25 15:47:01
    发表了文章 2022-05-25 15:47:01

    Dubbo 接口,导出 Markdown ,这些功能 DocView 现在都有了!

    自从 DocView 发布了简陋的第一版之后,就不断地有小伙伴提建议意见等等,希望扩展各种功能。这不,时隔两周,DocView 又发布了新版本,本次的更新主要涉及到支持 Dubbo,以及支持导出单个文档为 Markdown 文件。来一起看看新功能吧!
  • 05.25 15:45:11
    发表了文章 2022-05-25 15:45:11

    线程池 ThreadPoolExecutor 原理及源码笔记

    前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理。
  • 05.25 15:42:59
    发表了文章 2022-05-25 15:42:59

    Spring 自调用事务失效,你是怎么解决的?

    相信大家都遇到一种事务失效场景,那就是 Spring 自调用,就是在 Service 方法内,调用另一个加 @Transactional 注解的方法,发现事务失效,这时候你是怎么解决的呢?
  • 05.25 15:38:43
    发表了文章 2022-05-25 15:38:43

    写文档太麻烦,试试这款 IDEA 插件吧!

    每次开发完新项目或者新接口功能等,第一件事就是提供接口文档。说到接口文档,当然是用 Markdown 了。各种复制粘贴字段,必填非必填,字段备注,请求返回示例等等。简直是浪费时间哇。所以想到了开发一款插件来解决重复复制文档的问题。下面来看我介绍介绍这款插件。 PS:插件比较简陋,还需要不断迭代。
  • 05.25 15:34:35
    发表了文章 2022-05-25 15:34:35

    写时复制集合 —— CopyOnWriteArrayList

    JUC 下面还有一个系列的类,都是 CopyOnWriteXXX ,意思是写时复制,这个究竟是怎么回事?那就以 CopyOnWriteArrayList 为切入点,一起了解写时复制是怎么回事?
  • 05.25 15:32:10
    发表了文章 2022-05-25 15:32:10

    非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue

    JUC 下面的相关源码继续往下阅读,这就看到了非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue,来一起看看吧。
  • 05.25 15:30:05
    发表了文章 2022-05-25 15:30:05

    APP 莫名崩溃,开始以为是 Header 中 name 大小写的锅,最后发现原来是容器的错!

    本文主要是分析生产遇到的一个问题,然后开始探究原因,开始的时候发现是 Spring 的原因,因为使用 Map 接收时, headerName 什么格式就是什么格式。 在自己写 demo 时又发现,原来和 Spring 的关系并不大,是容器的原因。不同的容器处理方式不同。所以总结出来相关文章,供大家参考,不足之处,欢迎指正。
  • 05.25 15:25:58
    发表了文章 2022-05-25 15:25:58

    几行代码轻松实现跨系统传递 traceId,再也不用担心对不上日志了!

    新项目查日志太麻烦,多台机器之间查来查去,还不知道是不是同一个请求的。打印日志时使用 MDC 在日志上添加一个 traceId,那这个 traceId 如何跨系统传递呢?
  • 05.25 15:23:55
    发表了文章 2022-05-25 15:23:55

    MySQL 建表为啥设置自增 id?用流水号当主键不正好么?

    本文主要通过查阅资料,了解为什么要设置一个和业务无关的自增 id 用来当做主键,很多内容比较浅显,比如 InnoDB 的 B+ 树,页分裂及页合并,插入过程等都没有进行深入研究,有兴趣的小伙伴可以更深入的研究下。 同时在建表时除了要设置一个自增 id 用来当做主键,小伙伴们在业务开发过程中是否也会遇到一种情况:用户的注销,数据的删除等都是进行的逻辑删除,而不是物理删除。 本篇文章介绍比较简陋,不足之处,希望大家多多指正。
  • 05.25 15:21:22
    发表了文章 2022-05-25 15:21:22

    基于链表的有界阻塞队列 —— LinkedBlockingQueue

    上一节看了基于数据的有界阻塞队列 ArrayBlockingQueue 的源码,通过阅读源码了解到在 ArrayBlockingQueue 中入队列和出队列操作都是用了 ReentrantLock 来保证线程安全。下面咱们看另一种有界阻塞队列:LinkedBlockingQueue。
  • 05.25 15:18:35
    发表了文章 2022-05-25 15:18:35

    AQS 都看完了,Condition 原理可不能少!

    在介绍 AQS 时,其中有一个内部类叫做 ConditionObject,当时并没有进行介绍,并且在后续阅读源码时,会发现很多地方用到了 Condition ,这时就会很诧异,这个 Condition 到底有什么作用?那今天就通过阅读 Condition 源码,从而弄清楚 Condition 到底是做什么的?当然阅读这篇文章的时候希望你已经阅读了 AQS、ReentrantLock 以及 LockSupport 的相关文章或者有一定的了解(当然小伙伴也可以直接跳到文末看总结)。
  • 05.25 15:15:45
    发表了文章 2022-05-25 15:15:45

    基于数组的有界阻塞队列 —— ArrayBlockingQueue

    在阅读完和 AQS 相关的锁以及同步辅助器之后,来一起阅读 JUC 下的和队列相关的源码。先从第一个开始:ArrayBlockingQueue。
  • 05.25 15:13:14
    发表了文章 2022-05-25 15:13:14

    使用递增计数器的线程同步工具 —— 信号量,它的原理是什么样子的?

    在 JUC 中线程同步器除了 CountDownLatch 和 CycleBarrier ,还有一个叫做 Semaphore (信号量),同样是基于 AQS 实现的。下面来看看信号量的内部原理。
  • 05.25 15:10:48
    发表了文章 2022-05-25 15:10:48

    你有没有想过为什么交易和退款要拆开不同的表?

    近期做新项目,在设计表结构的时候,突然想起来之前面试的时候遇到的一个问题,那时候也是初出茅庐,对很多东西一知半解(当然现在也是),当时那个小哥哥问我为什么交易和退款要拆成两个表?是基于什么考虑?有什么好处和优点么?
  • 05.25 15:08:15
    发表了文章 2022-05-25 15:08:15

    CyclicBarrier 不就是比 CountDownLatch 多了个回环么?

    看完 CountDownLatch 正准备表示一番,突然看到了一个 CyclicBarrier —— 回环屏障。沃特?回环还屏障?说比 CountDownLatch 要多一个回环,那咱可得瞧一瞧,看一看了!
  • 05.25 14:26:24
    发表了文章 2022-05-25 14:26:24

    快来看看!AQS 和 CountDownLatch 有怎么样的关系?

    CountDownLatch 一个同步辅助工具,同样是基于 AQS 实现,本篇文件主要是介绍 CountDownLatch 的使用,以及源码。
  • 05.25 14:24:10
    发表了文章 2022-05-25 14:24:10

    给大家介绍下,这是我的流程图软件 —— draw.io

    之前推了一篇文章《十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!》,很多小伙伴都比较好奇在文章中的图是用的什么画图软件?看那么明显的手绘风格,当然是手画的啦!(开玩笑),其实我用的是 draw.io ,下面分享我的画图软件 —— draw.io 。
  • 05.25 14:22:02
    发表了文章 2022-05-25 14:22:02

    【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!

    说到 Elasticsearch ,其中最明显的一个特点就是 near real-time 准实时 —— 当文档存储在Elasticsearch中时,将在1秒内以几乎实时的方式对其进行索引和完全搜索。那为什么说 ES 是准实时的呢?
  • 05.25 14:15:00
    发表了文章 2022-05-25 14:15:00

    【Elasticsearch 技术分享】—— ES 查询检索数据的过程

    ES 使用过程中常用的就是查询以及检索,那查询和检索的过程,什么样的呢?
  • 05.25 14:13:07
    发表了文章 2022-05-25 14:13:07

    【Elasticsearch 技术分享】—— Elasticsearch 存储一条数据, put 过程是什么样子的?

    在前面已经介绍了 ES 中常用的一些名词,知道了数据是存储在 shard 中的,而 index 会映射一个或者多个 shard 。那这时候我要存储一条数据到某个索引下,这条数据是在哪个 index 下的呢?
  • 05.25 14:11:18
    发表了文章 2022-05-25 14:11:18

    【Elasticsearch 技术分享】—— ES 常用名词及结构

    看完什么是 Elasticsearch 以及了解到了倒排索引的概念,下面就熟悉下 ES 中常用的一些名词。
  • 05.25 14:09:57
    发表了文章 2022-05-25 14:09:57

    【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?

    革命同志是块砖,哪里需要哪里搬!这不,老大发话,要我在组内做一个 Elasticsearch 技术分享。这不话题一转,开始看起来 ES 了。虽然很久之前用过 ELK 做过日志监控系统,但是毕竟时隔已久,还是得从头看起。当然手头的活也不能停,话不多说,开始分享。先看看什么是 ES?
  • 05.25 14:08:39
    发表了文章 2022-05-25 14:08:39

    除了读写锁,JUC 下面还有个 StampedLock!还不过来了解一下么?

    在了解完 ReentrantLock 和 ReentrantReadWriteLock 之后,惊奇的发现 JUC 下还有一个 StampedLock 。 查阅资料发现是 JDK8 新增的一个锁。现在已经 JDK15 了,原谅我的孤陋寡闻,实在是业务开发中用的太少。那行吧,赶紧来看一下 StampedLock 到底是什么?为什么有了 ReentrantLock 和 ReentrantReadWriteLock 之后还要设计一个 StampedLock ?
  • 05.25 14:06:58
    发表了文章 2022-05-25 14:06:58

    小伙伴想写个 IDEA 插件么?这些 API 了解一下!

    在看完 IDEA 插件开发简易教程后,小伙伴们是否迫不及待的想自己上手整一个插件了?心里规划好了一二三,但是却不知道从哪里开始下手。下面我分享下自己整理的一些常用的 API。
  • 05.25 14:02:23
    发表了文章 2022-05-25 14:02:23

    IDEA 插件找不到?看这里!那就自己敲一个!

    大家都经常使用 IDEA 进行开发,肯定会使用一些 IDEA 插件,我之前也写过两个插件,不过已经很久没有更新了,就让它先放着吧! 那小伙伴你是否想亲手写一个插件,或者你是否有一些插件的想法,但是找不到插件。那就自己实现一个吧!
  • 05.25 14:00:11
    发表了文章 2022-05-25 14:00:11

    快进来!花几分钟看一下 ReentrantReadWriteLock 的原理!

    在看完 ReentrantLock 之后,在高并发场景下 ReentrantLock 已经足够使用,但是因为 ReentrantLock 是独占锁,同时只有一个线程可以获取该锁,而很多应用场景都是读多写少,这时候使用 ReentrantLock 就不太合适了。读多写少的场景该如何使用?在 JUC 包下同样提供了读写锁 ReentrantReadWriteLock 来应对读多写少的场景。
  • 05.25 13:57:20
    发表了文章 2022-05-25 13:57:20

    不能再被问住了!ReentrantLock 源码、画图一起看一看!

    在阅读完 JUC 包下的 AQS 源码之后,其中有很多疑问,最大的疑问就是 state 究竟是什么含义?并且 AQS 主要定义了队列的出入,但是获取资源、释放资源都是交给子类实现的,那子类是怎么实现的呢?下面开始了解 ReentrantLock。
  • 05.25 13:53:46
    发表了文章 2022-05-25 13:53:46

    老大说新项目的结构和 xxx 项目一样就可以了,我 ……(二)

    又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了。
  • 05.25 13:53:43
    发表了文章 2022-05-25 13:53:43

    老大说新项目的结构和 xxx 项目一样就可以了,我 ……(一)

    又要开发新项目了,还是创建新项目,怎么办?老大说按照 xxx 项目的结构创建一个新项目就可以了。
  • 05.25 13:45:12
    发表了文章 2022-05-25 13:45:12

    别走!这里有个笔记:图文讲解 AQS ,一起看看 AQS 的源码……(图文较长)(二)

    AbstractQueuedSynchronizer 抽象队列同步器,简称 AQS 。是在 JUC 包下面一个非常重要的基础组件,JUC 包下面的并发锁 ReentrantLock CountDownLatch 等都是基于 AQS 实现的。所以想进一步研究锁的底层原理,非常有必要先了解 AQS 的原理。
  • 05.25 13:45:10
    发表了文章 2022-05-25 13:45:10

    别走!这里有个笔记:图文讲解 AQS ,一起看看 AQS 的源码……(图文较长)(一)

    AbstractQueuedSynchronizer 抽象队列同步器,简称 AQS 。是在 JUC 包下面一个非常重要的基础组件,JUC 包下面的并发锁 ReentrantLock CountDownLatch 等都是基于 AQS 实现的。所以想进一步研究锁的底层原理,非常有必要先了解 AQS 的原理。
  • 05.25 13:38:32
    发表了文章 2022-05-25 13:38:32

    GitHub 刚出来个彩蛋!快过来看一看!手把手一起弄一个!

    正常情况下咱们的首页都是展示的 Pinned 首页的一个仓库,以及下面自己提交的历史。 但是现在有了这个彩蛋,你可以让你的首页更加华丽,想怎么造就怎么造,只需两步,把你的个人简历塞进 GitHub 首页,让更多同性好友了解你!
  • 发表了文章 2022-09-28

    打印 Logger 日志时,需不需要再封装一下工具类?

  • 发表了文章 2022-06-20

    告别手写,使用 Doc View 快速生成接口文档

  • 发表了文章 2022-06-16

    集成测试时 MockMvc 无法注入

  • 发表了文章 2022-06-07

    如何删除 git 仓库中的 .idea 文件?

  • 发表了文章 2022-05-25

    使用 awk 命令统计文本

  • 发表了文章 2022-05-25

    从单机定时到多层分发

  • 发表了文章 2022-05-25

    并发场景加锁优化小技巧

  • 发表了文章 2022-05-25

    依赖 jar 没有传递,导致找不到类文件而启动失败了

  • 发表了文章 2022-05-25

    ZooKeeper 分布式锁 Curator 源码 05:分布式读写锁和联锁

  • 发表了文章 2022-05-25

    ZooKeeper 分布式锁 Curator 源码 04:分布式信号量和互斥锁

  • 发表了文章 2022-05-25

    ZooKeeper 分布式锁 Curator 源码 03:可重入锁并发加锁

  • 发表了文章 2022-05-25

    ZooKeeper 分布式锁 Curator 源码 02:可重入锁重复加锁和锁释放

  • 发表了文章 2022-05-25

    ZooKeeper 分布式锁 Curator 源码 01:可重入锁

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 11:Semaphore 和 CountDownLatch

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 10:读写锁

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 09:RedLock 红锁的故事

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 08:MultiLock 加锁与锁释放

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 07:公平锁释放

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 06:公平锁排队加锁

  • 发表了文章 2022-05-25

    Redisson 分布式锁源码 05:公平锁加锁

正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息
正在加载, 请稍后...
暂无更多信息