摘要:
综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助。本文介绍了冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、计数排序、桶排序、基数排序9种经典的排序算法。针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现。 算法分类 原地排序(in-pla 阅读全文
摘要:
B+树 B+树和二叉树、平衡二叉树一样,都是经典的数据结构。B+树由B树和索引顺序访问方法(ISAM,是不是很熟悉?对,这也是MyISAM引擎最初参考的数据结构)演化而来,但是在实际使用过程中几乎已经没有使用B树的情况了。 B+树的定义十分复杂,因此只简要地介绍B+树:B+树是为磁盘或其他直接存取辅 阅读全文
摘要:
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚。后来终于找到了原因。 如果你也出现了这种情况,可以从下面开始排查。 一、特性 先来了解一下@Transactional注解事务的特性吧,可以更好排查问题 1、service类标签(一般不建议在接口上)上添加@Tr 阅读全文
摘要:
ArrayList中的remove方法(注意ArrayList中的remove有两个同名方法,只是入参不同,这里看的是入参为Object的remove方法)是怎么实现的: public boolean remove(Object o) { if (o == null) { for (int inde 阅读全文
摘要:
这是一个Java的经典问题,大部分人从C,C++语言入门,C语言有三种传递方式:值传递,地址传递和引用传递。详细的对C语言指针,引用的我个人的理解,见链接。 Java所有操作都是传值操作!都是传值操作!都是传值操作!重要的事情说三遍。 疑问?那为什么别人讲的时候都是说,java的基本数据类型都是传值 阅读全文
摘要:
0、前言 本文主要对几种常见Java序列化方式进行实现。包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化。 1、Java原生序列化 Java原生序列化方法即通过Java原生流(InputStream和OutputStream之间的转化)的方式进 阅读全文
摘要:
常见的实现代理的两种方式:(1)JDK动态代理(2)使用cglib产生代理 这两种方法各有好坏。jdk动态代理是由java内部的反射机制生成字节码并生成对象来实现的,而cglib代理底层是借助asm来实现的,这个asm就是一个java字节码操纵框架,它能用来动态生成类或者增强类的功能,ASM从类文件 阅读全文
摘要:
Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。这里主要总结Object类中的三个常用方法:toString()、equals()、hashCode()。 1.取得对象信息的方法:toString() 该方法在打印对象时 阅读全文
摘要:
Java中,抽象类和接口有相似的地方。下面我们就来细说说接口和抽象类的异同。 首先是相同的地方: 1. 接口和抽象类都能定义方法和属性。 2. 接口和抽象类都是看作是一种特殊的类。大部分的时候,定义的方法要子类来实现 3. 抽象类和接口都可以不含有抽象方法。接口没有方法就可以作为一个标志。比如可序列 阅读全文
摘要:
Hashmap在并发环境下,可能出现的问题:1、多线程put时可能会导致get无限循环,具体表现为CPU使用率100%;原因:在向HashMap put元素时,会检查HashMap的容量是否足够,如果不足,则会新建一个比原来容量大两倍的Hash表,然后把数组从老的Hash表中迁移到新的Hash表中, 阅读全文