自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Crazy_Bear

持之以恒,永不言弃

  • 博客(233)
  • 资源 (2)
  • 收藏
  • 关注

转载 优秀程序设计的18大原则

1. 避免重复原则(DRY - Don’t repeat yourself)  编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就会很容易形成一个抽象体。  2. 抽象原则(Abstraction Principle )  与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。  

2016-04-05 19:20:02 1178

转载 linux下swap分区的作用

嵌入式Linux中文站消息,Linux系统的Swap分区,即交换区,Swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap

2016-03-27 17:15:03 21281 5

转载 系统缓冲区、内核缓冲区、IO库操作本身的缓冲区 之间联系

FILE结构里本身带有一个缓冲。而系统在操作IO的时候可能会还有一个缓冲。fflush函数单纯是调用系统地写操作(比如WriteFile)把FILE结构里的那个缓冲的数据传给系统,这个时候很可能仅仅是写到系统的缓冲区里了。fsync函数是调用系统的flush函数(FlushFileBuffers),清空系统的写入缓冲区。 C是独立于系统存在的,所以它只能假设系统本身没有

2016-03-26 13:31:36 1021

转载 内存映射文件原理

一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。 原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间中 一块大

2016-03-26 11:51:43 12569 6

转载 高性能IO模型浅析

服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexi

2016-03-25 18:36:05 520

转载 浅析三层架构与MVC模式的区别

三层架构介绍:(点击链接即可见三层架构)  MVC模式介绍:MVC全名是Model ViewController,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用于组织代码用一种业务逻辑和数据显示分离的方法,这个方法的假设前提是如果业务逻辑被聚集到一个部件里面,而且界面和用户围绕数据的交互能被改进和个性化定制而不

2016-03-15 19:57:28 420

转载 每天进步一点点——Linux中的线程局部存储(二)

转载:http://blog.csdn.net/cywosp/article/details/26876231    在Linux中还有一种更为高效的线程局部存储方法,就是使用关键字__thread来定义变量。__thread是GCC内置的线程局部存储设施(Thread-Local Storage),它的实现非常高效,与pthread_key_t向比较更为快速,其存

2016-03-07 17:53:44 385

原创 pthread_setspecific函数与pthread_getspecific函数

函数原型:int pthread_setspecific(pthread_key_t key, const void *value);功能:使用pthread_setspecific可以为指定线程特定数据键设置线程特定绑定头文件:#include 由于pthread库非linux默认库,所以需要手动链接 -lpthread形参:        key:需要关联的键

2016-03-07 16:48:48 14858

原创 pthread_key_delete函数

函数原型:int pthread_key_delete(pthread_key_t key);功能:销毁线程特定数据键。由于键已无效,因此将释放与该键关联的所有内存。在调用该函数之前必须释放所有线程的特定资源,‘该函数不会调用任何析构函数。反复调用pthread_key_create与pthread_key_delete可能会产生问题。对于每个所需的键,应当只调用pthread_key

2016-03-07 16:33:11 2675

原创 pthread_key_create函数

函数原型:  int pthread_key_create(pthread_key_t *key, void(*destructor)(void*));功能:  分配用于表示进程中线程特定数据的键,键对进程中的所有线程来说是全局的。创建线程特定数据时,所有线程最初都具有与该键关联的NULL值。POSIX要求系统至少支持128TSD头文件:#include pthread非linux

2016-03-07 16:21:28 4027

原创 浅谈数组与指针的区别

区别1:观察下面程序#include #include using namespace std;int main(){ int a[5] = {1, 2, 3, 4, 5}; printf("%p\n", a); printf("%p\n", &a);//吃惊a == &a printf("%p\n", &a + 1);//重点理解,由于&a是一个指针长度为5的数组的指针,故

2016-03-06 22:24:46 460

原创 浅谈C++变量(对象)初始化问题

随着C++的学习,发现C++中初始化问题比较复杂。故在此做一下总结:默认初始化:如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”1、如果是内置类型的变量且未被显示初始化,它的值由位置决定。定义在任何函数体之外的变量被初始化为0.定义在函数体内部的内置类型变量将不被初始化(当然如果是static类型,则执行值初始化,内置类型的静态变量初始化为0);

2016-03-04 20:34:10 3269

原创 线程特定数据TSD及其实现原理

引言:单线程C程序有两类基本数据:局部数据和全局数据。对于多线程C程序,添加了第三类数据:线程特定数据那么为什么要引入线程特定数据呢?试想如果你的一个线程里面嵌套调用了很多函数,而你又想在这些函数之间使用一个公共的变量,如果在单线程C中,我们是不是就要声明一个全局变量了呢?是的。但是我们想使声明的这个全局变量只属于我们当前这个实例线程(同一个void *(*start_routin

2016-03-04 14:44:51 2866

原创 pthread_detach函数

函数原型:int pthread_detach(pthread_t tid);功能:pthread_join()函数的替代函数,可回收创建时detachstate属性设置为PTHREAD_CREATE_JOINABLE的线程的存储空间。该函数不会阻塞父线程。pthread_join()函数用于只是应用程序在线程tid终止时回收其存储空间。如果tid尚未终止,pthread_de

2016-03-04 10:25:19 13328

原创 pthread_join函数

函数原型:int pthread_join(pthread_t tid, void **status);功能:pthread_join()函数会一直阻塞调用线程(当前线程),直到指定的线程tid终止。当pthread_join()返回之后,应用程序可回收与已终止线程关联的任何数据存储空间(另外也可设置线程attr属性,当线程结束时直接回收资源)。如果没有必要等待特定的线程终止之后才进行

2016-03-03 21:13:14 18506

原创 pthread_create函数

函数原型:int pthread_create(pthread_t *tid, const pthread_attr_t *tattr, void*(*start_routine)(void *), void *arg);功能:创建一个新的线程,并将线程加入当前进程头文件:#include pthread非linux系统的默认库,需手动链接-线程库 -lpthread参数:ti

2016-03-02 22:42:40 5075

原创 RMQ问题的4解决方案

问题描述:RMQ(Range Minimum/Maximum Query),顾名思义就是区间最大最小值查询:给定一个数列,求给定区间[a,b]上的最大值或最小值解决方案:1、枚举,遍历数列[a,b]找出最大最小值即可。单次查询时间复杂度o(n)2、线段树,分治思想,单次查询时间复杂度o(logn)const int inf = 0x7fffffff;struct n

2016-02-21 18:08:21 427

转载 java runtime.exec常见问题

Java中Runtime.exec的一些事博客分类: Java基础库 0 预备知识1 不正确的调用exitValue2不正确的调用waitFor3 一种可接受的调用方式4 调用认为是可执行程序的时候容易发生的错误5 window执行的良好示例6 不良好的重定向命令输出7 良好的重定向输出示例8 总结9 问答 0 预备知识R

2016-02-21 12:09:08 11341

原创 Unix Domain Socket– IPC通信机制

什么是Unix Domain Socket基于socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC 更有效率 :不需要经过网络协议栈不需要打包拆包、计算校验和、维护序号和应答等只是将应用层数据从一

2015-12-27 21:41:27 1905

转载 进程间通信(IPC)方式

进程间的通讯(IPC)方式为什么要进行进程间的通讯(IPC (Inter-process communication))数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了

2015-12-27 21:16:07 388

转载 MySQL运行原理与基础架构

1.MySQL基础MySQL是一个开放源代码的关系数据库管理系统。原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用。 2008年MySQL公司被Sun公司收购并发布了首个收购之后的版本MySQL5.1,该版本引入分区、基于行复制以及plugin API。移除了原有的BerkeyDB引擎,同时,Oracle收购InnoDB O

2015-12-23 22:54:41 421

原创 hdu 5534 Partial Tree(完全背包)

题目链接:点击打开链接题意描述:对于n个结点构成的一棵树,每个结点有一个度。现在给出f(x):表示度x代表的值。现在树上所有结点所对应的f(x)之和最大是多少?分析:根据题意有n个节点构成的树,度数之和为2*(n-1),每个节点的度数至少为1,求何如分配可使f(x)之和最大?我们可以先给每个节点分配一个度,于是剩下(n-2)个度可以随意分配,于是问题转换为:有一个背包大小为

2015-12-05 12:16:24 460

转载 访问HTML文件与访问php文件的区别

目前来说,网站页面主要分为静态页面和动态页面,纯静态页面组成的网站现在相对比较少见,大型网站一般使用的是动态网站建站技术,还有一部分网站是静态网页与动态网页共存,本文以Apache服务器、php语言为例,详解动态网站的访问过程,下面直接切入本文主题。(1)用户端访问服务器端的html文件S1:通过本机配置好的DNS域名服务器地址寻找DNS服务器,将网站URL中的Web主机域

2015-11-19 18:18:18 4034

原创 同步通信和异步通信

异步通信:是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单

2015-11-18 22:49:00 499

原创 比特差错、传输差错

比特差错:帧内部比特位出现错误,可以通过帧的FCS(方法:CRC检验)序列保证无比特差错传输差错:帧丢失、帧重复、帧失序在数据链路层使用CRC检验,能够实现无比特差错的传输,但这还不是可靠传输

2015-11-18 21:30:33 6243

转载 ASCII、Unicode、GBK和UTF-8字符编码的区别联系

很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把

2015-11-12 20:37:41 308

转载 Locale(编码问题)

关于locale的设定locale是国际化与本土化过程中的一个非常重要的概念,个人认为,对于中文用户来说,通常会涉及到的国际化或者本土化,大致包含三个方面:看中文,写中文,与window中文系统的兼容和通信。从实际经验上看来,locale的设定与看中文关系不大,但是与写中文,及window分区的挂载方式有很密切的关系。本人认为就像一个纯英文的Windows能够浏览中文,日文或者意大利文网页一样

2015-11-12 20:12:38 3803

转载 HTTP长连接与短连接

1. HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。 2. 如何理解HTTP协议

2015-11-09 12:55:26 341

原创 auto变量在for循环中的生存周期

for(i = 0; i < 4; ++i){ int x;}对于上面代码,x的生存周期是一次循环还是整个循环呢?我们通过打印发现x的地址在每次循环中地址不变,所以x的生存周期是在整个for循环,为了进一步验证,我们使用gdb追踪一下修改代码如下:for(i = 0; i < 4; ++i){ int x =0; x++;

2015-11-08 09:05:51 1023

转载 内存对齐问题

结构体字节对齐      在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。      内存对齐的原因:

2015-11-06 23:40:37 301

原创 浅谈char **p与const char **p赋值问题

前段时间闲来无事就翻看了一下C专家编程,在第一章1.9 阅读ANSI C标准,寻找乐趣和裨益中作者给出了下面代码:foo(const char **p) { }main(int argc, char **argv){ foo(argv);}上面代码在编译时会发出警告:argument is incompatible with prototype(参数与原型不匹配)

2015-11-05 20:17:18 2992

原创 浅谈 二维数组、指针数组、数组指针、二级指针的区别

声明:6行5列二维数组:char ary[6][5];指针数组:char *ary[6];//(char *) ary[5];数组指针:char (*ary)[5];二级指针:char **ary;内存布局:ary[i][j]取下标,上述4中变量在c中的代码一样:*(*(ary + i) + j)但其内部寻址方式是不同的1、二维数组: *(*(ary +

2015-11-02 00:13:39 605

原创 算法分析—渐近符号

我们可以形象的描述如下:Θ符号: 同阶 =O符号:同阶或更高阶  >=Ω符号:同阶或更低阶o符号:更高阶  >w符号:更低阶

2015-11-01 17:24:40 804

原创 排序算法—归并排序

/***************************** *归并排序:时间复杂度O(nlgn) *一种稳定的排序算法 *主要思想:分治 * *下面代码使用的是二路归并排序(内部排序) *那k路归并排序呢?其时间复杂度是多少呢? * ****************************/void Sort(int *ary, int n)//归并排序,数组下标从0开始{

2015-11-01 00:45:58 339

原创 排序算法—插入排序

/******************************** *插入排序:最坏情况下,输入数组逆序,时间复杂度O(n^2) * * 最好情况下,输入数组正序,时间复杂度O(n) * *由于插入排序在输入数组正序的情况下时间复杂度较小因此 *当数组比较小且基本有序的情况下我们可以使用插入排序 *应用:优化排序,可以在快速排序的过程结合插入排序提高效率 * *此外:在内层

2015-10-31 00:00:42 441

原创 hdu3567 Eight II(IDA*+康托展开)

题目链接:点击打开链接题意描述:经典八数码问题,给定起始状态和目标状态,经过d、l、r、u移动,求解如何移动能使起始状态到达目标状态?1、移动的次数尽可能少2、如果移动次数相同,求解移动序列的最小字典序?解题思路:典型的IDA*题目估值函数:从当前状态移动到目标状态所需的最小步数(我们可以通过曼哈顿距离进行估值),用于剪枝迭代:此处我们不再使深度每次加1,而是在搜索

2015-10-28 21:18:18 911

转载 ping 原理与ICMP协议

ping 的原理    ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。    ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据

2015-10-28 16:28:50 1464 1

转载 声明与定义的区别

声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明:extern int bar;extern int g(int, int);double f(int, double); // 对于函数声明,extern关键字是可以省略的。class foo; //

2015-10-27 21:35:12 315

原创 C语言关键字解析

ANSI标准定义的C语言关键字共32个1、数据类型关键字基本数据类型:void char int float double 类型修饰关键字 short long signed unsigned 复杂类型 struct union enum typedef sizeof存储级别关键字:auto static register extern const volatile

2015-10-27 21:26:02 987

转载 寄存器与缓存的区别

这里的缓存是指的CPU的缓存。按与CPU远近来分,离得最近的是寄存器,然后缓存,最后内存。所以,寄存器是最贴近CPU的,而且CPU只与寄存器中进行存取。(寄存的意思是,暂时存放数据,不中每次从内存中取,它就是一个临时放数据的空间,火车站寄存处就是这个意思)而寄存器的数据又来源于内存。于是  CPU寄存器内存   这就是

2015-10-26 15:27:44 3816 1

编译原理习题答案(胡元义)

编译原理教程习题解析胡元义,很不错的复习资料,大家可以入手哈

2015-05-23

acm模板(涵盖大多数)

吉林大学acm模板,里面几乎设计了大部分常用模板,总之很全,很好的资源

2015-05-23

空空如也

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

TA关注的人

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