- 博客(28)
- 收藏
- 关注
转载 深度理解JVM----垃圾收集算法
以下内容部分转载于: CS-Notes以下只介绍几种算法的思想和发展过程标记-清除算法(Mark-Sweep)本算法分为两个阶段,一个是标记,另一个是清除标记:标记的过程其实就是,遍历所有的GC Roots,然后将所有GC Roots可达的对象标记为存活的对象。清除:清除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉。不足:标记和清除过程效率都不高;会产生大量不连续的内...
2019-05-22 11:18:19 148
转载 深度理解JVM----垃圾回收策略
以下内容部分转载于: CS-Notes垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。引用计数法(Reference Counting)为对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。在两个对象...
2019-05-21 13:36:13 128
转载 深度理解JVM-----运行时数据区域
深度理解JVM-----运行时数据区域以下内容部分转载于: CS-Notes程序计数器(Program Counter Register)记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。ps:什么是本地方法?本地方法是由其他语言(如C、C++ 或其他汇编语言)编写,编译成和处理器相关的代码。本地方法保存在动态连接库中,格式是各个平台专用的,运行中的java程序...
2019-05-21 11:40:57 152
原创 “双指针法”在单链表中的应用
在有关单链表的问题中,不可避免的就是容易丢失头指针比如当前链表为1->2->3,头结点为1,如果不当使用head = head.next;就会造成头指针的丢失由于这一特性,所以在链表问题中,我们可以通过双指针来解决问题通过双指针的位置差来,来解决我们所需要解决的问题1、环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到...
2019-04-25 21:04:33 612
原创 异或(^)在Java中的运用
1、异或简介异或(^)操作运算规则为**“相同的为0,不同的为1”**2、异或操作进行数字交换我们现在有两个数a,b,我们可以通过异或操作对他们俩的数字进行交换a = a ^ bb = b ^ aa = a ^ b这样,这两个数字的值就进行了交换我们举个例子,比如a = 97和b = 3397的二进制为110000133的二进制为100001首先进行 a = a ^ b1...
2019-04-22 17:15:24 638
原创 设计模式之----组合模式
设计模式之----组合模式定义: 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及组合对象。举一个很简单的例子,我们有两个类一个是菜单类Menu,另一个是菜单项类MenuItem(几个菜单项类组成一个菜单)比如说我们有个几个菜单项类,如:烤鸭,红烧肉,西红柿炒鸡蛋这几个构成了午餐菜单,我们这里不但有午餐还有晚餐和早餐我们用一个ArrayLi...
2019-03-31 20:30:08 159
原创 设计模式之----迭代器模式
1、迭代器模式概要定义: 提供一种方法顺序的访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。比如在同时整合多个对象的代码时,每个对象所用的数据结构不同,如果想要让他们统一展现出来,就可以使用迭代器模式迭代器是从前向后投遍历的,迭代器不用关心是使用什么样的数据结构2、迭代器模式举例对象村的早饭店和午饭店铺合并了,现在需要合并他们的菜单,但是早餐店的菜单是使用ArrayList,午餐...
2019-03-30 22:53:53 116
原创 设计模式之----模板方法模式
1、模板方法模式概要**定义:**在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤。模板模式和策略模式很相像但却不相同模板模式解决的是算法模式内部的问题,而策略模式解决的是扩展问题,本质上是不一样的另外我们应该遵守好莱坞原则:让我们来找你,而不是你找我们2、模板方法模式举例首先我们想象一下冲咖啡和泡茶的过程...
2019-03-29 21:17:25 106
原创 设计模式之----适配器模式
1、适配器模式概要定义:将一个类的接口转换成客户希望的另一个接口。适配器模式让那些接口不兼容的类可以一起工作适配器模式有两种,一是对象适配器,另一种是类适配器,但是类适配器需要多重继承,我们这里就不加以讨论对象适配器,类通过实现目标对象的接口来包装对象,使得对象能转换成客户想要的接口就比如充电器,分为充电线和充电器的头,就是把usb转换墙上的插头,充电器的头就是一个适配器因为我们的usb...
2019-03-28 22:25:57 188
原创 设计模式之----命令模式
1、命令模式概要定义: 对命令进行封装,将发出命令的责任和执行命令的责任分割开你可以想象一个场景,你是一名在餐馆吃饭的顾客,你在菜单上写上想吃的菜,呼叫服务员帮你送给厨师当然你完全可以自己跑去和厨师说,我要吃什么菜,但是你所坐的地方和厨房还是有一定距离的,你的每一次加菜都必须自己到厨房去,在这里你和厨师的关系是高度耦合的,因为是你和厨师说的话,厨师必须要记得你。厨师又要做菜又要把人和菜对应上...
2019-03-27 22:02:17 181
原创 设计模式之----单例模式
1、单例模式概要定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式确保系统在运行过程中只会存在一个实例,当遇到需要频繁创建对象或者创建对象会花费较多资源的时候,使用单例模式就尤为重要单例模式可以解决全局变量的一些缺点,比如可以延迟加载,保证只在使用这个类的时候才创建对象,而不是像全局变量一样在一开始就创建完成tips: 单例模式的构造器必须是私有的2、...
2019-03-26 21:04:28 108
原创 设计模式之----工厂模式
1、工厂模式概要工厂模式可分为3中工厂模式简单(静态)工厂模式 :非设计模式,作用为将创建的过程从对象的使用者中分离开来工厂模式 : 将类的实例化推迟到子类抽象工厂模式 :为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。工厂模式的作用就是为了解耦,使我们在扩充功能的时候尽可能少的修改代码2、简单工程模式**定义:**简单工程模式是一种非设计模式...
2019-03-25 22:21:20 447
原创 设计模式----装饰模式
1、装饰模式概要装饰者模式(Decorator):动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案。抽象构件类(Component):给出一个抽象的接口,用以规范准备接收附加责任的对象具体构件类(ConcreteComponent):定义一个具体的准备接受附加责任的类,其必须实现Component接口。装饰者类(Decorator):持有...
2019-03-18 16:19:16 104
原创 设计模式之----观察者模式
设计模式之----观察者模式1.观察者模式概要观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明:报社方负责出版报纸.你订阅了该报社的报纸,那么只要报社发布了新报纸,就会通知你,或发到你手上.如果你不想再读报纸,可以取消订阅,这样,报社发布了新报纸就不会再通知你.理解其实以上的概念,就可以理解观察者模式,观察者模式中有主题(S...
2019-03-17 15:17:34 215
原创 设计模式之----策略模式
1、策略模式概要策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。这个模式涉及到三个角色:● **环境(Context)角色:**持有一个Strategy的引用。● **抽象策略(Strategy...
2019-03-17 01:30:17 148
原创 有关Integer的比较问题
首先先给出结论1、Integer有一个常量池,存放着-128~127之间的数值,在这里的数值在用的时候会从这个缓存中取2、Integer i = 2,实际上是调用 Integer i = Integer.valueOf(2);3、Integer和int比较时,会自动拆箱转换为int,基本类型通过==比较大小4、==号比较的是内存地址,equals比较的值5、从java1.5开始Inte...
2019-03-10 23:52:39 259
原创 WeakHashMap的学习笔记
1、WeakHashMap的简单介绍WeakHashMap也是Map中的一种,它的特殊之处在于它其中的对象,可能会被GC自动回收,也就是数据会凭空消失,即使程序员没有调用remove()或者clean()方法,那么你就会有疑问了,这种数据会凭空消失,那为什么还要设计这种类?其实答案是WeakHashMap主要用于缓存的情况,缓存一般用于内存不够的情况下,设置缓存可以大大提高系统的效率,缓存的空间...
2019-02-28 19:39:06 562
原创 HashTable学习笔记
1、Hashtable简单介绍HashTable是线程安全的数据结构,多个线程可以共享一个HashTableHashTable的Key和Value都不允许为nullHashTable底层用数组和链表进行实现HashTable默认容量为11,负载因子为0.75HashTable每次扩容大小为 *2+1HashTable的遍历通过EnumerationHash...
2019-02-28 11:40:51 222
原创 HashMap的学习笔记
1、HashMap简介HashMap的一个无序的Key-Value键值对数据结构在JDK1.6和1.7中,HashMap采用位桶和链表实现,在JDK1.8中采用位桶+链表+红黑树实现HashMap的初始容量为16,且每次扩容均为2的次幂HashMap的负载因子为0.75HashMap的线程不安全的当HashMap某一个桶中的链表个数大于8时(既阈值超过8),链表...
2019-02-27 15:56:39 335
原创 Map的学习笔记
首先,我们已经完成了对List的学习,现在我们就开始学习Map我们先看看Map的架构我们可以看到Map是顶级接口类,他不继承或者实现别的接口Map代表着键值对的形式,既Key-ValueAbstractMap是一个抽象类,它实现了Map中的许多方法,所有想实现Map接口的都可以继承这个类SrotedMap是一个有序的Map,可以排序键值对,排序的方法是通过比较器NavigableM...
2019-02-26 20:13:47 182
原创 Stack的学习笔记
1、Stack的简单介绍Stack的继承于Vector的动态数组队列Stack必须要满足于先进后出(FILO,First In Last Out)的结构Stack的线程安全的,主要方法都被synchronized所修饰Stack是动态大小的数组结构,底层为Object类型数组,每次增长为自身的一倍,初始容量为10TipsStack的使用例子①数值转换②语法检查,符号成对出现③...
2019-02-23 10:02:54 211
原创 Vector的学习笔记
1、Vector的简单介绍Vector是一个动态数组队列,它可以自动扩容,每次扩容的大小为原来的2倍,初始默认值为10Vector底层是由Object数组过程Vector是线程安全的数据结构,它的主要方法都被synchronized所修饰Vector对元素的访问所花费的时间是常数的TipsVector建议使用情况①不确实数据的数量,需要进行频发的查找操作②经常在末端添加操作③...
2019-02-22 16:26:25 402
原创 Fail-Fast机制总结
1、Fail-Fast(快速失败)简介**fail-fast 机制是java集合(Collection)中的一种错误机制。**当单线程或者多个线程在集合遍历过程中对同一个集合的内容进行操作时,就可能会产生fail-fast事件。单线程例如:当通过iterator去遍历某集合时,在遍历过程中修改集合中的元素添加、删除就会导致Fail-Fast代码如:public static void ma...
2019-02-22 14:52:04 682 2
原创 LinkedList的学习笔记
LinkedList的学习笔记1、LinkedList的简单介绍LinkedList是双向链表(Jdk1.8)LinkedList是线程不安全的LikedList底层由Node节点构成private static class Node<E> { E item; Node<E> next;
2019-02-21 20:49:18 206
原创 ArrayList的学习笔记
ArrayList的继承和接口实现1、ArrayList的简单介绍ArrayList是一个动态数组队列,它可自动扩容,每次扩容大小为原来的1.5倍,初始的默认值为10private static final int DEFAULT_CAPACITY = 10;ArrayList底层是由Object数组构成ArrayList是线程不安全的,如果想使用线程安全的Arraylis...
2019-02-20 20:31:24 183
原创 Synchronized详解
Synchronized详解1、修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;synchronized (this){ ............ //修饰代码块,使用this关键字}Object lock1 = new Object();Object lock2 = new Object()...
2019-02-12 00:51:11 133
原创 如何将本地代码推送至远程仓库
如何将本地代码推送至远程仓库0.在github上创建一个无*README.md仓库*git init 初始化本地git仓库git add . (注意add和.之间有空格) 保存所有当前文件夹下所有文件到本地git仓库git commit -m "xxx" -xxx为注释,保存当前添加git remote add origin git@github.com:use...
2018-08-25 02:50:21 957
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人