2012年7月17日

摘要: 由于项目的需要,利用libcurl编写程序与ftp服务器通信,进行文件上传或下载,愈发地感到curl功能的强悍。其实在命令行下直接使用curl命令就可以完成这些功能,但是需要获取上传下载行为的状态以便更好地控制。直接上代码:View Code 1 //ftp-manager.h 2 3 #ifndef _FTP_MANAGER_H_ 4 #define _FTP_MANAGER_H_ 5 6 /*FTP OPERATION CODE*/ 7 typedef enum FTP_STATE 8 { 9 FTP_UPLOAD_SUCCESS,10 FTP_UPLOAD_FAIL... 阅读全文
posted @ 2012-07-17 20:25 pathenon 阅读(1235) 评论(0) 推荐(0) 编辑
摘要: 在上一章,我们对select进行了大致的描述,知道了它相对传统的阻塞式服务提高了并发度,但是它也由于轮询而导致效率底下。本文对epoll进行讲解,相比select它的并发度更高,现代高负载服务器很多都采用这种模型。在讲解epoll的具体用法之前,我们先看看采用epoll模型主要用到的三个函数以及一个数据结构。epoll中三个主要的函数:(1)int epoll_create(int size);功能 :生成一个epoll专用的文件描述符。参数 :size:在该epoll fd上关注的最大socket fd数。返回值:生成的文件描述符。(2)int epoll_ctl(int epfd, i.. 阅读全文
posted @ 2012-07-17 20:23 pathenon 阅读(199) 评论(0) 推荐(0) 编辑
摘要: select的功能可以用一句话来描述:实现基于I/O多路复用的异步并发编程。在具体讲解select之前我们先看看常规的阻塞socket编程方式,以服务端为例: 对于这种方式,最大的问题在哪里呢?accept和recev的阻塞调用!下面以两种场景为例,来说明相比这种情况,select是如何做到异步I/O多路复用的高效性。 第一种场景:server除了要对外响应client的服务外,还要能够接受标准输入的命令来进行管理。 假如使用上述阻塞方式,在单线程中,accept调用和read调用必定有先后顺序,而它们都是阻塞的。比如先调用accept,后调用 read,那么如果没有客户请求时,服... 阅读全文
posted @ 2012-07-17 20:22 pathenon 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 一.背景 我们知道,当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大。采用MySQL Replication多master多slave方案,在上层做负载均衡,虽然能够一定程度上缓解压力。但是当一张表中的数据变得非常庞大时,压力还是非常大的。试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力。二.定义 数据sharding,也称作数据切分,或分区。是指通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力。三.分类 数据分区根据切分规则,可以分为两类: (1)垂直分区:以表为单位,把不同的... 阅读全文
posted @ 2012-07-17 20:12 pathenon 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 在实际中,采用单机MySQL数据库的系统可能会随着数据量的不断增长,造成读写压力越来越大,效率越来越低,对外提供的服务也就越来越差。同时,由于没有冗余数据的存在,单机数据库的数据安全性也有潜在的隐患。因此,我们可以采用MySQL提供的replication方案来对系统进行升级改造,在提高数据安全性的同时,使系统具有良好的可扩展性。 在这里也说一下MySQL Cluster和MySQL replication的区别: MySQL Cluster:分布式的,同步的,操作在所有的机器上提交是同步的,所有机器上的数据是一致的; MySQL replication:异步的,master和salve可能数 阅读全文
posted @ 2012-07-17 20:12 pathenon 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 说到文本相似性计算,大家首先想到的应该是使用向量空间模型VSM(Vector Space Model)。使用VSM计算相似度,先对文本进行分词,然后建立文本向量,把相似度的计算转换成某种特征向量距离的计算,比如余弦角、欧式距离、Jaccard相似系数等。这种方法存在很大一个问题:需要对文本两两进行相似度比较,无法扩展到海量文本的处理。想想像Google这种全网搜索引擎,收录了上百亿的网页,爬虫每天爬取的网页数都是百万千万级别的。为了防止重复收录网页,爬虫需要对网页进行判重处理。如果采用VSM方法,计算量是相当可观的。 这里介绍的SimHash算法很好的解决了VSM方法的缺陷,该方法最初... 阅读全文
posted @ 2012-07-17 20:04 pathenon 阅读(860) 评论(0) 推荐(0) 编辑
摘要: 1.概述跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度。MinHash由Andrei Broder提出,最初用于在搜索引擎中检测重复网页。它也可以应用于大规模聚类问题。2.Jaccard index 在介绍MinHash之前,我们先介绍下Jaccard index。 Jaccard index是用来计算相似性,也就是距离的一种度量标准。假如有集合A、B,那么, 也就是说,集合A,B的Jaccard系数等于A,B中共同拥有的元素数与A,B总共拥有的元素数的比例。很显然,Jaccard系数值区间为[0,1]。3.MinHash 先定义几个符号术语... 阅读全文
posted @ 2012-07-17 20:04 pathenon 阅读(1195) 评论(0) 推荐(0) 编辑
摘要: 问题描述: 给定一个字符串S=A1A2...An,要求找出其最长回文子串(Longest Palindromic Substring)。所谓回文子串就是S的某个子串Ai...Aj为回文。例如,对字符串S=abcdcbeba,它的回文子串有:bcdcb,cdc,beb,满足题目要求的最长回文子串为bcdcb。推理思路:1.由于回文可能由奇数个字符组成,也可能由偶数个字符组成。对奇数回文的处理比较直观,只需要以某个字符为中心,依次向两边扩展即可。因此,我们可以通过如下方式把对偶数回文的处理转换成对奇数回文的处理:在字符边界添加特殊符号。例如,对字符串aba,预处理后变成#a#b#a#;对字符串ab 阅读全文
posted @ 2012-07-17 20:01 pathenon 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 一.头文件1)所有头文件都应该使用#define防止头文件被多重包含, 命名格式当是:<PROJECT>_<PATH>_<FILE>_H_ 例如, 项目foo中的头文件foo/src/bar/baz.h可按如下方式保护:#ifndef FOO_BAR_BAZ_H_#define FOO_BAR_BAZ_H_…#endif // FOO_BAR_BAZ_H_2)能用前置声明的地方尽量不使用 #include.减少代码的重新编译。3)只有当函数只有 10 行甚至更少时才将其定义为内联函数.4)复杂的内联函数的定义, 应放在后缀名为 -inl.h 的头文件中.5) 阅读全文
posted @ 2012-07-17 19:41 pathenon 阅读(263) 评论(0) 推荐(0) 编辑

导航