我是攻城师

468 篇文章
62 人订阅

编程算法

我是攻城师

深入理解什么是跳跃表

前面的文章我们学习了性能高效的基于二叉搜索树的动态数据结构红黑树,其平均时间复杂度为O(logN),今天我们再来学习另外一种优秀的数据结构跳跃表,其综合性能与红...

1061
我是攻城师

深入理解二叉树的特点

在计算机科学中,二叉树(Binary tree)是一个连通的无环图,每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“...

622
我是攻城师

Java接口Comparable和Comparator的区别

这是一段非常简单的使用集合工具类排序的代码,这里有个问题,我们什么也没指定,默认就按字母升序排了,这是为什么?通过查看String类的源码,我们能够发现其实现了...

1043
我是攻城师

什么是二叉搜索树

二叉搜索树是一种综合效率比较好的一种数据结构,搜索、插入、删除的复杂度等于树高, 平均空间复杂度为O(n),时间复杂度为O(log n),最坏时间复杂度为O(n...

922
我是攻城师

什么是平衡二叉树

上篇文章里面,我们已经学习了二叉搜索树的相关内容,二叉搜索树有一个缺点,在插入数据是有序的序列(包括升序和降序),会导致二叉树退化成链表,从而导致在查找,删除,...

913
我是攻城师

数据结构之(树)

在计算机科学中,树(英语:tree)是一种非线性的抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0...

981
我是攻城师

关于Java里面volatile关键字的重排序

第一条可见性比较容易理解,就是使用volatile修饰的共享变量,如果有一个线程修改了值,其他的线程里面是立即可见的。原理是对volatile变量的读写,都会强...

1202
我是攻城师

为什么Java里面String类是不可变的

在Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题。

793
我是攻城师

如何将编程语言里面的字符串转成数字?

其他的编程语言就不一一列举了,使用工具类进行转换人人都会,所以并不重要,重要的是我们要来学习下它底层是如何转换的,先上我用Java实现的一段代码如下:

912
我是攻城师

为什么单线程Redis性能也很出色

高性能的服务器,不一定是多线程实现的,也就是说多线程不一定比单线程效率高,这得分具体的情况。以redis为例,核心处理请求的线程只有一个,所以我们常常理解其仅仅...

1303
我是攻城师

什么是线程安全?

线程安全在多线程编程时是一个比较重要的概念,我们下先来看下维基百科是如何定义这个概念的:

651
我是攻城师

操作系统之CPU知识扫盲

CPU的英文全称是(Central Processing Unit),中文意思翻译中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件...

1781
我是攻城师

为什么编程语言中数组的下标总是从0开始?

昨天看到一个有意思的问题,为什么在我们遇到的大多数编程语言里面,数组的下标基本都是从0开始?

1452
我是攻城师

多线程协作打印ABC之ReentrantLock版本

我们介绍了在Java里面使用synchronized + wait/notifyAll实现的多线程轮流打印特定的字符串,输出的结果如下:

1043
我是攻城师

什么是水塘抽样算法(Reservoir Sampling)

给定一个数据流,数据流长度N很大,且N直到处理完所有数据之前都不可知,如何在只遍历一遍数据(O(N))的情况下,能够随机选取出这组数据的k个概率相等的均匀抽样。

1362
我是攻城师

理解插入排序,希尔排序,选择排序的算法原理

在前面的文章中,其实已经把效率比较高的排序算法给分析过了,比如比较通用的快排,归并排序和堆排,还有用于特定场景的计数排序等。本篇我们把剩下的几种效率一般的排序算...

821
我是攻城师

理解BitMap算法的原理

位图:一种常用的数据结构,代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。在索引,数据压缩,海量数据处理等方面有...

1123
我是攻城师

深入理解Java类加载器机制

Java里面的类加载机制,可以说是Java虚拟机核心组件之一,掌握和理解JVM虚拟机的架构,将有助于我们站在底层原理的角度上来理解Java语言,这也是为什么我们...

1852
我是攻城师

理解JVM垃圾回收的机制

其中(1)和(2)我们在之前已经介绍过了,今天我们来学习一下关于JVM垃圾回收(Garbage Collection)的内容:

1821
我是攻城师

理解计数排序算法的原理和实现

计数排序(Counting sort)是一种稳定的线性时间排序算法,其平均时间复杂度和空间复杂度为O(n+k),其中n为数组元素的个数,k为待排序数组里面的最大...

771

扫码关注云+社区