自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (6)
  • 收藏
  • 关注

原创 详谈智能指针

一、什么是智能指针 在讲智能指针之前我们必须先知道什么是智能指针,智能指针是一个类,是对普通指针的一个封装使得智能指针对象具有普通指针类型一样的操作。 智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄漏。它的具体通用的技术就是实现引用计数。(这个下面会讲) 智能指针是将一个计数器与类指向的对象相关连,引用计数就是跟踪该类有多少个

2017-06-29 15:29:00 1479

原创 STL中vector的实现及面试问题

一、前言: 在学习c++的时候我们会接触两个库,一个是boost库另外一个就是STL库。关于STL库候捷先生的《STL源码剖析》中已经写的很详细了,今天我就关于STL中的vector实现及面试中的一些与之相关的问题做一个讲解。 在面试C++的时候关于vector是作为基础知识经常被问到的,如果面试官问你vector的实现原理,你会怎么回答呢? 二、vector的实现原理及实现机制 关于v

2017-06-28 11:38:34 5098 1

原创 TCP协议中的三次握手与四次挥手

前言: TCP的连接与释放过程: 首先就是客户端主动发起连接、发送请求,然后服务器端响应请求,最后客户端主动关闭连接。两条竖线表示的是通讯的两端(client与server),从上到下表示的是时间的先后顺序,因为数据从一端到另外一端是需要时间的,所以是斜线。下面便分别介绍链接的建立与连接的释放。 什么是三次握手? 我们先来看三次握手建立连接的图: 第一次握手: 客户端先发送一个S

2017-06-27 11:00:56 2282

原创 URG与PSH的区别

我们先看一张图是TCP的段格式: 我们看到有6位标志位,其中今天主要来看的就是URG与PSH。 URG标志位: URG(紧急位)是表示紧急指针是否有效,当URG为1的时候就表示紧急指针是有效的。紧急指针通常情况下是无效的,当设置为有效的时候就表示数据要优先处理。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP的紧急方式是发送端向另一端发送紧急数据的一

2017-06-26 09:52:26 3431

原创 路由表生成算法

路由: 数据包从源地址到目的地址所经过的路径由一系列的节点组成。 路由节点: 一个具有路由能⼒力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接⼜口发送数据包。 路由表: 由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接收和发送,其中最后一个是缺省路由条目。 路由条目: 路由表中的每一行,每个条目主要由网络地址、子网掩码、下一跳地址、发送接收四部分

2017-06-25 15:27:12 1577

转载 Internet路由之路由表查找算法概述

说明:本文没有源码分析的内容,然而我认为能理解本质比能看懂源码更有用,因为理解了本质之后,你也许就不用再看源码了,你甚至都可以写源码了。这就是Linux内核和Cisco的网站中包含大量文档的原因。引:路由是互联网的一个核心概念,广义的讲,它使分组交换网的每个节点彼此独立,通过路由耦合在一起,甚至在电路交换网中,虚电路的建立也依赖路由,路由就是网络中数据通路的指向标。狭义的讲,路由专指IP路由,它支撑

2017-06-25 10:09:49 3462

原创 NAT与代理服务器

什么是NAT? NAT(Network Address Translation,网络地址转换):我们的主机的ip地址是运营商给我们分的ip,也就是在专用网内使用的专用地址,当我们要和因特网上的主机通信的时候路由器会把我们的ip地址改为路由ip。路由ip是全球有效的ip,当拿到我们需要的数据之后路由器再把数据交给我们,也就是说我们要访问外部网络是路由器帮我们拿数据的过程。 NAT网路地址转换是属于

2017-06-25 09:31:18 2344

原创 ARP协议以及获取当前局域下主机MAC地址

一、什么是ARP协议、 ARP被称为地址解析协议,在局域网内通过IP地址查找目标主机的MAC地址。ARP协议是实现IP地址到MAC地址的转化。 二、ARP协议的工作原理 为什么使用ARP协议? 在进行网络通讯的时候源主机知道目标主机的IP地址和端口号,却不知道目标主机的硬件地址。而我们发送的数据包是先被网卡接收然后才处理上层协议,如果接收的数据包的硬件地址与自己的硬件地址不相符合,那么就会被

2017-06-24 11:14:23 7158 2

原创 互斥锁与自旋锁

我们知道线程同步是并行编程中非常重要的手段,其中最典型的就是用pthreads提供的锁机制(lock)来对多个线程之间共享的临界区进行保护。我们知道pthreads也提供了多种锁的机制如:互斥锁、自旋锁、条件变量、读写锁。今天就先来讲讲自旋锁与互斥锁。 一、互斥锁 互斥锁也叫互斥量是我们实现同步的重要的工具,在线程访问共享资源之前对互斥量进行加锁,在线程访问共享资源后对互斥量进行解锁,通过加锁与

2017-06-22 10:43:28 1915

原创 CRC校验算法

一、什么是CRC校验算法 最近在学网络时在以太网的数据帧的末尾有一个叫CRC校验码的东西,遂不解。于是便一起学习一下,什么是CRC校验码。 CRC就是循环冗余校验码(Cyclic Redundancy Check),是数据通信领域常见的差错校验码,特征是信息字段和校验字段的长度可以任意的选定。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,

2017-06-19 13:18:44 9122

原创 端口号的分类

端口 在网络上端口有两种概念,一种是物理意义上的端口,还有一种就是逻辑意义上的端口。 物理端口: 物理端口指的是物理存在的端口,如ASDL,Modem,集线器,交换机、路由器用于连接其他设备的端口,如:RJ-45端口、sc端口等等。 逻辑端口: 逻辑端口指的是逻辑意义上用于区分服务的端口,通过不同的逻辑端口来区分不同的服务。eg:用于TCP/IP协议中的服务端口,用于浏览网页服务的80端口

2017-06-18 21:44:57 1710

原创 守护进程

一、什么是守护进程 守护进程: 守护进程也称精灵进程,是运行在后台的一种特殊进程。守护进程独立于控制终端并且周期性的执行某种任务或者等待处理某些打算的事件。生存周期长,常常在系统引导装入的时候启动,仅仅在系统关闭的时候才终止,可认为守护进程目的就是防止终端产生的一些信号让进程退出。因为它们没有控制终端,所以说它们是在后台运行的,很多服务器的应用和守护进程都有关。 二、守护进程的特征 1、独立

2017-06-16 13:34:06 1905

原创 linux下的动态库与静态库

今天就来谈一下linux中比较重要的一个知识点–静态库和动态库。说到静态库和动态库啊,不得不提的就是程序编译链接的过程,现在有很多的IDE我们很少去关注程序编译链接的本质,但是其背后的运行机制却是必须要我我们熟悉的,我之前写过一片就是C、C++程序的编译链接过程的博客,详情见下: http://blog.csdn.net/payshent/article/details/72314685 库:

2017-06-15 12:09:04 1426

原创 linux下的内核态与用户态

linux的内核是一个有机的整体。每一个用户进程运行时都好像有一份内核的拷贝,每当用户进程使用系统调用时,都自动地将运行模式从用户级转为内核级,此时进程在内核的地址空间中运行。 linux中的某些指令是非常危险的所以将linux中的指令分为特群级,和非特权级。 1、特权级 Intel x86架构的cpu一共有0~4四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的

2017-06-13 11:24:33 1168

原创 进程间关系与终端登录

一、进程组 进程组: 每个进程除了有一个进程id之外,还属于一个进程组。进程组是一个或多个进程的集合,同一个进程组的进程的组ID相同,每一个进程组都有一个唯一的组ID。 每个进程组都有一个组长,组长的pid与gid相同。组长可以创建一个进程组,创建该组中的进程,然后终止。只要进程组内任意一个进程存在,那么这个进程组就存在,与组长进程是否终止无关。 二、作业 作业: shell分前后台来控

2017-06-13 09:54:55 1201

原创 SIGCHLD--子进程的异步等待

在以前我们讲僵尸进程的时候说到,父进程fork出一个子进程,在子进程退出的时候父进程没有调用wait或者waitpid来获取子进程的状态信息,那么子进程的进程描述符还会保存在系统中,那么就会产生僵尸进程。 可参考本人博客:僵尸进程和孤儿进程 http://blog.csdn.net/payshent/article/details/70494825 我们在处理wait和waitpid的时候有两

2017-06-11 11:22:02 1015

转载 注解--linux运维工程师

一、什么是大型网站运维? 首先明确一下,全文所讲的”运维“是指:大型网站运维,与其它运维的区别还是蛮大的;然后我们再对大型网站与小型网站进行范围定义,此定义主要从运维复杂性角度考虑,如网站规范、知名度、服务器量级、pv量等考虑,其它因素不是重点;因此,我们先定义服务器规模大于1000台,pv每天至少上亿(至少国内排名前10),如sina、baidu、 QQ,51.com等等;其它小型网站可能没

2017-06-10 11:20:28 1277

原创 linux下的系统调用和库函数调用

一、linux的结构 在系统调用之前我我们先来了解一下linux系统的结构图: linux的结构如图: 操作系统在内核的基础上进行延伸,提供了一些基础服务的组件。操作系统是通过驱动程序来管理硬件的,对上就暴露出一些接口,供上层来进行调用,这些接口就被称为系统调用。 shell是被包裹在linux内核的外层,通过一些命令来对操作系统发出指令的人机交互界面。而库函数就是在系统调用的基础上

2017-06-10 11:08:33 2619 1

原创 模拟实现sleep函数

一、普通版本下的sleep函数 前面我们学习了pause函数,知道了pause函数的功能是为了挂起当前的进程,直到有信号递达。有问题的可以参见我的上一篇博客:这篇博客将信号讲的很清楚,其中对于pause函数也做了相应的说明。 linux下的信号 今天我就是用这个pause函数来实现一个自己的sleep函数。 具体实现原理如图所示: 实现过程如下: 1、main函数调用了my_slee

2017-06-09 20:50:55 1417

原创 线程安全与可重入

一、什么是线程安全 说到线程安全许多初学者可能会感觉很高大上(说的就是我自己),但是当你试着去搞懂它的时候就不会这么感觉了,其实我们早就接触到了线程安全的问题,只不过自己不知道而已。那么到底什么才是线程安全呢? 线程安全: 代码所在的进程有多个线程在同时运行,这些线程可能在同时运行这些代码,如果多线程下运行的结果和单线程运行的结果是一样的,那么线程就是安全的。反之,线程就是不安全的。 一

2017-06-09 10:44:44 1852

原创 linux下的信号

一、信号的概念 说道信号大多数人可能会想到在公路上的红绿灯,在我们linux也有着信号的概念。那么linux下的信号到底是怎么回事呢?我们还是今天就看看linux下的信号。 信号其实是一种软件中断,它为程序提供了处理异步事件的方法。异步事件就是事件可能会在任何时间内发生,很多重要的而程序都有对信号的处理,在linux下我们是通过命令 kill -l来查看系统中所有的信号列表和它们的信号编号。

2017-06-08 13:41:36 1247

原创 进程间通信--IPC之共享内存

一、共享内存 共享内存可以提供给服务器进程和客户进程之间进行通信,不需要进行数据的复制,所以速度是最快的,只需要让两个进程通过页表映射到同一块物理内存上面即可,这块物理内存是两个进程都可以访问到的,所以信息传递的效率是非常高的。在通常情况下,我们要确保的是一个进程在进行读的时候,另一个进程不能去执行写操作,这是同过信号量来实现的。共享内存是最快的一种IPC。 下面我们来看一下,共享内存实现的原理

2017-06-07 21:41:57 1123

原创 进程间通信--IPC信号量

一、什么是信号量 信号量: 信号量的本质是一种数据操作锁,它本身不具有数据数据交换的功能,而是通过控制其他的通信资源(文件、外部设备)来实现进程间通信,它本身只是一种外部资源的标识。信号量在此过程中负责数据操作的互斥、同步功能。 信号量就相当于是一个计数器,当有进程对它所管理的资源进行请求时,进程先要读取信号量的值,大于0资源可以请求,等于0,资源不可以用,这时进程会进入睡眠状态直至资源可用。

2017-06-07 16:51:51 1236

原创 linux下的线程

一、linux下的进程与线程 进程: 进程是指在系统中能够独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成,并且每一个进程都有一个进程控制块PCB,在Linux下被称为task_struct。另外每个进程还有一个独立的地址,它和物理内存通过页表联系在一起。 线程: 线程是进程的一个部分,它在进程的地址空间上运行,和主线程一起共享虚拟地址空间的资源,一个没有线程的进程可以

2017-06-07 10:45:13 961

原创 linux下gdb调试多线程

一、多线程的调试命令 1、info threads: 这条命令显示的是当前可调试的所有线程,GDB会给每一个线程都分配一个ID。前面有*的线程是当前正在调试的线程。 2、thread ID: 切换到当前调试的线程为指定为ID的线程。 3、thread apply all command: 让所有被调试的线程都执行command命令 4、thread apply ID1 ID2 … co

2017-06-06 21:19:39 1377

原创 linux下用gdb调试多进程

今天来学习一下linux下gdb如何调试多进程,在学习之前我我们能先看一张表: 这张表是gdb调试的命令表,这对那些对gdb不熟的同学来说是非常有必要的。 一、多进程调试的命令 1、set follow-fork-mode parent|child 因为gdb在一般情况下,只会调试主进程。这条命令就可以使gdb来实现多进程的调试,进入gdb后默认调试的是parent,要想调试child的

2017-06-06 20:52:51 1145

原创 进程间通信--管道(pipe)

进程间的通信就是两个进程之间进行数据交换,在Linux中有好几种可以进行进程通信的方式,在这篇文章中我们主要介绍最基本的进程通信方式——pipe管道。 管道: 管道是一种最古老也是最基本的系统IPC形式,所有的Linux系统都提供此种通信机制。但是管道有以下两个局限性: 1、它是半双工的,即数据一个管道上的数据只能在一个方向上流动,如果要实现双向通信,就必须在两个进程之间建立两个管道。 2、

2017-06-06 09:38:56 1344

原创 线程死锁及其解决

一、什么是死锁 死锁:(摘自百度百科) 两个或两个以上的进程在执行过程中,因争夺共享资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。 二、死锁的原因及形成

2017-06-03 11:05:01 2655

原创 IPC之消息队列

一、什么是消息队列 消息队列: 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值,我们可以通过发送消息来避免命名管道的同步和阻塞问题,所以消息队列是基于消息的,管道是基于字节流的。 消息队列和命名管道有一样的不足就是:每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数是有上限的(MSGMN

2017-06-02 22:29:35 1200

原创 生产者与消费者模型

一、什么是生产者与消费者模型 在实际的生活中我们可能会遇到下面这种情形,一个模块负责产生数据,另一个模块负责处理数据。用来产生数据的模块成为生产者,用来处理数据的模块被成为消费者。只有生产者和消费者还不够,这个模型还必须要有一个缓冲区处于生产者和消费者之间,作为中介。生产者把数据放入缓冲区,而消费者从缓冲区中取出数据。 二、生产者与消费者模型的条件和用途 用一句话来说明生产者和消费者之间

2017-06-02 20:27:46 1199

源码 STL1.0库

STL是C++里面的源码库,通过剖析STL源码可以使你加深STL容器的实现

2017-12-31

thinyhttpd源码

thinyhttpd是一款轻量级的http源码,通过剖析thinyhttpd源码

2017-12-31

webbench源码

webbench是一款轻量级的性能压测工具,通过剖析源码可以使你更能对其有更深 的理解

2017-12-31

libevent源码

libevent源码

2017-08-15

thinyhttpd-0.1.0源码

thinyhttpd源码下载

2017-08-15

python入门级视频

python入门级视频到爬虫

2017-06-21

空空如也

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

TA关注的人

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