- 博客(204)
- 资源 (48)
- 收藏
- 关注
原创 Linux网路编程系列-网络I/O模型
总体上讲,应用程序从网络中拿数据,要经历两个阶段:1、数据分组到达网络,并被拷贝到内核的某个缓冲区中,数据报准备好;2、数据从内核缓冲区拷贝至用户态应用程序的缓冲区。基于这两个过程,下面先给出各种IO模式的调用图,最后给出异步、同步IO等区分等。
2014-05-14 09:49:50 978
原创 分布式存储的一些概念
一致性哈希哈希常用于分布式计算的负载均衡,如缓存服务器对数据的划分,对于目标资源O的请求使用hash(O) = O mod n来映射到其中一台。一个问题是:当增加或删除一台cache server时(n发生了变化),所有资源对应的hash值被相应的改变,致使所有的缓存都失效,cache server需要大量更新缓存
2014-04-04 17:29:10 1216
原创 搜索引擎学习-实现
上篇文章介绍了搜索引擎的基本概念,有了大致的认识,本文说下搜索引擎实现上的一些问题。搜索引擎组成抓取系统:负责对互联网信息的搜集,将网页保存到本地,供下游分析、挖掘、建索引使用。分析系统:分析query,查询排序索引系统:整理资源,提取特征检索系统:用户query查找,结果展现离线计算和在线计算为了确保搜索引擎的响应时间和结果质量,在实现上,
2014-04-04 15:29:20 1292
原创 搜索引擎学习-概述
定义从互联网上搜索,通过文本匹配,采取一些手段找到最好的信息。结果衡量相关性-结果与query的匹配,结果与用户需求的匹配权威性-结果被引用次数(超链),链接分析时效性-结果对用户是有用新鲜的多样性-根据用户行为返回丰富的结果(苹果?)个性化-地域、用户喜好反spam可以抽象为1个打分公式:score = F(query, doc, user)搜索步骤数据的处理:
2014-03-21 16:08:17 1746
翻译 redis系列-redis的使用场景
redis越来越受大家欢迎,提升下速度,做下缓存,完成KPI之利器呀。翻译一篇文章How to take advantage of Redis just adding it to your stack>>,来介绍下Redis的适用场景。展现最新数据Web应用中常常需要列出“用户最新添加的东西”等一些最近发生变化的数据,需要对备选数据进行排序才能展现,mysql中会如下:SELECT
2014-02-28 15:53:49 1807
原创 分布式系统设计准则
分布式系统通常服务大请求、维护着大数据、快速响应、长时间可用。设计分布式后台服务需要考虑的东西很多,本文给出一些常用的设计准则,以备查看。可用性:系统可以正常服务的时间,一些在线系统常常要求99%的可用性。高可用性往往通过关键组件备份冗余来实现(如冷备、热备)性能:快速响应、低延迟可靠性:系统可靠就是同样的请求返回同样的数据;更新能够持久化;数据不会丢失可伸缩性:系统额外还能处理多少流
2014-02-18 15:53:03 1049
原创 C++类型转换
一直觉得没写的必要,但还是记一下吧。太书面化记不住,就简单些下。类型转换分为隐式类型转换和强制类型转换。隐式类型转换是编译器自动执行,无需程序员介入。如下://算术转换double b = 5 + 3;//条件表达式int val = 0;if (val)......强制转换就是要在代码中写明的转换,具有危险性。C风格是:(type) xx;C++提供了四种转换
2014-01-15 16:08:01 739
原创 redis系列-redis的连接
Redis 是完全开源免费的,遵守BSD协议,先进的key - value持久化产品。它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。redis客户端连接比较简单,但日常中redis的使用和维护会有很多地方需要学习。本文只简单介绍下常用函数。//h
2013-12-24 16:31:39 10746
原创 很好的设计-锁的自动使用和释放
多线程下,常常会使用互斥锁或者读写锁来确保临界区的正确使用。pthread_mutex_lock(&mutex);//using critical sectionpthread_mutex_unlock(&mutex);如果在使用临界区期间发生异常返回,导致锁没有释放。为了防止这种现象发生,我们通常要在每个return之前都要释放锁,增加代码量、影响美观,而且有忘记的隐患。期望一种能够
2013-12-18 17:08:47 1744
原创 linux下目录操作
1. 常用函数#include //open a directory//failed-NULL, other-return a DIR streamDIR *opendir (const char* path_name);//close the directory stream//0 succeed, -1 notint closedir(DIR* dir_ptr);//
2013-11-21 17:33:04 854
原创 linux网络编程系列-网络连接的建立
一个比较实用的连接函数,支持host为域名。#include #include #include #include #include #include #include #include using namespace std;int my_connect(const char *host, int port){ char buf[1024]; struct
2013-11-21 14:39:57 1205
原创 Linux网络编程系列-TCP编程实例
实例:client#include #include #include #include const int MAXLINE = 100;void str_cli(int sockfd) { char recvline[MAXLINE]; string str; getline(cin, str); while (!str.empty()) { sen
2013-10-18 15:10:32 969
原创 动态链接库的使用
动态链接库(.so)可以让程序在运行时被加载,当so修改时,使用程序不需要重新编译就可以使用。本文介绍几个函数,讲述so的加载和方法调用。void * dlopen( const char * pathname, int mode);以指定模式打开某动态链接库文件,返回句柄。模式有:RTLD_LAZY, RTLD_NOW; RTLD_GLOBAL, RTLD_LOACAL;RTLD_NOD
2013-09-06 17:46:43 995
原创 MySQL记录
1.unixtime和可读时间的转换unixtime是距"1970-01-01 08:00:00"的时间秒数unixtime -> readableselect from_unixtime(double,format)readable -> unixtimeselect unix_timestamp(date)例子:select UNIX_TIMESTAMP('1997
2013-09-06 15:30:30 831
原创 mysql C API的使用
《MySQL++简介》介绍了如何使用C++来访问mysql,本文记录下使用C API访问mysql,mysql++就是对本文介绍的C-API的封装。常用函数(名字就能告诉我们用法):MYSQL * mysql_init(MYSQL *mysql)int mysql_options(MYSQL *mysql,enum mysql_option option, c
2013-07-09 16:29:27 1369
原创 Linux多线程系列-2-条件变量的使用(线程安全队列的实现)
多线程情况下,往往需要使用互斥变量来实现线程间的同步,实现资源正确共享。linux下使用如下变量和函数//条件变量pthread_cond_tint pthread_cond_init (pthread_cond_t *c, const pthread_condattr_t *a)int pthread_cond_wait (pthread_cond_t *c, pthread_mu
2013-07-09 14:49:58 2758
原创 Linux网络编程系列-套接口选项控制
获取和设置套接口选项的方法有:getsockopt/setsockoptfcntlioctlgetsockopt/setsockopt这两个函数仅用于套接口(socket)的设置,另外两个函数可以对任意的文件描述符进行设置。#includeint getsockopt(int sockfd, int level, int optname, void* optval, sock
2013-07-09 13:46:51 1255
原创 FastCGI介绍
CGI(Common Gateway Interface)公共网关接口,是HTTP服务器与其他程序通信的工具。FastCGI是一个long-live型的CGI,支持分布式计算,它将CGI解释器进程保持在内存中并因此获得较高的性能。FastCGI工作方式是接受Web服务器的请求,以HTTP Request的方式进行响应,实现了应用程序与Web服务器的分离。它的使用需要在Web服务器中安装支持组件
2013-06-06 17:31:42 7500
原创 gcc/g++分析
GCC(GNU Compiler Collection,GNU编译器集合),是一套由 GNU 开发的编程语言编译器。GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,现在已可处理C、C++、 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。g++是针对GCC针对C++
2013-05-10 11:12:22 1032
转载 C/C++堆和栈介绍
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态
2013-05-10 10:24:54 818
原创 linux网络编程系列-select和epoll的区别
select和epoll都用于监听套接口描述字上是否有事件发生,实现I/O复用select(轮询)#include #include int select (int maxfdpl, fd_set* readset, fd_set* writeset, fd_set* exceptset, const struct timeval* timeout)调用时轮询一次所有描述字,超时时
2013-05-09 21:07:53 1065
原创 linux网络编程系列-TCP及常用接口分析
TCP编程示例图:头文件:常用头文件"arpa/inet.h", "sys/socket.h","netinet/in.h"函数原型:int socket(int family, int type, int protocol)family:通信协议族,IP protocol family为AF_INET(PF_INET),值是2;type:套接字类型(连接类型
2013-05-09 11:04:39 1092
原创 Linux网络编程系列-TCP状态分析
TCP是有状态的,通讯双方需要维护一个状态记录连接情况。本文记录TCP的连接、关闭中的各状态,及其转换情况。
2013-05-09 10:17:49 935
转载 多进程和多线程的选择
先转载一位仁兄的看法,很好。关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际
2013-05-07 17:24:18 999
原创 zk系列-c++下zookeeper使用实例
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。分布式应用可以使用它来实现诸如:统一命名服务、配置管理、分布式锁服务、集群管理等功能。公司常用到的是Java服务集群的管理。1.函数介绍//create a handle to used communicate with zookeeperzhandle_t *zookeeper_init(const char *hos
2013-04-27 17:53:34 19038 7
原创 boost锁介绍
boost thread库提供了三种级别的锁:boost::shared_lock(读锁),boost::upgrade_lock(和读锁不互斥,与写锁、upgrade_loc互斥),boost::unique_loc(写锁)五种互斥变量:mutex:独占式互斥量shared_mutex: 读共享/写互斥的共享互斥量recursive_mutex: 递归互斥量timed_m
2013-04-27 16:59:58 1390
原创 python使用protobuf
1.安装protobuf编译器./configure --prefix=dist; make; make install; 配置bin路径2.进入解压后的python目录下参考README.txt,python setup.py install3.使用message RowProto {required uint32 null_map = 1;repeated string
2013-03-28 10:39:10 22482 1
转载 Google Protocol Buffer 介绍
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 R
2013-03-27 14:27:18 1643
原创 Linux多线程系列-1-线程使用
linux下常用线程库为POSIX线程(pthread),可运行于Solaris、FreeBSD、Linux 等平台,Windows平台亦有pthread-win32可供使用。常用类型:#include pthread_t pthread_attr_tpthread_t代表线程ID,不同平台是不同的数据类型,如Linux 2.4.22用无符号长整型表示pthread_t,Sol
2013-02-07 10:15:23 1020
原创 log4cplus使用
log4cplus is a simple to use C++ logging API providing thread-safe, flexible, and arbitrarily granular control over log management and configuration. It is modelled after the Java log4j API. 下载地址http:
2013-02-06 18:09:56 2016
原创 boost multi_index_container 基本介绍
Boost Multi-index Containers Library定义了multi_index_container模板类,可以从不同的维度建索引、排序和存取。如上图,容器multi_index_container分别从shape,number和sequenced(默认插入的顺序)三个维度对元素进行管理。使用如下:#include #include #include
2013-01-08 18:41:42 9655 3
原创 c++日期和时间相关操作-<time.h>(ctime)
time.h(ctime)是c time library,定义了获取和操作日期和时间的函数。1. 结构typedef long time_t;time_t是长整型,表示的是距(1970年,1月1日00:00:00)的秒数,常常通过time函数获得。struct tm {int tm_sec; //秒 0-59(一般)int tm_min; //分 0-59int tm
2013-01-04 11:48:40 16410
原创 消息队列-zmq常用通信模式
zmq是一个消息队列。可以在进程内、进程间、TCP、多播中,以消息为单位传输数据,而不是socket的字节流。官方主页上有下载、使用、文档,蛮全的。常用模式有:Request-Reply,Publish-Subscribe,Parallel Pipeline。Request-Replyrequestzmq::context_t context (1);zmq::socket_
2012-12-27 18:23:40 35064
原创 Linux网络编程系列-获取机器名和ip
#include #include using namespace std;int main() { int result = 0; char hostName[100]; struct hostent* host = NULL; result = gethostname(hostName, 100); host = gethostbyname(hostName);
2012-12-19 17:56:14 2737
原创 C++发送邮件-jwsmpt
jwSMTP是用于发送邮件的C++库,支持附件、多接收者,抄送等功能。下载地址jwSMTP.1.安装tar, ./configure配置安装路径,make, make install。2.使用#include jwsmtp::mailer mail_;mail_.setsender(from_);mail_.username(from_);mail_.password(pw
2012-12-07 10:01:05 1409
Tuscany SCA与Spring、Hibernate整合实例-简洁方法
2011-07-19
Flex_Spring3_Hibernate3整合Demo
2011-07-18
RPG 教程 源代码
2009-05-06
DirectX 9入门教程 Beginning Directtx 9
2009-05-06
c++ 3D 游戏开发实例教程 chm
2009-04-10
网络游戏开发 英文教材 chm
2009-04-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人