04 2012 档案
摘要:Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生 变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式,关于 Zookeeper 的详细架构等内部细节可以阅读 Zookeeper 的源码下面详细介绍这些典型的应用场景,也就是 Zookeeper 到底能帮我们解决那些问题?下面将给出答案。统一命名服务(Name Service)分布式应用中,通常需要有一套完整的命名规则,既能够产生
阅读全文
摘要:实例1:OBJ = a.o b.o main.oH = a.h b.hDBG = -gmain : $(OBJ) gcc $(OBJ) $(DBG) -o main%.o : %.cpp $(H) g++ -c $< -o $@实例2:作为Linux或Unix下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般开发情况下,大家都是手工写一个简单Makefile。下面先给一个最简单的示例代码:#makefile示例object= main.o function.ochange:$(object) cc -o change $(obje...
阅读全文
摘要:插入 InsertAttr(name, value)查询 EvaluateAttr*** 这么一系列的函数
阅读全文
摘要:对于某类查询接口,有两种方法:User Query(int user_id)int Query(User& user, int user_id)User* Query(int user_id)第一种的判断逻辑虽然复杂一些,但是不会出问题,第一种对于返回是否为空的时候不太好做。第二种,感觉不是那么美观。第三种,问题出在malloc 等一系列的操作,可能会造成内存泄漏。
阅读全文
摘要:今天发现一点,用thrift 写c++程序,当service 返回值不为 bool 和 int 的时候,框架会自己把返回值移入到参数中。比如string Match(1: string str_ad)会变成 void CollectorService::Match(string& result, const string& str_ad)对于java而言,任何都是应用,故不存在这个问题如果我想用的是继想有返回值,又想有参数的返回值,比如是这样的bool Query(1: MachineInfo &mi, 2: string endpoint) 好像就不行,参数所有变成c
阅读全文
摘要:vector 表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。deque也表示N段连续的内存区域组成,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾list表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来,插入删除效率高,随机访问效率低(从名字上可以很容易理解它为链表结构)可以看做 deque 为vector 和 list 的折衷
阅读全文
摘要:if [ $PID ] 是falseif [ $PID2 ] 是 falseif [ [ $PID ] || [ &PID2 ] ] 不是falseif [ [ $PID || $PID2 ] ] 是false 不知道是我哪里用错了不时上面的原因,是一个诡异的问题,应该是一个bug#!/bin/bashBASE=`pwd`有三种表达式test [][] 在[] 表达式中,常见的>,<需要加转义字符,表示字符串大小比较,以acill码 位置作为比较。 不直接支持<>运算符,还有逻辑运算符|| && 它需要用-a[and] –o[or]表示 是不支持
阅读全文
摘要:PID = `pidof xx`if [ $PID ]与 if [ -n $PID ]结果不一样,if 省略的是什么参数??if [ `ls` ] 会报有多余的参数,其余的命令都work的很好,这个是怎么回事?好像整体是一个测试 [] ,我想使用一个有或的逻辑表达式 使用的是if [ [1] ] || [ [2] ]其他的好像不行,有待于深入研究
阅读全文
摘要:pgrep 直接通过进程名字,比grep 要高效pkill 直接通过进程名字杀进程 还可以一次性杀死某个用户的所有进程pidof 进程名字 返回进程名字对应的pid 很实用
阅读全文
摘要:grep中去掉自己ps axu | grep [t]ty这个应该是正则表达式 暂时不知道是什么原理 orps axu | grep tty | grep -v grep -v 表示不选
阅读全文
摘要:char *a = NULL 与 char *str = "Hello" 是有区别的string初始化需要用后面一个String s=null;和 String s="" 效果是一样的,都将string初始化为空----------------------------------------------------------------我是邪恶的分割线----------------------------------------------------------------今天遇到了terminate called after throwing a
阅读全文
摘要:对于linux free 命令:free输出的第一行是从一个系统的角度看系统内存的使用情况 buffer是用于存放要输出到disk(块设备)的数据的 cache是存放从disk上读出的数据 这二者是为了提高IO性能的,并由OS管理。free输出的第二行是从一个应用程序的角度看系统内存的使用情况 对于-buffers/cache,表示一个应用程序认为系统被用掉多少内存; 对于+buffers/cache,表示一个应用程序认为系统还有多少内存;所以对于系统来说要看第一行的free,应用程序要看第二行的free对于linux 单个进程来说:进程所申请的内存不一定真正会被用到 真正用到了的内存也不一定
阅读全文
摘要:个人总结:仓库就是那个 .git 目录,其中存放的是我们所提交的文档索引内容, 可基于文档索引内容对其所管理的文档进行内容追踪,从而实现文档的版本控制。 工作树是包含 .git 的目录,在前文示例中即 $WORK 目录。 通过仓库可以很人容易回复工作树(使用git clone命令),所以可以不太刻意区分这两个概念 下面关于三个选项说的比较清除: --mixed 回到上一次提交的状态,新更新的内容未add 未commit的状态,但是新更新的内容还在 --soft回到上一次提交的状态,新更新的内容未commit的状态,但是新更新的内容还在 --hard 回到上一次提交的状态,啥都没有了有比较详细的
阅读全文
摘要:如果你是Linux用户,安装Wordpress可以查看我另外一篇文章:Linux本地安装wordpress完美教程。一、下载WordpressWordPress是当前世界上应用最广泛的博客系统之一。我们可以在Wordpress中文网下载(点击进入)。二、准备工作在安装Wordpress之前我们需要做一些准备工作。1.安装XAMPP为了能够使Wordpress工作,我们需要为它构建一个运行环境。这就是XAMPP,XAMPP集成了Apache、Mysql等Wordpress运行所需的软件。只需下载一键安装,Wordpress的运行环境就算完成了,具体XAMPP下载和使用请参看青柠檬这篇文章:Win
阅读全文
摘要:1. node->getChildNodes()->getLength()) == 1 这个用来判断是否某个标签下面只有自己,比如 <name>123</name> 而不是getLength() == 02. char * a = .. string b = .. boost::any = a 于 boost::any = b 这两个是不兼容的!3. if (PolicyMgr::Instance()->Parse(FLAGS_policy_file) < 0) return -1; 应该在SubmitContext context前面
阅读全文
摘要:个人总结:注意SAX 和 DOM的区别遍历方法DOMElement *pRoot = xmlDoc->getDocumentElement()。一种是创建遍历树 DOMTreeWalker *walker = xmlDoc->createTreeWalker(pRoot, DOMNodeFilter::SHOW_TEXT, NULL, true),还有一种是通过迭代器来遍历整棵DOM树 DOMNodeIterator* iterator = xmlDoc->createNodeIterator(pRoot, DOMNodeFilter::SHOW_TEXT,NULL, tru
阅读全文
摘要:这个网址的概念讲的很清晰:http://www.w3school.com.cn/x.asp个人总结:XML DOM HTML 都是不同的东西注意<message>if salary < 1000 then</message> 是实体转义 '<' 的意思什么是 XML 元素?XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。(几乎任何东西都可以被称为元素)元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。<bookstore><book category="CHILDREN&qu
阅读全文
摘要:1.类型 c++ any 类型虽然可以作为一个任何类型变量进行使用,但是static_cast经常出错2.指针涉及到继承,指针相当复杂,特别容易出错。C++ 大家经常看到的断错误,大部分都是因为指针使用不当3.内存管理c++要自己管内存,十分容易内存泄露4.动态绑定能力 python可以把一个字符串作为一个函数调用,c++实现类类似功能比较麻烦5.包 python 各种包十分简单,由于有list 和 dict的帮助,学习使用起来十分方便
阅读全文
摘要:原文见:http://nubetech.co/accessing-hdfs-over-ftp这个程序是通过hdfs的9000端口访问的。听说还有hadoop自己的拓展包,需要重新编译hadoop。有机会的话安装一次来对比一下效率。下载压缩包:hdfs-over-ftp-0.20.0.tar.gz(我的hadoop是0.20.2)1.解压之后在目录下执行./register-user.sh username password >> users.conf这会在users.conf中生成新的ftp账户配置。废话一句,xxxx.homedirectory=/,这里的/就是你的hadoop的
阅读全文
摘要:个人总结:很好用的任何类型。注意记住 any.type() == typeid(int)这种比较用法--------------------------------------------------------我是无情的分割线-----------------------------------------------------------------万能类型boost::anyboost库提供了any类,boost::any是一个能保存任意类型值的类,这一点有点像variant类型,不过variant由于采用了一个巨大的union,效率非常低。而boost利用模板,保存的时候并不改变值的
阅读全文
摘要:1. Base = declarative_base()engine = create_engine('..')Session = sessionmaker(bind=engine)class .....(Base)//下面的语句一定是要在class定义完了之后调用,使实际创建表的操作Base.metadata.create_all(engine)session = Session()....2. 对于某些低版本的mysql 不支持 name = Column(String) 这种不带大小的创建表
阅读全文
摘要:个人总结: 这个是非常简单易懂的不使用declarative_base的例子,保存一下-----------------------------------------------------------我是无情的分割线--------------------------------------------------------------应用程序离不开对数据的操作,因为正在计划做一个桌面小程序练手Python,所以开始了Python的数据库操作的学习。 提到数据库,就不得不提ORM,所谓万物皆对象,正是有了非常方便的ORM工具,才使得编程脱离了繁琐而冗余的“select”操作,把我们的注意
阅读全文
摘要:个人总结:1.sudo apt-get install python-mysqldb2.一个Mysql的小例子,关注一下metadata = MetaData() 然后在创建Table的时候传入这个metadata以及metadata.create_all(mysql_engine)的含义--------------------------------------------------------我是无情的分割线-----------------------------------------------首先贴一个sqlalchemy的简介:什么是SQLAlchemy?SQLAlchemy是
阅读全文
摘要:个人总结:这个文档前半部分没有什么特别的地方,但是最后的一个使用 SQLAlchemy 演示如何创建一个元数据工具。此工具的目标是监控文件系统、创建和删除事件,以及在一个 SQLAlchemy 数据库中保存这些变更的记录,有需求的话可以看看----------------------------------------------------------我是无情的分割线-------------------------------------------------------------------简介对象关系映射器(Object Relational Mappers,ORM)在过去数年吸引
阅读全文
摘要:个人总结:--------------------------------------------------------------我是无情的分割线---------------------------------------------------------------一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符(<和>)和外壳通配符(*、?、[、])在内。 如果你使用不带参数的run命令,gdb就再次使用你给予前一条ru
阅读全文
摘要:个人总结记住这些命令就行~& ctr+zfg bg ---------------------------------------------------------我是无情的分割线-----------------------------------------------------------------1. 后台运行的两个命令 & 和 ctr+z一开始就+“&”具体方法是: [命令]空格[&] 比如:[root@pcmxexwebetc]#find/-namexml&这样,这个查找程序就会在后台运行。它运行的同时不影响你干别的事情。但是有的时候忘
阅读全文
摘要:个人的总结:设置了/etc/profile 和 ~/.bashrc 之后,使用了source 命令,是可以echo添加的变量,但是用getenv读不出来,然后使用env命令也显示不出来,是因为没有export!!--------------------------------------------------我是无情的分割线------------------------------------------------------------现在使用linux的朋友越来越多了,在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法。1.修改/e
阅读全文
摘要:个人总结STL 中有队列的标准实现,为什么不用呢?但是如果想要用阻塞队列,那么必须要自己用锁构建了。下面是转载的详细:--------------------------------------------------------------------我是无情的分割线------------------------------------------------------------------------摘要:本文是“C++标准库导引系列”的一部分。在学习C语言的时候大家都知道,数据结构是对大量数据的组织的 方式。队列一直都一个重要的且存在典型应用的数据结构。C++标准库定义的队列是典型
阅读全文
摘要:个人总结:boost::shared_ptr 最主要的用途是多个指针可以指向同一个对象,这个指针内部维护了一个引用计数,当最后一个指针调用reset了之后,对象才会被析构以下是转载的详细说明。注意这个指针初始化的方式,一般有两种:boost::shared_ptr<implementation> sp1(new implementation());boost::shared_ptr<implementation> sp2 = sp1;判断是否为空:有一个bool类型转换操作符使得shared_ptr可用于需要的bool类型的语境下,比如我们通常用if(pointer)来
阅读全文
摘要:个人总结: 在python中就不用考虑类型转换这些,不过使用了C++ 没有办法~ static_cast顾名思义就是没有做类型检查 用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。 ②用于基本数据类型之间的转换
阅读全文
摘要:1.前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言 (IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。 Thrift与我曾经使用过的ICE很像。ICE是由Zeroc公司开发的网络通信引擎。ICE框架除了完成跨语言调用之外,它提供的服务发布
阅读全文
摘要:1. 概述本文以C++语言为例介绍了thrift RPC的使用方法,包括对象序列化和反序列化,数据传输和信息交换等。本文采用了一个示例进行说明,该示例主要完成传输(上报日志或者报表)功能,该示例会贯穿本文,内容涉及thrift定义,代码生成,thrift类说明,client编写方法,server编写方法等。关于Thrift架构分析,可参考:Thrift架构介绍。关于Thrift文件编写方法,可参考:Thrift使用指南。2. 示例描述假设我们要使用thrift RPC完成一个数据传输任务,数据格式和PRC接口用一个thrift文件描述,具体如下:(1) book.thrift,用于描述书籍信息
阅读全文
摘要:简介:paramiko是python(2.2或更高)的模块,遵循SSH2协议实现了安全(加密和认证)连接远程机器。安装所需软件包:http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.5.tar.gzhttp://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gztar zxvf pycrypto-2.5.tar.gzcd pycrypto-2.5python setup.py buildpython setup.py installtar zxvf paramiko-1.7.
阅读全文
摘要:一个简单的例子安装 Google Protocol Buffer在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。安装步骤如下所示: tar -xzf protobuf-2.1.0.tar.gz cd protobuf-2.1.0 ./configure --prefix=$INSTALL_DIR make make check make install 关于简单例子的描述我打算使用 Protobuf 和 C++ 开发一个十分简单的例子程序。该程序由两部分组成...
阅读全文