摘要:
http://blog.csdn.net/haoel/article/details/1948051前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析 阅读全文
摘要:
【转自http://hawstein.com/posts/lru-cache-impl.html】LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络 阅读全文
摘要:
本章开始介绍了堆的基本概念,然后引入最大堆和最小堆的概念。全章采用最大堆来介绍堆的操作,两个重要的操作是调整最大堆和创建最大堆,接着着两个操作引进了堆排序,最后介绍了采用堆实现优先级队列。1、堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行操作的时候将堆视为一颗完全二叉树,树种每个节点与数组中的存放该节点值的那个元素对应。所以堆又称为二叉堆,堆与完全二叉树的对应关系如下图所示: 通常给定节点i,可以根据其在数组中的位置求出该节点的父亲节点、左右孩子节点,这三个过程一般采用宏或者内联函数实现。书上介绍的时候,数组的下标是从1开始的,所有可到:PARENT(i)=i/2 ... 阅读全文
摘要:
/**归并两路链表*/templateNode* Mylist::merge(Node *first,Node *second){//注意到这里链表first,second已经是顺序的了 Node *resList=new Node(); //开辟一个临时头节点 Node *current; current=resList; while(first!=NULL && second!=NULL){//某一条链表空时结束 if((*cmp )(first->data,second->data)){//根据函数指针来确定排序方式 current->next=firs 阅读全文
摘要:
【原文地址:http://www.cppblog.com/pansunyou/archive/2011/01/26/io_design_patterns.html】综述这篇文章探讨并比较两种用于TCP服务器的高性能设计模式. 除了介绍现有的解决方案, 还提出了一种更具伸缩性,只需要维护一份代码并且跨平台的解决方案(含代码示例), 以及其在不同平台上的微调. 此文还比较了java,c#,c++对各自现有以及提到的解决方案的实现性能.系统I/O 可分为阻塞型, 非阻塞同步型以及非阻塞异步型[1,2]. 阻塞型I/O意味着控制权只到调用操作结束了才会回到调用者手里. 结果调用者被阻塞了, 这段时间了 阅读全文
摘要:
在编写程序的过程中,对于一些接口往往抽象成lib库的形式,甚至有些程序只有一个主程序,其他接口的调用都是库的形式存在。较多的使用库会比较利于程序的维护,因为我们的程序都可以被其他的人使用,但是往往库的存在会增加一些编译上的问题。 在linux中有静态库和动态库两种,两者各有优劣,对于后端伺服的服务器来说,我们更倾向于静态库,因为它部署方便,效率更高,而后端的服务器并不在意那些静态库多占用的内存。 对于静态库我们要先理解其原理,静态库是一些目标文件的集合,通常为后缀为.o的文件,通过ar命令打包而成,一般命名的格式为libXXX.a。在用户创建可执行程序的过程中,同-L指定静态库的地... 阅读全文
摘要:
在开发对外提供服务的模块的时候,系统的性能经常会是令我们头疼的问题,具体系统性能的定义与瓶颈的定位方法,可以参考陈皓的这篇文章:性能调优攻略http://coolshell.cn/articles/7490.html大牛的这篇文章还是很全面的。下面我会以我们的一些工程经验和曾经遇到过的问题,来实例化一些系统性能调优的经验。Ø代码级别1.减少数据copy1)使用指针,代替静态数据copy以下面的数据结构为例:struct goods_info_for_rank_t{ good_info_ptrp_goods_info;//静态数据,只可读不可写!!! ….//省略若干//策略相关的字段 阅读全文
摘要:
GCC -O 选项 这个选项控制所有的优化等级。使用优化选项会使编译过程耗费更多的时间,并且占用更多的内存,尤其是在提高优化等级的时候。-O设置一共有五种:-O0、-O1、-O2、-O3和-Os。让我们来逐一考察各个优化等级:-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。-O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2 阅读全文
摘要:
我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧。是的,我能记住一些命令,但是肯定不会只在特定的任务上使用一次,所以我就开始在我的Dropbox账号里用文本文件写下这些Linux shell的小技巧,现在我决定共享它给你。这个表我以后还会更新。记住,这里的一些贴士需要在你的Linux发行版上安装额外的软件。在bash中检查远程端口是否打开:echo >/dev/tcp/8.8.8.8/53 && echo "open"将进程挂起:Ctrl + z 将进程移到前台:fg(译注,挂起的进程是不执行的,如果希望在后 阅读全文
摘要:
shell中的参数以空格为分割符,经常会碰到需要传递带空格的参数,例如传递带空格的文件名。方法很简单:给参数加双引号。但是实际效果要看你的函数内容,一种可能的情况是:其实你真的传递进去了带空格的参数,但是在函数体内忽略了继续对该变量加引号,导致出现很恼人的错误。举个例子,遍历文件的一部分#!/bin/bashdir="/home/mydir"func(){forelmentin$1/*;doecho"$element"}func$dir上面有两个错误,应该改成#!/bin/bashdir="/home"func(){forelment 阅读全文