自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (1)
  • 收藏
  • 关注

转载 socket原理

使用sockets Socket控件让你建立一个利用TCP/IP和有关的协议与其他系统进行通信的应用。使用Sockets,你能够读和写通过它连接的其他机器,而不用担心实际的网络软件的相关细节。Sockets提供基于TCP/IP协议的连接。除此以外还能很好的工作,在其他相关的协议,例如Xerox Network System (XNS), Digital’s DEC net, or Novell’s

2014-07-23 14:58:26 440

转载 使用 libevent 和 libev 提高网络应用性能

管理多个 UNIX 网络连接构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。有许多解决方案,但是 libevent 库和 libev 库能够大大提高性能和事件处理能力。在本文中,我们要讨论在 UNIX® 应用程序中使用和部署这些解决方案所用的基本结构和方法。libev 和 libevent 都

2014-07-20 01:08:50 568

转载 libevent学习总结

对libevent进行一下简要的总结,libevent将socket、信号事件、定时器进行统一管理;Libevent首先会检查操作支持那种类型的多路复用函数,检查顺序为:evport、kqueue、epoll、devpoll、poll、select。 主要研究了一下libevent 对socket的管理,信号事件处理和定时器处理粗略看过(本文主要以epoll多路复用方式下的情况进行了简

2014-07-20 01:02:58 468

转载 VIM配置详解

syntax onfiletype off" format and user interfaceset nocompatibleset numberset softtabstop=4 tabstop=4 shiftwidth=4set expandtabset autoindentset hlsearchset mouse=aset cursorline

2014-07-20 00:56:59 1171

转载 c/c++: 多线程编程基础讲解

最近喜欢听大学听到的老歌,deutschland 德国世界杯时候流行的,据说不是主题曲但是比主题曲还要火。本篇进入难点了,mutex互斥锁概念,mutex=mutual exclusion的缩写,顺便说一句:以前老师都爱用缩写,也不跟同学说全称,这尼玛能理解深刻么!下文是用法:[cpp] view plaincopy#include   

2014-07-19 12:22:40 575

转载 一道淘汰85%面试者的百度开发者面试题——解题、参考答案和优化思路

一道听说挺考验基本功的淘汰85%的面试者的题目,自己也来试试。题目描述:依序遍历0到100闭区间内所有的正整数,如果该数字能被3整除,则输出该数字及‘*’标记;如果该数字能被5整除,则输出该数字及‘#’标记;如果该数字既能被3整除又能被5整除,则输出该数字及‘*#’标记。之前被考过一个类似的题,不过那个是看一个数是3的多少次幂。就是因为没有提

2014-07-19 12:15:00 862 1

转载 linux C++ 多线程浅尝

学习了几天Linux多线程,大多是看的别人的博客,并试着写了个小例子,现在也把学到的一些东西记录下来,供以后查阅,属于初级入门的范围,望共勉。  进程是系统中程序执行和分配资源的基本单位,每个进程都有自己独立的数据段,代码段和堆栈段。而线程是系统中独立运行的最小单位,可以说操作系统分配CPU时间的最小单位,可以叫轻型的进程。一个进程可以有多个线程,在多进程情况下,每个进程都有着自己的地址空

2014-07-19 12:08:49 504

转载 c++ 使用json的库

你看到的这个文章来自于http://www.cnblogs.com/ayanmwcJSON官网是:http://sourceforge.net/projects/cjson/?source=recommended 最新版本是2013年的,与2009年的变化不是很大。看了代码,觉得挺好,只是是C语言的,不够好。就改良了一下,内存自己管理。使用std::stri

2014-07-19 11:59:46 727

转载 程序员面试必看

很早以前就想写一篇和面试相关的文章了,今天在网络上看到一篇关于如何去面试程序员的英文文章,发现其中有很多和我共鸣的东西,所以仿照其标题通过自己的经历写下了这篇文章。工作这么多年来,即被面试过,也面试过他人,对于程序员的面试,经历过很不错的面试,很专业的面试,也经历过一些BT和令人不爽的面试,我个人觉得一个好的面试,面试官是很重要的,所以,本文想从“面试官”的角度来阐述一下。于是,有了下面这

2014-07-19 11:59:43 561

转载 linux c++线程池的实现

线程池的原理大家都知道,直接上代码了^_^Thread.h[cpp] view plaincopy#ifndef __THREAD_H   #define __THREAD_H     #include    #include    #include      using namespace std;  

2014-07-19 11:55:43 405

转载 libevent 参考手册-前言

前言:Libevent 参考手册Libevent是一个提供快速可移植的非堵塞IO库,它设计的目标是:1、可移植性使用libevent写的程序,应该在所有支持Libevent平台上有效,甚至在没有真正好的方法进行非堵塞IO时,Libevent也应该支持这种方式,所以你的程序可以在有限的环境下运行。2、 高效性该库在每个平台上尝试使用最快且可用的非堵塞IO实现,同时不会引入很大的开

2014-07-19 00:52:26 529

转载 select、poll、epoll的比较

linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);int poll(struct po

2014-07-19 00:42:44 501

转载 出错处理函数abort、exit、atexit、strerror. . .

摘要:本文详细讲述了几个出错处理的函数abort、exit、atexit、strerror函数的使用方法,并给出来具体的示例程序。           函数名: abort功 能: 异常终止一个进程用 法: void abort(void);头文件:#include 说明:abort函数是一个比较严重的函数,当调用它时,会导致程序异常终止,而

2014-07-19 00:38:28 541

转载 Libevent参考手册:evbuffer:缓冲IO实用功能

libevent的evbuffer实现了为向后面添加数据和从前面移除数据而优化的字节队列。evbuffer用于处理缓冲网络IO的“缓冲”部分。它不提供调度IO或者当IO就绪时触发IO的功能:这是bufferevent的工作。除非特别说明,本章描述的函数都在event2/buffer.h中声明。1 创建和释放evbuffer接口这两个函数的功能很简明:

2014-07-19 00:38:22 630

转载 TCP 的那些事儿(下)

这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存和计算资

2014-07-19 00:34:26 615

转载 TCP 的那些事儿(上)

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相

2014-07-19 00:32:11 389

转载 循环队列的队空与队满的条件

为了方便起见,约定:初始化建空队时,令      front=rear=0,  当队空时:front=rear  当队满时:front=rear 亦成立  因此只凭等式front=rear无法判断队空还是队满。  有两种方法处理上述问题:    (1)另设一个标志位以区别队列是空还是满。    (2)少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位

2014-07-19 00:29:15 3670

转载 进程、线程和协程的理解

进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。进程和其他两个的区别还是很明显的。协程和线程的区别是:协程避免了无意义的调度,由

2014-07-17 21:00:13 462

转载 Reactor pattern

什么是ReactorReactor又称Dispatcher,用于同步IO,它逆置了常见的函数调用机制,也就是说, Application将一个service对应的handler注册到Reactor,当这个service需要被处理时(一般通过定时器来触发),Reactor主动调用handler.浅白一点说, ‘Don’t call us, we’ll call you.’ —Hollywoo

2014-07-17 20:51:56 542

转载 初探Linux网络协议栈

译者注: 原文写于2003年,文中描述的不少内容已经发生了改变,在不影响愿意的情况下,我擅自增删了一些内容.翻译过程中找到的好资料:How SKBs WorkEvaluation of TCP retransmission delaysCongestion Control in Linux TCPAnatomy of the Linux networking stack — From

2014-07-17 20:51:12 768

转载 进程、线程和协程的理解

进程、线程和协程的理解进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的)。协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度。进程和其他两个的区别还是很明显的。

2014-07-17 20:17:36 525

转载 TCP 连接断连问题剖析

TCP 连接的保持并不需要任何额外的操作,但在实际应用中,要长时间保持一个 TCP 连接则会受到诸多因素的影响。本文介绍了几种常见的导致 TCP 连接断连的原因,并在此基础上,以 AIX 系统上 TCP 连接的异常断连为例,借助相应的网络分析工具,逐步揭开 AIX 上 TCP 断连的原因,并给出两种可行的解决方案。引言 在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇。TCP

2014-07-16 19:09:03 512

转载 并发语言

多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之 上丰富的外延,可以解决现实世界中各种各样的问题。本文以GO语言为例,解释其中内核、外延。 并发模式之内核 

2014-07-16 16:42:17 625

转载 针对TCP连接异常断开的分析

我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接;通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接;然后,两者就可以基于这个socket连接通信了。连接结束后,客户端(进程)会退出;在不需要继续处理客户请求的情况下,服务器(进程)也将退出。而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套

2014-07-16 16:37:37 2036

转载 C++程序运行时内存布局之----------this到底是什么?

先问一个问题,在C++里,成员函数里的this指针和调用此函数的对象地址总是一样的吗?如果你的回答是:不一定。那么至少你是个老手吧,下面的内容你就不用看了;如果你的回答是:是啊,那么强烈建议你看看下面的内容。 非静态成员函数,无论是不是虚函数,都隐藏了一个this指针参数。这个参数的目的就是给函数提供一个基地址,以便于函数体内能找到对象的成员变量。那非静态成员函数是如何根据this指针找到

2014-07-16 16:32:39 467

转载 tcp连接和断开流程

说起TCP,我们一般都需要知道发起一个tcp连接和终止一个tcp连接是所发生的事情,下边,我将跟大家介绍下tcp的三次握手及四次挥手的过程。      TCP三路握手       (1)服务器必须准备好接受外来的连接。这通常在调用socket,bind,listen这三个函数来完成,我们称之为被动打开(passive open)。       (2)客户通过调用socket,c

2014-07-16 16:28:00 630

转载 C++强大背后

在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程范式,包括过程式、面向对象(object-oriented programming, OP)、泛型(generic programming, G

2014-07-15 19:07:00 384

转载 mysql数据库管理常用命令

mysql数据库数据结构tabledatabaseinsert安装利用RPM包安装Mysql 设置TCP 3306端口的iptables  root密码管理设置root用户的密码mysqladmin -uroot password 'password'修改root用户的密码mysqladmin -uroot

2014-07-15 18:58:31 468

转载 mysql日常管理

出此是用mysql,因为root权限过高,所以新建一用户appadmin,权限仅为要用到的数据库。创建语句如下:grant select,insert,update,delete on test.* to appadmin@"%" identified by "password";其中@“%”是可以在任何地址登录。  创建后到mysql.user下查看,有该用户。但是使用mysql -u ap

2014-07-15 18:48:43 565 1

转载 数值极值

1.引言       在阅读别人的代码的时候,经常遇到最大的int值赋值为0x7FFFFFFF,最小的int值赋值为0x80000000。       最大值易于理解,但是最小值为什么是0x80000000?       首先注意,当给变量按16进制赋值的时候,是按补码形式赋值的。但是有一个特例就是0x80000000,这个是最小的负数,因为负数比正数表示的范围多1,所以0

2014-07-15 18:17:01 516

转载 内存管理

1.进程地址空间分布           下图是linux系统中进程地址空间布局,windows进程地址空间布局与此类似。2.栈与函数调用           在经典的操作系统里,栈总是向下增长的。在i386下,栈顶由称为esp(stack pointer)的寄存器进行定位。i386中,一个函数的活动记录用ebp和esp这两个寄存器划定范围。esp始终指向栈的顶部,同时

2014-07-15 18:13:10 373

转载 动态链接

1.为什么要动态链接       静态链接有两大缺陷:①浪费内存和存储空间。       因为各个可执行文件可能会调用相同的库函数及它们所需要的辅助数据结构。假设有两个目标文件Program1.o和Program2.o,都需要和lib.o进行链接形成可执行文件,当用动态链接的时候内存中只需要存在一份lib.so就可以了。②模块更新困难。       因为当可执行文件中的一个模块

2014-07-15 18:09:12 493

转载 静态链接

目标文件中有不同的段,主要有代码段,数据段,bss段(bss段为未初始化的变量预留了空间,记录了各变量所需的大小,但是在文件中是不占用大小的)。在目标文件中与链接有关的就是重定位表(段)。对于每个需要重定位的代码段或数据段都会存在一个重定位表,如果代码段中有针对绝对地址的引用就会存在代码段重定位表——.rel.text,同样相对与数据段的重定位表——.rel.data。    

2014-07-15 18:09:04 347

转载 编译过程

由程序生成可执行文件经过了预编译——编译——汇编——链接的过程。其中编译的步骤分为:词法分析、语法分析、语义分析、中间语言生成、目标代码生成及优化(如下图)。       例子:array[index] = (index + 4) * (2 +6)首先是词法分析形成一个个的记号,之后进行语法分析产生语法树。接下来进行语义分析,编译器所能分析的语义是静态语义,所谓

2014-07-15 18:00:17 466

转载 vector clear 内部过程

最近在论坛看到一个提问帖子,问题是vector中存储了对象的指针,调用clear后这些指针如何删除?[cpp] view plaincopyprint?class Test  {  public:      Test() {}      ~Test() { cout "Test des" };     int main()  {      vector vec;  

2014-07-15 17:49:17 989

转载 vector的构造与内存管理

1.vector的数据结构[cpp] view plaincopyprint?template class T, class Alloc = alloc>    class vector {  ...  protected:    iterator start;                    //表示目前已使用空间的头    iterator finish;

2014-07-15 17:47:32 542

转载 new/malloc 区别

malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。       对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的

2014-07-15 17:23:03 348

转载 tcp的连接和终止

1.TCP报头        T C P将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; T C P提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。2.TCP连接的建立与终止3.TCP的状态变迁        导致两个进入ESTABLISHED状态的变迁对应打开一个连接

2014-07-15 17:19:07 418

转载 linux epoll详解

一、什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linuxkernel 2.5.44),它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 二、epoll的相

2014-07-14 15:25:29 454

转载 常见网络攻击基本原理

常见网络攻击原理 1.1 TCP SYN拒绝服务攻击  一般情况下,一个TCP连接的建立需要经过三次握手的过程,即:  1、 建立发起者向目标计算机发送一个TCP SYN报文;  2、目标计算机收到这个SYN报文后,在内存中创建TCP连接控制块(TCB),然后向发起者回送一个TCP ACK报文,等待发起者的回应;  3、 发起者收到TCP ACK报文后,再回

2014-07-14 13:01:10 1466

空空如也

空空如也

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

TA关注的人

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