![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 53
Mairuis
站在巨人的肩膀上
展开
-
有意思的ThreadLocal内存泄露
写完这篇我再也不用CSDN了接近007的工作制度让我没有自己的时间做自己的事。更别提自己建个博客网站了。。。唉。正文天呐,在这家公司写CRUD写的我都忘了ThreadLocal实现原理了(DougLea是不是要气死)。今天好不容易有个假期,来复习一下吧。这个例子没测试过,我是随便写了个示范供自己记忆。public class ThreadLocalMemoryLeak { ...原创 2020-04-25 19:50:03 · 172 阅读 · 0 评论 -
【算法】【图论】拓扑排序
引言发现普林斯顿那本算法和算法导论都侧重于用介绍用DFS实现拓扑排序,所以这一篇文章我们来着重套路下用队列实现拓扑排序的Khan算法。核心思想有向图中的每个节点有入度和出度这两个属性,如一个只包含a和b的有向图中,a到b有且仅有一条边则称b的入度等于 1,而a的出度为1。出度为0的顶点不可能到达其他的顶点,这样的顶点称为终点(sink),同样入度为0的顶点不可能被任何其他顶点到达,这样的顶点...原创 2019-06-16 22:25:20 · 297 阅读 · 0 评论 -
【算法】【只有自己看得懂系列】玩转二叉堆
二叉堆的性质(以最小堆为例)每个子节点必须小于等于根节点堆结构必须是一颗满二叉树应用优先队列预排序Java实现package mairuis.algorithm.heap;/** * 最小堆 * 性质: * 1.每个子节点都小于等于其父节点 * * @author Mairuis * @date 2019/5/23 */public class MinHe...原创 2019-05-24 11:02:22 · 118 阅读 · 0 评论 -
【HashMap扩容相关的蛛丝马迹】位运算与取模的奇妙关系
如何给定一个数保证输出一定是大于输入值的2的最小幂?HashMap的tableSizeFor实现了这个函数,下面是细节解析 static final int tableSizeFor(int cap) { //假设传入3和4 //这里-1是为了防止cap已经是2的幂时得到cap*2的结果 int n = cap - 1; //3变2 4变3 ...原创 2019-05-25 15:55:21 · 252 阅读 · 0 评论 -
【算法】【只有自己看得懂系列】计数排序,让我们摆脱关系排序吧!
Java实现package mairuis.algorithm.sort;/** * 计数排序 * * @author Mairuis * @date 2019/5/25 */public class CountingSort extends Sort { public static int[] countingSort(int[] a) { int[]...原创 2019-05-25 15:30:35 · 136 阅读 · 0 评论 -
【算法】【排序】希尔排序
核心思想为解决插入排序的最坏情况问题,希尔排序通过一个增量序列先保证区间有序将最坏情况优化掉注意增量序列必须保证第n个和第n+1互质算法实现Java版 public static int[] sort(int[] data) { int length = data.length; int h = 1; while (h < ...原创 2019-04-20 14:35:26 · 116 阅读 · 0 评论 -
【算法】【排序】直接插入排序
核心思想来自于玩扑克牌时从牌堆中取出一张牌,和手中的牌比较后找到合适位置然后插入到手牌中算法实现Java版 public static int[] insertSort(int[] data) { //初始化: 从第二个元素开始 for (int i = 1; i < data.length; i++) { //不变式...原创 2019-03-28 12:35:35 · 83 阅读 · 0 评论 -
【学习笔记】Java-Concurrent-Semaphore
同时只有一个人可以吃面包的示例 /** * 第一个线程 与第二个同时执行 */ public static void firstThread0(Context context) throws Exception{ while(true) { eatBread(context); Threa...原创 2018-11-05 15:29:30 · 145 阅读 · 0 评论 -
【编码技巧】Java-为什么要给方法参数或一些对象的引用加final?
阅读源码时常常会看到一些例如被这样修饰的方法参数public void print(final Object obj){ System.out.println(obj);}你可能会疑问这个final有什么用,那么请看下面代码食用final前Object o = "Hello";foo(o)System.out.println(o...原创 2018-09-02 21:22:22 · 2580 阅读 · 0 评论