双重检查锁定模式(也被称为"双重检查加锁优化","锁暗示"(Lock hint)) 是一种软件设计模式用来减少并发系统中竞争和同步的开销。双重检查锁定模式首先验证锁定条件(第一次检查),只有通过锁定条件验证才真正的进行加锁逻辑并再次验证条件(第二次检查)。该模式在某些语言在某些硬件平台的实现可能是不安全的。有 w397090770 4年前 (2020-06-19) 890℃ 0评论4喜欢
二叉树的前序遍历给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入: [code lang="bash"] 1 \ 2 / 3 [/code]输出: [1,2,3]示例 2:输入: [code lang="bash"] 1 /2[/code]输出: [1,2]递归首先我们需要了解什么是二叉树的前序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树,而在 w397090770 7年前 (2018-05-02) 60℃ 0评论0喜欢
在高德纳的计算机程序设计艺术中,有如下问题:可否在一未知大小的集合中,随机取出一元素?。或者是Google面试题: I have a linked list of numbers of length N. N is very large and I don’t know in advance the exact value of N. How can I most efficiently write a function that will return k completely random numbers from the list(中文简化的意思就是:在不知道文件总行 w397090770 9年前 (2015-11-09) 10309℃ 0评论16喜欢
Mahout项目发展到了今天已经实现了许多的算法。下面列出Mahout项目主要的算法名称,供大家参考。一、协同过滤 Collaborative Filtering 1、基于用户的协同过滤 User-Based Collaborative Filtering 2、基于项目的协同过滤统 Item-Based Collaborative Filtering 3、交替最小二乘张量分解 Matrix Factorization with Alternating Least Squares 4、基 w397090770 10年前 (2014-09-23) 9515℃ 0评论17喜欢
本文转载至 http://www.ibm.com/developerworks/cn/java/j-dcl.html 单例创建模式是一个通用的编程习语。和多线程一起使用时,必需使用某种类型的同步。在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,由于一些不太常见的 Java 内存模型细节的原因,并不能 w397090770 11年前 (2013-10-18) 4669℃ 4评论6喜欢
在C++中,对象所占的内存在程序结束运行之前一直被占用,需要我们明确释放;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。 垃圾收集意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它 w397090770 11年前 (2013-10-14) 7469℃ 2评论9喜欢
在《如何快速判断正整数是2的N次幂》文章中我们谈到如何快速的判断给定的正整数是否为2的N次幂,今天来谈谈如何快速地判断一个给定的正整数是否为4的N次幂。将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0; 因此问题可以转化为判断1后面是否跟了 w397090770 11年前 (2013-09-30) 5070℃ 0评论5喜欢
求两个整数的平均值这个问题相信大家都想过,大家肯定会很快的写出以下的算法:[code lang="JAVA"]public static int mean(int a, int b){ return (a + b) / 2;}或者public static int mean(int a, int b){ return (a + b) >> 1;}或者public static int mean(int a, int b){ return (a + b) >>> 1;}[/code] 不错,上面的函数是能够求出a和b的平 w397090770 11年前 (2013-09-18) 5554℃ 5评论3喜欢
这个问题可能很多面试的人都遇到过,很多人可能想利用循环来判断,代码可能如下所示:[code lang="JAVA"] public static boolean isPowOfTwo(int n) { int temp = 0; for (int i = 1; ; i++) { temp = (int) Math.pow(2, i); if (temp >= n) break; } if (temp == n) return true; else return false; }[/code] w397090770 11年前 (2013-09-17) 11577℃ 6评论14喜欢
memset的函数原型是[code lang="CPP"]void * memset ( void * ptr, int value, size_t num );[/code] 这个函数的功能是将ptr所指向的某一块内存中的每个字节的内容全部设置为value指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。 英文解释:Sets the first num bytes of the block of memory pointed by ptr to the specified va w397090770 12年前 (2013-04-08) 7829℃ 0评论8喜欢