自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序那些事

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在程序那些事!...

原创 巧用HashMap一行代码统计单词出现次数

JDK是在一直在迭代更新的,很多我们熟悉的类也悄悄的添加了一些新的方法特性。比如我们最常用的HashMap。 今天给大家讲一下HashMap在JDK8中添加的两个新方法compute和merge,从而实现一行代码实现单词统计的功能。一起来看看吧。

2020-08-30 16:37:21 4307 8

原创 java安全编码指南之:拒绝Denial of Service

DOS不是那个windows的前身,而是Denial of Service,有做过系统安全方面的小伙伴可能对这个再熟悉不过了,简单点讲,DOS就是服务型响应不过来,从而拒绝了正常的服务请求。 今天本文不是要讲怎么发起一个DOS攻击,而是讲一下怎么在java的代码层面尽量减少DOS的可能性。

2020-08-27 09:58:43 3919 4

原创 java安全编码指南之:基础篇

作为一个程序员,只是写出好用的代码是不够的,我们还需要考虑到程序的安全性。在这个不能跟陌生人说话世界,扶老奶奶过马路都是一件很困难的事情。那么对于程序员来说,尤其是对于开发那种对外可以公开访问的网站的程序员,要承受的压力会大很多。 任何人都可以访问我们的系统,也就意味着如果我们的系统不够健壮,或...

2020-08-25 09:54:28 5516 5

原创 看动画学算法之:平衡二叉搜索树AVL Tree

平衡二叉搜索树是一种特殊的二叉搜索树。为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表。从而导致搜索的时间复杂度变为O(n),其中n是二叉搜索树的节点个数。 而平衡二叉搜索树正是为了解决这个问题而产生的,它通...

2020-08-24 10:14:55 137 6

原创 在java中使用SPI创建可扩展的应用程序

什么是可扩展的应用程序呢?可扩展的意思是不需要修改原始代码,就可以扩展应用程序的功能。我们将应用程序做成插件或者模块。 这样可以在不修改原应用的基础上,对系统功能进行升级或者定制化。 本文将会向大家介绍如何通过java中的SPI机制实现这种可扩展的应用程序。

2020-08-22 11:52:10 4924 8

原创 一文读懂jar包的小秘密

java程序员每天不是在创建jar包就是在创建jar包的路上,并且各种依赖引用都是以jar包的形式展示的。但是随着现代IDE的出现,我想很多程序员已经基本上很少直接和jar包打交道了。 换句话说,他们已经不认识jar包了。 那么jar包到底是什么呢?它有哪些小秘密呢?一起来看一下吧。

2020-08-20 09:05:12 3965 8

原创 troubleshoot之:GC调优到底是什么

我们经常会听到甚至需要自己动手去做GC调优。那么GC调优的目的到底是什么呢?让程序跑得更快?让GC消耗更少的资源?还是让程序更加稳定? 带着这些疑问来读一下这篇文章,将会得到一个系统的甚至是不一样的结果。

2020-08-18 07:44:10 4066 5

原创 troubleshoot之:使用JFR分析性能问题

文章目录简介GC性能事件同步性能IO性能代码执行的性能其他有用的event 简介 java程序的性能问题分析是一个很困难的问题。尤其是对于一个非常复杂的程序来说,分析起来更是头疼。 还好JVM引入了JFR,可以通过JFR来监控和分析JVM的各种事件。通过这些事件的分析,我们可以找出潜在的问题。 今...

2020-08-16 09:04:54 4121 5

原创 troubleshoot之:分析OutOfMemoryError异常

文章目录简介OutOfMemoryErrorjava.lang.OutOfMemoryError: Java heap spacejava.lang.OutOfMemoryError: GC Overhead limit exceededjava.lang.OutOfMemoryError: Re...

2020-08-14 10:10:05 4192 5

原创 看动画学算法之:二叉搜索树BST

文章目录简介BST的基本性质BST的构建BST的搜索BST的插入BST的删除 看动画学算法之:二叉搜索树BST 简介 树是类似于链表的数据结构,和链表的线性结构不同的是,树是具有层次结构的非线性的数据结构。 树是由很多个节点组成的,每个节点可以指向很多个节点。 如果一个树中的每个节点都只有0,1,...

2020-08-13 19:29:19 132 6

原创 troubleshoot之:使用JFR解决内存泄露

文章目录简介一个内存泄露的例子使用JFR和JMC来分析内存泄露OldObjectSample总结 简介 虽然java有自动化的GC,但是还会有内存泄露的情况。当然java中的内存泄露跟C++中的泄露不同。 在C++中所有被分配的内存对象都需要要程序员手动释放。但是在java中并不需要这个过程,一切...

2020-08-12 09:30:06 4212 5

原创 troubleshoot之:用control+break解决线程死锁问题

文章目录简介死锁的代码control+break命令Full thread dump死锁检测Heap信息总结 简介 如果我们在程序中遇到线程死锁的时候,该怎么去解决呢? 本文将会从一个实际的例子出发,一步一步的揭开java问题解决的面纱。 死锁的代码 写过java多线程程序的人应该都知道,多线程中...

2020-08-08 21:50:30 4375 6

原创 JVM系列之:再谈java中的safepoint

文章目录safepoint是什么safepoint的例子线程什么时候会进入safepointsafepoint是怎么工作的总结 safepoint是什么 java程序里面有很多很多的java线程,每个java线程又有自己的stack,并且共享了heap。这些线程一直运行呀运行,不断对stack和h...

2020-08-07 09:54:47 5892 7

原创 JVM系列之:从汇编角度分析NullCheck

文章目录简介一个普通的virtual call普通方法中的null check反优化的例子总结 简介 之前我们在讲Virtual call的时候有提到,virtual call方法会根据传递的参数实例的不同而进行优化,从而优化成为classic call,从而提升执行效率。 今天我们考虑一下,在v...

2020-08-06 07:42:39 150 2

原创 JVM系列之:从汇编角度分析Volatile

文章目录简介重排序写的内存屏障非lock和LazySet读的性能总结 简介 Volatile关键字对熟悉java多线程的朋友来说,应该很熟悉了。Volatile是JMM(Java Memory Model)的一个非常重要的关键词。通过是用Volatile可以实现禁止重排序和变量值线程之间可见两个主...

2020-08-05 09:57:16 204 3

原创 看动画学算法之:hashtable

文章目录简介散列表的关键概念数组和散列表数组的问题hash的问题线性探测二次探测双倍散列分离链接rehash 简介 java中和hash相关并且常用的有两个类hashTable和hashMap,两个类的底层存储都是数组,这个数组不是普通的数组,而是被称为散列表的东西。 散列表是一种将键映射到值的数...

2020-08-04 13:50:31 5053 3

原创 JVM系列之:JIT中的Virtual Call接口

文章目录简介最常用的接口List多个List的调用不一样的List调用总结 简介 上一篇文章我们讲解了Virtual Call的定义并举例分析了Virtual Call在父类和子类中的优化。 JIT对类可以进行优化,那么对于interface可不可以做同样的优化么? 一起来看看吧。 最常用的接口L...

2020-08-04 09:05:24 4675 2

原创 JVM系列之:JIT中的Virtual Call

文章目录简介Virtual Call和它的本质Virtual Call和classic callVirtual Call优化单实现方法的例子Virtual Call优化多实现方法的例子总结 简介 什么是Virtual Call?Virtual Call在java中的实现是怎么样的?Virtual ...

2020-08-03 10:36:36 5034 4

原创 JVM详解之:类的加载链接和初始化

文章目录简介加载运行时常量池类加载器链接验证准备解析初始化总结 简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化的过程。 这三个过程是怎么工作的呢?在本文中你将会找到答案。 加载 JVM可以分为三大部分,五大空间和三大引擎,要...

2020-08-01 17:53:16 4721 2

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