JDK并发AQS系列(三)
在数据竞争情况下,一个线程只有在成功获取锁后才能继续往下执行,当离开竞争区域时将释放锁,释放的锁供其他即将进入数据竞争区域的线程获取。 同步器一般用acquire和release方法执行获取释放锁操作,acquire方法包括的逻辑是先尝试获取锁,成功则往下执行,否则把线程放到等…
看图轻松理解数据结构与算法系列(合并排序)
JDK并发AQS系列(二)
在研究JDK中AQS时,会发现这个类很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要通过用C++编写的native本地方法来扩展实现。JDK提供了一个类来满足…
看图轻松理解数据结构与算法系列(NoSQL存储-LSM树)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 LSM树,即日志结构合并树(Log-Structured Merge-Tree)。其实它…
JDK并发AQS系列(一)
1995年sun公司发布了第一个java语言版本,可以说从jdk1.1到jdk1.4期间java的使用主要是在移动应用和中小型企业应用中,在此类领域中基本不用设计大型并发场景,当然也没有大型互联网公司使用java,因为担心它本身的性能。 在互联网及服务器硬件迅猛的发展下,sun…
看图轻松理解数据结构与算法系列(希尔排序)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插…
浅聊卷积神经网络的发展
卷积神经网络的发展主要是为了解决人类视觉问题,不过现在其它方向也都会使用。发展历程主要从Lenet5->Alexnet->VGG->GooLenet->ResNet等。 上世界80年代发明了卷积层,但由于硬件限制无法构建复杂网络,直到后面90年代才开始有实践。 1998年LeC…
AIOps核心技术和算法要点
AIOps已经逐渐兴起,AI算法已较为成熟,使之与运维结合到了一起,下面列出AIOps相关技术和算法要点,有空了再展开写,懂大数据和机器学习的基本都知道各个组件及算法的作用。
看图轻松理解数据结构与算法系列(Trie树)
看图轻松理解数据结构与算法系列(冒泡排序)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 冒泡排序是一种很简单的排序算法,主要思想就是不断走访待排序序列,每次只比较两个相邻元素,…
看图轻松理解数据结构与算法系列(B树的删除)
删除操作比较复杂,主要是因为删除的项可能在叶子节点上也可能在非叶子节点上,而且删除后可能导致不符合B树的规定,这里暂且称之为导致B树不平衡,于是要进行一些合并、左旋、右旋等操作,使之符合B树的规定(即让B树平衡)。另外,如果是删除非叶子节点项需要先找到中序前驱来替换。 直接删除…
看图轻松理解数据结构与算法系列(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树属于树的一种,而且它也是…