自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

鱼思故渊的专栏

不积跬步,无以至千里;不积小流,无以成江海

  • 博客(52)
  • 资源 (3)
  • 收藏
  • 关注

转载 TCP的那些事儿(下篇)

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

2014-09-29 10:35:15 1108

转载 TCP的那些事儿(上篇)

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

2014-09-29 10:34:18 1054

转载 TCP网络关闭状态变换时序图

TCP共有11个网路状态,其中涉及到关闭的状态有5个。在我们编写网络相关程序的时候,这5个状态经常出现。因为这5个状态相互关联,相互纠缠,而且状态变化触发都是由应用触发,但是又涉及操作系统和网络,所以正确的理解TCP 在关闭时网络状态变化情况,为我们诊断网络中各种问题,快速定位故障有着非常重要的作用和意义。下是是根据W.Richard Stevens的《TCP/IP详解》一书的TCP状态转

2014-09-29 10:32:36 3111

原创 使用C++实现一个LRU cache

什么是LRU CacheLRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。什么是Cache?狭义的Cache指的是位于CPU和主存间的快速RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。广义上的Cache指的是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache

2014-09-28 12:04:38 4967

转载 一致性HASH算法

一致性hash算法(consistenthashing)张亮consistent hashing算法早在1997年就在论文Consistenthashing and random trees中被提出,目前在cache系统中应用越来越广泛;1基本场景比如你有N个cache服务器(后面简称cache),那么如何将一个对象object映射到N个cache上呢,你很可能会采用类似下面的通用

2014-09-24 16:44:42 791

原创 linux 内存地址空间管理 mm_struct

Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起。(所依据的代码是2.6.32.60)无论是内核线程还是用户进程,对于内核来说,无非都是task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process descriptor),因为它记录了这个进程所有的context。其中有一个被称为'内存描述符‘(memory de

2014-09-24 11:14:59 2456 1

转载 程序(进程)内存分布解析

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

2014-09-23 15:05:23 1265

转载 linux内存使用方法详细介绍

我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。这里要提到一个很重要的

2014-09-23 11:50:09 907

原创 brk()和sbrk()函数的使用

根据上一篇文章继续解释brk和sbrk的定义  在man手册中定义了这两个函数: 1 #include 2 int brk(void *addr);3 void *sbrk(intptr_t increment);   手册上说brk和sbrk会改变program break的位置,program break被定义为程序data segment的结束位置。感

2014-09-23 11:49:08 8373

原创 brk()和sbrk()使用方法解析

brk() , sbrk() 的声明如下:[cpp] view plaincopy#include   int brk(void *addr);  void *sbrk(intptr_t increment);  首先说明一点 sbrk()是函数库调用,brk()是系统调用这两个函数都用来改变 "program break" (程序间断点)的位置,这个位置可

2014-09-23 11:47:45 2091

原创 进程分配内存的两种方式--brk() 和mmap()(不设计共享内存)

如何查看进程发生缺页中断的次数?         用ps -o majflt,minflt -C program命令查看。          majflt代表major fault,中文名叫大错误,minflt代表minor fault,中文名叫小错误。          这两个数值表示一个进程自启动以来所发生的缺页中断的次数。发成缺页中断后,执行了那些操作?

2014-09-23 11:31:56 14640 14

原创 几个系统调用分析 glibc中的malloc调用和共享内存原理

本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/write,mmap,readv/writev,sendfile,fsync/fdatasync/msync,shmget,malloc。       本文先简单介绍应用程序对内存的使用以及I/O系统对

2014-09-23 11:25:19 2245

转载 C++虚函数需要注意的几个地方

一、通过父类型的指针访问子类自己的虚函数我们知道,子类没有重载父类的虚函数是一件毫无意义的事情。因为多态也是要基于函数重载的。虽然在上面的图中我们可以看到Base1的虚表中有Derive的虚函数,但我们根本不可能使用下面的语句来调用子类的自有虚函数:Base1 *b1 = new Derive();b1->g1(); //编译出错任何妄图使用父类指针想调用子类中的未覆盖父类的成

2014-09-22 20:05:34 909

原创 从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的

问题:从一列数中筛除尽可能少的数使得从左往右看,这些数是从小到大再从大到小的(网易)。解法:这是双端 LIS 问题,用 DP 的思想可解,目标规划函数 max{ b[i] + c[i] }, 其中 b[i] 为从左到右, 0 ~ i 个数之间满足递增的数字个数; c[i] 为从右到左, n-1 ~ i 个数之间满足递增的数字个数。最后结果为 n - max + 1。其中 DP 的时候,可以

2014-09-22 16:19:38 1557

原创 两种基本的数据结构

栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进行的。  队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针。元素总是从队头出,从队尾入。采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用。  关于栈和队列的基本操作如下图所示:采用数组简单实现一下栈

2014-09-21 22:45:23 1701

原创 多进程和线程的区别 线程继承的部分

1、首先要明确进程和线程的含义: 进程(Process)是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。与程序相比,程序只是一组指令的有序集合,它本身没有任何运行的含义,只是一个静态实体。进程是程序在某个数据集上的执行,是一个动态实体。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消,反映了一个程序在一定的数据

2014-09-20 15:35:18 2842

原创 linux系统调用fork()总结(二)

一,进程复制(或产生)     使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。子进程与父进程的区别在于:1、父进程设置的锁,子进程不继承(因为如果是排它锁,被继承的话,矛盾了)2、各自的进程ID和父进程ID不同3、子进程的未决

2014-09-20 15:22:11 5764

原创 linux中fork()系统调用总结

由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回给父进程的理由是:因为一个进程的子进程可以多于一个,没有一个函数使一个进程可以获得其所有子进程的进程id。对子进程来说,之所以fork返回0给它,是因为它随时可以调用getpid()来获取自己的pid;

2014-09-20 15:11:07 2036

原创 linux内核CFS进程调度策略

一、概述首先简单介绍一下基本的设计思路,CFS思路很简单,就是根据各个进程的权重分配运行时间(权重怎么来的后面再说)。进程的运行时间计算公式为:分配给进程的运行时间 = 调度周期 * 进程权重 / 所有进程权重之和   (公式1)调度周期很好理解,就是将所有处于TASK_RUNNING态进程都调度一遍的时间,差不多相当于O(1)调度算法中运行队列和过期队列切换一次的时间

2014-09-19 22:32:38 5402 1

转载 linux内核CFS进程调度策略分析(二)

cfs调度器在2.6.23内核中被引入,起初的实现是多么的天真与纯朴,设计出来一个fair_key来代表队列的虚拟时钟,不管怎样总是实现了一个cfs的版本,到了2.6.25以后,cfs变得简单起来,没有了队列虚拟时钟的结构体,其概念直接融入了红黑树中的最左下角的调度实体的vruntime字段,其实就是让每个调度实体(没有组调度的情形下就是进程,以后就说进程了)的vruntime互相追赶,然后在某个

2014-09-19 22:25:20 1596

转载 linux内核进程调度CFS 完全公平调度算法分析(一)

cfs调度器的运行时间是0(logN),而以前的调度器的运行时间是O(1),这是不是就是说cfs的效率比O(1)的更差呢?并不是那样,我们知道cfs调度器下的运行队列是基于红黑树组织的,找出下一个进程就是截下左下角的节点,固定时间完成,所谓的O(logN)指的是插入时间,可是红黑树的统计性能是不错的,没有多大概率真的用得了那么多时间,因为红节点和黑节点的特殊排列方式既保证了树的一定程度的平衡,又不

2014-09-19 22:21:22 1766

原创 linux物理内存和虚拟内存的理解

第一层理解1.         每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构2.       一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间,哪些数据在哪里,都由进程控制表中的task_struct记录,task_struct中记录中一条链表,记录中内存空间的分配情况,哪些地址有数据,哪些地址无数据

2014-09-19 10:59:18 1541

转载 程序内存分布分析

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

2014-09-19 10:57:54 662

原创 TCP/IP详解--TCP/IP中三次握手 四次握手状态分析

TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急

2014-09-18 19:40:42 1291

原创 TCP/IP详解--TCP/IP连接各个状态转换分析

一、Linux服务器上11种网络连接状态:      图:TCP的状态机通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接

2014-09-18 17:15:25 3666

转载 QQ通信原理

QQ通信原理我研究的是QQ2007beta4版本的通信原理,相信之后的版本暂时也不会有改动。。先来看看QQ上线会向这11个服务器发送UDP数据包,选择回复速度最快的一个作为连接服务器。        这6个服务器名字均以SZ开头,域后缀是tencent.com,域名与IP对应为        sz   sz2   :   61.144.238.145   61.144.

2014-09-18 16:44:00 2453

原创 TCP/IP详解--UDP数据报中的IP分片

1、UDP首部2、UDP分片在第二章,讲链路层是,提到过以太网,刨除数据帧帧头,最多传输的长度为1500,也就是说,如果一个ip数据报,长度大于1500,则需要分片。分片方法:在ip头中3位标志,13位片偏移,这俩东西就是用来分片的。3位标志中:一个更多的片标识,除了最后一个分片,其它分片都要有这个标识,还有一个不分片标识,如果置上,则即便I

2014-09-18 16:04:41 15126 2

原创 TLB和cache的关系

一)TLB1)TLB的概述TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存.TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据.2)tlb的原理当cpu对数据进行读请求时,CPU根据虚拟地址(前20位)到TLB中查找.TLB中保存着虚拟地址(前20位)和页框号的对映关系,如果匹配到虚拟地址就可以

2014-09-18 15:32:32 7111

原创 硬链接和软链接(符号连接)的区别

linux系统下提供ln指令来进行文件链接。文件链接主要分为硬链接和软链接。   硬链接:由于linux下的文件是通过索引节点(Inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配inode。每添加一个一个硬链接,文件的链接数就加1。    可以用:ln命令来建立硬链接。语法:   [php] view plaincopy

2014-09-18 11:54:45 1302

原创 bitset的使用方法

bitset用法有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:#includeusingstd::bitset;bi

2014-09-18 08:26:43 2569

原创 两种求集合所有子集的方法

假设我们有一个求集合的全部子集(包含集合自身)的需求,即有一个集合s,包含两个元素 ,则其全部的子集为.不难求得,子集个数sn与原集合元素个数n之间的关系为:sn=2^n-1。 本文分别讲述两种实现方法: 一:位图法:1)构造一个和集合一样大小的数组A,分别与集合中的某个元素对应,数组A中的元素只有两种状态:“1”和“0”,分别代表每次子集输出中集合中对应元素是否要输出,这

2014-09-18 08:12:18 5179 2

原创 最长单调递减子序列

问题描述:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。思路:这是一个标准的动态规划的问题,在不理解算法的时候,最感觉可以使用递归的思想,其实也是正确的,在最后给出一个递归的方法,在知道是动态规划问题以后,就需要进行分析,我们需要一个辅助数组记录信息,假如源数组为src,辅助数组为table,table[i]数组中记录着到src

2014-09-17 09:25:27 2642 3

原创 设计模式--singleton模式

使用单件模式的意图是保证一个类只有一个实例,并提供一个访问它的全局访问点。将单件定义为全局或静态对象,然后依赖于自动的初始化,并不能完全实现上述意图。虽然可以提供全局访问点,但这是不够的。原因如下:1)我们不能保证静态对象只有一个实例会被声明。2)我们可能没有足够信息在静态初始化时实例化每个单件,单件可能需要在程序运行中稍后被计算出来的值。3)c++没有定义转换单元上全局对象的构造

2014-09-16 22:26:09 1047

原创 链表相关面试题目 反转 合并

链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在面试中占据着很重要的地位。本文对链表相关的面试题做了较为全面的整理,希望能对找工作的同学有所帮助。链表结点声明如下:struct ListNode{    int m_nKey; 

2014-09-16 22:24:59 1052

原创 字典树的简单实现

Trie树,又称为字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树数据结构。用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本性质:1、根节点不包含字符,除根节点外每一个节点都只包含一个字符。2、从根节点到某一节点,路径上经过的

2014-09-16 22:22:44 1117

原创 linux启动过程

按下电源按钮的直到欢迎页出来之后,linux总共做的事可以分为五步来完成。linux启动过程可以分为以下几个阶段:POST加电自检-->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader)-->主引导设置加载其BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab,1、  BIO

2014-09-15 21:15:53 1278

原创 二叉树的构造

树是一种非线性的数据结构,树有根节点,子树等概念。二叉树(Binary Tree):每个节点最多有两颗子树,并且子树有左右之分。概念:树的深度,满二叉树,完全二叉树,树的节点树二叉树包括顺序存储和链式存储,这里只说链式存储。二叉树的每个节点和双链表有些类似,但是树的结构要比双链表复杂,在构造树的过程中涉及到递归调用的问题,递归的问题往往是很复杂的问题,因此,这里单独说二叉树的构建。

2014-09-15 17:45:36 3794

转载 python manag.py syncdb不能成功创建表 Run 'manage.py makemigrations' to make new migrations,

python环境C:\Python27\Lib\site-packages>python --versionPython 2.7.5安装setuptools下载脚本:https://bootstrap.pypa.io/ez_setup.pypython ez_setup.pydjango环境下载:https://www.djangoproject.com/downloa

2014-09-13 11:08:14 8090

原创 nginx做反向代理处理http请求的过程

我用nginx作反向代理,代理到百度(www.baidu.com),测试时在本地修改了host文件。把www.baidu.com解析到nginx代理服务器(74.91.23.207)上# vim /etc/hosts下面看一下nginx的配置文件段  (其中:server 115.239.210.27 是百度的服务器地址)接下来,在浏览器中输入   www.baidu.

2014-09-13 09:58:17 8203 1

原创 反向代理的概念nginx方向代理和负载均衡的方法

1.什么是正向代理和正向代理服务器?正向代理就是通常所说的代理,是某台电脑通过一台服务器来上Internet网的这种方式,其中这台电脑就叫客户机,这台服务器就叫正向代理服务器也就是通常所说的代理服务器。在这种方式中,你是主动的,网站是被动的,网站那里不能得到你的真实ip地址。正向代理服务器。它只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器(一般在IE-Internet

2014-09-13 09:57:27 2591

nginx源码分析--带注释

nginx源码分析,分析过程中将重要的部分进行了注释,以便理解

2014-11-26

libevent-1.4.12-stable-注释版

注释了libevent中很关键的部分,很重要的接口函数。

2014-03-07

空空如也

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

TA关注的人

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