学习及工作初期
nathanglk
专注于即时通讯及Web服务器的开发
展开
-
libcurl的使用
libcurl是一个开源的网络传输库,客观的来讲在很多项目中,它被使用的频率是相当高的,但是libcurl的官网上关于如何使用它的文档却写的不是很清楚地。最近,由于公司项目的需要,研究了一下libcurl,遇到了许多困难,记了下来。 我使用libcurl主要是实现http服务,那下面的记录也主要是实现http服务过程中遇到的一些问题。 libcurl主要提供了两种接口:easy i原创 2010-09-18 15:56:00 · 2594 阅读 · 2 评论 -
Singleton单件模式的思考(续)
前面关于单件模式的分析,主要说明了单件的实现需要考虑的一些主要的问题,并且我们发现要想实现可复用的单件,不是那么的容易,可能涉及到一些高级c++的知识。在深层次的分析可复用的单件的设计之前,还有几个问题需要顾及。1、dead_reference问题2、dead_reference产生的原因原创 2009-07-23 21:45:00 · 427 阅读 · 0 评论 -
服务器开发要点
1、仔细阅读《Unix网络编程》中的相关章节,充分掌握套接字编程的原理2、找一份产品级的服务器代码,学习学习3、学习ACE、Libevent等网络中间件,主要是学习别人的网络底层框架实现方式4、熟悉openssl、zlib及加密等开源库的使用5、最后,还是要多做项目原创 2010-04-17 23:21:00 · 429 阅读 · 0 评论 -
STL源码剖析笔记四--迭代器与traits技法
迭代器就是起着如指针作用般的类迭代器与容器、算法、配置器之间的关系模板偏特化与traits技法模板偏特化与traits技法的使用案例 迭代器: 迭代器是一个concept,它类似于c++的原生指针,可以遍历结构或容器中的元素。迭代器也是一种设计模式的体现,使用迭代器可以按一定的顺序访问容器的元素,而又不暴露容器的实现细节。既然迭代器的概念类似于原生指针,那么迭代器必原创 2009-07-22 23:16:00 · 679 阅读 · 1 评论 -
STL源码剖析笔记三
二、内存空间的构造与初始化 Allocator除了完成内存请求的分配之外,还在空间的构造与初始化方面做了一些重要的工作。C++中的类型有两类:内建类型(如int、char)和用户自定义类型。对内建类型的构造或初始化比较简单,只是一些简单的赋值操作,主要是诸如memset或memmove之类的操作。但是对于自定义类型就没有那么简单了,比如对一个类的实例进行构造并初始化,需要调用类的构原创 2009-07-19 16:36:00 · 1236 阅读 · 0 评论 -
STL源码剖析笔记二
在学习STL时,第一个需要知道的东西就是Allocator了,但是我们发现在使用STL时,几乎又用不着与Allocator相关的任何知识,这是因为STL将各个Container的实现中默认了所使用的Allocator,比如std::vector,这里顺便提一下,在设计类模板的时候,可以给类型参数赋予默认值,当用户没有特别的设置那个类型参数时,模板就使用默认的类型。 Alloc原创 2009-07-19 13:19:00 · 706 阅读 · 0 评论 -
extern "C"与.def文件的作用
首先,我们需要知道C和C++编译器对函数名字的处理方式是不一样的;其次,就是同为C编译器的两个不同产品,在编译时对函数名字的处理方式也是有区别的,比如microsoft vc++与dev c++。所以,extern "C"与.def文件正是为了解决这两种情况而引入的处理方法。第一、extern "C"的作用 比如一个C源程序A.c要使用C++编写的库函数,在A.c中#inclu原创 2008-03-21 18:27:00 · 1743 阅读 · 0 评论 -
汇编程序基础知识要点
汇编程序基础知识要点:汇编程序由汇编指令、伪指令、标号组成汇编指令是cpu真正要执行的代码伪指令不是用于被cpu执行的代码,而是用于被编译器识别的特殊指令,比如end告诉编译器汇编程序到此为止,start告诉编译器程序的第一条指令从这里开始标号实际上是地址的一种表示,表明了某一个段的起始地址80x86cpu通用寄存器:ax,bx,cx,dx段寄存器:ds,cs,ss,e原创 2009-05-16 19:59:00 · 938 阅读 · 0 评论 -
STL源码剖析笔记六--适配器
适配器在软件设计中是一种设计模式,stl里也有一种叫做适配器的元素,比如mem_fun。mem_fun的作用就是可以让成员函数称为仿函数,那我们知道成员函数是函数,而仿函数是对象,怎么实现由函数到对象的转换呢?这就是mem_fun适配器的作用。本质上mem_fun所做的事情就是生成一个仿函数,这个仿函数会调用成员函数。 而binder也是属于适配器范畴,它也是使用了上面所说的原原创 2010-09-14 17:01:00 · 367 阅读 · 0 评论 -
STL源码剖析笔记五--仿函数
说实话,我现在真不知道仿函数存在的必要性,因为函数指针完全可以代替它。仿函数又称为函数对象,也就是说它起着函数的作用,但它是一个对象。 class ISPOSITIVE{ public: bool operator()(int x){return x > 0 ? true : false;} }; std::cout ISPOSITIVE()(-原创 2009-07-22 23:20:00 · 450 阅读 · 0 评论 -
UI与逻辑的关系、主线程与工作线程的通讯及对观察者模式、消息总线机制的思考
1、UI与逻辑的关系 2、主线程与工作线程的通讯 3、观察者模式 4、消息总线机制原创 2009-07-22 23:12:00 · 514 阅读 · 0 评论 -
auto_ptr、auto_ptr_ref及它们存在的问题
1、我们需要智能指针编程习惯导致内存泄露、野指针;异常产生时内存泄露2、解决问题的办法,智能指针的产生3、设计智能指针时,需考虑的问题不同类型的智能指针的赋值或拷贝操作、所有权转移、多线程安全4、STL中智能指针auto_ptr5、auto_ptr_ref存在的原因6、auto_ptr存在的一些问题(比如,赋值运算符遇到右操作数为NULL的情况,可能本身就是目前C++语原创 2009-07-22 22:59:00 · 742 阅读 · 0 评论 -
Singleton单件模式的思考
这两天项目终于结束了,有了些空闲时间来看些书并修改修改自己编写的垃圾代码。想到自己为实现全局唯一实例而写的一个类,仔细的看了看,并对照C++设计新思维上对于Singleton的分析,发现自己的设计果然够有缺陷,呵呵!这个缺陷曾经在调试时出现过,当时还不能理解,今天读到大师的佳作,豁然开朗! Singleton单件模式可以说是GoF书中最简单的最容易理解的模式了,但是却又是最难以实现的原创 2009-07-21 00:25:00 · 796 阅读 · 0 评论 -
读STL源码剖析笔记(一)
在读源码剖析之前,有几点知识是必不可少的。一是模板特化与部分特化、二是operator new、三是基本的数据结构知识,对于我来说主要是红黑树和hash。一、模板特化与部分特化:templateclass Ordinary{ public: T* Func(U&); private: T m_Var;}; //特化原创 2009-07-02 00:46:00 · 539 阅读 · 0 评论 -
Linux epoll 笔记
这两天将重写服务器底层的东西,专门记录了下。 epoll_create(int size)的参数size要求调用者提供一个监听套接字数目,注意这里的size并不是指“设置了size等于n,就只能监视n个套接字”,这个size只是告诉内核根据提供的大小来设置内部的数据结构,实际上加入epoll中的套接字数目超过n也是没有问题的。但是,一般来讲将这个size设置为“需要监视的套接字数目原创 2010-09-14 17:03:00 · 777 阅读 · 0 评论 -
Virtual PC下安装MS-Dos及Linux总结
总算是成功的实现了我的愿望,花了整整一天的时间。我的希望就是能够在虚拟机上装上Dos和Linux,并且能够实现虚拟机与宿主机之间的文件共享。我总结了一下之所以办这件事情花了这么久,主要是获得的信息有限或有误。我发现,在网上找解决难题的方法确实很困难,很多人包括我在内都是入门级选手,我们一遇到问题自然就去网上寻找答案,巧的是网上很多人都爱发一些错误的东西,或者他们根本不懂还乱说。比如,Virtu原创 2009-05-21 20:31:00 · 1150 阅读 · 1 评论 -
还是要读英文原著
前几天偶然的机会访问了www.sgi.com,无聊的看了看SGI STL的文档,当我把introduction page看完时,我发现其中有许多思想过去我一直都不知道,尽管我还是看过一些STL的书的。天啊,要想真真学到计算机方面的东西,还得读英文啊。中文的书以及那些个“专家”,真的没法说,自己整不出新鲜的东西,还把别人的东西弄臭了!原创 2010-04-17 23:29:00 · 490 阅读 · 0 评论