随笔分类 -  算法

Why Apache Spark is a Crossover Hit for Data Scientists [FWD]
摘要:Spark is a compelling multi-purpose platform for use cases that span investigative, as well as operational, analytics.Data science is a broad church. ... 阅读全文

posted @ 2015-09-19 14:52 Mainz 阅读(610) 评论(0) 推荐(0) 编辑

为什么volatile不能保证原子性而Atomic可以?
摘要:在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档是这样形容volatile的:The Java programming language provides a second mechanism, volatile fields, that is more c 阅读全文

posted @ 2014-02-19 18:25 Mainz 阅读(45533) 评论(11) 推荐(18) 编辑

非阻塞同步算法与CAS(Compare and Swap)无锁算法
摘要:锁(lock)的代价锁是用来做并发最简单的方式,当然其代价也是最高的。内核态的锁的时候需要操作系统进行一次上下文切换,加锁、释放锁会导致比较多的上下文切换和调度延时,等待锁的线程会被挂起直至锁释放。在上下文切换的时候,cpu之前缓存的指令和数据都将失效,对性能有很大的损失。操作系统对多线程的锁进行判断就像两姐妹在为一个玩具在争吵,然后操作系统就是能决定他们谁能拿到玩具的父母,这是很慢的。用户态的锁虽然避免了这些问题,但是其实它们只是在没有真实的竞争时才有效。Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪 阅读全文

posted @ 2014-02-12 17:27 Mainz 阅读(65958) 评论(12) 推荐(28) 编辑

高效率实现web自动完成功能-三叉搜索树
摘要:转载的,原文:http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/ 阅读全文

posted @ 2010-05-05 13:10 Mainz 阅读(801) 评论(0) 推荐(0) 编辑

递归改非递归
摘要:递归用的场合很多,比如求一棵树的深度,树查找节点等,递归的好处就是代码简洁,代码易读,缺点是效率不高,深度限制。随着树的深度增加,程序对函数栈空间的使用越来越多,由于栈空间有限( 栈大小受编译器限制,例如VS2003默认1M),递归方法可能导致内存耗尽问题。解决方法有两个:使用非递归算法, 使用线索二叉树 阅读全文

posted @ 2008-04-20 18:50 Mainz 阅读(1836) 评论(2) 推荐(0) 编辑

导航