自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

leap的博客

Talk is cheap,show me the code!

  • 博客(91)
  • 收藏
  • 关注

原创 Redis多机数据库思维导图

整理一下redis的多级数据库的相关内容,不具体,大家可以自己查阅~

2017-05-14 17:20:13 865

原创 Linux常用指令思维导图

后面还会更新~

2017-04-24 12:30:55 1118

原创 Linux下的硬链接和软链接

文件的组成一个文件有文件名和数据,而数据在Linux上又被分成了两个部分,分别是用户数据和元数据*。用户数据:即文件数据块(block),是记录文件真实内容的地方。元数据(metadata):记录文件的附加属性(文件大小,创建时间,所有者信息等等)。文件的唯一标识inode在文件中的元数据中,有一项被称为inode号,在Linux系统下,inode号唯一的表示一个文件,那么有人会问,那么文件名呢?

2017-04-23 21:57:39 958 3

原创 Linux awk的用法

什么是awk?awk是Linux下面的一个命令行工具,相比于sed,awk不仅可以以行为单位进行处理文件,还能以列为单位处理文件;同时,它还是一种编程语言,用来在Linux/Unix下对文本和数据进行处理,数据既可以来自标准输入,也可以来自一个或者多个文件。处理文件的方式awk处理文本和数据的方式和sed相似,都是逐行扫描文件,从第一行到最后一行,然后通过正则表达式寻找匹配的特定模式的行,并在这些行

2017-04-22 23:15:51 2751

原创 Linux sed的原理和用法

什么是sed?sed是一种非交互式的流式编辑器,这里有两个关键字,非交互式和流式 非交互式就是指sed只能够在命令行下输入编辑命令来对文本进行编辑,然后在屏幕上查看输出。 流式是指sed每次只从文件中读入一行,然后对该行进行指定的处理,并将处理结果输出到屏幕上,处理完后在读入下一行。 sed对文本的过程处理如下: sed的使用命令格式sed [options] '

2017-04-22 17:35:46 2630

原创 HTTP的GET和POST的区别

前言前面的一张我们提到了http协议,介绍了URL,请求报文,响应报文,以及http的特点,相信大家现在对于http一定有所了解了,今天我们主要从http的两种基本方法GET和POST来带大家了解下## HTTP-GET方法 要提到方法我们首先就需要回顾一下HTTP的报文格式。<request line><headers><blank line>[<request-body>]我们都知

2017-04-17 11:26:50 1044

原创 设计模式之单例模式的几种写法

前言经过了前面几次的面试,我发现面试官对设计模式方面的提问频率是非常高的,所以学习设计模式是一件刻不容缓的事情,今天我们就来说一下设计模式中的单例模式吧。什么是设计模式?设计模式并不是什么神技,而是一套代码的设计,是经验的总结,使用设计模式是为了实现代码的复用以及“解耦”,关于编程里面解耦的概念可以参考一下下面这篇知乎。 https://www.zhihu.com/question/20821

2017-04-13 15:55:06 526

原创 http协议

什么是HTTP协议HTTP协议是一种超文本传输协议,是用于万维网服务器传和本地浏览器进行数据通信的传送协议。它可以使浏览器更加高效,使网络资源传输减少。 HTTP本质上是通过基于TCP/IP通信协议来传递数据和资源,资源包括HTML,文件,图片,视频等等。 另外,HTTP还是一个属于应用层的面向对象的协议,它在1990年被提出,目前已经使用了HTTP/1.1版本。 HTTP协议工作

2017-04-05 13:43:08 1534

原创 python学习之正则表达式

什么是正则表达式?  正则表达式是用于文本匹配的工具,在源字符串中查找与给定的正则表达式相匹配的部分。一个正则表达式是由字母,数字和特殊字符组成的,正则表达式中有许多特殊的字符,这些特殊字符是构成正则表达式的要素。在python中,不但提供了正则表达式,还提供了正则表达式的解析模块re.正则表达式中的特殊字符^:正则表达式的开始字符$:正则表达式的结束字符\w:匹配

2017-04-02 22:31:47 1148

原创 MySQL数据库中的查询技巧

1.INmysql> select * from pet where name in('lzh','cyb');+------+-------+------+------------+| name | owner | sex | birth |+------+-------+------+------------+| cyb | lzh | Y | 1996-05-2

2017-03-30 20:19:22 779

原创 服务端主动终止连接的情况分析

前面我们已经学习了基本的网络套接字编程,下面是与本文相关的网络编程源码github连接: https://github.com/clearoff/Network-Code/tree/master/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%92%8C%E5%AE%A2%E6%88%B7%E7%AB%AF(1V1) 然后下面我们给出与本文相关的博客连接,因为涉及到了TCP的“三次

2017-03-08 22:42:55 22352 4

原创 Linux中的netstat命令详解

前面我们学习了网络的有关基础知识,今天我们来介绍一个Linux下面的关于网络的一个重要指令——netstat.功能说明netstat是基于Netstat这个命令行工具的指令,它可以用来查询系统上的网络套接字连接情况,包括tcp,udp以及Unix套接字;另外它还能列出路由表,接口状态和多播成员等信息。主要选项关于netstat命令的选项有很多,这里我们只介绍常见选项,关于选项和选项的作用如下图:

2017-03-08 17:24:20 36473 1

原创 【网络基础】TCP协议之三次握手和四次挥手

前面提到了TCP数据报以及TCP是通过什么进行可靠传输的,相关知识点请关注下面的博客: http://blog.csdn.net/bit_clearoff/article/details/60469790这篇文章的要点是三次握手四次挥手为什么要三次握手为什么要四次挥手TCP的有限状态机本篇文章参考内容《计算机网络》(第五版)——谢希仁。http://blog.csdn.net/xi

2017-03-05 21:37:08 765

原创 【网络基础】:TCP协议数据报

本文要点TCP的特点TCP的可靠传输是如何实现的TCP数据报TCP内部的四种计时器什么是TCP?TCP是一种面向链接的,可靠的,面向字节流的运输层通信协议,它负责将IP层传送上来的数据报交给对应的应用程序,以及将应用程序传送下来的数据报进行管理以后传递给IP层。今天我们就来谈一谈运输层的TCP协议。TCP数据报上图给出了IPC数据报首部的相关字段,以及各字段的解释。TCP的特点1.面向连接

2017-03-05 18:06:37 2060

原创 【网络基础】ARP地址解析协议

什么是ARP协议?ARP被称为地址解析协议,它在局域网内部通过IP地址查找到目标主机的MAC地址。即ARP协议完成了一次从IP地址到MAC地址的转化。为什么需要ARP协议?因为在局域网中,如果源主机要和目的主机建立通信关系,那么源主机必须要知道目的主机的MAC地址(即硬件地址),但是如果目的主机或者源主机是第一次进行通信的,那么源主机要怎样才能知道目的主机的MAC地址呢? 所以这样就引入了ARP地址

2017-03-04 15:53:29 1335

原创 Linux下用GDB调试多线程程序

我们都知道GDB是Linux下面一款强大程序调试的工具,以前我们都是用GDB来调试单线程程序,今天我们来谈一谈如何用GDB来调试多线程程序把。有关GDB的基本指令在这里就不叙述了,如果感兴趣的可以看看下面这篇博客: http://blog.csdn.net/bit_clearoff/article/details/53966718调试多线程的相关指令显示所有进程info threads这条指令显示

2017-03-02 18:28:29 4614

原创 Linux守护进程

首先,我们在Linux的shell下面运行一条指令ps -ajx,其中 ps是查看当前系统进程状态的指令,-a显示由其它用户所拥有的进程的状态,-x显示没有控制终端的进程的状态,-j显示与作业相关的信息。我们在图中看到,图中所列举的这些都是与控制终端无关的进程,在Linux中我们称这些进程为守护进程,也叫做精灵进程,今天我们就来谈一谈Linux下面的守护进程把。什么是守护进程?守护进程也被称为精灵进

2017-02-26 17:00:16 787

原创 Linux作业控制

前面我们学习了进程,线程,信号等相关内容,今天我们要引入一个新的概念——作业,那么什么是作业呢?当我们在Linux的shell中运行程序时,这个程序就可以看成是一个作业了,可以这么说shell控制的是作业,而不是进程,而且shell还可以分前后台对作业进行控制,所以,今天我们就来谈一谈Linux下面的作业控制。什么是进程组要弄明白作业这个概念,首先我们必须要了解进程组,那么什么是进程组呢? 熟

2017-02-25 20:24:03 2234

原创 Linux信号处理

大家应该都了解当我们在Linux下面运行程序时,如果程序跑飞了,那我们可以通过Ctrl-C来终止掉跑飞的程序,其实,当我们按下Ctrl-C时,涉及到了信号的相关处理工作,所以,今天我们就来谈一谈Ctrl-C被后的信号处理吧。什么是信号信号其实是一种软件中断,它为程序提供了一种处理异步事件的方法,所谓的异步事件就是事件的发生在任何事件都有可能,很多重要的程序都需要对信号进行处理。在Linux中一共有多

2017-02-24 14:01:48 2019

原创 例说读者写者模型

前面我们学习了生产者和消费者模型,想了解一下的可以去看看这篇客: http://blog.csdn.net/bit_clearoff/article/details/55805884什么是读者写者模型读者和写者模型是操作系统中的一种同步与互斥机制,它与消费者和生产者模型类似,但也有不同的地方,最明显的一个特点是在读者写者模型中,多个多者之间可以共享“仓库”,读者与读者之间采用了并行机制;而在消费者

2017-02-20 16:22:08 2831

原创 例说生产者和消费者模型

什么是生产者和消费者模型什么是生产者消费者模型?生产者和消费是操作系统中一种重要的模型,它描述的是一种等待和通知的机制,如下图。 生产者和消费者模型必须具有的条件用一句话概括,生产者消费者模型必须具有的条件是三种关系,两类角色,一类交易场所。 一类交易场所:交易场所指的是生产者和消费者之间进行数据交换的仓库,这块仓库相当于一个缓冲区,生产者负责把数据放入到缓冲区中,消费者负责把缓冲区中的数据

2017-02-19 17:14:29 6626 3

原创 Linux下的线程控制

首先大家可以看看这篇文章,这篇文章对进程和线程的关系做了生动的讲解: http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html什么是进程前面我们学习了进程的相关知识,现在我们先来做以下回顾。 进程:进程是指在系统中能够独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成,并且每一个进程都有一个进程控制

2017-02-18 17:55:56 1393

原创 动态链接和静态链接

什么是库库从本质上来说是一种可执行的二进制文件,可以被加载到内存中运行,而根据链接时期的不同,库又可以分为静态库和动态库。链接链接就是将不同部分的代码和数据收集和组合成一个单一文件的过程,也就是把不同目标文件合并成最终可执行文件的过程,注意:这个过程不涉及内存,链接按时期的不同可以分为三种形式,分别是: 1. 编译时链接:这个其实就是我们常说的静态链接过程; 2. 装载时链接; 3. 运

2017-02-18 15:05:16 1220

原创 Linux 进程通信IPC对象之信号量

什么是信号量信号量与其他IPC对象不同,它是一个计数器,用于多个进程对共享数据对象的访问,它的本质是一种数据操作锁,它不像消息队列和管道那样具有数据交换的功能,而是通过控制其他的通信资源(文件,外部设备)来实现进程间通信。如何通过信号量来控制进程间通信为了获得共享资源,进程需要执行下列操作: (1)、测试控制该资源的信号量; (2)、若此信号量为正,则进程可以使用该资源,在这种情况下进程会将信号

2017-02-16 16:59:28 1239

原创 Linux进程通信(一)——pipe管道

本章内容采用pipe管道如何进行进程之间的通信pipe管道进程通信的规则和限制Linux中pipe管道的实现机制和管理pipe管道的结构体什么是进程通信进程通信就是两个进程之间进行数据交换,在Linux中有好几种可以进行进程通信的方式,在这篇文章中我们主要介绍最基本的进程通信方式——pipe管道。进程通信的途径进程之间交换信息的唯一途径就是传送打开的文件。管道(pipe)管道是一种最古老也是

2017-02-14 20:30:29 12552 2

原创 浅析shell的工作原理

本章我们的内容将会介绍Linux中的命令解释器shell的工作原理我们还会编写一个简单的shell什么是shell?Linux系统的shell相当于操作系统的“一层外壳”,它是命令语言解释器,它为用户提供了使用操作系统的接口,它不属于内核,而是在内核之外以用户态方式运行。它的基本功能是解释并执行用户打入的各种命令,实现用户与Linux内核的接口。 在启动Linux系统后,内核会为每个终端用

2017-02-13 22:33:51 6514

原创 进程管理之程序替换

exec函数族在Linux中,exec是一个函数族,它一共有6个函数,如下: #include <unistd.h> int execl(const char *path, const char *arg, ...);int execlp(const char *file, const char *arg, ...);int execle(const char *path, const ch

2017-02-13 18:43:47 1143

原创 C++对象模型和多态

什么是多态?多态是C++三大特性之一,它可以简单的概括为“一个接口,多种方法”,程序在运行时才能通过基类指针指向的对象的类型来决定调用那个函数,今天我们就要谈谈多态的底层的实现。虚函数C++多态是通过虚函数来实现的,所谓的虚函数,就是在类的成员函数返回值类型前面加上virtual关键字来定义的,在C++中允许派生类对基类的虚函数进行重写,一旦派生类对基类的虚函数进行重写,那么在派生类中,基类的虚函数

2017-02-10 16:07:26 645

原创 C语言结构体的内存对齐

什么是结构体?学过C语言的大家应该都学到过结构体,结构体是一种聚合数据类型,它可以把不同类型的数据存储在一起,我们把结构体中存储的数据叫做结构体成员。结构体的内存对齐了解了结构体后,我们来谈一谈结构体在计算机系统中是如何存储的,首先,我们来看看下面这段代码:struct A{ char a; int b; char c;};int main(){ struct

2017-02-02 15:30:15 567

原创 面试题OJ:反转链表

反转链表是比较基础的问题,直接使用暴力法即可,这里采用了非递归和递归两个版本,大家在写代码时应该注意要在函数前面检查指针是否为NULL的问题,否则很容易会出现空指针的解引用问题:这里直接给出代码,包含测试用例://面试题:反转链表#include <iostream>using namespace std;struct ListNode { int val; struct Li

2017-01-23 13:16:24 624

原创 浅谈计算机内存中浮点数的表示

什么是浮点数提到浮点数相信大家一定不会很陌生,浮点数表示对形如V=x*(z^y)的有理数进行编码,它对执行涉及非常大的数字(|V|>>0)和非常接近于0的数字是非常有用的。浮点数在内存中的存储废话不多述,直接进入正题,首先,我们来看看下面这段代码,大家可以自行在自己的编译器上运行一下:#include <stdio.h>int main(){ float a = 0.0; flo

2017-01-22 00:17:43 1061

原创 进程控制(上):进程创建,进程等待,进程终止

进程创建进程创建被定义为通过父进程创建子进程的过程。fork函数函数原型:pid_t fork(void);特点: 1.fork函数调用一次,返回两次两次返回值得区别分别是子进程当中的返回值为0,父进程当中的返回值为新建子进程的ID(将ID返回给父进程的原因是没有函数可以使父进程得到子进程的ID,这样会便于管理); 2.子进程被创建出来后,子进程是父进程的副本(子进程获得父进程数据空

2017-01-18 18:02:41 2674

原创 关于文件描述符(file_struct)

什么是文件描述符 文件描述符(file_struct)是一个非负整数,对于Linux内核而言,为了高效管理已经被打开的文件所创建的索引,操作系统在每个进程描述符中都提供了文件描述符表,文件描述符表中每个表项都有一个指向已经打开文件的指针;而已经打开的文件在内核中用file结构体表示,文件描述符中的指针指向file结构体;下面,我们首先来介绍一下file结构体:什么是file结构体file结构体

2017-01-15 23:12:18 6430 1

原创 exit函数和_exit函数的区别

高级I/O函数在Linux标准库中,有一套称为高级I/O函数,例如我们所熟知的printf,fopen,fread,fwrite都在此列,他们也被称为缓冲I/O。其特征是对应每一个打开的文件,都存在一个缓冲区,在每次读文件时会多读若干条记录,这样下次读文件时就可以直接从内存的缓冲区去读。在每次写文件时也会先写入缓冲区,当缓冲区写满,或者我们手动的刷新缓冲区,或者遇到\n,EOF这样的结束符,才会把对

2017-01-14 10:51:45 8303

原创 内存描述符mm_struct浅析

什么是内存描述符什么是进程?进程是正在执行的程序,是可执行程序的动态实例,它是一个承担分配系统资源的实体,但操作系统创建进程时,会为进程创建相应的内存空间,这个内存空间称为进程的地址空间,每一个进程的地址空间都是独立的! 当一个进程有了进程的地址空间,那么进程的地址空间就必须被相应的工具所管理这个工具被称为内存描述符mm_struct,它被定义在、/usr/src/kernels/include/

2017-01-12 12:25:03 4219

原创 初始操作系统中的虚拟内存(上)

本文我们将会提到物理和虚拟寻址 虚拟内存作为缓冲工具 页表 地址翻译为什么要引入虚拟内存在一个操作系统中,不同的进程之间都是共享cpu和主存资源的,但是,共享主存会发生一些意想不到的结果,例如当前进程有可能不小心写了其它进程的内存。 为了更加有效管理内存并且少出错,便引入了一种对主存抽象的概念,称为虚拟内存(VM)。它将主存看成是一个存储在磁盘上的地址空间的高速缓存;并且为

2017-01-11 23:09:47 1084

原创 task_struct结构体成员详解

1:引言进程就是程序动态运行的实例,它是承担分配系统资源的实体。我们也可以把进程当成是由一组元素组成的实体,进程的两个基本的元素时程序代码和与代码相关联的数据集合。在进程执行时,都可以被表征为一下元素: 标识符:与进程相关的唯一标识符,用来区别正在执行的进程和其他进程。 状态:描述进程的状态,因为进程有挂起,阻塞,运行等好几个状态,所以都有个标识符来记录进程的执行状态。 优先级:如

2017-01-09 22:18:38 18448

原创 在Linux下实现简易进度条

本文将要概述printf的缓冲区问题;\r和\n的区别;如何实现一个简易的进度条;奇怪的现象进度条是安装和下载软件中常见的部分,它可以表示软件安装或下载了多大,能给客户一种直观的感受,今天我们就来实现一个简易的进度条,基本构思是这样的,我们定义一个大小为102的字符数组,其中100个用来存储‘#’,每跑了进度条的1%它就会在字符数组中增长一个该符号。还有两块空间用于存放’\0’,和防止死循环

2017-01-03 21:57:15 1344 1

原创 Linux下调试器GDB、makefile的使用

前面的几篇博客中我们讲解了Linux下的编辑器vim、编译器gcc和g++,今天我们来介绍一下其他常用的三种工具,它们分别是程序调试器:GDB、代码查看器:ctags、还有一个辅助工程的工具:Makefile程序调试器:GDB在windos下我们常用vs编辑器中自带的调试工具进行程序的调试,对于程序员来说,调试自己写的程序时必须的;在Linux中,我们可以使用GDB来调试已经编译好的可执行程序;注意

2017-01-01 19:28:14 9169

原创 Linux的gcc和g++的区别

Windows中我们常用vs来编译编写好的C和C++代码;vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢,其实Linux下这样的工具有很多,但我们只介绍两款常用的工具,它们分别是gcc和g++.工具用法介绍gcc和g++的用法都是一样的,在这里我们只介绍gcc: 上图介绍了相关指令和参数以及该条指令所做的对应的事情。gcc -E

2017-01-01 12:21:23 47173 7

空空如也

空空如也

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

TA关注的人

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