分类目录: 算法数据结构

CAP 理论

CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区。从CAP的证明中可以看出来,这个理论的成立是需要很明确的对C、A、P三个概念进行界定的前提下的。在本文中笔者希望可以对论文和一些参考资料进行总结并附带一些思考。

一、什么是CAP理论

CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他认为在设计一个大规模可扩放的网络服务时候会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partition-tolerance)都需要的情景,然而这是不可能都实现的。之后在2003年的时候,Mit的Gilbert和Lynch就正式的证明了这三个特征确实是不可以兼得的。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.00- 10票) Loading ... Loading ... | 同时归档在:软件技术 | 标签: |

Dijkstra算法求解最短路径分析

最短路径是图论算法中的经典问题。图分为有向图、无向图,路径权值有正值、负值,针对不同的情况需要分别选用不同的算法。在维基上面给出了各种不同的场景应用不同的算法的基本原则:最短路问题

针对无向图,正权值路径,采取Dijkstra算法

Dijkstra_Animation

如上图,是求a到b的最短路径,这里并不限定b节点,修改为到任意节点的路径,问题是完全一样的。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.92- 13票) Loading ... Loading ... | 同时归档在:Java | 标签: , , |

数据库的最简单实现

作者: 阮一峰

所有应用软件之中,数据库可能是最复杂的。MySQL的手册有3000多页,PostgreSQL的手册有2000多页,Oracle的手册更是比它们相加还要厚。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.73- 11票) Loading ... Loading ... | 同时归档在:数据库 | 标签: , , |

一周技术文章收集(6.27)

  1. 一站式学习Wireshark(五):TCP窗口与拥塞处理
    http://blog.jobbole.com/71925/
  2. Java类重新加载101:对象、类和类加载器
    http://www.importnew.com/12198.html
  3. The Swift Programming Language 中文版
    http://numbbbbb.gitbooks.io/-the-swift-programming-language-/
  4. 关于寻路算法的一些思考(1):A*算法介绍
    http://blog.jobbole.com/71044/
  5. 译:复杂系统故障面面观
    http://blog.liancheng.info/how-complex-systems-fail-zh/#.U61cP_mSzWg
  6. 一些非常棒的在线工具
    http://examplecode.github.io/tools/2014/06/21/frequently-online-tools/
| 1 分2 分3 分4 分5 分 (4.69- 16票) Loading ... Loading ... | 同时归档在:云计算/云存储, 软件技术 | 标签: , , , |

15道使用频率极高的基础算法题

via hlxs
15道常见的基础算法题:
1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
2、合并两个已经排序的单链表;
3、倒序打印一个单链表;

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.58- 19票) Loading ... Loading ... | 同时归档在:C/C++, 语言基础 | 标签: , |

Dynamo和Cassandra海量存储基础

提到这两个系统,他们在核心思路上是非常类似的,但有一些细节性的东西又有所偏重,在分布式系统中也算是独树一帜了,很有代表性的一个系列,这些不一致的地方,最明显的地方就在于一致性上。可见,哪怕是从追求简单为上的工程化实现来说,各种不同的方式实现一致性也都有很大的不同,不过他们也有一些共性和一些独树一帜的概念,下面来做一下分别解说。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.91- 11票) Loading ... Loading ... | 同时归档在:架构设计 | 标签: , , , , |

Google Spanner 全球分布式数据库

原文地址:Spanner: Google’s Globally-Distributed Database 
中文翻译版下载:Google Spanner 中文版
PPT演示文档:spanner-osdi2012.pptx

讲解视频:

| 1 分2 分3 分4 分5 分 (4.75- 12票) Loading ... Loading ... | 同时归档在:云计算/云存储, 数据库, 架构设计 | 标签: , , , |

公钥私钥加密解密数字证书数字签名详解

决心花一些时间,将这些概念和使用的过程彻底弄清楚。最先找到的文章是:数字签名是什么?(阮一峰博客),读了一遍,又找了一些资料,终于把这些概念弄清楚了,这里整理记录一下。

首先明确几个基本概念:

1、密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.75- 20票) Loading ... Loading ... | 同时归档在:移动互联 | 标签: , , , , , , , , |

深入分析Volatile的实现原理

引言

在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。

它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.33- 9票) Loading ... Loading ... | 同时归档在:Java, 多线程编程 | 标签: , , |

写Java也得了解CPU缓存

CPU,一般认为写C/C++的才需要了解,写高级语言的(Java/C#/pathon…)并不需要了解那么底层的东西。我一开始也是这么想的,但直到碰到LMAX的Disruptor,以及马丁的博文,才发现写Java的,更加不能忽视CPU。经过一段时间的阅读,希望总结一下自己的阅读后的感悟。本文主要谈谈CPU缓存对Java编程的影响,不涉及具体CPU缓存的机制和实现。

现代CPU的缓存结构一般分三层,L1,L2和L3。如下图所示:

CPU三级缓存示意图

阅读全文 »

| 1 分2 分3 分4 分5 分 (4.14- 7票) Loading ... Loading ... | 同时归档在:Java, 多线程编程 | 标签: , |
返回顶部