排序:
默认
按更新时间
按访问量

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

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

2016-08-25 14:59:28

阅读数:628

评论数:0

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

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

2017-05-29 13:51:21

阅读数:434

评论数:0

HTTPweb服务器——代码实现

代码已托管github,有兴趣可以去看下,https://github.com/wsy081414/linux_practice/tree/master/http_servermain.c#include"httpd.h" static void *accept_request...

2017-04-22 22:29:52

阅读数:639

评论数:0

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

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

2017-04-22 22:22:31

阅读数:742

评论数:0

HTTPweb服务器——HTTP基本知识

对于HTTP来说,我们不需要说太多,HTTP又叫做超文本传输协议,现如今利用最多的版本是1.1版本,HTTP的特点: C/S模式,B/S模式 简单快速:基于请求和响应,请求只需要传送请求方法和路径。 灵活:HTTP允许传输任意类型的数据对象。 无连接:这个无连接说的是应用层的,应用层无连接...

2017-04-22 22:18:19

阅读数:955

评论数:0

Shell总结(二)

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

2017-03-30 22:25:28

阅读数:279

评论数:0

Shell总结(一)

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

2017-03-29 15:33:58

阅读数:254

评论数:0

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

1.$()和` `今天我们来看一下再shell当中的几个问题,一个是$(),一个是` `。首先,我们需要明确这里这两个的用途,$()和都是用来做命令替换的。例如:echo pwd echo $(pwd) echo `pwd`从效果就可以看出$()和 ` ` 的作用了吧。它进行命令替换,执行pwd。...

2017-03-29 11:29:35

阅读数:895

评论数:0

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

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

2017-03-28 15:26:14

阅读数:775

评论数:0

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

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

2017-03-28 13:49:28

阅读数:389

评论数:0

I/O多路复用——epoll

说完了select和poll,那么必须要说一下epoll的。select和poll是UNIX当中的,epoll是Linux所特有的。和前面的思路一样,poll解决了select的缺点,所以epoll的出现也是为了最大化的提高多路复用的效率,解决poll的缺点。epoll介绍epoll的实现和sel...

2017-03-28 13:23:15

阅读数:419

评论数:0

I/O多路复用——poll

上一篇我们说了关于select的相关信息,我们可以看到select是有弊端的,所以为了解决select的弊端,UNIX又在后期提出了poll。select的弊端这里就不多说了,上一篇博客有提及。pollpoll和select类似,不过在一些方面改善了select的弊端。它也是在指定的时间进行轮询文...

2017-03-27 22:29:25

阅读数:664

评论数:0

I/O多路复用——select

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

2017-03-27 21:40:20

阅读数:406

评论数:1

面试当中的git问题

面试当中的git和svn的内容:git是分布式版本控制系统,SVN是集中式版本控制系统。问题1:reset 与 rebase, pull 与 fetch 的区别git reset 不修改commit相关的东西,只会去修改.git目录下的东西。git rebase 会试图修改你已经commit的东西...

2017-03-27 19:55:41

阅读数:1076

评论数:0

Shell当中的字符串切割

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

2017-03-27 18:26:26

阅读数:937

评论数:0

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

网络数据包传送的过程在整个数据报传输过程当中,发送: 发送端进程首先调用系统调用,然后把数据发送给了socket,然后socket检查数据类型,调用系统调用send函数,send函数检查socket的状态,协议类型,传给了传输层,传输层对应的协议(UDP或者是TCP为这些数据创建数据结构...

2017-03-27 13:30:11

阅读数:426

评论数:0

TCP

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

2017-03-07 00:39:59

阅读数:600

评论数:0

关于路由相关

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

2017-03-07 00:28:24

阅读数:382

评论数:0

ARP协议

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

2017-03-04 20:08:19

阅读数:520

评论数:0

gdb调试多线程多进程

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

2017-03-03 09:28:06

阅读数:638

评论数:0

进程间关系

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

2017-03-01 22:17:37

阅读数:657

评论数:0

数据链路层的三个问题

今天学习了关于数据链路层的知识,数据链路层使用的信道主要有以下的两种类型: 1. 点对点信道。这种信道使用一对一的点对点信道方式。 2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。通常我们使用的更多的是点对点的信道,所以在这里我们需要了解一些相关的概念。点对点信道的数据链路...

2017-03-01 19:05:37

阅读数:1008

评论数:6

linux定时任务(crond)

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

2017-02-27 22:12:55

阅读数:364

评论数:0

守护进程

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

2017-02-27 17:46:52

阅读数:510

评论数:1

linux学习——信号

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

2017-02-25 16:12:41

阅读数:761

评论数:1

多线程编程(1)

线程概念线程线程就是进程的若干个执行流,因为一个进程在某一时刻只能去做一件事情,有了线程之后,我们可以在同一时间去做不同的事情,比如我正在边利用cmd markdown写博客。边用网易云音乐听音乐,这样多线程的情况下,能给我们带来很多好处。 在系统内核中其实是不存在线程的,linux使用进程模拟线...

2017-02-20 20:14:42

阅读数:699

评论数:0

进程间通信——消息队列

前言进程间需要进程通信进行数据传输和资源共享,另外一个进程在很多时候需要向另外的一个进程通知事件,有时候进程之间存在关系,需要去控制另外的一个进程,所以进程通信是很需要的。进程间通信的第一种就是消息队列什么是消息队列消息队列是消息的链表,存放在内核当中,由消息队列标识符标识,消息队列提供一种进程之...

2017-02-20 17:29:55

阅读数:886

评论数:2

进程间通信——共享内存

前言进程间IPC通信的三大主题,消息队列,信号量,共享内存,我们接下来说一说共享内存,共享内存可以提供给服务器进程和客户进程之间进行通信,不需要进行数据的复制,所以速度最快,只需要让两个进程通过页表映射到同一块物理内存即可,这样,这块物理内存是两个进程都能看到的,这样当一个进程进行写操作,另外的一...

2017-02-20 16:03:07

阅读数:687

评论数:4

静态库和动态库

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

2017-02-18 15:41:58

阅读数:294

评论数:0

进程间通信--信号量

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

2017-02-16 23:29:32

阅读数:504

评论数:0

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

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

2017-02-12 14:09:08

阅读数:516

评论数:0

进程调度算法

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

2017-02-12 13:32:46

阅读数:441

评论数:0

进程—内存描述符(mm_struct)

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

2017-01-12 10:20:00

阅读数:3000

评论数:0

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

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

2017-01-12 09:52:15

阅读数:944

评论数:0

linux中关于压缩的命令

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

2017-01-01 10:55:44

阅读数:3021

评论数:0

从一个进度条看问题

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

2016-12-31 20:45:40

阅读数:3037

评论数:0

初识linux下的find命令

1.认识find命令关于find命令,本人认为是linux当中所有的命令当中最重要的一个命令之一,所以,在这里,我们来聊一聊find命令。find命令用于在目录下查找文件,find是在磁盘上进行查找,所以相对来说,效率会低一些。首先,给出find命令所有的参数 -amin<分钟>:查...

2016-12-30 19:36:08

阅读数:689

评论数:0

初识linux下的三个时间

1.从命令看时间在linux下,我们可以去查看一个文件的三个时间,比如:对于test.c文件我们可以查看时间,使用命令 stat查看stat test.c在这里我们得到以下信息。 通过上述信息,我们可以看到有许多信息,接下来,对于这三个时间,我们进行一番讲解。2.深入理解三个时间atime...

2016-12-24 22:29:29

阅读数:2052

评论数:0

初识linux软链接和硬链接

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

2016-12-22 20:55:46

阅读数:1549

评论数:3

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

对一个数组按照给定的下标进行排序,仅仅使用两两交换的方式,要求不能对数组进行扩容,尽可能少的额外空间。 如:原数组为A,B,C,D,E,现在给定的新位置为3,0,1,4,2,那么排序后为D,A,B,E,C, void SwapSort(int *pArr,int *pPos,i...

2016-12-17 19:13:25

阅读数:1116

评论数:1

STL剖析——空间配置器

近来闲来无趣,看了下STL的空间配置器。首先恭喜我入坑,网上无数的人都在剖析这STL的空间配置器,所以,刚好,今天我也加入了这个团队,这个应该是我目前看到的比较完整架构的一个源码了吧,希望能提示我的水平,毕竟设计的很好。在这里特别说下,没有操作系统的知识,所以在这里的线程和锁的这些问题,我们一概不...

2016-12-09 12:59:15

阅读数:626

评论数:0

回忆智能指针

今天去回想了一下智能指针,发现长时间不用,好多知识点都忘记了,所以在这里写一篇博客记录一下。C++当中没有自动内存回收机制,这样每次new出来的内存都需要我们手动的去delete,这样就会存在忘记的可能性,最终造成内存的泄漏。,所以为了解决这个问题,C++引入了智能指针。std::auto_ptr...

2016-12-05 11:13:57

阅读数:268

评论数:0

内存池——实现一个简单的固定大小的内存池

最近在STL当中看到了第二级内存分配器,这里有个内存池的内容,在这在知乎上看到了内存池的相关内容,所以萌生了一个想自己写一个简单的内存池的想法。这种简单的内存池,援引自知乎的: 实现固定内存分配器: 即实现一个 FreeList,每个 FreeList 用于分配固定大小的内存块,比如用于...

2016-12-04 21:48:23

阅读数:1586

评论数:0

二叉树——面试题

1.求二叉树中最远的两个节点的距离在这我们首先来分析思路,对于最远的两个节点,在这会有两种情况。1)如果root为NULL,那么这是一颗空树。空树的最远子节点距离和高度均为零。 2),如果root非空,最大距离要么是左子树中的最大距离,要么是右子树中的最大距离,要么是左子树节点中到根节点的最大距...

2016-11-30 12:33:21

阅读数:989

评论数:0

归并法外排序—海量数据排序

1.外归并排序讲完了内排序,我们来了解一下,外归并排序,外归并排序一般是应对于数据量非常大的数据,这些数据放在硬盘上,无法一次性的放到内存上。所以,我们通常采用的思路对于这些数据就是进行切分,然后对切分出来的文件进行排序。在排序的时候,小文件我们采用快排来排序,如果是大文件,我们就从两个文件中一个...

2016-11-29 20:10:55

阅读数:848

评论数:0

从一道小米面试题看并查集

首先,我们从一道题来引出这个问题。假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友…),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。假如:n = 5,m = 3,r = {{1 , 2} , {2 , 3} , {4 , 5}}...

2016-11-26 22:06:12

阅读数:715

评论数:1

非比较排序—计数排序和基数排序

讲述完了比较排序以后,我们来看一下非比较排序。1.计数排序实现计数排序是一种稳定的排序算法,计数排序实现简单。它算法的步骤是:1)首先找出序列当中的最大和最小的数,然后通过这两个数确定一个范围,这样就可以直接建立一个范围这么大的哈希表。 2)把数对应哈希表的下标,统计次数。 3)通过哈希表,从...

2016-11-26 19:37:16

阅读数:381

评论数:0

分析归并排序

对于归并排序而言,我们应该需要关注一下思想,归并也是一种分治的思想,类似与快速排序,但是又和快速排序有本质的区别。归并排序归并排序将要排序的序列分成两个长度相等的子序列,然后对每一个子序列进行拆分,一直到只有两个元素的两个子序列,对这两个子序列进行归并,将它们合并成一个序列,这种方法就是所说的二路...

2016-11-24 09:25:04

阅读数:551

评论数:0

选择排序及其优化

选择排序是八大内部排序方法中的一种,选择排序的整体的思想就是,我们在一个序列当中选出一个最大的(升序为最小的),然后和第一个元素交换,然后后面再在剩下的找最大的,再和第二个元素交换。这样最终就可以得到一个有序的序列。我们最先接触的就是这种写法。//Cpp版本 template<typenam...

2016-11-23 22:22:22

阅读数:1971

评论数:1

快速排序及其优化

我们今天来研究下快速排序,快速排序的一个整体的思想就是分治的思想,在这个过程当中,首先对一个大区间进行单趟快速排序,然后把大区间分成多个区间,再去进行单趟排序,一直到这个区间中的元素只剩下一个元素,这样重复以后就可以得到最后的排序后的结果。 1.单趟排序分析快速排序的最重要的就是单趟排序,接下来...

2016-11-23 22:13:46

阅读数:1716

评论数:1

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