二分查找

二分查找是一种对有序数组的一种很快的查找方式,用二分查找去查找一个n长度的数组最多需要logn步,它是每次从数组的中间开始查找,每次排除一半的数。 二分查找的流程如下: 具体代码实现: public static int binary_search(int[] nums,int item){ ...

2019-03-04 09:36:47

阅读数 28

评论数 0

letcode 搜索二维矩阵 II

题目描述: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: [ [1, 4, 7, 11, 15], [2, 5, 8, 1...

2019-03-01 22:50:11

阅读数 37

评论数 0

JVM内存分配及管理

本篇文章主要是介绍JVM的垃圾回收算法和JVM的内存分配机制。 一.垃圾搜集算法 JVM中的内存分配机制 垃圾回收算法有标记-清除算法,标记-整理算法和复制算法,JVM使用分代收集算法来回收JVM分配的内存空间,分代收集算法分为新生代和老年代,主要收集JVM内存模型中的堆内存,其中新生代使用复...

2018-10-22 17:29:36

阅读数 47

评论数 0

java并发学习之线程安全的计数器

线程安全的计数器实现原理简介: 在java中volatile关键字可以保证共享数据的可见性,它会把更新后的数据从工作内存刷新进共享内存,并使其他线程中工作内存中的数据失效,进而从主存中读入最新值来保证共享数据的可见性,实现线程安全的计数器通过循环CAS操作来实现。就是先获取一个旧期望值值,再比...

2018-10-21 13:23:11

阅读数 34

评论数 0

java并发编程学习之死锁

死锁的介绍: 锁是一个非常有用的工具,运行场景非常多,因为它使用起来非常简单,而且易于理解。但同时它也会带来一些困扰,比如死锁问题。比如有两个线程A和B,运行都需要两个资源a,b。A获取了a资源,B获取了b资源,接着A去请求b资源,B去请求a资源,两个线程互相阻塞产生死锁。 代...

2018-10-20 21:39:23

阅读数 34

评论数 0

JVM内存区域划分

运行时数据区域: Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户进程的启动和结束而建立和销毁。下面是各区域的具体划分。 程序计数器 程序计数器是一块较小的...

2018-10-19 12:35:14

阅读数 24

评论数 0

HashMap和HashTable的区别

本篇博客主要来比较一下hashmap和hashtable的区别。 1.首先来看下继承结构: HashMap public class HashMap<K,V> extends AbstractMap<K,V> ...

2018-10-18 15:24:58

阅读数 17

评论数 0

堆排序

堆排序介绍: 堆排序可以分为两个阶段。在堆的构造阶段,我们将原始数组重新组织安排进一个堆中;然后在下沉排序阶段,我们从堆中按顺序取出所有元素并得到排序结果。 1.堆的构造,一个有效的方法是从右到左使用sink()下沉函数构造子堆。数组的每个位置都有一个子堆的根节点,sink()对于这些子堆也适...

2018-10-18 14:25:38

阅读数 23

评论数 0

二叉堆实现优先队列

适用范围: 许多应用程序都需要处理有序的元素,但不一定要求它们全部有序,或是不一定要一次就将它们排序。很多情况下我们会搜集一些元素,处理当前键值最大的元素等操作。 优先队列实现原理: 1.数据结构二叉堆能够很好地实现优先队列的基本操作。在二叉堆的数组中,每个元素都要保证大于等于另两个特定位...

2018-10-18 12:54:39

阅读数 26

评论数 0

java集合框架源码解析之HashMap

摘要 HashMap简介 HashMap数据结构 HashMap源码解析 HashMap简介: HashMap是一个散列表,它的底层实现是链表数组,存储的结果为键值对,key-value形式,Key允许有一个null,value允许有多个null。 通过hash算法来快...

2018-10-11 22:24:32

阅读数 20

评论数 0

java集合框架源码解析之TreeMap源码解析

asdrgfvewargerw

2018-10-07 23:01:25

阅读数 44

评论数 0

letcode 根据字符出现频率排序

题目描述: 给定一个字符串,请将字符串里的字符按照出现的频率降序排列。 示例 1: 输入: “tree” 输出: “eert” 解释: 'e’出现两次,'r’和’t’都只出现一次。 因此’e’必须出现在’r’和’t’之前。此外,"eetr"也是一个有效的答案。 ...

2018-10-05 23:57:31

阅读数 49

评论数 0

letcode 同构字符串

题目描述: 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。 示例 1: 输入: s = “egg”, t = ...

2018-10-04 13:35:08

阅读数 16

评论数 0

创造者模式

本篇博客来简要的讲解下创造者模式 创造者模式原理 创造者模式适用场景 代码示例 原理介绍: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容 建造者模...

2018-10-02 18:01:09

阅读数 280

评论数 0

letcode 螺旋矩阵二

题目描述: 螺旋矩阵 II 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 实路:和螺旋矩阵一一样,首先确定需要遍历的次数,之后就是对...

2018-09-24 21:05:58

阅读数 33

评论数 0

命令模式讲解

命令模式讲解大纲 命令模式原理介绍 命令模式适用情况分析 命令模式具体代码实现 原理介绍: 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处、理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者...

2018-09-18 15:13:14

阅读数 177

评论数 0

抽象工厂模式

抽象工厂模式原理介绍 抽象工厂模式实例介绍 抽象工厂模式代码实现 原理介绍:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品...

2018-09-17 16:36:06

阅读数 22

评论数 0

工厂方法模式

工厂方法模式原理介绍: 工厂方法模式适用举例 工厂方法模式代码实现 原理介绍:工厂方法模式(FACTORY METHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核...

2018-09-17 15:56:17

阅读数 18

评论数 0

letcode 全排列

题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路:通过分析可知,这道...

2018-09-16 22:38:33

阅读数 45

评论数 0

简单工厂模式

简单工程模式介绍 简单工程模式适用情况 简单工厂模式具体实现 简单工厂模式介绍:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是...

2018-09-16 20:16:56

阅读数 15

评论数 0

提示
确定要删除当前文章?
取消 删除