0%

UML有3类模型,5类图形,是系统设计的有力建模工具,可在项目的需求分析>功能设计>架构设计>详细设计>数据模型设计等阶段进行迭代更新
帮助团队成员从宏观到细节整体认识产品,有利于知识共享,便于团队协作并建立共识。

阅读全文 »

好的工具应具备的特性

  • 可配置:参数外部化
  • 可中断:checkpoint打点
  • 可容错:errorlist打点
  • 高性能:可并行计算
  • 易用性:使用简单,一键运行

HashMap是Java中KV存储的实现,其如何解决Hash碰撞问题十分经典;
本文从HashMap的概念,结构,参数,性能,线程安全性,源码解析(put,get,resize),使用场景,常见问题8个方面进行分析。

阅读全文 »

前段时间折腾RabbitMQ踩了个坑,

  • 队列中对每个消息设置TTL时,如果队头有消息阻塞会导致TTL已过期的消息不能准时送达,优先队列也同样适用;
  • 由于存储方式的原因,RabbitMQ中PriorityQueue一但定义了就不能更改队列的类型;

其中关于PriorityQueue的机制不太清楚,于是有了这篇关于二叉堆的文章,下一步研究下JDK中PriorityQueue的源码如何实现;

关键点:二叉堆基于一维数组构建完全二叉树结构,,heapify复杂度为O(n),其addpop复杂度为O(log(n))peek的复杂度为O(1),适用于优先队列场景;

阅读全文 »

研究了PriorityQueue原理,知道JDK源码怎么实现的优先队列,这次是要搞清PriorityBlockingQueue阻塞优先队列是如何实现的;

本文从PriorityBlockingQueue的概念,结构,参数,源码解析(offer,poll,remove,add,grow),性能,线程安全性,使用场景,常见问题8个方面进行分析。

关键点:与PriorityQueue一样的排序规则,无界队列,实现Queue,Collection,Iterator接口、不允许null键/值、提供阻塞操作、线程安全、不保证队列内元素的顺序;

阅读全文 »

研究了二叉堆实现原理,现在来看看JDK里面基于二叉堆的优先队列怎么实现的!

关键点:基于priority heap,无界队列,实现Queue,Collection,Iterator接口、不允许null键/值、非线程安全、enqueue和dequeue都是O(long(n)),remove和contains是O(n),peek是O(1);

从PriorityQueue的概念,结构,参数,源码解析(offer,poll,remove,add,grow),性能,线程安全性,使用场景,常见问题8个方面进行分析。

阅读全文 »

微信的扫码登陆风行,几乎所有的web端应用都给出了让用户从移动端扫码登入的入口;
本文主要描述如何用扫码形式在云端绑定硬件设备;

阅读全文 »

二叉树锯齿状遍历实现
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

阅读全文 »

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明: 1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

阅读全文 »

给定一个链表,判断链表中是否有环。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

阅读全文 »