自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++知识框架体系图

2017-02-16 12:46:33 5506 35

原创 c语言知识框架图

C语言知识框架图

2016-11-02 19:02:16 2477 1

原创 vim快捷键整理大全

前言:在linux下学习了很久,可是操作却还是小学生一样,唉,于是把整理的linux下vim的命令分享给大家,有了这些快捷键相信相信大家在linux下学习都会得心应手的。一、移动光标 1、左移h、右移l、下移j、上移k 2、向下翻页ctrl + f,向上翻页ctrl + b 3、向下翻半页ctrl + d,向上翻半页ctrl + u 4、移动到行尾$,移动到行首0(数字),移动到行首第一个字

2017-08-20 08:45:59 4071 1

原创 Linux中的awk命令

1、什么是awk命令? 在上一节中我们讲了sed命令,我们知道sed命令是以行为基本单位来处理内容的,今天我们来讲一下awk命令。awk命令的与sed命令相比它不仅可以按行为单位处理还可以按列为单位处理文件。 awk是以一行消息为一条记录,每条记录为域。awk也是一种非编译的弱类型语言。 awk缺省的行分隔符是换行,缺省的列分隔符就是连续的空格和tab。awk实际上是一种很复杂的脚本语言,有像

2017-07-21 15:21:47 1845

原创 Linux sed命令

1、什么是sed? sed是一种非交互式的流式编辑器,在shell脚本和Makefile中作为过滤器使用也是非常普遍的。 sed处理文本的时候按行为基本单位进行处理的,grep只有‘查’的功能,但sed就可以增删查改。sed使用的时候是有风险的,可能会因为我们输入错误信息导致文本被更改,所以使用sed的时候需要谨慎处理。 把前一个程序的输出作为sed的输入,经过一系列的编辑命令转换为另一种格式

2017-07-20 22:06:53 1433

原创 剑指offer--之字符串中先出现两次的字符

题目要求: 查找一个字符串中第一个只出现两次的字符串,比如“abcdefabcdefabc”,这样第一个只出现两次的字符就是‘d’。 解题思路: 首先拿到这个题,想到的方法就不会是拿这个字符区号后面的字符比较并且计数,因为这种方法的时间复杂度就是O(n^2),所以为了优化就有了其他的方法。 建一个哈希表 字符char是一个长度为8的数据类型 这就共有256种可能 ,第一次扫描 哈希表中更新

2017-07-19 13:36:37 1073

原创 grep命令与正则表达式

一、什么是grep grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把它打印出来),grep是强大的文本搜索工具,它使用正则表达式并把匹配到的行打印出来。 UNIX的grep包含三种grep、egrep、fgrep,其中egrep和fgrep和grep的差别很小,egrep是grep的扩展,它能

2017-07-19 10:40:55 1351

原创 I/O多路复用之epoll服务器

1、epoll服务器的函数 epoll是linux特有的I/O复用函数,它的实现和select和poll有很大的差异。epoll是使用一组函数来完成任务,而不是单个的函数。epoll把用户关心的文件描述符上的事件放在内核里的一个事件表中,而无需向select和poll那样每次调用都要重复传入文件描述符集或事件集,但是epoll却需要一个额外的文件描述符,来唯一标识内核中的这个事件表。 1、e

2017-07-15 16:32:02 1233

原创 shell中反引号和$()的区别以及eval命令

反引号和$()的区别 反引号和$()都是shell脚本中用来进行命令代换的命令,命令代换就是运行一个命令将其结果交给一个变量。 echo ‘echo \\ ’ //反引号 echo $(echo \\ ) 我们再把脚本改成8个\ 总结: 1、反引号本身对\做了解释,保留了本身的意思。如果我们想在反引号中起到\的特殊意义,用两个\来表示

2017-07-12 22:11:15 1773

原创 I/O多路复用之poll服务器

上一篇介绍了关于I/O多路复用的select服务器,今天便介绍一下poll服务器。对两种模式再做一个比较。 I/O多路复用select服务器: http://blog.csdn.net/payshent/article/details/74909010一、poll函数的介绍 我们先看一下poll函数的原型: 我们可以看出poll函数有三个参数,poll系统调用和select的系统调用类似

2017-07-10 22:40:24 1175

原创 I/O多路复用select服务器

一、五种I/O模型 linux下的I/O模型分为五种模型:分别是阻塞式I/O、非阻塞式I/O、I/O多路复用(多路转接)、信号驱动I/O(SIGIO)、异步I/O。 这五种I/O由分为两类:一类是同步I/O包括了前面四种,还有一类是异步I/O。 我们把I/O是分成两步的,第一步是“等”,第二步就是数据的搬迁。而对于同步I/O和异步I/O来说它们之间的区别就是同步I/O的数据搬迁工作要自己来完成

2017-07-10 09:58:50 1196

原创 模拟实现string类

深浅拷贝: 浅拷贝:也称位拷贝,编译器只是直接将指针的值拷贝过来,结果多个对象共用同一块内存,当一个对象将这块内存释放掉之后,另一些对象不知道该块空间已经还给了系统,以为还有效,所以在对这段内存进行释放操作的时候,一个内存空间被释放多次,发生了访问违规,程序崩溃。 深拷贝:为了解决浅拷贝的问题,深拷贝则不是直接将指针的值拷贝,它是为指针p2开辟与p1相同大小的内存空间,然后将p1所指的内

2017-07-06 22:46:12 1099

原创 TIME_WAIT状态

前言: 在前面我们讲TCP的三次握手和四次挥手的时候,最后有一个问题就是为什么主动断开连接的一方会进入TIME_WAIT状态。三次握手和四次挥手的链接如下: http://blog.csdn.net/payshent/article/details/73773789 这一节就主要讲讲TIME_WAIT状态。 TIME_WAIT状态是保证重新生成的socket不受到之前残留的延迟重发报文的影响

2017-07-05 16:53:31 2167

原创 基于TCP的多进程和多线程服务器

基于多进程的TCP服务器 在上一节我们写了关于TCP的单进程的服务器:http://blog.csdn.net/payshent/article/details/74109613 在里面我们可以单对单的进行两台主机的通信,但是单进程的服务器毕竟来说可服务的对象就很小,所以现在实现一个多进程的服务器。 代码展示: tcp_server.c:#include<stdio.h>#include<

2017-07-03 21:07:44 1267

原创 socket编程之TCP单进程的服务器

今天介绍的是基于ipv4的socket网络编程,我们知道socket API是一层的抽象的网络编程接口,但各网络协议的地址却是各不相同的。 下图是sockaddr数据结构图: ipv4和ipv6的地址格式定义在netinet/in.h中,ipv4地址用sockaddr_in结构体表示,包括16位的端口号和32位的ip地址,ipv6地址用sockaddr_in6表示,包括16位的端口号和128

2017-07-02 13:13:24 1427 1

原创 详谈智能指针

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

2017-06-29 15:29:00 1442

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

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

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

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

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

2017-06-27 11:00:56 2250

原创 URG与PSH的区别

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

2017-06-26 09:52:26 3328

原创 路由表生成算法

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

2017-06-25 15:27:12 1557

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

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

2017-06-25 10:09:49 3420

原创 NAT与代理服务器

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

2017-06-25 09:31:18 2319

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

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

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

原创 互斥锁与自旋锁

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

2017-06-22 10:43:28 1875

原创 CRC校验算法

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

2017-06-19 13:18:44 8323

原创 端口号的分类

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

2017-06-18 21:44:57 1658

原创 守护进程

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

2017-06-16 13:34:06 1640

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

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

2017-06-15 12:09:04 1395

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

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

2017-06-13 11:24:33 1141

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

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

2017-06-13 09:54:55 1155

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

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

2017-06-11 11:22:02 993

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

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

2017-06-10 11:20:28 1211

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

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

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

原创 模拟实现sleep函数

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

2017-06-09 20:50:55 1393

原创 线程安全与可重入

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

2017-06-09 10:44:44 1775

原创 linux下的信号

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

2017-06-08 13:41:36 1193

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

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

2017-06-07 21:41:57 1092

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

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

2017-06-07 16:51:51 1210

原创 linux下的线程

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

2017-06-07 10:45:13 949

原创 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 1352

源码 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关注的人

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