03 2014 档案

摘要:栈1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表 (1)插入、删除的这一端为栈顶(Top),另一端为栈底(Bottom) (2)当表中没有元素时称为空栈 (3)栈为后进先出(Last In First Out)的线性表,简称LIFO 栈的修改时按后进先出的原则进行,每次删除(退栈)的总是当前栈中最新的元素。即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除。2.栈的基本运算 a.InitStack (S) 构造一个空栈S b.StackEmpty (S) 判断栈是否为空栈 c.StackFull (S) 判... 阅读全文
posted @ 2014-03-28 16:45 shenming 阅读(254) 评论(0) 推荐(0)
摘要:========选择排序、冒泡排序、插入排序=======1.选择排序: 将数组中的每一个元素与第一个元素比较,如果这个元素比第一个小,则交换两个数的位置 将数组中第二个元素之后的元素与第二个元素比较,如果这个元素比第二个小,则交换两个数的位置 ... 结果n-1次比较完成排序public class SortDemo{ public static void main(String[] args){ int[] ary={8,2,3,4,71,4}; ary=selectionSort(ary); } public static int[] selectionSort(int[] ... 阅读全文
posted @ 2014-03-28 16:14 shenming 阅读(255) 评论(0) 推荐(0)
摘要:一个软件项目研发的设计流程是怎样的呢?以通常标准的设计方法为例,(不过笔者喜欢快速原型法)。第一个步骤:是市场调研,技术和市场要结合才能体现最大价值。第二个步骤:是需求分析,这个阶段需要出三样东西,用户视图,数据词典和用户操作手册。用户视图是该软件用户(包括终端用户和管理用户)所能看到的页面样式,这里面包含了很多操作方面的流程和条件。数据词典是指明数据逻辑关系并加以整理的东东,完成了数据词典,数据库的设计就完成了一半多。用户操作手册是指明了操作流程的说明书。请注意,用户操作流程和用户视图是由需求决定的,因此应该在软件设计之前完成,完成这些,就为程序研发提供了约束和准绳,很遗憾太多公司都不是这样 阅读全文
posted @ 2014-03-28 11:15 shenming 阅读(241) 评论(0) 推荐(0)
摘要:默认的yum是没有gearmand的,需要添加源。[html]view plaincopyrpm-ivhhttp://dl.iuscommunity.org/pub/ius/stable/Redhat/6/x86_64/epel-release-6-5.noarch.rpm源添加完后[html]view plaincopyyuminstallgearmandlibgearman-devel[html]view plaincopywgethttp://pecl.php.net/get/gearman获取php-gearman扩展然后解压后./phpize./configure./make &am 阅读全文
posted @ 2014-03-27 15:12 shenming 阅读(281) 评论(0) 推荐(0)
摘要:dbHost = $dbHost; $this->dbName = $dbName; $this->dbUser = $dbUser; $this->dbPass = $dbPass; while(!$this->connect()){ sleep(1); echo "初始化数据库连接失败\n"; }; } public function connect(){ try{ $this->dbObj = new PDO("mysql:host={$this->dbHost};dbname={$this->dbName};cha 阅读全文
posted @ 2014-03-27 15:10 shenming 阅读(1432) 评论(0) 推荐(0)
摘要:关于队列持久化的问题听起来很美好,实际上并不实用。Gearman的队列,可以支持客户端的高并发请求,如果使用了持久化,那么持久化数据库这里将是一个性能瓶颈,客户端的高并发写,持久化数据库这里写的速度跟不上,这样还不如分配给worker处理,至少worker可以是并发的插入并且可以有负载均衡。而且从架构角度讲,Job Server是一个中间件,它不应该直接访问数据库。持久化可以用,但是应该就不是高并发的应用,那么可以有更简单的方法:客户端直接插表,服务端直接读表,这个表就是队列。使用Gearman主要是利用其队列和任务分发的功能,如果考虑队列持久化,不如直接用Redis这种KV数据库做队列。Ge 阅读全文
posted @ 2014-03-27 15:04 shenming 阅读(297) 评论(0) 推荐(0)
摘要:我们以前是做一个营帐系统,C/S架构,前台Delphi做界面,后台是是一个自己实现的内存交互的网络中间层,后台是Unix+C+Informix数据库。由于大热所趋的B/S架构,加之硬件的更新,而Informix数据库又只能运行在Unix数据,驱动很难找,所以决定改架构。由于我们后台只对C语言比较熟悉,对JAVA不熟,而且系统主要是面向营业厅,所以对并发要求不是特别大,因此我们决定用LAGMCP的架构。即,Linux+Apache+PHP+Gearman+C+MySQL架构。Gearman也算是比较多的被运用于生产的队列中间件,有丰富的开发库,对于中小型系统也够用了。我们目前的架构大体如下:如图 阅读全文
posted @ 2014-03-27 15:03 shenming 阅读(339) 评论(0) 推荐(0)
摘要:这篇重点介绍C-Lib库及client和worker的开发,以0.14版libgearman for C来讲解Client APIclient初始化&析构gearman_client_st *gearman_client_create(gearman_client_st *client)void gearman_client_free(gearman_client_st *client)gearman_return_t gearman_client_add_server(gearman_client_st *client, const char *host, in_port_t por 阅读全文
posted @ 2014-03-27 15:02 shenming 阅读(806) 评论(0) 推荐(0)
摘要:Gearman工作流程细解一次正常的Gearman任务执行流程如上图所示:worker向Gearman Server注册自身可以执行的功能worker尝试获取一个任务server通告worker暂无任务worker通告server:“我先睡会,有活干时再叫醒我”client向server发起任务请求server唤醒可以完成这项工作的worker(可能会唤醒多个woker)worker向server发起“饥饿”请求,尝试获得一个任务server选定一个worker,将该任务分配下去通告client:“我安排别人处理你的请求了,耐心等待吧”worker辛苦工作一段时间后,向server通告“干完了 阅读全文
posted @ 2014-03-27 15:01 shenming 阅读(811) 评论(0) 推荐(0)
摘要:现代计算环境最大的挑战之一就是工作分布和计算资源的有效利用。目前的一般趋势是,便宜且轻松地安装一台强大的机器来执行比较直观和简单的任务,但是这可能得不到最佳的总体性能和机器的最佳利用。相反,很多应用程序现在发现自己需要执行一些相当小的操作,但是可能要执行成千上万次,不需要一台强大的机器。随着计算场(farm)的增大,有时候需要跨所有机器同时执行一个动作或操作,或者有选择地执行管理或安装任务。有很多解决方案可用。例如,虚拟化是其中一种方式,采用此方式时,计算机会被分片,以得到最佳的性能,尽管这些方式也有其各自的问题和局限性。memcached 工具(它采用备用内存)和类似于网格的解决方案 —— 阅读全文
posted @ 2014-03-27 15:00 shenming 阅读(346) 评论(0) 推荐(0)
摘要:Gearman版本Gearman网址:gearman.org0.14是标准C的版本,适合研究源码0.33是C++版本,增加了gearadmin工具1.1.11是最新版本对于任务高度功能来说,各版本变化不大,主要的变化 是持久化功能与开发库的变化安装Gearman一、安装gearman服务1.安装libeventtar xzvf libevent-2.0.4-alpha.tar.gzcd libevent-2.0.4-alpha./configure --prefix=/usr/local/libevent & make & make install2.安装gearmandtar 阅读全文
posted @ 2014-03-27 14:59 shenming 阅读(561) 评论(0) 推荐(0)
摘要:Gearman协议工作于TCP之上,默认使用4730端口。它之前使用端口7003,但与AFS的端口范围冲突,4730端口是由IANA分配的。client和jobserver间,以及worker与jobserver间存在通信交互,这两种情况下的通信协议都是由请求包和响应包组成。所有发送到jobserver的包都认为是请求,所有由jobserver发送的包都认为是响应。一种简单的配置例子是这样的:---------- ---------- ---------- ----------|Client | | Client | | Client | | Client |---------- ------ 阅读全文
posted @ 2014-03-27 14:58 shenming 阅读(440) 评论(0) 推荐(0)
摘要:为确保具备对海量任务调度的支持能力,Gearman毫无悬念的选择libevent作为网络操作支撑库。libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select、epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的( 阅读全文
posted @ 2014-03-27 14:57 shenming 阅读(433) 评论(0) 推荐(0)
摘要:对于绝大多数发展中等的web 2.0网站来说,LAMP结构已经不能满足现在的需要了,新的架构组合是GLAMMP,G=Gearman(分布式远程过程处理),M=Memcached(高性能的分布式的内存对象缓存系统)。Gearman的高级特性在一个 Web 应用程序内可能有许多地方都会用到 Gearman。可以导入大量数据、发送许多电子邮件、编码视频文件、挖据数据并构建一个中央日志设施 — 所有这些均不会影响站点的体验和响应性。可以并行地处理数据。而且,由于 Gearman 协议是独立于语言和平台的,所以您可以在解决方案中混合编程语言。比如,可以用 PHP 编写一个 producer,用 C、Ru 阅读全文
posted @ 2014-03-27 14:56 shenming 阅读(733) 评论(0) 推荐(0)
摘要:Gearman介绍Gearman是一个用来把工作委派给其他机器、分布式的调用更适合做某项工作的机器、并发的做某项工作在多个调用间做负载均衡、或用来在调用其它语言的函数的系统。通常,多语言多系统之间的集成是个大问题,一般来说,人们多半会采用 WebService 的方式来处理此类集成问题,但不管采用何种风格的WebService,如 RPC 风格,或者 REST 风格,其本身都有一定的复杂性。相比之下,Gearman 也能实现类似的作用,而且更简单易用。对于分布式网络环境或者有大量任务的应用,我们需要将任务在不同的服务器之间进行分布,这个时候正好是Gearman发挥实力的时候。虽然我们也可以使用 阅读全文
posted @ 2014-03-27 14:55 shenming 阅读(436) 评论(0) 推荐(0)
摘要:日志未经声明,均为AlloVince原创。版权采用『 知识共享署名-非商业性使用 2.5 许可协议』进行许可。 选择语言​▼对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memcached、File System等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。但是往往我们又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。而. 阅读全文
posted @ 2014-03-27 14:52 shenming 阅读(293) 评论(0) 推荐(0)
摘要:设计模式(Design Patterns) ——可复用面向对象软件的基础设 计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用 设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决 方案,这也是它能被广泛应用的原因。本章系Java之美 阅读全文
posted @ 2014-03-26 11:37 shenming 阅读(253) 评论(0) 推荐(0)
摘要:linux下文件分割与合并 ====================================$dd if=source of=target.1 bs=1M count=10 $dd if=source of=target.2 bs=1M skip=10 source被分为target.1和target.2两个文件,其中target.1为source的前10M部分;target.2为source的减去10M后的部分。 $cat target.1 target.2 > othersource source与othersource是同一个文件。 改变文件或目录之读、写、执行之允许权== 阅读全文
posted @ 2014-03-26 10:43 shenming 阅读(1101) 评论(0) 推荐(0)
摘要:在Linux下安装和卸载软件不像Windows时那么直观。其实在Linux下安装和卸载软件也非常简单,同样也有安装向导或解压安装的方式,不相同的只不过是除了二进制形式的软件分发外,还有许许多多以源代码形式分发的软件包。linux下的软件一般都是经过压缩的,主要的格式有这几种:rpm、tar、tar.gz、tgz等。所以首先拿到软件后第一件事就是解压缩。下面就来详细地讲一讲这些软件的安装与卸载:一、二进制分发软件包的安装与卸载Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不 阅读全文
posted @ 2014-03-26 09:58 shenming 阅读(240) 评论(0) 推荐(0)
摘要:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。 如何安装Redis? Redis的官方下载站是http://redis.io/download,可以去上面下载最新的安装程序下来,我写此文章时的的稳定版本是2.2.12。 怎么安装 Redis数据库呢?下面将介绍Linux版本的安装方法: 步骤一: 下载Redis 下载安装包:wget http://redis.googlecode.com/files/redis-2.2.12.t... 阅读全文
posted @ 2014-03-25 14:26 shenming 阅读(239) 评论(0) 推荐(0)
摘要:在之前的文章中,给大家介绍了《Redis快速入门:Key-Value存储系统简介》,今天进一步给大家介绍为什么选择Key-Value Store。Key-Value Store是当下比较流行的话题,尤其在构建诸如搜索引擎、IM、P2P、游戏服务器、SNS等大型互联网应用以及提供云计算服务的时候,怎样保证系统在海量数据环境下的高性能、高可靠性、高扩展性、高可用性、低成本成为所有系统架构们挖苦心思考虑的重点,而怎样解决数据库服务器的性能瓶颈是最大的挑战。 大量的互联网用户选择Key-Value Store的原因具体是什么呢? 主要分为下面的2个主要原因: 1、大规模的互联网应用 对于goo... 阅读全文
posted @ 2014-03-25 14:15 shenming 阅读(1794) 评论(0) 推荐(0)
摘要:Redis是一个Key-Value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操 作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Key-Value存储系统简介 Ke.. 阅读全文
posted @ 2014-03-25 14:02 shenming 阅读(749) 评论(0) 推荐(0)
摘要:一、使用更新源的国内镜像CentOS 安装完毕,首先应该修改更新源,并升级到最新的系统。国内速度较快的常用更新源:http://centos.ustc.edu.cn/centos/http://mirrors.163.com/centos/http://mirrors.sohu.com/centos/首先备份CentOS-Base.repo,然后再编辑 yum 的配置文件:[piaoyun@piaoyun-pc ~]$ sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak[piaoyun@ 阅读全文
posted @ 2014-03-25 11:34 shenming 阅读(1256) 评论(0) 推荐(0)
摘要:1.用root登录 ,或su root2.yum install "@Chinese Support"3.exit4.回到桌面,system->preferences->input method5.如果没有,先注销一下。6.到里面add输入法到列表里。7.最后再注销、登录。在centOS 6.4下面测试无误。 阅读全文
posted @ 2014-03-25 10:42 shenming 阅读(216) 评论(0) 推荐(0)
摘要:wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点:(1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;(2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;(3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;(4)设置方便简单;可能,习惯图形界面的用户已经 阅读全文
posted @ 2014-03-14 11:51 shenming 阅读(172) 评论(0) 推荐(0)
摘要:yum(全 称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载 RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至 全部软件包的命令,而且命令简洁而又好记。yum的命令形式一般是如下:yum [options] [command] [package ...]其中的[options]是可选的,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes&quo 阅读全文
posted @ 2014-03-14 11:31 shenming 阅读(188) 评论(0) 推荐(0)
摘要:参考别人的做法,遇到问题上网查,下面就是安装步骤.一、安装Apache2.2.221、到官网下载 http://httpd.apache.org/download.cgi 2、解压 tar -zxvf httpd-2.2.22.tar.gz3、建立目标文件夹(注意以下所有操作都时在root用户下执行的) mkdir /usr/local/apache2 也就是说等下安装的apache2要安装到这个文件夹里面4、配置 回到原来解压之后产生的文件夹 ./configure --prefix=/usr/local/apache2 --enable-module=shared 要加上后面的参数,否则无 阅读全文
posted @ 2014-03-13 17:11 shenming 阅读(422) 评论(0) 推荐(0)
摘要:a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312"),静态页面添加,所有文件的编码格式为ANSI,可用记事本打开,另存为选择编码为ANSI,覆盖源文件。 b. 如果欲使用utf-8编码,那么php要输出头 :header(“Content-Type: text/html; charset=utf-8"),静态页面添加,所有文件的编码格式为utf-8。 最近需要用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数 阅读全文
posted @ 2014-03-10 11:58 shenming 阅读(1017) 评论(0) 推荐(0)