- 博客(40)
- 资源 (10)
- 收藏
- 关注
转载 boost 库 enable_shared_from_this 实现原理分析
使用情景:当类对象被 shared_ptr 管理时,需要在类自己定义的函数里把当前类对象作为参数传给其他函数时,这时需要传递一个 shared_ptr ,否则就不能保持 shared_ptr 管理这个类对象的语义(因为有一个 raw pointer 指向这个类对象,而 shared_ptr 对类对象的这个引用没有计数,很有可能 shared_ptr 已经把类对象资源释放了,而那个调用函数还在使
2013-10-10 21:12:46
943
1
转载 使用Flex Bison 和LLVM编写自己的编译器
http://coolshell.cn/articles/1547.html使用Flex Bison 和 LLVM编写你自己的编译器原文出处:http://gnuu.org/2009/09/18/writing-your-own-toy-compiler1、介绍我总是对编译器和语言非常感兴趣,但是兴趣并不会让你走的更远。大量的编译器的设计概念可以搞的任何一个程序员迷
2013-03-18 08:13:32
1618
转载 如何用flex+bison写语法分析器
http://my.oschina.net/costaxu/blog/107714 背景这个星期,项目中要使用C++或C语言解析JSON格式的数据,把解析的结果放到一个通用的数据结构。这个通用的数据结构,实际上是作为web服务层(这一层大家可以认为是类似于PHP服务器或webpy的服务器容器)到web页面层(这一层是语法类似PHP脚本或者tornardo模板)的数据传输的协议。
2013-03-18 08:07:19
9458
原创 ZMQ性能测试
zeromq是啥玩意儿?通俗地说,ZMQ是一个开源的、跨语言的、非常简洁的、非常高性能、非常灵活的网络通讯库。它的官方网址为http://www.zeromq.org/它的性能非常高,下面是网友给出的几款常用消息中间件性能比较:性能测试我一直很好奇zeromq真的能跑出那么高的性能来吗?从上面网友给出的性能图看来,这个性能简直逆天了。俗话说好奇害死猫,我就是怀着这个好奇
2013-03-13 13:17:45
7218
1
原创 memory leak & double free如何排查?
本文从自己动手构造一个内存泄露分析工具的方面入手,而不对具体内存排查工具的使用进行说明,以展示内存泄露排查的本质,提供一些思路,当在手头没有现成工具可以使用的情况下让自己不至于那么的无助,至少我们还可以自己构建工具解决它。memory leak & double free如果分配的多余释放的,在我们的代码中就是调用malloc(calloc、realloc、memalgin、new)的次数
2013-02-26 13:08:30
6356
1
转载 分布式文件系统:原理、问题与方法
本地文件系统如ext3,reiserfs等(这里不讨论基于内存的文件系统),它们管理本地的磁盘存储资源、提供文件到存储位置的映射,并抽象出一套文件访问接口供用户使用。但随着互联网企业的高速发展,这些企业对数据存储的要求越来越高,而且模式各异,如淘宝主站的大量商品图片,其特点是文件较小,但数量巨大;而类似于youtube,优酷这样的视频服务网站,其后台存储着大量的视频文件,尺寸大多在数十兆到数吉字节
2013-02-25 17:36:04
3426
1
转载 关于大型web服务器的设计思路
大型网站,比如门户网站,在海量用户访问、高并发请求方面,基本的解决方案是以下几点: 1、高性能的数据库(oracle/db2/mysql...) 2、高性能的Web容器(weblogic/apache...) 3、高效率的编程语言(java/C#) 4、使用高性能的服务器(小型机、PC服务器) 5、集群分布式运行(比如上百台小型机器在线运行)但是在在线用户上百
2013-02-21 17:45:46
1692
转载 大型高性能网站的十项规则
http://blog.chinaunix.net/uid-20787846-id-3370050.html在我们公司ChinaNetCloud,见 过多种不同类型的网站和系统,有好也有差。其中有些系统拥有良好的服务器/网络架构,并且进行了合理的调整和监控 ;然而一般的系统都会有安全和性能上的 问题,不能良好运行,也无法变得更流行。在中国, 开源的LAMP栈是最流行的网络架构,
2013-02-20 11:13:02
524
转载 说说大型高并发高负载网站的系统架构
我在Cernet做过拨号接入平台的搭建,而后在Yahoo3721负载搜索引擎前端平台开发,又在猫扑处理过大型社区猫扑大杂烩的架构升级等工作,同时自己接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,可以和大家一起探讨一下。一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目
2013-02-20 11:07:55
470
转载 送给正在学习C++朋友的50条建议
http://blog.chinaunix.net/uid-20787846-id-1842099.html 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》
2013-02-20 11:04:01
548
转载 sphinx简析
CSphSource 数据源CSphSource_XMLPipe2-XML文件获取数据CSphSource_SQL-SQL(MySQL)获取数据CSphIndex 索引器派生类CSphIndex_VLN// 索引过程virtual int Build ( CSphDict * pDict,const CSphVector & dSources, // 所有数据源
2013-02-19 20:41:14
1149
原创 例解 autoconf 和 automake 生成 Makefile 文件
引子无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或 make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以轻而易举的理顺各个源文件之间纷繁复杂的相互关系。
2011-06-19 16:42:00
625
转载 Linux下Makefile的automake生成全攻略
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了。 在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的Makefile,这样就可以象常见的
2011-06-19 16:07:00
531
转载 vim插件大全
一、VIM的历史1976年左右Bill Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成立了Sun Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为ex的visual interface,也就是说vi允许一次能看到一屏的文本而非一行,vi也因此得名。“早期,当键盘和视频终端成为最新的计算机交互手段时,人们开发了VI。那时候的键盘不具有目前熟悉的全部功能键,所以,VI就设计成只需要打字机 的键盘加上退出键就能完成对文本的输入和修改(现在有的还
2011-03-29 17:37:00
2895
转载 vim:visual模式
<br />1.进入visual模式<br />visual模式有三种,一种是默认的visual模式,在normal模式下按下”v”就可以进入。一种是visual line模式,按下”V”可以进入。另一种是今天要讲的visual block模式,按下Ctrl-V进入。如果是在Windows下面的vim,则用Ctrl-Q进入。Windows下的vim有许多快捷键被替换掉了,在安装目录下的mswin.msi有详细的信息。<br />2.选择文本<br />进入visual模式后,按住shift键就可以上下左右移
2011-03-29 14:42:00
7030
原创 用 RPM 打包软件
<br />RPM(Red Hat Package Manager)是用于 Linux 分发版(distribution)的最常见的软件包管理器。因为它允许分发已编译的软件,所以用户只用一个命令就可以安装软件。<br />RPM 是 Linux“标准基本库”版本 1.0.0 指定的安装工具。在 Linux 分发版前 10 名中,有 8 个是基于 RPM(请参阅“Comparison of Linux Distributions”,它位于本文后面的 参考资料中列出的 distrowatch.com 上)。即使
2011-03-25 09:52:00
979
转载 ubuntu下中文问题的解决:输入法、乱码
<br />1、ibus输入法<br />Ubuntu系统安装后已经自带了ibus输入法,在英语环境下默认不启动。<br />配置ibus自动启动可以在ubuntu系统菜单上选择System --- Preferences --- Startup Applications,在该窗口中增加一个程序:<br />Name: ibus-daemon<br />Command: ibus-daemon -d -x -r<br /> <br />ibus默认提供的中文输入法
2011-02-26 10:19:00
2723
转载 一致性hash算法(consistent hashing)
<br />1 基本场景<br />比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ; <br /><br />hash(object)%N <br /><br />一切都运行正常,再考虑如下的两种情况; <br /><br />1 一个 cache 服务器 m down 掉了(在实际应用中必须要
2011-02-13 16:21:00
683
转载 Tokyocabinet/Tokyotyrant文档大合集
<br /> 1. 前言2. 参考资料链接3. 使用介绍3.1. 基本概念3.2. Tokyo Cabinet 简介3.3. 性能介绍3.4. tokyotyrant和Memcached的优势比较3.4.1. 故障转移3.4.2. 日志文件体积小3.4.3. 超大数据量下表现出色3.5. 安装3.5.1. 编译安装tokyocabinet数据库3.5.2. 编译安装tokyotyrant3.6. tokyotyrant的配置3.6.1. 创建tokyotyrant数据文件存放目录3.6.2. 启动tokyo
2011-01-03 15:30:00
1016
原创 在集合中查找第K小的数
<br />给定n个元素的整数数列,找出第K小的数来。<br /> <br />#include <stdio.h>void swap(int *a,int *b);int select_Ks_small(int a[], int left, int right, int k){ int i,j,pivot; if(left >=right){ /*递归结束*/ return a[left]; } pivot = a[lef
2010-11-11 09:52:00
1202
原创 二分法求数列的最大子段和问题
<br />给定n个元素的整数数列,求出子段和最大的子段。<br /> <br />#include <stdio.h>int max_sub_sum(int a[],int left, int right,int *left_partion,int *right_partion){ int center,i,j,sum,left_sum,right_sum,s1,s2,lefts,rights; if(left == right){ /*二分法递归结束条件*/
2010-11-10 09:55:00
4079
原创 linux下文件的切分与合并
<br />名称:split <br />使用权限:所有使用者 <br />使用方式:split [OPTION] [INPUT [PREFIX] <br />说明: <br />将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab...;PREFIX 预设值为 `x。若没有 INPUT 档或为 `-,则从标准输入读进资料。 <br />匡兜 <br />-b, --bytes=SIZE <br />S
2010-11-03 12:18:00
12742
转载 rpm文件解压方法
<br /> <br /> 今天,在安装myodbc库的时候,下载了rpm格式的包,安装时发现缺少一些依赖包,很烦人;于是想如果能不用安装这些依赖就能解压出rpm包中的文件就好了;在网上搜索了下,找到一个脚本,记录下来,供有需要者使用<br /> <br /> <br />#!/bin/bash<br /><br />if[$# -lt 1 ] ; then<br /><br /> echo -e "/a/nUsage: `basename $0` /n"<br /> exit 1<br
2010-10-21 11:28:00
5305
原创 sphinx源码分析之搜索(search)
此处分析用的源码为最新版本1.0 beta版的。//search.cpp int main ( int argc, char ** argv )让我们从程序入口点开始进行旅程。search的入口点在文件search.cpp中,打开后定位到int main ( int argc, char ** argv )开始我们的分析:在main中开始部分进行参数检查和配置信息的load,先进行命令行参数的检查和设置,如下: /////////////////////////////////////////// //
2010-10-14 18:04:00
9047
2
转载 浅谈C中的wprintf和宽字符显示
<br />From:http://blog.youkuaiyun.com/lovekatherine/archive/2007/11/06/1868724.aspx<br />今天在优快云的Blog首页看到一篇文章“也谈计算机字符编码 ”,由于前一阵业余翻译了“UTF-8 and Unicode FAQ for Unix/Linux”一文,自己对字符集、编码和Unicode等内容一直保着者很强的兴趣,自然不会放过这样的文章。<br /><br />作者的文章写得很明白易懂,虽然有一些概念上的细节问题
2010-10-09 14:39:00
780
原创 freebase使用总结
近来公司要从freebase上引用部分数据,所以让我来处理,分析看看那些数据有帮助,并且怎么获取数据。因此花了几天的时间就耗在此上了。什么是freebase?也许听说过wikipedia的人很多,但听说过freebase的就不那么多了。freebase是一个和wikipedia差不多的东西,这样说可能有点不合适,但此处我的切入点是针对它们之间的结构化数据来说的。它们二者都是提供了大量的结构化数
2009-12-31 15:04:00
11471
2
原创 c继承
#include typedef enum {CIRCLE,RECTANGLE}TYPE;struct Circle{ TYPE t; int x; int y; int r;};struct Rectangle{ TYPE t; int x; int y; int width; in
2009-12-05 15:00:00
1253
原创 磁盘读写二叉树
内存中的二叉树怎么存储在硬盘上?当用的时候再还原出原来的树形结构?可以衍生一下,在建立动态索引的时候,索引一般使用的是树形结构,此时的树要怎么存储?想必此问题多数人都遇到过,并且困扰了不少时间。下面就二叉树的实现为例说明这个存储过程,当然可以衍生为B+树都树形结构。import java.io.FileInputStream;import java.io.FileNotFoundE
2009-12-03 14:51:00
1796
原创 最小堆的实现
堆作为重要的数据结构之一,分为最大堆和最小堆是二叉堆的两种形式。最大堆:根结点的键值是所有堆结点键值中最大者的堆。最小堆:根结点的键值是所有堆结点键值中最小者的堆。下面是引自wikipedia的最小堆示例图: 程序实现:public class SmallHeap { final static int MAX_LEN = 1
2009-12-02 16:36:00
17304
1
原创 从数组中查找出最大最小两数的log(n)算法
从一个数组中选择出最大和最小两个数的一般实现方法是从数组第一个元素到最后一个挨个比较,用两个数分别记录max、min,时间复杂性为O(n).其实还有效率更高的方法,下面将介绍的方法时间复杂性为O(log(n)) #include void maxmin(int a[],int i, int j, int *max, int *min){ int m,_max1,_min1,_
2009-12-02 15:17:00
2314
2
原创 linux下arp攻击的实现
arp攻击,arp病毒曾经疯狂的流行了一阵子。下面是简单的arp攻击原来的实现例子,只是一个示例,离真正的arp攻击还有一点距离,现在的arp攻击越来越隐蔽越来越高科技了。(尽量少用,很容易使攻击的主机瘫痪) #include #include #include #include #include #include #include #include
2009-11-05 19:21:00
6771
1
转载 Java与mysql乱码的问题
安装选择GBK,使用选择UTF-8。解决方法一:(最重要的一种方法) 打开mysql目录下的bin文件夹,找到my.ini,使用记事本找开,分别找“[mysql]、[client]、[mysqld]”,添加(或改成)“default-character-set=utf8”。 [mysql]
2009-11-04 15:54:00
748
原创 构造哈夫曼树
哈夫曼编码以其高压缩比和压缩性能方面的优势一直在通信、数据压缩等领域占有重要的位置。要实现哈夫曼编码必须先构造一棵哈夫曼树,下面就通过java进行简单的实现,通过图形化的方式展现生成哈夫曼树的全过程。 import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.event.MouseAdapter;im
2009-10-30 16:38:00
1570
原创 抛体运动问题,45度斜抛和垂直上抛
import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Paint;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.geom.
2009-10-29 17:59:00
2414
1
原创 搜索引擎技术内幕之索引
搜索引擎中索引的好坏直接影响着搜索引擎的性能,最终影响到用户的体验,可见索引的重要性。今天我们就来谈谈索引技术。谈到索引大家第一想到的是倒排索引,的确倒排在全文检索中的优势,在搜索引擎中的大量使用令它声名鹊起。所以在此就以倒排进行分析。但是除了倒排索引外还有很多的索引方式,如静态索引方式有:位图、签名文件、倒排等;动态索引有:B树、B+树等等。搜索引擎之所以大量使用倒排作为它内部的索引结构
2009-10-29 09:40:00
1963
1
原创 类HashMap,但内存减少到原1/6的实现
java中的Map在提供方便实用的同时,也存在内存浪费巨大的问题。当Map中的Entry数量达到1000万 条以上的时候,需要数G的内存空间 .这里提到的Map使用形式为HashMap,平均每个key在20个字符左右,最多不超过200字符.在实际情况下,有差不多5/6的内存浪费 在存放实际数据无关的地方.在一些一次写入多次读去的地方,完全没有必要浪费这么多的资源,下面就通过一个简单的实现说明。
2009-10-27 16:50:00
3554
原创 一、虚拟内存分配和分页
在计算机系统中内存管理模块是最重要的模块之一,以linux来说,整个内核(kernel)源码中有近三分之一上的篇幅是与内存管理相关的。而作为应用程序来说,也离不开内存的分配和回收,不管是在静态的编译阶段还是在程序运行过程中的动态分配。内存是最重要的部分,同时也是最难掌握使用的一部分,用好了可以最少的内存消耗获得最大的性能,而反之就是内存的极度浪费。所以将此部分作为学习整个libc的第一部分来组织是
2009-10-22 20:26:00
1813
原创 c分析面向对象的实现技术
面向对象编程和结构化编程几乎在同一时期出现。但是由于早些时候的机器环境不允许,如内存、cpu等。导致面向对象技术没有得到及时的发展,而同时因为结构化程序对硬件要求不是那么强烈,所以及时的发展起来了。但是虽然如此,更多的人在谈到面向对象时总觉得是种优越,总觉得"高人一等",自认为c++一定比c优秀。下面通过用c来实现对象,也说明它们之间的关系,以及面向对象的本质实现。在开发用户管理系统的时候
2009-10-22 13:50:00
671
原创 提升hbase性能的几个地方
1、使用bloomfilter和mapfile_index_intervalBloomfilter(开启/未开启=1/0) mapfile_index_interval Exists(0-10000)/ms Get(10001 - 20000)/ms 0 128 22460 23715 0 0 11897 11416
2009-10-21 16:51:00
1011
提升hbase性能的几个地方
1、使用bloomfilter和mapfile_index_intervalBloomfilter(开启/未开启=1/0)mapfile_index_intervalExists(0-10000)/msGet(10001 - 20000)/ms01282246023715...
2009-10-21 16:37:14
130
memory leak & double free如何排查?
2013-02-26
Linux Kernel Development Second Edition.chm
2009-10-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人