- 博客(23)
- 收藏
- 关注
原创 一个小型的网页抓取系统的架构设计
一个小型的网页抓取系统的架构设计 网页抓取服务是互联网中的常用服务,在搜索引擎中spider(网页抓取爬虫)是必需的核心服务。搜索引擎的衡量指标“多、快、准、新”四个指标中,多、快、新都是对spider的要求。搜索引擎公司比如google、baidu都维护者自己负责的spider系统。当然他们的系统很复杂,在这里我们介绍一个小型的网页抓取系统的架构,目标是快速的抓取某个或者
2014-11-07 12:23:43 2024 2
原创 数据库的水平扩展与垂直扩展
数据库水平扩展与垂直扩展 在互联网应用中,数据库经常是我们存储和访问数据的常用介质。随着负载的增大,对数据库读写性能的要求往往成为很大的挑战。在这种情况下我们可以考虑数据库相关的replication机制提高读写的性能。由于一般采用一写多读的replication机制(写master同步到多个slaves),导致这样的机制往往会有缺陷。首先它依赖于读写的比例,如果写的操作过多
2014-10-31 17:41:53 11383
原创 json-cpp 库使用
Json-cpp 是一个使用c++开发的面向对象的json库。 核心数据结构 Reader是json-cpp数据的读取器,可以从文件流,字符串中读取json数据,使用下面的接口: boolparse( const std::string &document, Value &root,
2014-08-03 12:03:42 2915
原创 linux句柄泄露问题查看
背景:我们在开发linux在线服务器的时候经常会遇会句柄泄露的问题。因为在linux系统设计里面遵循一切都是文件的原则,即磁盘文件、目录、网络套接字、磁盘、管道等,所有这些都是文件,在我们进行打开的时候会返回一个fd,即是文件句柄。如果频繁的打开文件,或者打开网络套接字而忘记释放就会有句柄泄露的现象。在linux系统中对进程可以调用的文件句柄数进行了限制,在默认情况下每个进程可以调用的最大句柄
2014-07-27 15:14:47 16776 2
原创 使用enca进行字符集转码
在linux进行开发与运维的时候,我们经常遇到字符编码的问题,系统字符设置、vimrc fileencoding设置、终端设置往往搞的晕头转向,当一个文件出现乱码的时候,我们通常不能识别它是什么编码的,而从不知道如果正确解码。 今天使用enca这个字符集编解码工具,感觉比incov好用很多,安装:1)下载enca工具 wget http://dl.cihar.com/
2014-04-24 20:22:34 3499
原创 C++字符串split方法
在c++ string中并没有split方法,当然通过find方法可以实现一个split字符串的方法,有没有其他的更简便的方法呢?可以通过std::getline函数实现split 字符串的功能。 istream& getline (istream& is, string& str, char delim);getline函数从is中提取字符串并放到str里面,直到遇到del
2014-04-10 21:10:55 1928
原创 宏与namespace
宏在程序预处理阶段完成替换,namespace是在编译的阶段生效,所以宏与namespace无关,即在namespace内部和外部同样生效,所以不能使用名字空间来定义宏的使用范围。或者这个也是c++不提倡使用宏的原因。 #include namespace TEST { #define MAX_NUM 1024 } int main(){ pr
2014-04-10 20:32:32 7764
原创 C语言如果通过函数名调用函数?
可能你会想怎么会有这么奇葩的需求,但在实际的工程中,这种需求是十分常见的。比如我在代码是实现了几种场景的应对函数(如果是c++中可能是自己定义的类,为了使得讨论变得简单我们假设开发语言是C),并且想通过程序启动的参数(或者配置),来决定调用哪个函数。 举个简单的例子来说,我定义了下面的函数: voidint_handler() { pr
2014-02-11 17:40:17 3899
原创 Python re(正则表达式)模块
Python re(正则表达式)模块Python支持的正则表达式元字符和语法:re模块 Python可以通过re模块来实现使用正则表达式匹配字符串,我们可以通过查看~/installs/python/lib/python2.7/re.py 文件查看re提供的方法,主要使用的下面的几个接口:l def match(pattern, string, flags=0):
2014-01-20 20:11:40 1212
原创 如果让自己的代码更好的让其他人理解
最近接手一个较大项目的代码,在阅读代码的过程中,发现下面可以利于自己的代码被其他人的tips,或许都是简单的规则,但是却发现十分的重要。1)凡是数据结构中声明的变量都要有注释标识它的作用;2)凡是全局变量的声明都需要注释;3)凡是函数的声明处都需要添加注释;4)全局变量的命名要一望便知,这个变量名不能是一个很通用的名词,可以考虑使用g_前缀。
2014-01-20 20:02:29 625
原创 vim 浏览文件窗口插件
在vim中进行编辑的时候,经常有浏览文件的需求。当我们知道文件名的时候,可以通过sp命令横向打开一个新的文件,但是这种方法并不方便,因为当你对当前目录不熟悉的情况下,还需要退出编辑器,查看当前的目录下的文件。那么有没有方面的浏览方式呢?其实vim有标准的插件支持这个功能,在vim7.0后,这个标准插件是netrw.vim,它已经伴随vim发布,不需要安装。在vim中尝试打开目录的时候,vim会
2013-12-29 21:18:18 1797
原创 vim taglist 使用
taglist用于看文件中出现的函数、变量与宏,Taglist 安装过程如下:1) 解压taglist_45.zip,可以看到doc、plugin目录2) >letTlist_Exit_OnlyWindow = 1 "设置焦点在Tlist窗口里面 letTlist_GainFocus_On_ToggleOpen=1"按照名字排序letTlist_Sort_Type =
2013-12-25 21:19:51 580
原创 性能优化再议
有关性能优化,我们都知道”过早的性能优化是程序设计中的万恶之源(Donald Knuth)”,因为性能优化可能打破程序的可读性、可维护性甚至正确性,所以在进行性能优化的时候必须三思而后行。在性能优化之前我们必须清楚的了解到了性能的问题确切发生在什么位置,如果不知道哪些地方出问题就开始修理可能会导致大的时间浪费。举上段时间的一个bad case,我们的程序发现性能上的问题,简单Review代
2013-11-26 23:45:19 574
原创 linux 静态库使用经验
在编写程序的过程中,对于一些接口往往抽象成lib库的形式,甚至有些程序只有一个主程序,其他接口的调用都是库的形式存在。较多的使用库会比较利于程序的维护,因为我们的程序都可以被其他的人使用,但是往往库的存在会增加一些编译上的问题。 在linux中有静态库和动态库两种,两者各有优劣,对于后端伺服的服务器来说,我们更倾向于静态库,因为它部署方便,效率更高,而后端的服务器并不在意那些静态
2013-09-27 13:29:40 1171
原创 老手是如果教新手的(搞笑篇)
由发生在某公司的真实事件改编. 新人: 各位高工,为毛make能过,make -j32过不了? 高工A: make-j32出错原因应该是并发编译多库依赖的问题,比如a库依赖b库,如果并发先编译到a库,就会报错,再搞下ok了,应该是那些静态库都生成了,B同学,这事你怎么看?高工B: 我觉得不知道为什么,可能中病毒了。高工C:
2013-09-24 23:19:19 596
原创 老手是如果教新手写程序的
一个新手同学写了一个从mysql中导出数据的程序,时间太长了要80分钟,我们如何去优化它呢?老手:你可以试试采用分城市导出而不是一下导出全国数据,因为最后生成的数据是以城市为单位的; 新手:我按照城市的citycode 取模10,每次导出10分之一城市的数据,这样需要的内存减少了,处理的时间下降到60分钟了。老手:你的程序还是串行处理的,你可以采用多进程的方式,取模值作为参数传给你
2013-09-24 23:12:54 721
翻译 mysql_use_result 使用
来自:http://dev.mysql.com/doc/refman/5.0/en/mysql-use-result.html20.6.7.71. mysql_use_result()MYSQL_RES*mysql_use_result(MYSQL *mysql)描述: 对于每个可以产生一个结果集的命令(比如select、show、describe, explain, che
2013-09-08 21:57:09 2474
原创 使用GDB 调试STL方法
背景:当我们用gdb调试stl时候,往往看到的是stl内部变量的值,比如打印一个string a输出:(gdb) p a$1 = { static npos = 18446744073709551615, _M_dataplus = { > = { > = {},}, members ofstd::basic_string,std::
2013-08-23 11:40:25 12927 2
原创 系统性能调优经验
在开发对外提供服务的模块的时候,系统的性能经常会是令我们头疼的问题,具体系统性能的定义与瓶颈的定位方法,可以参考陈皓的这篇文章:性能调优攻略http://coolshell.cn/articles/7490.html 大牛的这篇文章还是很全面的。下面我会以我们的一些工程经验和曾经遇到过的问题,来实例化一些系统性能调优的经验。 Ø 代码级别1. 减少数据copy
2013-08-22 19:11:49 4266
原创 C 程序员趟坑之C++ remove_if函数模板
最近由于项目需要,进行了一些C++项目的开发。由于以前一直是用C开发,开发过程中难免趟了些小坑,记录如下: 实现一个代码片段要实现vector中一些元素的删除功能,使用到了C++的函数模板remove_if,由于对这个函数不够熟悉,以为它会返回处理过后的vector,继续对这个vector使用触发了BUG,查看了http://www.cplusplus.com/referenc
2013-03-27 21:00:05 1351
原创 编译-O 选项对性能提升作用
GCC -O 选项 这个选项控制所有的优化等级。使用优化选项会使编译过程耗费更多的时间,并且占用更多的内存,尤其是在提高优化等级的时候。-O设置一共有五种:-O0、-O1、-O2、-O3和-Os。让我们来逐一考察各个优化等级:-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化
2013-03-27 20:34:57 1652
原创 Json 数据格式与使用
前半部分内容来自http://www.json.org/json-zh.htmlJSON(JavaScript ObjectNotation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集
2013-03-05 20:42:33 1336
原创 bashrc 与 bashprofile文件区别
一个windows背景的同事,刚开始做linux系统上的开发,咨询为什么他的bin程序找不到相应的so文件,告知他需要配置LD_LIBRARY_PATH变量来指定动态链接库位置,方法是在~/.bashrc 或者 ~/.bash_profile中加入export语句,比如:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/tools/svn/lib/便可以查
2013-02-26 20:57:06 516
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人