自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Context

XmlBeanFactory 引用资源 用XmlBeanFactory(不能实现多个文件相互引用)       Resource resource = new ClassPathResource("appcontext.xml"); BeanFactory factory = new XmlBeanFactory(resource);       从factory中获取相应资源文件中的be

2014-05-12 09:18:15 632

转载 linux下core文件调试方法

在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 (1)使用ulimit -c命令可查看core文件的生成开关。若结果为0,则表示关闭了此功能,不会生成core文件。 (2)使用ulimit -c filesize命令,可以限

2013-11-05 21:41:20 426

转载 程序内存分布

在多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中。这个沙盘就是虚拟地址空间(virtual address space),在32位模式下它总是一个4GB的内存地址块。这些虚拟地址通过页表(page table)映射到物理内存,页表由操作系统维护并被处理器引用。每一个进程拥有一套属于它自己的页表,但是还有一个隐情。只要虚拟地址被使能,那么它就会作用于这台机器上运行的所有软件,

2013-11-05 12:16:52 503

转载 TCP非阻塞accept和非阻塞connect

非阻塞accept    当一个已完成的连接准备好被accept的时候,select会把监听socket标记为可读。因此,如果用select等待外来的连接时,应该不需要把监听socket设置为非阻塞模式,因为如果select告诉我们连接已经就绪,accept就不应该被阻塞。不过这样做的时候有一个BUG:当客户端在跟服务器建立连接之后发送了一个RST包,这个时候accept就会阻塞,直到有下一个

2013-10-15 10:29:32 678

转载 socketpair 进程间传递描述符

我们知道父进程在子进程被fork出来之前打开的文件描述符是能被子进程继承下来的,但是一旦子进程已经创建后,父进程打开的文件描述符要怎样才能传递给子进程呢?Unix提供相应的技术来满足这一需求,这就是同一台主机上进程间的文件描述符传递,很美妙而且强大的技术。    想象一下我们试图实现一个服务器,接收多个客户端的连接,我们欲采用多个子进程并发的形式来处理多客户端的同时连接,这时候我们可能有两种想

2013-10-15 10:22:18 1035

转载 Linux用户空间与内核空间

Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。

2013-10-09 23:55:53 737

转载 操作系统为什么要分用户态和内核态

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么你的系统一天死机n回就不足为奇了。所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING

2013-10-09 19:23:42 629

转载 非阻塞(nonblock)socket接口会否出现EINTR错误

对于socket接口(指connect/send/recv/accept..等等后面不重复,不包括不能设置非阻塞的如select),在阻塞模式下有可能因为发生信号,返回EINTR错误,由用户做重试或终止。 但是,在非阻塞模式下,是否出现这种错误呢? 对此,重温了系统调用、信号、socket相关知识,得出结论是:不会出现。 首先, 1.信号的处理是在用户态下进行的,也就是必须

2013-10-09 16:29:34 645

转载 c++中的explicit关键字及隐式类型转换

c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}

2013-10-07 16:12:35 487

转载 C++隐式类型转换 operator T

对于operator关健字用于运算符重载这我们都知道,其实operator还有另外一种作用:强制类型转换。上一周为了对应项目中一个问题,同事帮助写了一个类,使用到了operator的强制类型转换作用,后来source review的时候几个leader也不明白其作用,问我是怎么回事,当时我也只是一知半解,无奈解析了半天更天也没有让leader明白,汗。。。后来让这们同事来解析才清楚。    下

2013-10-07 15:59:15 1298

原创 常量折叠 Constant folding

常量折叠:在编译时期用常量的具体取值代替所有用到常量的地方。例如const int a = 8;cout 经过编译器扫描后,变为:cout 常量一般分为两种:可以常量折叠的常量和不可以常量折叠的常量。下面具个不可以常量折叠的常量的例子:int test(){ return 8; }const int a = test();//常量a不可以常量折叠cout

2013-10-06 20:32:16 2901

转载 c++有关编译期和运行期的访问

先要引用一一段,相信不少人看过:看这样一段代码。#include using namespace std; class A{ public: virtual void f(){cout<<"A"<<endl;} }; class B:public A { private: void f(){cout<<"B"<<endl;}

2013-10-05 12:00:51 611

原创 虚析构函数的一点理解

千万不要将析构函数和虚函数混淆起来。不管析构函数是不是虚函数,将析构函数设为虚函数是希望在通过基类指针删除派生类对象时调用派生类的析构函数。如果析构函数不是虚函数,派生类对象没有Vptr,编译器会调用基类的析构函数(在编译时就确定了)。  这样,用户在派生类析构函数中填写的代码就不会被调用,派生类成员对象的析构函数也不会被调用。不过,派生类对象空间还是会被正确释放的,堆管理程序知道

2013-10-05 11:00:42 371

转载 访问控制是在编译期间处理

该题写的是考查应聘者对于C++中的存取权限的理解,但经我稍微的分析,觉得不完全如是,现把它公开出来,希望各位能够畅所欲言,发表自己的看法有类A,它被定义在a.h中,A有private成员i,如下:class A {private:int i;// ...};A的实现在a.cpp中(具体细节略)。在另外一个main.cpp中,我们使用了A,当然,我们知道直接访问A::

2013-10-05 10:52:11 521

原创 指针轻松破除访问属性

例1:#include using namespace std;class B{int x;int y;public: B():x(1),y(2){ }};int main(){ B b; int *p=reinterpret_cast(&b); cout<<*p<<" "<<*(p+1)<<endl;

2013-10-05 09:58:17 440

转载 c++模板函数声明定义分离编译错误详解

今天看到accelerated c++上有个简单的vector容器的实现Vec,就再vs2008上编译了下: ?/////  Vec.h #ifndef GUARD_VEC_H#define GUARD_VEC_H #include #include #include

2013-10-04 16:31:30 498

转载 类与类之间的关系图(Class Diagram,UML图)

一、简介二、类的构成三、类之间的关系(Relationship)1、单向关联2、双向关联3、自身关联4、多维关联(N-ary Association)5、泛化(Generalization)6、依赖(Dependency)7、聚合(Aggregation)8、组合(Composite)四、总结一、简介类是对象的集合,展示了对象的结

2013-10-04 13:10:43 591

转载 SYN Cookie原理及其在Linux内核中的实现

概述在目前以IPv4为支撑的网络协议上搭建的网络环境中,SYN Flood是一种非常危险而常见的DoS攻击方式。到目前为止,能够有效防范SYN Flood攻击的手段并不多,而SYN Cookie就是其中最著名的一种。SYN Cookie原理由D. J. Bernstain和 Eric Schenk发明。在很多操作系统上都有各种各样的实现。其中包括Linux。本文就分别介绍一下SYN Flood

2013-09-30 14:36:06 1403

转载 套接字类型 - socket type

1、数据流套接字(Stream Socket)数据流式是一种面向连接的Socket,针对于面向连接的TCP服务应用,使用使用比较高质量的TCP协议。它有以下一些特点:(1) TCP提供可靠的连接。当TCP向另外一端发送数据时,它要求对方返回一个确认回答。如果没有收到确认,则会等待一段时间后重新发送,在数次重发失败后,TCP才会放弃发送。(2) TCP为发送的数据进行排序。比

2013-09-30 13:48:53 2548

转载 poj 2449 Remmarguts' Date(第K短路 A*)

题意:大意是 有N个station 要求从s点到t点 的第k短路 (不过我看题意说的好像是从t到s 可能是出题人写错了)思路: 这是一道 经典的第k短路算法,只要你会就能过。PS:这也是我第一k短路题 学到了很多新的东西 因为没学过A* 算法 所以在网上找了好久,但讲了都不是清楚 解题报告也都不带注释的 这里我就附上详细的解题报告 也好给以后要学的人 一点帮助。从这题中还真的学到了

2013-09-29 21:38:37 498

转载 多进程服务器中,epoll的创建应该在创建子进程之后

看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调用,一个在创建epoll fd之前,一个在之后,在调用在创建之前的代码会出问题,在我的机器上(linux内核2.6.26)表现的症状就是所有进程的epoll_wait函数返回0, 而客户端似乎被阻塞了:服务器端:#include #inclu

2013-09-29 14:06:10 405

转载 无符号数与有符号数比较

先出几个题目,再解释一下为什么答案是那样的。题目一:int a = -1;unsigned int b = 1;printf("%d", a > b);结果输出:1因为无符号数与有符号数比较时,要将有符号数转化为无符号数,再来比较。a转化为无符号数后就是0xFFFFFFFF,肯定大于b题目二:char a = -1;unsigned char b = 1;p

2013-09-29 00:08:57 454

转载 关于unsigned与signed的转换问题

1.无论int是unsigned还是signed,如果int转化为char,均截取最低8位作为char的值。2.例如(1)如果char为signedchar c;int i=193;c=i;printf("%d\n",c);//输出-63,因为-63为193的补过程:因为计算机存储的是数的补码所以:193的二进制为:1100,0001则pri

2013-09-28 23:46:10 3059

原创 数组划分

#include #include #include #include #include #define NDEBUG#include #include #include #include #include #include using namespace std;bool isOK[100][10000];int main(){

2013-09-20 14:22:48 418

转载 ZMQ性能测试

zeromq是啥玩意儿?通俗地说,ZMQ是一个开源的、跨语言的、非常简洁的、非常高性能、非常灵活的网络通讯库。它的官方网址为http://www.zeromq.org/它的性能非常高,下面是网友给出的几款常用消息中间件性能比较:性能测试我一直很好奇zeromq真的能跑出那么高的性能来吗?从上面网友给出的性能图看来,这个性能简直逆天了。俗话说好奇害死猫,我就是怀着这个好奇写了

2013-09-16 21:50:09 835

转载 STL容器中erase方法的不同陷阱

STL中的容器都有erase方法,容器的存储分为顺序存储(如vector)与链式存储(如list,map)。先以map为例:[cpp] view plaincopytypedef std::map TStrMap;  typedef TStrMap::iterator TStrMapIter;  TStrMap strmap;  

2013-09-14 17:45:07 419

转载 如何将所有的进程运行在一个指定的CPU上

这是CU上的一个问题... from: http://bbs.chinaunix.net/viewthread.php?tid=2330394  在SMP上,想把所有的用户 态进程运行在一个CPU上,腾出其它CPU干其它事。Linux能通过简单的配置实现吗?而不是去修改内核代码。 回复:Linux 内核 API 提供了一些方法,让用户可以修改位掩码或查看当前的位

2013-09-13 22:05:15 486

转载 nginx 高并发配置参数

一、一般来说nginx 配置文件中对优化比较有作用的为以下几项:1.  worker_processes 8;nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。2.  worker_cpu_affinity 00000001 0000001000000100 00001000 00010000 00100000 01000000 10000

2013-09-13 18:44:16 442

转载 MYSQL数据库性能测试报告

测试环境:       DELL 2.4G memory 512M       RH9.0 MySql 3.23.54测试使用的是mysql缺省参数,用mysql提供的API用C编写测试程序测试程序共启动40个线程进行数据库操作,查找、插入、修改、删除各10个,每个线程独立与Sql Server连接。数据库结构,单表,表结构如下:       toheader

2013-09-09 11:00:46 2243

转载 Linux下的多线程编程(例子、线程属性修改)

Linux下的多线程编程1 引言    线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的 佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。现在,多线程技术已经被许多 操作系统所支持,包括Windows/NT,当然,也包括Linux。    为

2013-09-01 13:45:07 445

转载 Linux下基于socket多线程并发通信的实现 阻塞

/***************************************************  * 文件名:pthread_server.c  * 文件描述:创建子线程来接收客户端的数据  ***************************************************/#include     #include     #include

2013-08-31 16:28:07 517

转载 高并发的epoll+多线程

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAX

2013-08-31 14:13:49 620

原创 pimpl

http://mobile.51cto.com/symbian-271933.htmhttp://blog.sina.com.cn/s/blog_667102dd0100wxbi.html

2013-08-29 22:20:11 331

转载 Web Service

http://www.cnblogs.com/gnuhpc/archive/2013/01/04/2844259.html

2013-08-29 22:14:13 506

原创 boost 线程池

安装boost:http://www.boost.org/下载boost,我下下来是boost_1_51_0.boost库的大部分都可以直接引用头文件就行了,因为大多数都是头文件里模板加inline函数构成。但是也有些是需要安装成二进制lib的,比如thread.(详见文档:"Getting Started...")$ cd boost_1_51_0$ sudo ./bootstr

2013-08-29 21:12:10 808

转载 socket端口数量限制问题

linux socket使用16bit无符号整型表示端口号,最大到65535。关于端口号,有一个经典的误解就是,因为端口号有限,所以一个客户端最多建立65536个socket连接,但实际上并不是这么回事,端口是可以复用的。 一个socket连接是一个[srcip, srcport, destip, destport]组成的四元组,如果再算上协议(tcp、udp、rawsocket等)就是五

2013-08-29 10:50:17 1241

原创 socket 错误相关

1. 打开文件数最多1024ulimit -a 查看 open files  (-n) 1024可以通过 ulimt -n  10000 命令修改修改上述限制的最简单的办法就是使用ulimit命令:[speng@as4 ~]$ ulimit -n 上述命令中,在中指定要设置的单一进程允许打开的最大文件数。如果系统回显类似于“Operation notpermitted”

2013-08-28 12:45:48 482

转载 socket 总结

http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645324.html

2013-08-26 14:46:00 371

转载 Linux IO 复用

首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。不管是文件,还是套接字,还是管道,我们都可以把他们看作流。之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。现在假定一个情形,我们需要从流中读数据,但是流中还没有数据,(典型的例子为,客户端要从socket读如数据,但是服务器还没有

2013-08-26 14:07:39 554

转载 socket阻塞与非阻塞,同步与异步、I/O模型

http://blog.csdn.net/hguisu/article/details/7453390

2013-08-24 16:47:43 333

空空如也

空空如也

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

TA关注的人

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