
设计思路
文章平均质量分 84
祁峰
北京竹鱼互联科技有限公司创始人
展开
-
系统架构 之 增量升级系统架构
这里写自定义目录标题原创 2020-06-29 18:12:00 · 631 阅读 · 0 评论 -
23种设计模式 之 Template模式(模板模式)[C语言]
一、概念定义 Temple模式:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架是一致的。Temple提供了一个实现框架。二、模式结构图图1 Temple模式结构图三、场景设计 假如新生刚刚入校,这时班主任让每一位同学依次:站起来->自我介绍->坐下。四、C语言实现分析:可以认为“站起来->自我介绍->坐下”是原创 2012-11-14 11:54:53 · 3946 阅读 · 0 评论 -
[REDIS]: Codis作者黄东旭细说分布式Redis架构设计和踩过的那些坑
Codis是一个分布式Redis解决方案,与官方的纯P2P的模式不同,Codis采用的是Proxy-based的方案。本文将介绍Codis及下一个大版本RebornDB的设计,同时会介绍一些Codis在实际应用场景中的tips,以及作者对分布式存储的一些观点和看法。黄东旭,Ping CAP CTO,开源项目Codis的co-author。之前在豌豆荚从事infrastructure相关的工作,现在转载 2016-04-12 16:22:16 · 4152 阅读 · 0 评论 -
高效内存池的设计方案[C语言]
一、前言概述本人在转发的博文《内存池的设计和实现》中,详细阐述了系统默认内存分配函数malloc/free的缺点,以及进行内存池设计的原因,在此不再赘述。通过对Nginx内存池以及《内存池的设计和实现》的分析后,现提出一种性能更优(申请/释放内存时间复杂度为O(1))的内存池的设计方案。如有不妥之处,欢迎指正!如有其他的内存池的设计方案,欢迎共同分享和探讨。二、结构设计2.1 内存池结原创 2012-11-18 02:18:01 · 9104 阅读 · 10 评论 -
总结使用libwebsockets开发接入层
使用libwebsockets进行开发的注意事项原创 2015-12-14 23:57:40 · 31733 阅读 · 15 评论 -
CODIS2.x原理 之 CODIS-PROXY实现原理
程序codis-proxy是连接client与codis-server之间的桥梁,且其主要处理流程充分体现了codis设计思想。要想深入理解codis原理,必须首先弄清楚codis-proxy各主要处理流程。原创 2016-07-25 15:43:37 · 9588 阅读 · 0 评论 -
CODIS2.x原理 之 数据迁移流程
CODIS有一个非常重要的特点就是:支持热扩容。即:在不停止服务的情况下,实现集群设备的增减。其实现此功能的技术基础就是“数据迁移功能”。数据迁移的主要目的是将属于某codis-server组的slot的所有数据迁移到另外一个codis-server组中。原创 2016-08-03 10:43:17 · 4636 阅读 · 0 评论 -
系统架构 之 高性能数据传输系统的框架设计
随着互联网和物联网的高速发展,使用网络的人数和电子设备的数量急剧增长,其也对互联网后台服务程序提出了更高的性能和并发要求。本文的主要目的是阐述在单机上如何进行高并发、高性能消息传输系统的框架设计,以及该系统的常用技术,但不对其技术细节进行讨论。原创 2014-05-04 16:26:17 · 7481 阅读 · 6 评论 -
系统架构 之 高效分布式爬虫系统的架构设计[申请专利]
将以可用性、可靠性、高效性、可扩展性为基本准则重新设计爬虫系统原创 2015-02-06 14:22:31 · 3743 阅读 · 0 评论 -
NGINX原理 之 SLAB分配机制
NGINX原理分析 之 SLAB分配机制原创 2013-09-15 23:42:34 · 9200 阅读 · 11 评论 -
NGINX原理 之 CPU绑定(CPU亲和性)
NGINX中的进程能够绑定到指定的CPU 进程绑定CPU 线程绑定CPU原创 2014-06-12 18:42:37 · 9424 阅读 · 4 评论 -
算法导论 之 B树(B-树) - 创建、插入[C语言]
在计算机科学中,B树在查找、访问、插入、删除操作上时间复杂度为O(log2~n)(2为底数 n为对数),不像自平衡二叉查找树,其可以有效的优化系统对大块的数据读写的性能,其通常在数据库和文件系统中被使用。原创 2014-03-13 18:28:41 · 17676 阅读 · 3 评论 -
[聊天机器人]:开源ChatterBot工作原理
聊天机器人ChatterBot的实现原理原创 2017-08-13 00:36:08 · 12336 阅读 · 10 评论 -
通用线程池的设计和实现[C语言]
一、适用场景 首先,必须明确一点,线程池不是万能的,它有其特定的使用场景。使用线程池是为了减小线程本身的开销对应用性能所产生的影响,但是其前提是线程本身创建、销毁的开销和线程执行任务的开销相比是不可忽略的。如果线程本身创建、销毁的开销对应用程序的性能可以忽略不计,那么使用/不使用线程池对程序的性能并不会有太大的影响。 线程池通常适合以下几种场景: ①、单位时间原创 2012-12-28 10:39:59 · 3808 阅读 · 6 评论 -
23种设计模式 之 Strategy模式(策略模式)[C语言]
一、概念定义 Strategy模式:是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。Strategy模式使得算法可以在不影响到客户端的情况下发生变化。Strategy模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。二、模式结构图图1 St原创 2012-11-13 16:44:32 · 3379 阅读 · 0 评论 -
宏开关管理模块的实现[C语言]
一、功能宏优点 在进行软件系统的开发过程中,对不同的功能模块的代码使用分别使用与之对应的宏将其控制起来,其有如下优点: ①、方便移植 在移植过程中,可根据功能宏快速的将功能模块代码进行提取和分离。 ②、增强可扩展性 可通过宏的开启和关闭来控制此功能开启和关闭,增强了平台的可配置性、可扩展性。 ③、快速定位问题原创 2012-11-11 22:09:59 · 6452 阅读 · 0 评论 -
代码优化概要
本文译自Dr. Dobb’s Blogger的Walter Bright写的《Overlooked Essentials For Optimizing Code》我编写程序至今有35年了,我做了很多关于程序执行速度方面优化的工作(一个示例),我也看过其它人做的优化。我发现有两个最基本的优化技术总是被人所忽略。 注意,这两个技术并不是避免时机不成熟的优化,并不是把冒泡排序转载 2012-11-27 13:09:23 · 1442 阅读 · 0 评论 -
性能调优攻略
关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去看一下以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈!但转载 2012-11-27 11:56:50 · 1647 阅读 · 2 评论 -
内存池的设计和实现 -- 《C++应用程序性能优化》
引言本书主要针对的是 C++ 程序的性能优化,深入介绍 C++ 程序性能优化的方法和实例。全书由 4 个篇组成,第 1 篇介绍 C++ 语言的对象模型,该篇是优化 C++ 程序的基础;第 2 篇主要针对如何优化 C++ 程序的内存使用;第 3 篇介绍如何优化程序的启动性能;第 4 篇介绍了三类性能优化工具,即内存分析工具、性能分析工具和 I/O 检测工具,它们是测量程序性能转载 2012-10-11 11:35:22 · 13968 阅读 · 0 评论 -
算法导论 之 冒泡排序[C语言]
一、算法实现冒泡排序的时间复杂度为O(n^2),其实现代码如下:int bubble_sort(int *array, int num){ int i=0, j=0, idx=0, max=0; for(idx=1; idx<num; idx++) { array[0] = array[1]; /* array[0]为交换空间 */ max = num-原创 2013-01-01 09:28:09 · 1810 阅读 · 0 评论 -
海量高并发处理网站的负载均衡如何设计
【IT168 应用】随着线上业务的发展,网站面临高并发访问和海量数据流的情况屡见不鲜,系统中的各个核心设备所负担的处理能力和计算强度也会相应增大,使得单一设备根本无法承担。如果淘汰现有设备去做硬件升级,将造成资源的浪费,而且如果以后面临业务量的激增,又不得不再次投入高额的硬件升级成本,甚至性能再卓越的设备也不能满足将来业务量的需求。 在此种情况下,单纯的网络架构就显得捉襟见肘了,而负载均转载 2013-12-12 16:20:34 · 3105 阅读 · 0 评论 -
日志系统性能对比分析
一、基础概述 日志系统主要负责记录系统运行过程中的行为和数据,这些行为和数据将作为系统恢复、错误查找、数据纠正的重要依据,其重要性可见一斑!但是往往对于一个有高性能要求的信息系统而言,日志系统往往又是整个系统的瓶颈所在,针对这个问题,以下为寻找一个更优的日志系统设计方案做一些前期的探索工作。二、系统实现2.1 TCP日志系统(异步)2.1.1 服务端代码》主函数代码原创 2013-10-17 18:32:25 · 3944 阅读 · 2 评论 -
统一数据库互联[UDBC]的设计
一、概念简介 众所周知,数据库的类型很多,常见的有Oracle、DB2、SQL Server、MySQL、Informix等等,但是不同的数据库拥有着不同的访问方式。如:可通过PRO*C、OCI访问Oracle;可通过ESQL访问DB2和Informix;可通过MySQL API访问MySQL等等。 可是,往往完成基于某一种数据库的程序开发后,要切换至其他数据库时,不得不去修改原创 2012-11-09 16:55:04 · 9893 阅读 · 0 评论 -
通用栈的设计和实现[C语言]
①、栈的定义typedef struct{ void **base; /* 栈底 */ void **top; /* 栈顶 */ int size; /* 栈的大小 */}stack_t;在此设计的通用栈将会达到以下两点要求: ①、可以处理任意的数据类型的数据 请注意栈中base和top的数据类型,其为void**原创 2013-03-09 02:05:23 · 3280 阅读 · 0 评论 -
算法导论 之 动态规划 - 装配线调度问题[C语言]
动态规划 - 装配线问题:现有两条装配线,Sij表示第i条上完成第j道工序的装配站。汽车完成组装需要依次完成1~n工序。请找出完成装配并离开装配线的最快路线原创 2014-03-07 18:05:13 · 3222 阅读 · 0 评论 -
23种设计模式 之 State模式(状态模式)[C语言]
一、概念定义 State模式:允许一个对象在其状态发生改变时,改变它的行为。 State模式和Strategy模式非常相似,需要说明的是两者的思想是一致的;只不过封装的对象不同:State模式封装的是不同的状态,而Strategy模式封装的是不同的算法。 State模式主要解决的问题是:在开发过程中,时常遇到需要根据不同的状态需要进行不同的处理操作的问题。大部分人采用原创 2012-11-14 16:07:04 · 5302 阅读 · 1 评论 -
23种设计模式 之 Observer模式(发布-订阅模式)[C语言]
一、概念定义 Observer模式又称为发布-订阅模式。 Observer模式:定义了一种一对多的依赖关系,让多个观察者(Observer)同时监听某一主题对象(Subject)。当这个主题对象(Subject)的状态发生变化时,会通知观察者对象(Observer),让他们能够自动更新自己。二、模式结构图图1 Observer模式结构图三、场景设计原创 2012-11-15 15:58:29 · 8902 阅读 · 2 评论 -
非递归(栈)算法解析XML思路[申请专利]
对于树状层次结构的数据,往往有两种处理思路:递归算法处理和非递归(栈)算法处理。 递归算法:简单易懂,且有些场景还必须使用递归算法才能处理。但递归算法也有其先天性的缺陷:运行效率较低、运行过程所耗费的空间资源也相对较高。 非递归(栈)算法:算法相对比较复杂,不太好理解,但其运行效率较高。原创 2013-03-07 22:34:55 · 4273 阅读 · 2 评论 -
C代码优化方案
目录C代码优化方案1、选择合适的算法和数据结构2、使用尽量小的数据类型3、减少运算的强度(1)、查表(游戏程序员必修课)(2)、求余运算(3)、平方运算(4)、用移位实现乘除法运算(5)、避免不必要的整数除法(6)、使用增量和减量操作符(7)、使用复合赋值表达式(8)、提取公共的子表达式4、结构体成员的布局(1)按数据类型的长度排序(2)转载 2012-10-11 14:14:26 · 2264 阅读 · 0 评论