自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 分段分页机制&虚拟地址映射过程

分段分页机制&虚拟地址映射过程分页:系统初始化时,类似于大小相等的固定分区,会将内存划分为很小的区块,称作页,而操作系统会为每一个进程分别维护一个页表,则进程根据这个页表可以实现加载到内存上页的不连续。分段:加载进程时,将进程根据段加载,一个进程可以被分为多个段,操作系统会为每个进程维护一个段表,则加载的进程可以根据这个段表在虚拟内存上不连续的占据多个段。MMU:内存管理...

2019-09-09 10:15:42 845

原创 select,poll和深入探索epoll

select,poll和深入探索epoll我们首先先了解一下什么是I/O复用:我们用一个单进程或者单线程的服务器程序去监听多个文件描述符上是否有关注的事件发生,如果某些文件描述符上有事件发生,则程序接着处理有事件发生的文件描述符,其他的不用理会,这样就可以极大的提高程序的性能。常用的I/O复用技术有select,poll,epoll我们介绍前两种,主要探索第三种epoll...

2019-08-20 21:16:38 106

原创 二叉树的创建(先序创建,先序中序创建,中序后序创建)

二叉树的创建我们这里使用三种方法创建二叉树:根据先序创建二叉树 根据先序中序创建二叉树 根据中序后序创建二叉树①:二叉树的节点定义:②:购买二叉树节点内存③:释放二叉树节点内存一:根据先序创建二叉树思路:申请节点并将当前元素赋值 递归创建其左子树,参数传字符串下一个元素地址 递归创建其右子树,参数传字符串下下一个元素地址特...

2019-08-17 01:43:09 3068

原创 LRU页面置换算法C++代码

LRU页面置换算法C++代码常见的缓存算法:LRU:(least recently used) 最近最少使用,思想是如果一个数据刚被访问过,那么将来被访问的几率也更高 LFU:(least frequently used) 最少经常使用,思想是如果一个数据很久不被访问,那么将来被访问的几率也不大 FIFO:(first in first out) 先进先出,思想是如果一个数据最先进入缓...

2019-08-17 00:55:09 554 1

原创 二叉树的遍历(先序遍历,中序遍历,后序遍历)

二叉树的遍历我们这里将遍历方法分为:4类7种4类分别是先序遍历,中序遍历,后序遍历,层次遍历其中前三个又分为递归与不递归的方法二叉树的结点定义:我们一一来看:1.递归的先序遍历思路:利用递归的特性,我们将树扁平化处理,所以遍历方法就是按先序的顺序进行遍历先打印当前结点,再递归调用打印树的左孩子和右孩子void PreOrder(BtNode *...

2019-08-14 21:03:24 177

原创 全排列,全部子集,数组中找第k小的值

1.全排列:template<class Type>void Swap(Type &a,Type &b){ Type c = a; a = b; b = c;}void Perm2(int arr[], int start, int end){ if(NULL == arr) { return; } if(start == end)//...

2019-08-14 20:34:48 135

原创 如何实现一个不能被继承的类

如何实现一个不能被继承的类我们有两种方式:第一种:类似于单例模式的处理,将类的构造函数或者析构函数写到private下,则派生类则无法继承后实例化,但是这个类也将无法在类外实例化。 第二种:类似普通类相同的处理,利用虚继承和友元,虚继承的特点是派生类实例化的时候,会跳过这个继承的类,直接去调用这个类虚继承的类的构造函数。我们给出代码和运行结果:第一种代码:...

2019-08-09 23:59:09 292

原创 Linux几个基础命令

Linux几个基础命令find:查找文件将当前目录和其子目录下所有延伸名是.c的文件列出来将目前目录其其下子目录中所有一般文件列出将目前目录及其子目录下所有最近 20 天内更新过的文件列出查找当前目录中更改时间在7日以前的普通文件查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的普通文件:查找系统中所有文件长度大于1M的普...

2019-08-08 23:56:45 98

原创 进程,线程,以及什么是协程

进程,线程,以及什么是协程进程与线程的基础概念,我们之前都写过,这里只是来简单理一遍:进程:执行中的程序,程序是存储在磁盘上的可执行文件,是静态的概念,而进程是动态的概念,进程可以看作一组有序指令+数据+资源的集合。 线程:我们将线程看作轻量级的进程,线程是进程内部的一条执行序列,一个进程中至少有一条线程,也就是main主函数所代表的执行序列,称之为主线程,通过可以通过线程库创建线程(函...

2019-08-08 14:08:35 123

原创 线程的基础概念与线程创建

线程的基础概念与线程创建我们在之前了解了什么是进程,那么什么是线程呢?进程:执行中的程序,程序是存储在磁盘上的可执行文件,是静态的概念,而进程是动态的概念,进程可以看作一组有序指令+数据+资源的集合。 线程:我们将线程看作轻量级的进程,线程是进程内部的一条执行序列,一个进程中至少有一条线程,也就是main主函数所代表的执行序列,称之为主线程,通过可以通过线程库创建线程(函数线程)。...

2019-08-06 02:37:48 83

原创 偶然发现“for循环”+“:”引用符的使用

偶然发现“for循环”+“:”引用符的使用我们在做题的是否,突然发现for循环+引用符的使用可以很好的用在容器中比如我们想将一个容器中的所有元素逐一打印或者逐一将其添加到另一个容器中,我们就这样用继承的方式去继承这个容器巧妙的进行打印或添加我们举两个例子:第一个:逐一打印容器中的值,我们可以使用迭代器进行遍历打印,也可以使用上述方法现在vector<int> xxx...

2019-08-06 01:36:54 115

原创 同步异步,阻塞非阻塞

同步异步,阻塞非阻塞我们首先要知道同步异步是什么?而阻塞非阻塞又是什么?这两种不是同样的概念:因为:同步异步:是指一种消息通知方式(关注的是进程在发送请求后,如何知道对方是否已经消息回馈)同步:就是指发送方发送一个申请的时候,在没接收到回馈的消息的时候,就一直不断的去探测查看对方是否已经回馈。 异步:就是指发送方发送一个申请的时候,发送方不会去不断探测,而是当对方消息回馈...

2019-08-03 23:56:25 71

原创 linux上可以运行多少进程 && 一个进程可以开辟多少线程?

linux上可以运行多少进程&& 一个进程可以开辟多少线程?这个问题我们被困扰了很久,只知道一个大致数字,而没有很准确的结果,今天我们就自己测试一下?首先我们需要了解:进程:是系统分配资源的单位,是运行中的程序,是程序+指令+资源的一组集合。 线程:是cpu调度执行的最小单位,可以看作轻量级进程,线程是进程中的一条执行序列,我们可以通过线程库创建线程我...

2019-08-01 20:20:33 277

原创 fork

Fork创建总结(一)一:在fork总结之前,我们先详细认识一下进程,进程的基本概念在前面博客已经写过了,这里就不冗余了。我们知道进程是处于执行期的程序以及相关资源的总称。像打开的文件,挂起的信号,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还有用来存放全局变量的数据段等。而内核在为每一个进程分配PCB的时候,实际上是分配了两个连续的物理页面(共8K),这两个页面的底...

2019-07-31 19:24:47 220

原创 new和delete[]的隐藏属性(new+delete补充)

new和delete[]的隐藏属性(new+delete补充)我们在一次测试中突然发现,用new开辟的内置类型空间数组,我们知道是需要delete[]来进行释放的,但是突然发现不加[],光delete也可以将其释放,不会造成内存泄漏:查找资料后发现,是因为new开辟内置类型空间的时候会将其开辟的大小信息也存储下来,在delete的时候进行释放,而不会造成内存泄漏。...

2019-07-24 11:14:44 80

原创 Boost库 --- 四种智能指针

Boost库 --- 四种智能指针智能指针基本思想:智能指针:主要有Boost库中的智能指针和STL标准库中的智能指针构成auto_ptr unique_ptr(引入前在boost库中叫做scope_ptr) shared_ptr weak_ptr其中auto_ptr为C++11标准之前拥有,但是auto_ptr问题很大,所以在C++11标准后引入了三种boost...

2019-07-24 00:58:26 118

原创 结构体和联合体字节对齐问题

结构体和联合体字节对齐问题实例在之前刷题的过程中遇到了一道题目:它是长这样的:typedef union {long i; int k[5]; char c;} DATE; struct data { int cat; DATE cow; double dog;char cmd} too; DATE max; 语句 printf("%d"...

2019-07-24 00:31:27 314

原创 C++继承和多态(虚函数、纯虚函数、虚继承)

C++继承和多态(虚函数、纯虚函数、虚继承)一:继承继承的概念:为了代码的复用,保留基类的原始结构,并添加派生类的新成员。继承的本质:代码复用我们用下图解释下:那么我们这里就可以提出几个问题了:①:进程的方式有哪些呢?这里有三种继承方式:public:任意位置可以访问 protected:只允许本类类中以及子类类中访问 private:只允许...

2019-03-05 11:32:40 1353

原创 运算符重载基础&复数的重载&模板形参中传递函数指针

运算符重载基础&复数的重载&模板形参中传递函数指针我们之前学习了C++的函数重载,但是不止函数可以重载,运算符也是可以重载的,运算符重载主要应用于对象,因为一般数据结构间的运算符没有重载的必要性。运算符重载后,原有的基本语义不变,但是有几点需要注意:不会改变运算符的优先级 不会改变运算符的结合性 不会改变运算符所需要的操作数的个数 不会改变运算符的原有的语法结构...

2019-03-01 02:36:03 175

原创 函数模板与类模板

函数模板与类模板我们在前面的博客中学习过了函数重载,现在则需要学习一下模板,模板相对于函数重载有着特有的优势,我们举例说明。之前我们学习函数重载的时候,举了一个例子,就是将传入的两个值相加,并进行输出。代码如下:当时我们为了传入不同类型的数据,比如double类型的数据,我们使用了函数重载。代码如下:如果还要传入char类型的数据,则还要再进行编写,而这...

2019-02-25 01:00:34 160

原创 友元(友元函数、友元类、类成员函数的友元)

友元(友元函数、友元类、类成员函数的友元)(friend)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或者类。我们可以将友元大致分为3类:友元函数 友元类 类成员函数的友元一:友元函数友元函数:是指某些虽然不是类的成员函数,但是能够访问这个类的所有成员的函数。比如我们下列的代码:#include <iostream>class ...

2019-02-22 16:39:57 1594

原创 类的初始化列表以及const & static修饰成员

类的初始化列表以及const & static修饰成员一:初始化列表我们上一篇博客知道了对象的生成过程中,对象开辟了内存空间后就要进行初始化,而我们当时是这样初始化的:现在,我们有另一种方法,也可以完成初始化:我们看到第一步和第三步可以交给初始化列表完成,其实这两种方法都可以进行初始化,看个人喜好进行选择,不过有一些特殊情况只能选择第二种:比如:特殊情况1:...

2019-02-22 16:39:03 210

原创 类和对象基础

类和对象基础一:类的概念和封装我们前面了解过C语言是一门面向过程的编程语言,而C++是一门面向对象的编程语言,这个“面向对象”其实就体现在类和对象上,我们画上一幅图可以清楚认识一下:我们之前了解过C++的三大特征:封装、继承、多态继承和多态我们放在后面进行了解,这里主要搞清楚什么是封装:封装是面向对象程序设计的基础特征。它是将数据(属性)与函数(方法)进行合并成一...

2019-02-22 16:37:17 202

原创 C和C++的区别

C和C++的区别首先我们先简单介绍一下C语言和C++:①:C语言的介绍C语言是一个结构化语言,它的重点在于算法和数据结构。C语言的设计首要考虑的是如果通过一个过程对输入进行运算处理得到输出。 C语言可以做任何用处,但最大的用处还是写写操作系统和编译器之类的。 C语言是非常有效率的,作为一个底层编译语言,可以通过指针直接去对内存进行管理,另外很多语言都是用C语言来设计的,如java,...

2019-02-02 00:19:44 137

原创 进程的基础概念与管理命令

进程的基础概念与管理命令一:什么是进程:我们都知道程序是存储在磁盘上可执行的二进制文件,那么进程就是运行中的程序(执行时,将程序加载到内存上)。也就是说进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配的单位。我们画图示意:就比如,我们平时看到的乐谱就是程序,音乐大师演奏的过程就是所谓的进程。二:进程与程序的差别程序是一组...

2019-01-31 23:58:20 156

原创 C语言---求n的阶乘后面有多少个连续的0

C语言---求n的阶乘后面有多少个连续的0题目描述:给定一个正整数n,返回n的阶乘尾部连续0的个数。例如:(5,5*4*3*2*1=120,则返回1),(10,10*9*8*7*6*5*4*3*2*1=3628800,则返回2)题目分析:首先拿到这道题,直接可以想到最简单的方法就是,通过循环算出这个值,然会取个位,减个位,统计一下个数即可。但是运行后就发现不可行,因为如果n稍微大...

2019-01-31 23:57:48 1374

原创 静态库 & 共享库

静态库 & 共享库我们先来介绍一下库文件:在我们编程过程中,有一些公共代码是需要重复使用的,为了方便使用,我们就将这些公共代码封装成一个库文件,用的时候直接链接这个库就可以了,非常方便。库是分享公共程序代码的方式,一般分为静态库与共享库。那么静态库与共享库有什么区别呢?静态库:在链接时是将库文件代码拷贝一份到可执行文件中,如果库文件代码更新了,对之前生成的可执行文...

2019-01-31 02:02:30 193

原创 gdb调试的基本用法

gdb调试的基本用法gdb是GNU开源组织发布的一个强大的UNIX下的程序调试工具。一般来说,gdb主要帮忙你完成下面四个方面的功能:启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 可让被调试的程序在你所设置指定的断点处停住。(断点可以是条件表达式) 当程序被停住时,可以检查此时你的程序中所发生的事。 动态的改变你程序的执行环境。从上面看来,gdb和一般的调试工具没...

2019-01-29 21:51:53 208

原创 对超时重传、滑动窗口、拥塞控制的简单认识

对超时重传、滑动窗口、拥塞控制的简单认识我们之前说过TCP对于数据的可靠传输可以做到:数据准确的到达对端 数据到达后是有序的 数据不失真这也就是为什么说TCP是可靠的连接,而UDP是不可靠的连接。因为TCP拥有一些对于异常情况的处理机制来保证自身数据的可靠传输,这里我们就来看一下都有些什么机制:TCP重传机制 TCP滑动窗口 TCP的拥塞控制 接下来,我们对其依次进...

2019-01-23 01:40:16 823

原创 TCP与UDP的对比及其报头信息的解析

TCP与UDP的对比及其报头信息的解析我们先来看看TCP与UDP对于数据交互时的区别:TCP:面向连接的 可靠的 字节流服务字节流服务:发送方send数据的次数与接收方recv的次数没有必然联系 发送缓冲区中的数据具体分成几个TCP报文段进行传输,每个报文段又携带了多少数据,与send情况没有任何关系,只会与当前网络环境有关。 接收方接收数据时,所有接收到的TCP...

2019-01-23 01:07:45 809

原创 TCP/IP协议(三次握手、四次挥手、TCP状态转换)

TCP/IP协议(三次握手、四次挥手、TCP状态转换)我们先了解一下TCP的面向连接体现在:两端通信之前,必须先建立连接。 连接一旦建立,则两端的交互过程都是建立在这一连接上完成的,无需重新建立连接,直至关闭连接为止。 通信完成后,必须断开连接,以释放服务器的资源。 操作系统为我们维护连接,所以内核需要为连接分配相应的资源。 对于服务器而言,一个连接只能为一个客户端服务,从而造成服...

2019-01-20 01:01:22 380

原创 在一个数组中找到第k小的数(线性时间选择)

在一个数组中找到第k小的数(线性时间选择)在这一部分,我们讨论的题目为元素选择问题。这类题目的一般问法为:给定线性序集中n个元素和一个整数k,1 <= K <= n,要求找出这n个元素中第k小的元素,如(1,4,3,2,5)中第一小的元素就是1,第5小的元素就是5,第2小的元素就是2。在某些特殊情况下,很容易设计出解选择问题的线性时间算法。如:当要选择最大元素或最小元素时,显然...

2019-01-18 02:16:59 2967 1

原创 网络编程 --- UDP

网络编程 --- UDP前面我们实现的TCP网络编程,是基于TCP协议的,也是面向连接的字节流服务,这就是我们在创建socket的时候,socket函数的第二个参数总是指定为SOCK_STREAM,第三个参数protocol总是设置为0,即默认使用TCP协议。所以我们先来看一看TCP和UDP编程上的区别:TCP是有连接的,比如打电话,首先得拨号码(connect),接通电话(accep...

2019-01-17 17:33:08 1459 1

原创 网络编程 --- TCP

网络编程 --- TCP首先,我们得明确网络中进程是如何通信的。我们知道本地的进程间通讯(IPC)有很多种方式,总结后可以分为以下四类:消息传递(管道,FIFO,消息队列) 同步(互斥量,条件变量,读写锁,信号量) 共享内存(匿名的和具名的) 远程过程调用(它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。如TCP和UDP)但是这些都不是这篇博客...

2019-01-17 17:24:53 2250

原创 网络编程基础概念整理

网络编程基础概念整理我们学习网络编程之前,先来复习整理一下其基础的概念。①:首先,我们先要认识一下什么是计算机网络?网络的概念非常简单:可以将两个终端连接起来的叫做网络而互联网则是基于网络的基础上,将各个不同的网络连接在了一起,使之可以互相通讯,也可以叫作Inter网②:而什么是C/S分布式模式呢?C是client 客户,S是server 服务,则可以知道C/S...

2019-01-17 16:52:36 271 3

原创 C++中的名字空间和作用域

C++中的名字空间和作用域C++程序支持四种形式的作用域,分别是:①:名字空间作用域②:局部作用域③:类作用域④:语句作用域名字空间作用域:就是程序员利用名字空间定义在C++程序中划分出来的一块比较大的程序区段。在该程序区段内部,可以定义类型,函数,模版,变量。名字空间作用域可以跨越多个*.cpp文件而存在。在名字空间作用域内部还可以继续定义其他的名字空间作用域,也就...

2018-12-04 20:18:42 582

原创 C++:new和delete

C++:new和delete我们之前在学习C语言的时候,学习过了如何申请动态内存和释放内存。当时用的是C++/C语言的标准库函数malloc/free,而new / delete 是 C++的运算符。我们先来看几个问题:①:那这里我们就要想一下,有了 malloc/free,为什么还要 new/delete?答:对于非内部数据类型的对象而言,光用 maloc/free 无法满...

2018-11-28 17:17:04 218 1

原创 const与函数重载, 函数返回值之间的关系

const与函数重载, 函数返回值之间的关系const与函数重载:之前说过函数重载,对于参数来说,const是否能构成一种新的参数类型呢?例如:Funx(int a);Funx(const int a);这俩是否能构成重载呢?答案是不能的。为什么不能,你可以理解为,如果const没有修饰*指针或&引用,那么其类型其实并没有变化。什么意思呢?这里...

2018-11-27 21:08:06 426 1

原创 const基础与一级指针,二级指针,引用的结合

const基础与一级指针,二级指针,引用的结合const基础:在之前学习C语言的时候,我们就写过const,现在学习了C++,发现之前对于const的理解有些偏差,不够深刻。今天,我们就深入探索一下在C语言和C++下const的区别。一:const在C和C++中的区别①:在C语言中,被const修饰的内容称作常变量。它本质是一个变量,因此,C语言中const修饰的变量并...

2018-11-27 21:01:08 223

原创 C++引用传递基础

C++引用传递基础引用变量:相当于是给变量内存块(内存单元)起别名例如:这里,我们存放整形变量10的内存单元名字为a,我们用过int &b = a; 让这个叫a的内存块有另外一个名字为b,从这里开始,a和b都指的是这个存放整形变量10的内存单元。引用变量主要应用在函数的形参上,通过引用变量的使用,传递给函数的参数,就不是实参的副本了,可以直接通过修改形参,修...

2018-11-26 16:39:31 1969

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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