`
文章列表
排序算法汇总:   时间复杂度 空间复杂度 稳定排序     气泡排序 最差、平均都是O(n²),最好是O(n) 1 鸡尾酒排序 最差、平均都是O(n²),最好是O(n) 1 插入排序 最差、平均都是O(n²),最好是O(n) 1 归并排序 最差、平均、最好都是O(nlog n) O(n) 桶排序 O(n) O(n) 基数排序 O(dn) O(n) 二叉树排序 O(nlog n) O(n) 图书馆排序 O(nlog n) O(n)       不稳定排序     ...
一。讲解JVM结构   其中, 新生代是Heap,包括Eden(伊甸园)+S0(幸存0)+S1(幸存1):新建对象都存储在这里。配置参数是Xms。 老生代是Old,存放从新生代迁移过来的生命周期较久的对象。新生代和老生代共同组成了堆内存。配置参数是Xmx减去Xmn。 永久代是Perm,是非堆内存的组成部分。存放加载的Class类级对象如class本身,method,field等。   二。一般程序内存溢出分析:   如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够。原因有二:   (1)Ja ...
主要优点: 1、提供了对唯一实例的受控访问。 2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。 3、允许可变数目的实例。   主要缺点: 1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。 2、单例类的职责过重,在一定程度上违背了“单一职责原则”。 3、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。
我们在编码过程经常会碰到将一个对象传递给另一个对象,java中对于基本型变量采用的是值传递,而对于对象比如bean传递时采用的引用传递也就是地址传递,而很多时候对于对象传递我们也希望能够象值传递一样,使得传递之前和之后有不同的内存地址,在这种情况下我们一般采用以下两种情况。 浅复制与深复制概念 浅复制(浅克隆) :被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。 深复制(深克隆) :被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指 ...
一、数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。 var arr = ["One","Two","Three"]; var arrto = arr; arrto[1] = "test"; document.writeln("数组的原始值:" + arr + "<br />");// ...
1.java对象序列化  在保存磁盘文件,网络上传输数据,都是使用二进制的,而java对象不能执行操作读写文件和网络传输,但是java对象序列化后,就得到了其二进制数据。   2.serialVersionUID 用来保证java对象的完整性。当对象实现Serializable接口,如果没有属性serialVersionUID,网络发送发进行序列化,网络接收方改变对象(增删改属性),则反序列化就会失败。如果java对象有属性serialVersionUID,则反序列化是可以的。  
首先,给大家普及知识:   UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000 http://www.baike.com/wiki/UUID   GUID 是微软对UUID这个标准的实现。UUID是由开放软件基金会(OSF)定义的。UUID还有其它各种实现,不止GUID一种。比如我们这里在Java中、Oracle中用到的。 http://www.baike.com/wiki/GUID   COMB(combine)型是数据库特有的一种设计思想,可以理解为一种 ...
LRU和LFU是不同的! LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面! LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页! 比如,第二种方法的时期T为10分钟,如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4 注意,当调页面4时会发生缺页中断 若按LRU算法,应换页面1(1页面最久未被使用) 但按LFU算法应换页面3(十分钟内,页面3只使用了一次) 可见LRU关键是看页面最后一次被使用到发生调度的时间长短, 而 ...
[java]   import java.util.LinkedHashMap;   import
1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部; 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 3. 当链表满的时候,将链表尾部的数据丢弃。 1.3. 分析 【命中率】 当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。 【复杂度】 ...
【2015工作总结】- 服务架构模式         主要是关于双活的概念,就是每一个机房能够处理用户的一套完整的操作,不需要跨越机房,这样可以减少带宽访问量,从而提升性能。    
在看一些代码的时候,会发现在定义long型和double型的变量时,会在前面加上volatile关键字,当然也会看到在其它原子类型的变量前加上这个关键字,但这里要说的还是有区别的。   在java中,java的内存模型要求,变量的读取操作和写入操作都必须是原子操作的,但是对于非volatile类型的long和double有些不同,因为这两个变量是64位存储,JVM允许将64位的读操作或写操作分解为2个32位的操作。这样,当在多线程环境中读取一个非volatile的long变量时,可能会出现读取到这个变量一个值的高32位和另一个值的低32位,从而导致数据出问题。   这里还需要说明下vo ...
在Java中,如果想要把一个十进制整数转换为十六进制,可以使用Integer.toHexString(int i)方法,该方法的源代码如下: public static String toHexString(int i) { return toUnsignedString(i, 4); } /** * Convert the integer to an unsigned number. */ private static String toUnsignedString(int i,
概述 Jedis是Redis官方推荐的Java客户端,更多Redis的客户端可以参考Redis官网客户端列表。当业务的数据量非常庞大时,需要考虑将数据存储到多个缓存节点上,如何定位数据应该存储的节点,一般用的是一致性哈希算法。Jedis在客户端角度实现了一致性哈希算法,对数据进行分片,存储到对应的不同的redis实例中。Jedis对Sharded的实现主要是在ShardedJedis.java和ShardedJedisPool.java中。本文主要介绍ShardedJedis的实现,ShardedJedisPool是基于apache的common-pool2的对象池实现。
概述 Jedis是Redis官方推荐的Java客户端,更多Redis的客户端可以参考Redis官网客户端列表。Redis-Sentinel作为官方推荐的HA解决方案,Jedis也在客户端角度实现了对Sentinel的支持,主要实现在JedisSentinelPool.java这个类中,下文会分析这个类的实现。 属性 JedisSentinelPool类里有以下的属性:
Global site tag (gtag.js) - Google Analytics