- 博客(114)
- 资源 (1)
- 收藏
- 关注
转载 malloc和free的实现原理
还是要认真看深入理解计算机系统http://blog.csdn.net/llhyy17/article/details/5375298内存分配是按照堆块实现的,一个堆块是由头部和有效载荷量组成,其中的有效载荷量就是我们申请的堆的大小。头部块包括 块大小和是否可用 这两个部分组成。在内存中这些堆块以链表形势组成malloc函数的实质
2016-12-30 20:42:23
1526
原创 解决bottle的目录树和多文件问题
【问题描述】 如题,网上有各种提这个问题的,但是没有给出一个合理的解决方案,昨晚上做梦想到了一个方法,完美解决了这个问题,在这里Mark一下。 例如有如下代码:@get('/') def server(): return static_fil
2016-12-22 10:26:40
1184
原创 SourceInsight【版本:3.X】中文乱码解决
问题描述 如题。解决方案 将该资源下载下来,将压缩包内容解压到SourceInsight的安装根目录。功能说明 1、增加SI多标签功能。 2、修复SI当光标在中文字符上按CTRL+F时崩溃的问题。 3、utf8编码支持.
2016-12-17 11:49:12
1107
原创 【腾讯RapidJSON】学习笔记
介绍RapidJSON是一个C++的高性能的JSON解析器及生成器,同时支持SAX/DOM风格的API。项目详细介绍 RapidJSON是一个C++的JSON解析器及生成器。它的灵感来自RapidXml RapidJSON小而全。它同时支持SAX和DOM风格的API。SAX解析器只有约500行代码 RapidJSON快。它的性能可与strlen()相比。可支持SSE2/SSE4.1加速 Ra
2016-12-16 17:57:37
1522
原创 基于Libtask进行协程浅析
协程介绍与子例程一样,协程也是一种程序组件。 相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。 协程源自Simula和Modula-2语言,但也有其他语言支持。 协程更适合于用来实现彼此熟悉的程序组件,如合作式多任务,迭代器,无限列表和管道。 –维基百科 下面我们会以Libtask(Go语言的作者之一Russ Cox的作品)作为分析案例来解释协程的原理。协程工作原理要了解协
2016-12-07 22:34:51
2527
原创 和我一起动手写FastCGI之“准备篇”
FastCGI介绍:FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。 FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将C
2016-12-03 23:52:44
692
转载 socket编程的一些高级用法
1.closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE;setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));2. 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历
2016-11-26 23:38:11
882
原创 nginx源码剖析(四) ——两个用来对齐的宏
在nginx中,有很多有意思的宏,今天来说说,nginx用来对齐的两个宏(src/core/ngx_config.h):#define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1))#define ngx_align_ptr(p, a) \
2016-11-04 22:28:40
643
原创 记录最近自己踩的坑
记录一下自己踩的一些坑。 1、解决centos 7.0安装Twisted Python.h:没有那个文件或目录 错误的方法:yum install python-devel。 2、pip的安装:yum install python-pip。 3、Linux下使用vundle配置vim比较好的资源: git clone https://github.c
2016-10-10 20:50:39
849
转载 nginx安全性配置
Nginx是一个轻量级的,高性能的Web服务器以及反向代理和邮箱(IMAP/POP3)代理服务器。它运行在UNIX,GNU/Linux,BSD各种版本,Mac OS X,Solaris和Windows。根据调查统计,6%的网站使用Nginx Web服务器。Nginx是少数能处理C10K问题的服务器之一。跟传统的服务器不同,Nginx不依赖线程来处理请求。相反,它使用了更多的可扩展的事件驱动(异步)
2016-07-02 01:15:28
7524
转载 nginx负载均衡详细配置
ginx的upstream目前支持的5种方式的分配1、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。upstream backserver {server 192.168.0.14;server 192.168.0.15;}2、weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情
2016-07-02 00:54:57
571
原创 从实战角度,对TCP的“三次握手”过程详细分析
之前,一直对TCP的学习处于理论阶段,只是对它进行简单的使用,并没有进行实际详细的观察,总感觉学的太过于表层,下面我就基于WireShark这个工具,对TCP的“三次握手”过程,进行详细的分析。 首先,使用WireShark工具,对CSDN主页(http://blog.csdn.net/)进行分析,得到其IP为101.200.96.31。 接着,打开浏览器,打开网页
2016-06-13 22:37:02
1257
转载 再论Epool
Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络I/O性能的新方法,即epoll 。1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内
2016-06-06 00:48:07
706
转载 关于epoll那些事
在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __
2016-05-29 23:59:13
524
转载 Centos 7 NS 2.35安装
安装NS2是一个艰难的过程:据说每个安装完NS的人都可以写一篇博客,这个过程确实很折腾,可能会遇到各种编译错误,还会缺少各种软件包。感谢我的同学 堆下面两个连接是我在安装过程中对我有用的帖子,希望对你也有用。http://blog.csdn.net/meng714620/article/details/9247641http://www.bubuko.com/infod
2016-05-18 22:24:39
1062
转载 Linux内核态的文件操作
有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主 要有: filp_open() filp_close(), vfs_read() vfs_write(),set_fs(),get_fs()等,这些函数在linux/fs.h和asm/uaccess.h头文件中声明。下面介绍主
2016-05-15 01:19:53
1577
原创 TCP面试题(三)之粘包问题
上次说到了,“粘包问题”产生的根本原因,要是不清楚的可以看看我的这篇文章: TCP面试题(二)之TCP糊涂窗口问题,这次就不再赘述了。“粘包问题”概念 “粘包问题”的概念用一句话说:就是,不同结构的多个包合成了一个大包,从而不知道怎么去把这个大包分割出原来的包。解决方案 具体方案由使用的场景决定,即分为:实时性要求高和实时性要求不高,这两种情况。 一
2016-03-28 23:25:30
2186
原创 TCP面试题(二)之TCP糊涂窗口问题
在说明这个问题之前,我想先说明下大概的脉络: 1、何谓“糊涂窗口”; 2、如何解决。问题描述 那么,我就先说说“糊涂窗口”是怎
2016-03-28 21:24:21
2029
原创 TCP面试题(一)之TCP的三次握手和accept()的顺序
经过腾讯的六次技术面的考验,每次基本必问TCP的一些知识。因此,笔者一直都想总结一下,但由于太忙(懒),一直没有去做,趁这会儿有时间,特在此处总结下,希望对大家有帮助。 众所周知,TCP是面向连接的协议,此处的“连接”,只是抽象的连接,即,服务端和客户端进行指定端口的数据传输,由于TCP协议是对端传送数据的,所以,两端在通讯时,就相当于通过抽象的信道,将两个端口进行连接,从而形成抽象的
2016-03-28 20:33:51
9924
1
转载 TCP三次握手和四次挥手详解
TCP头部: 其中 ACK SYN 序号 这三个部分在以下会用到,它们的介绍也在下面。暂时需要的信息有:ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接
2016-02-20 18:01:55
1718
转载 nginx源码分析—内存池结构ngx_pool_t及内存管理
Content0. 序1. 内存池结构1.1 ngx_pool_t结构1.2 其他相关结构1.3 ngx_pool_t的逻辑结构2. 内存池操作2.1 创建内存池2.2 销毁内存池2.3 重置内存池2.4 分配内存2.4.1 ngx_palloc()函数分析2.4.2 ngx_palloc_block(
2016-02-13 02:48:40
507
转载 select、poll和epoll的异同【整理】
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用
2016-02-13 02:44:16
539
转载 nginx架构分析
nginx(发音"engine x")是俄罗斯软件工程师Igor Sysoev开发的免费开源web服务器软件。nginx于2004年发布,聚焦于高性能,高并发和低内存消耗问题。并且具有多种web服务器功能特性:负载均衡,缓存,访问控制,带宽控制,以及高效整合各种应用的能力,这些特性使nginx很适合于现代网站架构。目前,nginx已经是互联网上第二流行的开源web服务器软件。1
2016-02-13 02:37:57
4716
4
转载 exit()那些事
注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS);可读性比较好一点。作为系统调用而言,_exit和exit是一对孪生兄弟,它们究竟相似到什么程度,我们可以从Linux的源码中找到答案:#def
2016-02-13 02:27:15
576
原创 nginx源码剖析(二) —— ngx_list_t分析
前言 nginx_list_t是nginx的一个链表容器,频繁的在nginx的源码中使用,例如,HTTP的头部就是使用ngx_list_t这个数据结构来存储的。所以,今天我们一起来聊聊这个比较重要的数据结构。(这里使用的源码为nginx比较新的一个版本,nginx-1.6.2版本。)正文1、nginx_list_t数据结构的描述://链表节点结构typedef str
2015-12-08 19:44:18
693
原创 redis的简介和配置
序言 最近使用了有幸申请到阿里云服务器(拜谢),那么,不多玩玩这个云端服务器,感觉实在是太对不起自己了。那么,今天咱们继续聊聊关于一个键值对数据库redis。正文1、redis的简介(摘抄自百度词条) redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链
2015-12-05 22:09:44
512
原创 nginx源码剖析(三) —— ngx_queue_t分析
前言由于之前一直使用的是nginx的1.6.2的版本,所以就以它作为研究对象进行分析,源码没有注释,这里我使用我之前加过注释的文件进行分析。这两个文件是在nginx-1.6.2/src/core的ngx_queue.h和ngx_queue.c文件。正文它的源码是通过带控制信息的双端链表实现的,以及它的具体操作是通过一些宏函数实现的。接下来我们一点点分析它的ngx_queue
2015-12-05 12:26:23
674
原创 nginx源码剖析(一)
之前,聊了聊nginx简单的安装和一些简单的配置,之前已经安装了ctags,接下来再愉快地聊聊关于nginx源码的部分。这篇博客就先聊聊关于nginx的一些基本文件和文件夹,以及它们分别代表的那些含义。进入源码解压包,输入ls -F命令,就会出现一下的东东。 auto/ 包含执行configure进行编译配置时调用的检测代码
2015-12-04 20:23:11
591
原创 阅读源码利器—ctags的安装和配置
这两天刚好有机会申请到15天的阿里云服务器(拜谢),使用的centos7.0版本的镜像,这个版本是redhat的推出一个免费版的系统。所以,之后关于这个的文章,也归类在“redhat那些事”的分类里,特此声明一下。关于ctags的介绍,这里就不在赘述了,下面直接说说它的安装和配置以及快捷键的简单使用。1、链接阿里云服务器。 ssh root@101.200.140.71
2015-12-04 18:54:33
1488
原创 nginx配置反向代理
之前说了,nginx配置与安装,https服务的配置。接下来再聊聊nginx反向代理的配置。为了方便起见这里,我们的负载均衡服务器集群假设为两个节点。
2015-12-04 16:31:29
921
原创 nginx配置https服务
之前说了如何配置安装nginx,下面说一下给redhat6.5的nginx配置https服务,这里采用对称加密算法。1、通过ssh连接服务器:ssh root@192.168.3.2232、使用cd命令切换到/etc/pki/tls/certs3、使用如下命令生成密钥文件make nginx.pem4、则会进入如下界面:umask 77 ; \ PEM1=`/bin/
2015-11-29 21:59:44
1085
原创 nginx的安装及配置
下面讲讲nginx在redhat6.5下的配置使用nginx-1.6.2源码包安装(该资源我已上传);1.使用如下命令登陆虚拟机: ssh root@192.168.3.223由于我之前的博客已经讲过网络配置以及yum源的配置,所以这里就直接使用了。2.使用如下命令解压源码包:tar -xvf nginx-1.6.2.tar.gz 3.使用cd命令切换到nginx-1.6.2;4.
2015-11-28 23:39:21
727
原创 虚拟机redhat6.5的yum源配置
下面说说虚拟机redhat6.5 yum源的配置:1.切换到root用户;2.使用cd命令切换到目录/etc/yum.repos.d;3.使用rm命令删除该目录下的所有文件;4.使用vim命令编辑自己的.repo文件;例如,起名为rhel-source.repo5.在该文件下加入如下内容:[rhel-source]name=rhel-sourcebaseurl=
2015-11-28 22:45:01
1099
原创 redhat 的网络配置
下面说说redhat7.0作为真机,虚拟机为redhat6.5,通过桥接器来实现的网络配置。注意:以下的IP,文件名均由自己和要配置的机器以及网络环境决定。1.首先在network setting里面添加一个桥接器br0;2.切换到/etc/sysconfig/network-scripts下;3.编辑对应的ifcfg-br0文件;4.写入如下数据:DEVICE="
2015-11-28 22:28:04
558
原创 判断链表是否相交
如题,代码如下:#include #include #define Yes 1#define No 0//链表类型typedef struct list_t{ int data; struct list_t *next;}list_t;list_t *create_list(int n);void print_list (list_t *head);
2015-11-25 20:11:21
619
原创 逆秩链表
如题,代码如下:#include #include //链表类型typedef struct list_t{ int data; struct list_t *next;}list_t;list_t *create_list (int n);void print_list (list_t *head);list_t *reverse_list(list_t *he
2015-11-25 19:48:19
536
原创 递归创建并输出链表
如题,代码如下:#include #include //链表类型typedef struct list_t{ int data; struct list_t *next;}list_t;list_t *create_list (int n);void print_list (list_t *head);void re_print_list(list_t
2015-11-25 19:24:16
980
原创 不用加减乘除实现加法
整理下之前写过的一下东西,如题,不用加减乘除实现加法,代码如下:#include int add(int a, int b);int main(int argc, char** argv) { int a = 0; int b = 0; scanf("%d%d", &a, &b); printf("result is: %d", add(a, b)); return
2015-11-24 19:56:57
548
原创 实现C++string的赋值函数
之前一直敲C语言,对C++有点疏忽了,前两天看到《剑指offer》一道关于这个问题解法的面试题,于是动手敲了一下,却发现自己给的解法只是初级解法。总结原因,还是自己没有充分利用C++的特性,只是站在C语言的角度在写C++程序。首先,分析一下这个问题要求: 1.实现对象赋值(深拷贝); 2.传入对象应该是const的,防止对象的值被修改;
2015-11-23 18:30:26
4207
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅