自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

转载 快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快速排序

2011-10-20 16:11:00 504 1

转载 字节对齐详解

一.什么是字节对齐,为什么要对齐?    现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。    对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数

2011-10-20 14:06:57 433

转载 判断单链表是否存在环,判断两个链表是否相交问题详解

有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如何找到环的入口点?解答:一、判断链表是否存在环,办法为:设

2011-10-17 08:55:44 504

转载 “惊群”问题

“据说”惊群问题已经是一个很古老的问题了,并且在大多数系统中已经得到有效解决,但对我来说,仍旧是一个比较新的概念,因此有必要记录一下。什么是惊群        举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争

2011-09-20 11:10:09 3348

原创 mysql基本操作

<br />1,查看数据库状态 及启动停止<br />/etc/init.d/mysqld status<br />/etc/init.d/mysqld start<br />/etc/init.d/mysqld stop<br /><br />2,给用户配置初始密码123456:<br />mysqladmin -u root -password 123456<br /><br />3,修改root用户密码为 abc123<br />mysqladmin -u root -p123456 password

2011-04-08 18:22:00 483

原创 effective c++ 条款23总结: 必须返回一个对象时不要试图返回一个引用

<br />条款23: 必须返回一个对象时不要试图返回一个引用<br /> <br />据说爱因斯坦曾提出过这样的建议:尽可能地让事情简单,但不要过于简单。在c++语言中相似的说法应该是:尽可能地使程序高效,但不要过于高效。<br />一旦程序员抓住了“传值”在效率上的把柄(参见条款22),他们会变得十分极端,恨不得挖出每一个隐藏在程序中的传值操作。岂不知,在他们不懈地追求纯粹的“传引用”的过程中,他们会不可避免地犯另一个严重的错误:传递一个并不存在的对象的引用。这就不是好事了。<br />看一个表示有理数

2011-04-02 09:06:00 419

原创 effective c++条款22: 尽量用“传引用”而不用“传值”

<br />1.传引用避免了数据的拷贝,大大提高效率。<br />2.传递引用是个很好的做法,但它会导致自身的复杂性,最大的一个问题就是别名问题,这在条款17进行了讨论。另外,更重要的是,有时不能用引用来传递对象,参见条款23。最后要说的是,引用几乎都是通过指针来实现的,所以通过引用传递对象实际上是传递指针。因此,如果是一个很小的对象——例如int——传值实际上会比传引用更高效。

2011-04-01 09:55:00 467

原创 effective c++条款21: 尽可能使用const

<br /> <br />一。小结:为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。<br /> const成员函数的使用 const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,<br />把const关键字放在函数的参数表和函数体之间。任何不修改成员数据的函数都应该声明为const函数,这样有助于

2011-04-01 09:51:00 581

转载 ubuntu server 10.04 下nginx的安装

<br /><br />为了确保能在 Nginx 中使用正则表达式进行更灵活的配置,安装之前需要确定系统是否安装有 PCRE(Perl Compatible Regular Expressions)包。您可以到 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:<br /># wget ftp://ftp.csx.cam.ac.uk/pub/software/programmi

2011-03-30 14:48:00 3069

原创 条款20: 避免public接口出现数据成员

<br />条款20: 避免public接口出现数据成员<br /> <br />首先,从“一致性”的角度来看这个问题。如果public接口里都是函数,用户每次访问类的成员时就用不着抓脑袋去想:是该用括号还是不该用括号呢?——用括号就是了!因为每个成员都是函数。一生中,这可以避免你多少次抓脑袋啊!<br />你不买“一致性”的帐?那你总得承认采用函数可以更精确地控制数据成员的访问权这一事实吧?如果使数据成员为public,每个人都可以对它读写;如果用函数来获取或设定它的值,就可以实现禁止访问、只读访问和读写

2011-03-30 09:42:00 543

原创 条款19: 分清成员函数,非成员函数和友元函数

<br />条款19: 分清成员函数,非成员函数和友元函数<br /> <br />成员函数和非成员函数最大的区别在于成员函数可以是虚拟的而非成员函数不行。所以,如果有个函数必须进行动态绑定(见条款38),就要采用虚拟函数,而虚拟函数必定是某个类的成员函数。关于这一点就这么简单。如果函数不必是虚拟的,情况就稍微复杂一点。<br />看下面表示有理数的一个类:<br />class rational {<br />public:<br />  rational(int numerator = 0, int d

2011-03-30 09:32:00 526

转载 如何学好c语言

<br /><br />有人在酷壳的留言版上询问下面的问题<br />keep_walker :<br />今天晚上我看到这篇文章。<br />http://programmers.stackexchange.com/questions/62502/small-c-projects<br />我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!<br />我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你

2011-03-29 14:52:00 677

转载 条款18: 争取使类的接口完整并且最小

<br />条款18: 争取使类的接口完整并且最小类的用户接口是指使用这个类的程序员所能访问得到的接口。典型的接口里只有函数存在,因为在用户接口里放上数据成员会有很多缺点(见条款20)。哪些函数该放在类的接口里呢?有时这个问题会使你发疯,因为有两个截然不同的目标要你去完成。一方面,设计出来的类要易于理解,易于使用,易于实现。这意味着函数的数量要尽可能地少,每一个函数都完成各自不同的任务。另一方面,类的功能要强大,要方便使用,这意味着要不时增加函数以提供对各种通用功能的支持。你会怎样决定哪些函数该放进

2011-03-29 10:03:00 469

转载 你第一要做的是开始去做

<br /><br />很多人都问我,“我想做web设计,如何入手?”或“我要开发web应用程序,需要学哪些技术?”,当然,推荐他们一摞书籍或十几篇关于55条超越竞争对手115%的技巧文章是最简单的,但问题的实际情况是,如果你想开始做某件事,你并不需要先去学会什么新知识。对你来说,最重要的却是立即着手去做。<br /><br />行动起来,着手去做。如果你想学web设计,那就去做个网站。如果你想成为企业家、在网上买你的产品,那就去做个电子商务应用程序。也许你现在还不具备这些开发技能,但何必为这些担心?也许你

2011-03-29 09:33:00 416

转载 好的代码里只要一个return语句

别再这样写了: public boolean foo() { if (true) { return true; } else { return false; }}每次当我深入某个开源项目,看到大概是某个专家写的、并被有经验的专业人士审查过的这样的代码,我都会惊讶不已,竟然没有人去阻止这个开发者在这个方法里胡乱的放置返回语句。请告诉我,把代码写成下面的样子很难吗?public boolean foo() { boolean flag = true; i

2011-03-29 09:15:00 385

转载 关于网络编程(服务端)的一些笔记

<br /><br />针对服务器处理网络连接的几种方式,unix网络编程里给出了9种方案,并且对服务器进程/线程的开销做了一个量化的比较。从个人经验出发,觉得以下几种方式是比较实用的:<br />1.最简单的是堵塞Accept,收到连接后fork进程(unix)或创建Thread.原进程/线程继续堵塞Accept,创出来的进程线程只处理新连接上的客户请求。如果忽略创建进程/线程的开销,以及每个连接必须对应一个进程/线程的话,做成这样已经可以满足绝大部分简单的应用服务器需要了。qmail的tcpserver

2011-03-28 16:15:00 623

原创 mysql++的安装和基本用法

1.mysql++介绍类似iconvpp对iconv的封装,MySQL++同样是采用C++对MySQL 原有C接口的封装。当希望通过C++语言实现访问MySQL数据库时,MySQL++是一个非常好的选择。2.mysql++下载mysql的官网是http://tangentsoft.net/mysql++/, 下载最新稳定版mysql++-3.1.0.tar.gz3.mysql++安装./configure -> make -> make install4.mysql++基本使用include "mysql+

2011-03-25 13:16:00 2004

原创 effective c++条款17学习总结--在operator=中检查给自己赋值的情况

<br />1. 做类似下面的事时,就会发生自己给自己赋值的情况:<br />class x { ... };<br />x a;<br />a = a;                     // a赋值给自己<br /> <br />另外当x& b=a; 那么b和a都是同一个对象,所以b = a;实际上也是自赋值。这是别名的一个例子:同一个对象有两个以上的名字别名可以以大量任意形式的伪装出现,所以在写函数时一定要时时考虑到它。<br /> <br /><br />    在赋值运算符中要特别注意可能出

2011-03-25 10:21:00 423

原创 effective c++条款16学习总结

<br /> <br />条款45说明了如果没写赋值运算符的话,编译器就会为你生成一个,条款11则说明了为什么你会经常不喜欢编译器为你生成的这个赋值运算符,所以你会想能否有个两全其美的办法,让编译器生成一个缺省的赋值运算符,然后可以有选择地重写不喜欢的部分。这是不可能的!只要想对赋值过程的某一个部分进行控制,就必须负责做赋值过程中所有的事。<br />实际编程中,这意味着写赋值运算符时,必须对对象的每一个数据成员赋值:<br />template<class t>          // 名字和指针相关联的

2011-03-25 09:57:00 387

转载 高性能的网络游戏服务器的设计

<br /><br />高性能的网络游戏服务器的设计<br /> <br />说起高性能的网络游戏,有2个典范,1个是暴雪的WOW,另外一个要数腾讯的QQGame了,因为对于MMPRPG的体系接触不深,几乎属于文盲,没有太多的发言权,而自己又是搞休闲游戏开发的所以本文就主要谈谈QQGame了。<br />前些天通过朋友得到了QQGame的一个系统分析的文档,看完后很是震惊,彻底被QQ的设计所折服了,到底是千万人在线系统经验的拥有者,牛!<br />通过资料了解到QQGame目前有以下让我欣赏的特性:单机最高

2011-02-21 17:00:00 537

转载 TCP TIME_WAIT状态

<br />Q: 我正在写一个unix server程序,不是daemon,经常需要在命令行上重启它,绝大 <br />多数时候工作正常,但是某些时候会报告"bind: address in use",于是重启失 <br />败。 <br /><br />A: Andrew Gierth <br />server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。至于 <br />TIME_WAIT状态,你无法避免,那是TCP协议的一部分。 <br /><br />Q: 如何避免等待6

2011-02-21 16:40:00 272

原创 effective c++条款15学习总结

<br /><br />条款15: 让operator=返回*this的引用<br />    operator=的返回值必须可以作为一个输入参数被函数自己接受。在一个类c中,缺省版本的operator=函数具有如下形式(见条款45):<br />c& c::operator=(const c&);<br />    一般情况下几乎总要遵循operator=输入和返回的都是类对象的引用的原则,然而有时候需要重载operator=使它能够接受不同类型的参数。例如,标准string类型    提供了两个不同版本

2011-02-14 09:24:00 406

原创 effective c++条款14学习总结

<br /><br />条款14: 确定基类有虚析构函数<br />    c++语言标准关于这个问题的阐述非常清楚:当通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。所以当类要被继承的时候,要有虚析构函数。<br />    如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为这样会增加额外的负担(维护虚函数表)。<br />    最后,值得指出的是,在某些类里声明纯虚析构函数很方便。纯虚函数将产生

2011-02-12 09:29:00 493

原创 effective c++条款13学习总结

<br />条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同<br />如果成员按它们在初始化列表上出现的顺序被初始化,那w1和w2中的数据成员被创建的顺序就会不同。我们知道,对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。那么,如果允许上面的情况(即,成员按它们在初始化列表上出现的顺序被初始化)发生,编译器就要为每一个对象跟踪其成员初始化的顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避免这一开销,同一种类型的所有对

2011-02-11 09:10:00 286

原创 effective c++条款13学习总结

<br />条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同<br />如果成员按它们在初始化列表上出现的顺序被初始化,那w1和w2中的数据成员被创建的顺序就会不同。我们知道,对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。那么,如果允许上面的情况(即,成员按它们在初始化列表上出现的顺序被初始化)发生,编译器就要为每一个对象跟踪其成员初始化的顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避免这一开销,同一种类型的所有对

2011-02-11 09:10:00 341

原创 effective c++条款13学习总结

<br />条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同<br />如果成员按它们在初始化列表上出现的顺序被初始化,那w1和w2中的数据成员被创建的顺序就会不同。我们知道,对一个对象的所有成员来说,它们的析构函数被调用的顺序总是和它们在构造函数里被创建的顺序相反。那么,如果允许上面的情况(即,成员按它们在初始化列表上出现的顺序被初始化)发生,编译器就要为每一个对象跟踪其成员初始化的顺序,以保证它们的析构函数以正确的顺序被调用。这会带来昂贵的开销。所以,为了避免这一开销,同一种类型的所有对

2011-02-11 09:08:00 291

转载 inet_pton和inet_ntop函数

<br />Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换<br />而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。<br /><br />inet_pton函数原型如下[将“点分十进制” -> “整数”]<br />#include <sys/types.h><br />#include <sys/socket.h><br />#include <arpa/inet.h><br />int inet_pton(

2011-02-10 10:48:00 438

原创 effective c++条款12学习总结

<br />条款12: 尽量使用初始化而不要在构造函数里赋值<br /> <br />    尽量使用初始化列表而不是在构造函数中赋值。例外是当有大量的固定类型的数据成员要在每个构造函数里以相同的方式初始化的时候,这时候可以将这些数据成员的初始化封装在一个初始化函数中进行。

2011-02-10 10:07:00 292

原创 effective c++条款11学习总结

<br />1.为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符:<br />   只要类里有指针时,就要写自己版本的拷贝构造函数和赋值操作符函数。在这些函数里,你可以拷贝那些被指向的数据结构,从而使每个对象    都有自己的拷贝;或者你可以采用某种引用计数机制去跟踪当前有多少个对象指向某个数据结构。引用计数的方法更复杂,而且它要求构造函    数和析构函数内部做更多的工作,但在某些(虽然不是所有)程序里,它会大量节省内存并切实提高速度。<br /> <br />   拷贝可以是显式调用拷贝构造函

2011-02-09 15:40:00 448

原创 ubuntu的时间同步

<br />1.手动同步时间:<br />$ sudo ntpdate s1a.time.edu.cn<br />   将同步后的准确时间写入BIOS:<br />$ sudo hwclock --systohc<br />2.自动同步时间服务器:<br />   设置每个星期一自动时间同步:<br />   crontab -e 然后编辑内容<br />   * * * * 1 root /usr/sbin/ntpdate time.windows.com; /sbin/hwclock --systohc

2011-02-09 14:45:00 515

原创 linux下共享内存等文件的权限问题

<br />1.root用户下使用shm_open创建共享内存时,用其他的用户登录后不能够连接到该共享内存,查看出错信息发现时因为权限不够。<br />后修改创建的时的权限就解决了。具体如下:<br /><br />//系统错误号<br />errno = 0;  <br />int fd = shm_open(ShmName, O_RDWR | O_CREAT | O_EXCL, (S_IRWXO | S_IRWXG | S_IRWXU));  <br /><br />if ( errno == EEXI

2010-11-05 10:35:00 2704 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除