自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(160)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 浅析C++当中的对象模型

我们来分析一下C++当中的对象模型。什么是虚函数表?C++的对象模型,我们首先需要分析的是虚函数表。 虚函数,这里我们就要牵扯到多态。简单的说就是父类指针或者引用调用重写的虚函数,当指向父类的时候,调用父类的虚函数,当指向子类的时候,这时候会调用子类的虚函数。首先,我们在这里需要了解一个概念,虚函数表。虚函数呢,就是通过虚函数表来实现的,在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、

2016-08-25 14:59:28 967

原创 C++11右值引用和move语义

最近面试被问到这个没答上来,在此整理一下右值引用在C++11当中又一个概念叫做右值引用,这个概念我们首先要能够进行区分左值和右值的概念,左值就是一个具体的内存对象,可以修改的,右值就是一个值,这个值可以赋值给其他的。右值引用的作用是让我们能够得到临时对象的所有权,这样我们就可以去修改临时对象了。int i = 50;int &a = i; //左值引用int &&ra = 42; /

2017-05-29 13:51:21 1038

原创 HTTPweb服务器——代码实现

代码已托管github,有兴趣可以去看下,https://github.com/wsy081414/linux_practice/tree/master/http_servermain.c#include"httpd.h"static void *accept_request(void * arg){ int sock = (int )arg; pthread_detach(pt

2017-04-22 22:29:52 1607

原创 HTTPweb服务器——HTTP整体设计框架

我们整个的项目采用B/S模式,通过浏览器发送HTTP的get方法和post方法,然后server进行响应,这样最终通过html看到我们所显示的最终的效果。 另外,为了支持并发,我们采用了多线程的结构。1、进行创建监听套接字和其他socket编程的模式是一样的,我们这里的第一步依然是首先创建监听套接字,创建的过程依然是,socket–>bind—>listen。这里在bind的时候采用sockadd

2017-04-22 22:22:31 3083

原创 HTTPweb服务器——HTTP基本知识

对于HTTP来说,我们不需要说太多,HTTP又叫做超文本传输协议,现如今利用最多的版本是1.1版本,HTTP的特点: C/S模式,B/S模式 简单快速:基于请求和响应,请求只需要传送请求方法和路径。 灵活:HTTP允许传输任意类型的数据对象。 无连接:这个无连接说的是应用层的,应用层无连接,下层使用TCP依然是面向连接的,无连接的含义是限制每一次连接只进行处理一个请求,服务器处理完客户的请求

2017-04-22 22:18:19 4406

原创 Shell总结(二)

第一篇我们学习了Shell当中的变量和符号,接下来我们来学习一下Shell当中的语法。语法无非是有几个点,条件判断,循环控制,以及面向过程最重要的一点——函数。1. test和[首先我们来看一下test和[,这两个是有关于条件测试的。test命令和[的作用是一样的,都是用来判断条件是否成立。而对于条件的描述,就需要我们在上一节所说的关系运算符等 运算符 说明 -eq 判断是否相等

2017-03-30 22:25:28 570

原创 Shell总结(一)

最近学习了脚本语言,Shell,是时候进行一下总结了,好了,不多说了。1. 前言Shell是对操作系统的操作,操作系统进行管理硬件,开发人员通过Shell来和操作系统交流,通过操作系统的命令和操作系统之上的库,以及一些暴露的系统调用进行交流。Shell是基于命令的语言,Shell脚本语言。Shell常常用来处理文本,包装一些命令,把Shell包装一些命令,直接调用脚本,直接进行处理一大批命令,最早S

2017-03-29 15:33:58 687

原创 关于shell当中的$()和` `以及eval

1.$()和` `今天我们来看一下再shell当中的几个问题,一个是$(),一个是` `。首先,我们需要明确这里这两个的用途,$()和都是用来做命令替换的。例如:echo pwdecho $(pwd)echo `pwd`从效果就可以看出$()和 ` ` 的作用了吧。它进行命令替换,执行pwd。操作上,这两者都可以达到相应的效果,但是,我们建议是哟个(),因为,反引号容易和单引号搞混。另外多层次的

2017-03-29 11:29:35 11823

原创 存储映射I/O(mmap函数)和共享内存

前言最近在一次电话面试的过程中,面试官问我相关的共享内存的知识,当时就认为是我在学习IPC进程间通信学习到的共享内存,所以就给面试官讲解了一下,然后,面试官说我是否知道在Linux下的存储映射I/O,当时我下意识的知道就是mmap函数,但是感觉自己对这两个理解还是不够深刻,所以,写一篇博客来记录一下。首先附上我的关于共享内存的链接,关于共享内存的大致内容我这里就不多提了。 http://blog.

2017-03-28 15:26:14 2753

原创 I/O多路复用比较(select,poll,epoll)

讲述完了三种I/O多路复用模型,我们现在需要进行一下比较。比较三种I/O多路复用关于他们的优缺点呢,前面三篇博客我都有所提及,这里我主要为了再次总结一下。  select和poll都只能工作在低效的LT(水平触发),这种方式下进行多次的循环处理时间的等待。而epoll是在高效的ET(边沿触发)模式下工作,这个模式下当有时间响应的时候,应用程序这个时候必须立即处理。并且epoll还支持EPOLLONE

2017-03-28 13:49:28 737

原创 I/O多路复用——epoll

说完了select和poll,那么必须要说一下epoll的。select和poll是UNIX当中的,epoll是Linux所特有的。和前面的思路一样,poll解决了select的缺点,所以epoll的出现也是为了最大化的提高多路复用的效率,解决poll的缺点。epoll介绍epoll的实现和select与poll的实现有很大的差异,epoll不像select和poll一样通过一个系统调用来完成任务,

2017-03-28 13:23:15 1132

原创 I/O多路复用——poll

上一篇我们说了关于select的相关信息,我们可以看到select是有弊端的,所以为了解决select的弊端,UNIX又在后期提出了poll。select的弊端这里就不多说了,上一篇博客有提及。pollpoll和select类似,不过在一些方面改善了select的弊端。它也是在指定的时间进行轮询文件描述符,查看是否有就绪时间发生。和上次一样,我们先来看一下poll系统调用。 int poll(str

2017-03-27 22:29:25 1291

原创 I/O多路复用——select

接下来我们讨论3篇关于I/O多路复用的问题,首先我们来看下select,select是多路复用当中最早的一种I/O复用的最主要的功能就是让程序能够同时去监听多个文件描述符,这样程序的性能就能提高。select介绍我们先来看一下select的接口。 int select(int nfds, fd_set *readfds, fd_set *writefds,

2017-03-27 21:40:20 811 1

原创 面试当中的git问题

面试当中的git和svn的内容:git是分布式版本控制系统,SVN是集中式版本控制系统。问题1:reset 与 rebase, pull 与 fetch 的区别git reset 不修改commit相关的东西,只会去修改.git目录下的东西。git rebase 会试图修改你已经commit的东西,比如覆盖commit的历史等,但是不能使用rebase来修改已经push过的内容,容易出现兼容性问题。

2017-03-27 19:55:41 6228 2

原创 Shell当中的字符串切割

我们来看一下以下这几种字符串切割的方式。1.使用 # 和 ## 来进行截取。val=“hello world!”echo ${val#*o}echo ${val##*o}进行字符串截取, 第一个是从左到右进行删除第一个o的字符串。 第二个是从左到右进行删除最后一个o的字符串。 这里的 * 表示的是通配符所以输出是: 使用%和%%进行截取 第一个介绍了从左到右进行截取,下面我们就进行介绍一下

2017-03-27 18:26:26 22405 1

原创 网络数据包传送的过程和DNS过程

网络数据包传送的过程在整个数据报传输过程当中,发送: 发送端进程首先调用系统调用,然后把数据发送给了socket,然后socket检查数据类型,调用系统调用send函数,send函数检查socket的状态,协议类型,传给了传输层,传输层对应的协议(UDP或者是TCP为这些数据创建数据结构),然后加入对应的传输层协议头部,然后交付给网际层,IP层,IP层加上它的头部,例如ip地址和检验和。然

2017-03-27 13:30:11 3916

原创 TCP

关于TCP协议是网络中很重要的一个协议,这个协议自然需要好好看看。我们从TCP的首部来一点一滴的深入理解这个协议。1. TCP首部介绍首先介绍首部字段:源端口和目的端口: 提供复用和分用,应用层的进程都可以通过传输层再传输到IP层,这就是复用,分用就是传输层从IP层收到数据后必须交付给指明的应用层应用进程。序号: TCP为传送的字节流每一个字节进行按照顺序编号,序号是本报文段的第一个字节编号,序号和

2017-03-07 00:39:59 1067

原创 关于路由相关

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

2017-03-07 00:28:24 1025

原创 ARP协议

ARP关于ARP地址解析协议,是我们通过IP地址可以获得MAC地址的一个协议,当我们在一个局域网进行通信的时候,所需要的条件就是必须有发送端和目的端两端的MAC地址。ARP协议的目的就是为了解决在局域网进行通信的时候只知道IP地址却不知道MAC地址的情况。我们先来看一下MAC帧: 从这个图中我们就可以看到MAC帧的具体的内容,所以我们在进行通信的时候当然必须要知道一个地址,就是目的地址,但是,在实

2017-03-04 20:08:19 829

原创 gdb调试多线程多进程

今天进行学习一下关于gdb调试多线程和多进程的情况:gdb调试多进程尝试来调试多进程的程序,我们使用gdb进行调试程序,gdb的调试默认是调试父进程的,但是为了做到可以对父进程和子进程都做到调试,所以附加了调试子进程的功能。我们可以对fork出来的进程进行设置调试方法。follow-fork-mode的用法为:set follow-fork-mode parent/child如果你选择了parent

2017-03-03 09:28:06 1662

原创 进程间关系

说完了进程,我们来说一下进程间关系。进程组一个或者多个进程的集合,每一个进程除了有一个进程ID之外,它还属于一个进程组。通常来说,进程组和作业相关联,可以来接收同一个终端下的各种信号,每一个进程组也有对应的唯一进程组ID。 这一列PGID就是进程组,我们可以看到上面那三个mydaemon的守护进程所在不同进程组。这里下面的带[]的都是内核进程,可以看到它们都在同一进程组。组长进程:组长进程就是

2017-03-01 22:17:37 1923

原创 数据链路层的三个问题

今天学习了关于数据链路层的知识,数据链路层使用的信道主要有以下的两种类型: 1. 点对点信道。这种信道使用一对一的点对点信道方式。 2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。通常我们使用的更多的是点对点的信道,所以在这里我们需要了解一些相关的概念。点对点信道的数据链路层在进行通信的时步骤如下: 1. 节点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。

2017-03-01 19:05:37 5679 6

原创 linux定时任务(crond)

关于crondcrond是linux下的一个周期性的执行某种任务或者等待处理某些时间的一个守护进程,与windows下的计划任务类似,当安装完成操作后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。crond并且也是一个守护进程,类似于计划任务,crond进程会自动启动。 上图中我们可以看到1920c

2017-02-27 22:12:55 734

原创 守护进程

我们接下来说一下关于守护进程。守护进程也叫做精灵进程,是运行在后台的一种特殊的进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。生存周期长,它们常常在系统引导装入的时候启动,仅仅在系统关闭的时候才终止。因为它们没有控制终端,所以说它们是在后台运行的。很多服务器的应用都和守护进程相关。守护进程的特征:通常来说,我们需要知道,对于当我们开机以后首先操作系统首先通过0号进程去进行操作

2017-02-27 17:46:52 1010 1

原创 linux学习——信号

信号标签(空格分隔): 未分类今天我们来说一说信号,linux当中有一个头文件signal.h其中提供了62个信号。信号是用于向一个进程来通知发生一部时间的机制。信号类似于一个硬件终端,但是信号没有优先级,操作系统看待信号都是平等的。对一个进程,一次只能给一个信号。所以信号我们也叫做软中断信号,通知进程发生异步时间,使用信号我们可以通过上述的信号,1-31我们叫做普通信号,34-64我们叫做实时信号

2017-02-25 16:12:41 1008 1

原创 多线程编程(1)

线程概念线程线程就是进程的若干个执行流,因为一个进程在某一时刻只能去做一件事情,有了线程之后,我们可以在同一时间去做不同的事情,比如我正在边利用cmd markdown写博客。边用网易云音乐听音乐,这样多线程的情况下,能给我们带来很多好处。 在系统内核中其实是不存在线程的,linux使用进程模拟线程,线程的实现其实就是多个共享数据代码等信息的进程。所以我们把线程也叫做轻量级进程。进程常常用来分配资源

2017-02-20 20:14:42 904

原创 进程间通信——消息队列

前言进程间需要进程通信进行数据传输和资源共享,另外一个进程在很多时候需要向另外的一个进程通知事件,有时候进程之间存在关系,需要去控制另外的一个进程,所以进程通信是很需要的。进程间通信的第一种就是消息队列什么是消息队列消息队列是消息的链表,存放在内核当中,由消息队列标识符标识,消息队列提供一种进程之间数据块传送的方法,每个数据块都被认为是一种类型。每个进程都有一个与之相关联的消息队列,其功能就类似于一

2017-02-20 17:29:55 1138 2

原创 进程间通信——共享内存

前言进程间IPC通信的三大主题,消息队列,信号量,共享内存,我们接下来说一说共享内存,共享内存可以提供给服务器进程和客户进程之间进行通信,不需要进行数据的复制,所以速度最快,只需要让两个进程通过页表映射到同一块物理内存即可,这样,这块物理内存是两个进程都能看到的,这样当一个进程进行写操作,另外的一个进程也就可以做读操作。所以问题关键也就是给出一个特定的存储区。通常情况下,我们需要确保一个进程在写的时

2017-02-20 16:03:07 2593 5

原创 静态库和动态库

前言在平时,我们很少关注于编译和链接的过程,在现在IDE遍布的天下,IDE为我们考虑好了一切。但是真正的藏在每个程序运行背后的东西,很多系统软件背后的运行机制都是需要我们去熟悉的,熟悉了这些,我们才能快速的解决一些相关的性能等问题。大家应该都知道对于链接来说,应用程序有两种的链接方式,一种就是静态链接,一种是动态链接。对于链接,链接的主要内容就是把各个模块之间相互引用的部分都处理好,是的各个模块之家

2017-02-18 15:41:58 692

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

对于信号量来说,是IPC机构当中的一个,与消息队列等不同,它是一个计数器,用于为多个进程提供对共享数据对象的访问,接下来,我们对信号量进行一些探索。在这我们需要提出一些概念: 临界区:指的是访问临界资源的程序代码片段。临界区只能允许一个进程进入。 临界资源:临界资源说的是一次只能提供一个进程使用的资源。 互斥:互斥是指某一个资源同时只允许一个访问者对其进行访问。 原子性:一个事务包含多个操作

2017-02-16 23:29:32 835

原创 文件描述符和文件指针的区别

1.什么是文件描述符?文件描述符是计算机科学中的一个术语,是一个用于表述只想文件的引用的抽象化概念。在linux当中,每个进程会在进程控制块(PCB)当中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表都有一个指向已经打开文件的指针。每个linux进程都应该有三个标准的文件描述符,对应三个标准流。 整数值 名称 (unistd.h)符号常量 (stdio.h)文件流 0

2017-02-12 14:09:08 1865

原创 进程调度算法

今天我们来谈一谈进程调度算法:1. 先来先服务调度算法(FCFS)先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为

2017-02-12 13:32:46 835

原创 进程—内存描述符(mm_struct)

前言上一篇我们谈论了task_struct这个结构体,它被叫做进程描述符,内部成员包含了很多与进程相关的信息,今天我们来看一下其中一个被叫做内存描述符的结构体——mm_struct,抽象的来描述linux下进程的地址空间的所有的信息。1.概述一个进程的虚拟地址空间主要由两个数据结来描述。一个是最高层次的:mm_struct,一个是较高层次的:vm_area_structs。最高层次的mm_struc

2017-01-12 10:20:00 28887

原创 进程管理—进程描述符(task_struct)

前言当把一个程序加载到内存当中,此时,这个时候就有了进程,关于进程,有一个相关的叫做进程控制块(PCB),这个是系统为了方便进行管理进程所设置的一个数据结构,通过PCB,就可以记录进程的特征以及一些信息。 内核当中使用进程描述符task_struct。 这个task_struct就是一个定义的一个结构体,通过这个结构体,可以对进程的所有的相关的信息进行维护,对进程进行管理。接下来我们需要对tas

2017-01-12 09:52:15 2992

原创 linux中关于压缩的命令

1.前言最近在linux下安装东西,发现好多安装都需要通过使用压缩指令来完成,所以觉得是时候来总结一下了。在windows下,我们常见的压缩格式有两种,zip和rar。在讲述压缩指令之前,我们先去看两个概念,打包和压缩。这个很好理解,打包,就是把零散的东西包装起来成一个总文件,压缩呢,就是把一个大文件压成小文件。这两个概念是必须要清楚的,对于linux来说,后续很多命令存在在这个概念的区别。首先,我

2017-01-01 10:55:44 3875

原创 从一个进度条看问题

1.前言我们要实现关于一个进度条,我们的想法是采用for循环的方式,所以对于这个进度条,我们需要从下面几个问题来一一看待问题。2.关于 ‘\n’ 与 ‘\r’这两个符号,一个叫做回车,一个叫做换行,好多人对这两个分不清,所以我们在这里需要介绍一下。 在最早的时候,只有打字机的时候,人们在每行的后面加上两个表示结束的字符,一个叫做回车,它把打字机的光标定位在左边界,另外一个是换行,它用来换到下一行,

2016-12-31 20:45:40 3315

原创 初识linux下的find命令

1.认识find命令关于find命令,本人认为是linux当中所有的命令当中最重要的一个命令之一,所以,在这里,我们来聊一聊find命令。find命令用于在目录下查找文件,find是在磁盘上进行查找,所以相对来说,效率会低一些。首先,给出find命令所有的参数 -amin<分钟>:查找在指定时间存取过的文件或者目录,单位以分钟计算。 上述就显示了我15分钟内存取过的文件或者目录,这里说的是被访问

2016-12-30 19:36:08 857

原创 初识linux下的三个时间

1.从命令看时间在linux下,我们可以去查看一个文件的三个时间,比如:对于test.c文件我们可以查看时间,使用命令 stat查看stat test.c在这里我们得到以下信息。 通过上述信息,我们可以看到有许多信息,接下来,对于这三个时间,我们进行一番讲解。2.深入理解三个时间atime(Access time):当我们去访问这个文件,这个时间会被改变,时间就是最后一次我们访问的时间,例如

2016-12-24 22:29:29 2275

原创 初识linux软链接和硬链接

1.从文件开始到软硬链接在认识软链接和硬链接之前,我们先来了解一下整个系统当中的文件存放特点,在linux当中,数据分为元数据和用户数据,元数据包括文件的一些属性,例如文件大小,创建时间等一些内容。元数据当中有一个叫做inode(它是元数据的一部分,可以叫做索引节点号),inode作为文件的唯一标识。而文件名,是为了方便记忆。linux系统通过inode来查找正确的数据块,获取对应的信息,而对于用户

2016-12-22 20:55:46 2111 3

原创 面试题——快排挖坑法的应用

对一个数组按照给定的下标进行排序,仅仅使用两两交换的方式,要求不能对数组进行扩容,尽可能少的额外空间。 如:原数组为A,B,C,D,E,现在给定的新位置为3,0,1,4,2,那么排序后为D,A,B,E,C, void SwapSort(int *pArr,int *pPos,int n)1.解决问题这是最近看到的一道面试题,感觉突然一下不容易想到,所以特此来写一下:实现代码:

2016-12-17 19:13:25 2147 1

技术之瞳 阿里巴巴技术笔试心得 高清完整.pdf版下载

从别处花钱买来

2017-02-13

计算机科学导论

《计算机科学导论》是2009年机械工业出版社出版的图书,由佛罗赞编写。

2015-12-28

业余者用VC(MFC)编写串口调试助手

利用VC++6.0MFC做的串口助手,教程都在这里面。

2015-12-06

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

TA关注的人

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