看图轻松理解数据结构与算法系列(B+树)
向JVM注册本地方法是怎么实现的
Java 中我们经常会遇到要调用本地方法的情况,而且 Java 核心库中的很多类也大量使用了本地方法,使用 JNI 时本地函数需要按照约定好的格式进行命名,如果不想写长长的函数名则需要将方法注册到 JVM 中,这里看看怎么向 JVM 注册本地方法。 JVM 中对本地方法名有约定…
看图轻松理解数据结构与算法系列(B树)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 B树即平衡查找树,一般理解为平衡多路查找树,也称为B-树、B_树。是一种自平衡树状数据结…
btrace定位生产故障
某些请求通过数据访问层很慢并导致处理线程阻塞,从监控中未能检查到异常。 判断执行大于10秒的sql和堆栈信息。 编译脚本DBProxyTrace.java,确认脚本没有问题。 阻塞在事务回滚。 使用jstack进一步定位。 阻塞在了oracle驱动rollback动作,这里其实…
看图轻松理解数据结构与算法系列(2-3树)
从Java到JVM到OS线程睡眠
Java 中有时需要将线程进入睡眠状态,这时一般我们就会通过Thread.sleep使线程进入睡眠状态,接下去就看看执行该语句在 JVM 中做了什么。 以下是一个简单的例子,使主线程睡眠5秒钟。 在继续往 JVM 层看start0本地方法前,我们先了解下 JVM 中的相关线程,…
看图轻松理解数据结构与算法系列(选择排序)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 选择排序是一种很简单直观的排序算法,主要思想就是每次从待排序的元素中选择出最大或最小的那…
从JDK源码看String(下)
该方法用于返回指定字符在此字符串中最后一次出现处的索引,有多种方法参数。可传入 int 类型,也可传入 String 类型,另外还能传入开始位置。根据编码的不同分别用 Latin1 和 UTF16 两种方式处理。 判断 int 值是否能转成 byte,方法是看右移8位是否为0,…
看图轻松理解数据结构与算法系列(AVL树)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 AVL树,也称平衡二叉搜索树,AVL是其发明者姓名简写。AVL树属于树的一种,而且它也是…
从JDK源码看String(上)
Java 语言使用 String 类用来代表字符串,实际上 String 对象的值是一个常量,一旦创建后不能被改变。正式因为其不可变,所以它是线程安全地,可以多个线程共享。 相信对于 String 的使用大家都再熟悉不过的了,这里就了解下 JDK 中怎么实现 String 类的…
看图轻松理解数据结构与算法系列(基于数组的栈)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 栈是一种线性存储结构且运算受限的线性表,它的插入和删除运算操作被限制在表的一端,该端称为…
看图轻松理解数据结构与算法系列(二叉搜索树)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 对于树的数据结构大家都了解,只是树的类型有很多,所以可能又会对树产生一种陌生感。树其实就…
看图轻松理解数据结构与算法系列(双向链表)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 双向链表属于链表的一种,也叫双链表双向即是说它的链接方向是双向的,它由若干个节点组成,每…
看图轻松理解数据结构与算法系列(单向链表)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 单向链表属于链表的一种,也叫单链表,单向即是说它的链接方向是单向的,它由若干个节点组成,…
看图轻松理解数据结构与算法系列(数组)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 数组是最熟悉也是最基础的一种结构了,有限个相同数据类型的元素按顺序排列的集合为数组。数组…
双数组Trie树高效构建有向无环图
图是很常见的一种结构了,不管是数据结构算法中的各种图结构,还是机器学习中的概率图。图主要是由若干顶点及连接两顶点的边所构成的图形,通过它可以用来描述某些事物之间的某种特定关系。 有向无环图,即 Directed Acyclic Graph,属于有向图,图结构中不存在环,可用来表…
《字符串连接你用+还是用StringBuilder》续
前面的一篇文章《字符串连接你用+还是用StringBuilder》,有朋友找我反馈了一些问题,其中一位朋友说JDK10下生成的字节码跟文章中并不一样,这里继续看下是什么情况。 如下图,按照《字符串连接你用+还是用StringBuilder》的代码在 javap 后发现它并没有创…
我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)
A text analyzer which is based on machine learning,statistics and dictionaries that can analyze text. So far, it supports hot word extracti…
AC自动机+trie树实现高效多模式匹配字典
经常会遇到一类需求,在一段字符串中查找所有能匹配上的模式,比如查找一段文字匹配上字典中哪些短语。这时为了高效处理,就会考虑 AC 自动机,即 Aho-Corasick 自动机算法。它的核心思想是通过有限自动机巧妙地将字符比较转化为了状态转移。 通过 AC 自动机能做到匹配时不需…
Java如何获取当前线程
Java 中经常会遇到要获取当前线程的情况,这时一般我们就会通过Thread.currentThread()来获取,接下去就看看执行该语句在 JVM 中做了什么吧。 以下是一个简单的例子,获取当前线程并打印线程名称,输出是"main",即主线程。 在 Thread 类中,cur…