
架构设计/理论经验
文章平均质量分 55
春文秋武
路延续着崎岖,静静地走着
展开
-
常见排序算法总结
排序算法很早就开始接触,但全部记住并瞬间写出来也是有点困难。排序算法更多的是给我们提供了一种思路。常见的有:归并排序、快速排序、堆排序,以及较为简单的冒泡排序、选择排序、插入排序、希尔排序等。近日回味,发现中国IT实验室的一个教程较为详细明了,现转载如下。但是其中的归并排序代码的合并部分有个小问题,读者自行发现。排序算法的复杂度及思想:补:二路归并排序的时间复杂度为O(nlogn),把原创 2011-06-03 20:57:00 · 738 阅读 · 0 评论 -
可伸缩性最佳实践:来自eBay的经验
看到一篇关于系统可伸缩性(可扩展)的文章,eBay的架构师Randy Shou转载 2014-07-24 13:34:03 · 685 阅读 · 0 评论 -
设计模式-创建型模式(读书笔记)
看到一张图,先记录下来,再做修改原创 2014-03-13 13:38:08 · 808 阅读 · 0 评论 -
设计模式-行为模式(读书笔记)
行为模式涉及到算法和对象间职责的分配,行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时难以跟踪的复杂的控制流,将程序员的注意力从控制流转移到对象间的联系方式上来。职责链(chain of responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止原创 2014-08-08 15:07:40 · 774 阅读 · 0 评论 -
设计模式-结构型模式(读书笔记)
结构型模式涉及到如何组合类和对象以获得geng原创 2014-08-06 14:38:34 · 749 阅读 · 0 评论 -
搜索引擎学习-概述
定义从互联网上搜索,通过文本匹配,采取一些手段找到最好的信息。结果衡量相关性-结果与query的匹配,结果与用户需求的匹配权威性-结果被引用次数(超链),链接分析时效性-结果对用户是有用新鲜的多样性-根据用户行为返回丰富的结果(苹果?)个性化-地域、用户喜好反spam可以抽象为1个打分公式:score = F(query, doc, user)搜索步骤数据的处理:原创 2014-03-21 16:08:17 · 1783 阅读 · 0 评论 -
搜索引擎学习-实现
上篇文章介绍了搜索引擎的基本概念,有了大致的认识,本文说下搜索引擎实现上的一些问题。搜索引擎组成抓取系统:负责对互联网信息的搜集,将网页保存到本地,供下游分析、挖掘、建索引使用。分析系统:分析query,查询排序索引系统:整理资源,提取特征检索系统:用户query查找,结果展现离线计算和在线计算为了确保搜索引擎的响应时间和结果质量,在实现上,原创 2014-04-04 15:29:20 · 1314 阅读 · 0 评论 -
很好的设计-安全的单例模式
在服务开发过程中,常常需要单例来保存全局资源,本文给出一个实用的实现方案。原创 2013-12-18 17:23:25 · 908 阅读 · 0 评论 -
很好的设计-服务端网络请求处理模型
几个月前学习了公司内部的网络编程框架,结果zuij原创 2014-06-27 16:10:49 · 1524 阅读 · 0 评论 -
Amazon Dynamo论文学习
Dynamo是一个key-value数据存储系统,具有高ku原创 2014-07-18 18:38:19 · 1009 阅读 · 0 评论 -
分布式系统设计准则
分布式系统通常服务大请求、维护着大数据、快速响应、长时间可用。设计分布式后台服务需要考虑的东西很多,本文给出一些常用的设计准则,以备查看。可用性:系统可以正常服务的时间,一些在线系统常常要求99%的可用性。高可用性往往通过关键组件备份冗余来实现(如冷备、热备)性能:快速响应、低延迟可靠性:系统可靠就是同样的请求返回同样的数据;更新能够持久化;数据不会丢失可伸缩性:系统额外还能处理多少流原创 2014-02-18 15:53:03 · 1075 阅读 · 0 评论 -
分布式存储的一些概念
一致性哈希哈希常用于分布式计算的负载均衡,如缓存服务器对数据的划分,对于目标资源O的请求使用hash(O) = O mod n来映射到其中一台。一个问题是:当增加或删除一台cache server时(n发生了变化),所有资源对应的hash值被相应的改变,致使所有的缓存都失效,cache server需要大量更新缓存原创 2014-04-04 17:29:10 · 1240 阅读 · 0 评论 -
常用推荐算法
推荐系统在互联网中有很多应用场景,如广告、电子商务、社区论坛转载 2014-07-10 15:22:10 · 1013 阅读 · 0 评论 -
海明码
<br />海明码的思想经常用到,有必要进行深入学习。<br />首先,海明码是一种可以纠正一位错误的二进制编码。一种编码的纠错能力取决于该编码的码距,下面介绍码距。<br />如图1所示的一个编码系统,用三位二进制来表示八个不同信息。在这个系统中,两个码字之间不同的位数从1到3原创 2010-11-05 21:02:00 · 4176 阅读 · 0 评论 -
19本书,选5本,任两本不邻-粗解
<br /> <br />有19本书,分别编号为1--19,从中选出5本,要求任意两本编号不相邻,问一共有多少中选法?<br />A. 2002 B. 3003 C. 11628 D. 360360<br />任选5本,组合C19(5)=19*18*17*16*15/5!=116原创 2010-10-15 21:36:00 · 2634 阅读 · 0 评论 -
求n个骰子各点数和出现的概率-动态规划
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。声明思想非原创!只因动态规划思想的使用很好,记下!分析:动态规划就是分阶段考虑问题,给出变量,找出相邻阶段间的关系。具体定义给忘了。1.现在变量有:骰子个数,点数和。当有k个骰子,原创 2011-07-27 21:56:27 · 8787 阅读 · 1 评论 -
求左边数字减去右边数字的最大差-动态规划
题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。动态规划变量:i为数组索引,max为i之前的最大值(不包括i),maxdiff为i之原创 2011-08-16 21:39:44 · 2197 阅读 · 0 评论 -
含有min()函数的栈,各种操作时间复杂度为O(1)
设计一个栈,定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。声明:思想非原创#include using namespace std;class Stack{private: int *原创 2010-11-12 20:11:00 · 2035 阅读 · 0 评论 -
在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如: 输入整数22和如下二元树 10 / / 5 12 / / 4原创 2010-11-19 11:10:00 · 1176 阅读 · 1 评论 -
求整数数组中和最大的子数组
输入一个整型数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因原创 2010-11-12 21:32:00 · 2357 阅读 · 0 评论 -
二元查找树转为双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10原创 2010-11-08 21:25:00 · 1044 阅读 · 0 评论 -
很好的设计-锁的自动使用和释放
多线程下,常常会使用互斥锁或者读写锁来确保临界区的正确使用。pthread_mutex_lock(&mutex);//using critical sectionpthread_mutex_unlock(&mutex);如果在使用临界区期间发生异常返回,导致锁没有释放。为了防止这种现象发生,我们通常要在每个return之前都要释放锁,增加代码量、影响美观,而且有忘记的隐患。期望一种能够原创 2013-12-18 17:08:47 · 1779 阅读 · 0 评论 -
一种处理多任务的线程池设计
先上类图:1. Worker为处理任务的线程,不断获取新任务运行2.Task为任务实例,可以设计为一次性的或者循环运行3. ExecutorPool维护着线程池和任务池。 3.1 内部负责worker的生成和销毁,task的分发;对外提供task的增加。 3.2 mutex:为互斥变量,实现对tasks和workers的互斥操作。 3.3 execute:是对原创 2012-09-28 17:55:30 · 1900 阅读 · 0 评论 -
海量数据搜索的思考
后续完善。背景miui有1亿用户(108),每个用户有1万张相片(104)。从数据量和数据大小两个方面认识下。数据量:共有1012条数据,100台机子存储,每台机子1010条数据(100亿)。数据大小:每个用户的数据占2MB,共2*108MB = 200TB,200台机子存储,每台机子存储1TB。初步印象集群需要机器数量以百衡量;从海量数据中查询想要的结果需要架构分层、数据分治;海量数据的管理原创 2015-06-24 16:37:20 · 925 阅读 · 0 评论