[置顶] 设计模式之工厂模式

摘要: 定义 定义一个创建对象的接口,但由子类决定要实例的类是哪一个。工厂方法让类把实例推迟到子类。 设计原则 要依赖抽象,不要依赖具体的类:不能让高层组件依赖于底层组件,并且两者都应该依赖于抽象。 指导方针 变量不可以持有具体类的引用:如果使用new,就会持有具体类的引用。可以用工厂来避开这样的做法。 不 阅读全文

posted @ 2018-01-16 09:25 Mr.Tan& 阅读(1202) 评论(0) 推荐(2) 编辑

[置顶] 数据结构之散列

摘要: 散列是一种用于以常数平均时间执行插入,删除和查找的技术 一般想法 一个关键字就是一个带有相关值的字符串。我们把表大小记作Table-Size,并将其理解为散列数据结构的一部分而不仅仅是浮动于全局的某个标量。 每个关键字被映射到从0到TableSize-1的这个范围中的某个数,这个映射就叫做散列函数 阅读全文

posted @ 2017-10-25 09:19 Mr.Tan& 阅读(3267) 评论(0) 推荐(1) 编辑

[置顶] 程序员的自我修养十内存

摘要: 内存是承载程序运行的介质,也是程序进行各种运算和表达的场所。 10.1 程序的内存布局 现代的应用程序都运行在一个内存空间里,在32位系统里,这个内存空间拥有4GB(2的32次方)的寻址能力。现在的应用程序可以直接使用32位地址进行寻址,这被称为平坦的内存模型。在平坦的内存模型中,整个内存是一个统一 阅读全文

posted @ 2017-10-12 14:42 Mr.Tan& 阅读(2010) 评论(1) 推荐(7) 编辑

[置顶] 程序员的自我修养一温故而知新

摘要: 1.1从Hello World说起 目的:从最基本的编译,静态链接到操作系统如何转载程序,动态链接及运行库和标准库的实现,和一些操作系统的机制。了解计算机上程序运行的一个基本脉络。 1.2变不离其宗 计算机最关键的三个部分:CPU,内存,I/O控制芯片。 早期的计算机:没有复杂的图形功能,CPU和内 阅读全文

posted @ 2017-08-02 15:39 Mr.Tan& 阅读(7379) 评论(28) 推荐(70) 编辑

2023年9月3日

第九章:一致性与共识

摘要: 分布式系统最重要的抽象之一就是共识(consensus):就是让所有的节点对某件事达成一致。 如果两个节点都认为自己是领导者,这种情况被称为脑裂(split brain),且经常导致数据丢失。正确实现共识有助于避免这种问题。 一致性保证 不一致性是暂时的,最终会自行解决。最终一致性的一个更好的名字可 阅读全文

posted @ 2023-09-03 11:49 Mr.Tan& 阅读(41) 评论(0) 推荐(0) 编辑

2023年8月11日

第九章:一致性与共识

摘要: 分布式系统最重要的抽象之一就是共识(consensus):就是让所有的节点对某件事达成一致。 如果两个节点都认为自己是领导者,这种情况被称为脑裂(split brain),且经常导致数据丢失。正确实现共识有助于避免这种问题。 一致性保证 不一致性是暂时的,最终会自行解决。最终一致性的一个更好的名字可 阅读全文

posted @ 2023-08-11 23:32 Mr.Tan& 阅读(51) 评论(0) 推荐(0) 编辑

2023年8月4日

第八章:分布式系统的麻烦

摘要: 故障与部分失效 如果发生内部错误,我们宁愿电脑完全崩溃,而不是返回错误的结果,因为错误的结果很难处理。因为计算机隐藏了模糊不清的物理实现,并呈现出一个理想化的系统模型,并以数学一样的完美的方式运作。 在分布式系统中,尽管系统的其他部分工作正常,但系统的某些部分可能会以某种不可预知的方式被破坏。这被称 阅读全文

posted @ 2023-08-04 23:08 Mr.Tan& 阅读(48) 评论(0) 推荐(0) 编辑

2023年7月29日

第七章:事务

摘要: 事务是应用程序将多个读写操作组合成一个逻辑单元的一种方式。从概念上讲,事务中的所有读写操作被视作单个操作来执行:整个事务要么成功(提交(commit))要么失败(中止(abort),回滚(rollback))。 事务是为了简化应用编程模型而创建的。通过使用事务,应用程序可以自由地忽略某些潜在的错误情 阅读全文

posted @ 2023-07-29 21:05 Mr.Tan& 阅读(18) 评论(0) 推荐(0) 编辑

2023年6月2日

第六章:分区

摘要: 对于非常大的数据集,或非常高的吞吐量,仅仅进行复制是不够的:我们需要将数据进行分区(partitions),也称为分片(sharding)。 分区(partition),在MongoDB,Elasticsearch和Solr Cloud中被称为分片(shard),在HBase中称之为区域(Regio 阅读全文

posted @ 2023-06-02 23:36 Mr.Tan& 阅读(55) 评论(0) 推荐(0) 编辑

2023年5月27日

第五章:复制

摘要: 如果复制中的数据不会随时间而改变,那复制就很简单:将数据复制到每个节点一次就万事大吉。复制的困难之处在于处理复制数据的变更(change)。 三种变更复制算法:单领导者(single leader),多领导者(multi leader)和无领导者(leaderless)。 领导者与追随者 存储数据库 阅读全文

posted @ 2023-05-27 22:49 Mr.Tan& 阅读(36) 评论(0) 推荐(0) 编辑

2023年5月20日

第四章:编码与演化

摘要: 在大多数情况下,修改应用程序的功能也意味着需要更改其存储的数据:可能需要使用新的字段或记录类型,或者以新方式展示现有数据。 关系数据库通常假定数据库中的所有数据都遵循一个模式:尽管可以更改该模式(通过模式迁移,即ALTER语句),但是在任何时间点都有且仅有一个正确的模式。相比之下,读时模式(sche 阅读全文

posted @ 2023-05-20 22:05 Mr.Tan& 阅读(53) 评论(0) 推荐(0) 编辑

2023年5月19日

第三章:存储与检索

摘要: 当你把数据交给数据库时,它应当把数据存储起来;而后当你向数据库要数据时,它应当把数据返回给你。 驱动数据库的数据结构 我们可以简单的使用键值实现存储功能,然后保存在文本中。 底层的存储格式非常简单:一个文本文件,每行包含一条逗号分隔的键值对,文件尾部追加写入将有很好的性能。 许多数据库在内部使用了日 阅读全文

posted @ 2023-05-19 17:09 Mr.Tan& 阅读(61) 评论(0) 推荐(0) 编辑

2023年5月18日

第二章:数据模型与查询语言

摘要: 数据模型可能是软件开发中最重要的部分,它不仅仅影响着软件的编写方式,而且影响着我们的解题思路。 一个复杂的应用程序可能会有更多的中间层次,每个层都通过提供一个明确的数据模型来隐藏更低层次中的复杂性。 关系模型与文档模型 最著名的数据模型可能是SQL。它基于Edgar Codd在1970年提出的关系模 阅读全文

posted @ 2023-05-18 16:13 Mr.Tan& 阅读(47) 评论(0) 推荐(0) 编辑

2023年5月17日

第一章:可靠性,可扩展性,可维护性

摘要: 现今很多应用程序都是 数据密集型(data-intensive) 的,而非 计算密集型(compute-intensive) 的。 数据密集型应用标准组件: 存储数据,以便自己或其他应用程序之后能再次找到 (数据库(database)) 记住开销昂贵操作的结果,加快读取速度(缓存(cache)) 允 阅读全文

posted @ 2023-05-17 10:16 Mr.Tan& 阅读(195) 评论(0) 推荐(0) 编辑

导航