自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ String类的模拟实现

关于String类的模拟实现:一.深拷贝:1.传统写法:#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <stdlib.h>#include <string>#include <assert.h>using namespace std;class String{...

2019-11-05 14:43:00 359

原创 C++ 深拷贝和浅拷贝

深拷贝和浅拷贝是在C++中非常重要的概念,不管是在面试还是在未来的工作中都会经常用到,很多人在学完C++很长一段时间内可能都没有吃透什么是深拷贝和浅拷贝以及它们的运用,今天我们总结关于深浅拷贝的相关概念和底层原理:一.浅拷贝:首先我们来看一段代码:#include <iostream>#include <stdlib.h>#include <string&...

2019-11-05 13:34:01 431

原创 C++ String类的使用

一.C++标准库中的String类:在C语言中字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些STR系列的库函数,但这些库函数和字符串是分离的,不太符合OOP的思想,而且底层空间需要用户自己进行管理,可能会造成访问越界;因此咋C++中提供了String类,方便字符串操作函数。在C++标准库中对String类做了如此下的解释:String类是表示字符串的字符串类;...

2019-11-04 19:54:16 409

原创 C++ 类与对象(三)(初始化列表,友元,static成员,内部类)

本文重点:1.再谈构造函数;2.C++11的成员初始化;3.友元;4.static成员;5.内部类;一.再谈构造函数:我们之前总结了六种默认成员函数的概念以及用法:(可点击链接进行查看:https://blog.csdn.net/DX_Jone/article/details/90242922)其中总结了关于构造函数的用法以及特点,本文将再次进行补充:1.构造函数体赋值:我们...

2019-10-30 17:08:10 407

原创 传值调用,传址调用,传引用调用三者的区别分析

大多处刚接触程序的小伙伴在学习C/C++的过程中都会遇到函数传值调用,传址调用和传引用的概念,刚开始接触时肯定一时无法理解三者的区别和联系,可能有一部分小伙伴可能学了很长接触很长时间也一直对三者的概念有一定的困扰,以及如何去应用,因为我也有类似的经历。本文将总结关于传值调用,传址调用和传引用三者的区别,如有不妥之处请私信,我将再次改正;一.传值调用:传值调用最早接触应该是在学C语言的阶段,接...

2019-10-30 14:43:11 5131

原创 C语言实现------扫雷游戏

#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <stdio.h>#include <time.h>#define ROW 9#define COL 9#define MINE_COUNT 10//雷的数量char mine_map[ROW + 2][COL + 2] = { '...

2019-10-24 13:40:17 344

原创 C语言实现------五子棋游戏

之前我们实现了关于电脑版的三子棋的游戏玩法和思路,今天我们来实现五子棋的玩法和思路(和三子棋的很多思路很相似)#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <time.h>#define ROW 10#define COL 10char Bo...

2019-10-24 13:34:17 1695

原创 C语言实现------三子棋游戏

我们在无聊的有时候会喜欢和朋友五子棋,今天我们通过C语言来实现一个电脑版三子棋游戏,即横,竖,斜任意一个先连成一条线者就可获得胜利;游戏规则和设计思路:三子棋横,竖,斜三者任意连成一条线就可获得胜利,一个是玩家,一个是电脑;玩家落子时,提示玩家输入一个坐标;轮到电脑时,电脑随机找一个空白坐标落子;对于局部变量,没初始化,确实是随机值(栈上的残留数据);对应于全局变量,没显示初始化,就会默认为初...

2019-10-24 13:21:17 328

原创 字符串和内存函数的模拟实现

本文重点:1.求字符串长度:strlen2.长度不受限制的字符串函数: strcpy , strcat , syrcmp3.长度受限制的字符串函数:strncpy , strncat , strncmp4.字符串查找:strstr , strtok5.错误信息报告:strerror6.内存操作函数:memcpy , memmove , memset , memcmp在C语言中对字...

2019-10-17 16:30:41 284

转载 键值对

一、键值对问题:键值对(”key = value”)字符串,在开发中经常使用;每个键后面对应着相应的值, 当按下相应的键时, 就会输出相应的结果,那么如何用程序实现呢?二、举个例子:1.要求:要求1:请自己定义一个接口,实现根据key获取valude;要求2:编写测试用例。要求3:键值对中间可能有n多空格,请去除空格2.注意:键值对字符串格式可能如下:“key1 =valude...

2019-09-21 19:30:17 4755

原创 C++类型转换

本文重点:1.C语言中的强制类型转换;2.C++强制类型转换;3.为什么要进行强制类型转换;4.RTTI;一.C语言中的强制类型转换:在C语言中类型转换分为两种:一种为隐式类型转换,一种为显示类型转换;1.隐式类型转换:我们写代码的时候,在类型转换的时候,通常在前面加上类型的名字,如果不加的话,不同的类型进行运算,编译器自己去判断如何进行转换,这种方式就是隐式类型转换。由编...

2019-09-21 15:10:36 364

转载 Linux------线程池原理及实现

1.为什么需要线程池??首要明白两个地方:线程的创建需要内存资源;线程的创建和销毁需要时间资源;显而易见,由于以上两个原因,不得不寻找一个折衷的方式面对多任务的问题。如果我们只创建一定量的线程,且在一个线程执行完某一任务后,重复利用该线程去处理新的任务而不是直接销毁它,那么通过这两个策略我们就可以“朴素”的解决以上两个问题。线程池的初衷就是想搭建一个有一定数量线程,且可以重复利用这些...

2019-09-20 18:31:11 334 1

原创 Linux系统----生产者和消费者模型及实现

本文重点:生产者和消费者模型:信号量的原理及实现流程:一.生产者和消费者模型及实现原理:1.锁等待:我们知道在实现线程间同步的过程中条件变量通过提供线程等待与唤醒线程的实现线程同步,用户在判断条件不满足的情况下提供等待功能,线程什么时候等待,需要一个判断条件;而这个判断条件也是一个临界资源,条件变量的条件判断应该是一个循环判断:多个顾客线程若被唤醒,只有一个顾客可以加锁,其他的顾客...

2019-09-20 13:59:24 421

原创 Linux下线程安全及实现方法

本文重点:1.线程安全概念:2.线程安全的实现方法:3.线程间同步的实现:4.线程间互斥的实现:5.

2019-09-19 23:36:55 712

原创 Linux线程概念和线程控制

本文重点知识:1.线程概念:2.线程之间的资源独有与共享:3.多线程处理任务的优缺点:4.线程控制:一.线程的概念:1.什么是线程??在操作系统中使用pcb来描述一个程序的运行,因此pcb就是一个进程;但是在Linux下没有为线程设计一个pcb来控制线程的运行,因此线程此时就是以进程pcb模拟实现的;Linux下以pcb模拟实现线程,因此Linux下的线程实际上是一个轻量级进程;...

2019-09-19 17:56:25 292

转载 操作系统的区分分页式和分段式内存管理

计算存储的层次结构:当前技术没有能够提供这样的存储器,因此大部分的计算机都有一个存储器层次结构,即少量的非常快速、昂贵、易变的高速缓存(cache);若干兆字节的中等速度、中等价格、易变的主存储器(RAM);数百兆或数千兆的低速、廉价、不易变的磁盘。这些资源的合理使用与否直接关系着系统的效率。1.内存的管理方法:内存管理主要包括虚地址、地址变换、内存分配和回收、内存扩充、内存共享和保护等功...

2019-09-17 23:49:07 1524

原创 IO多路转接模型-----select及select版本的TCP服务器的实现

一.关于IO多路转接模型的作用:作用:在数据传输过程中提高传输效率;我们知道在数据通信的过程中通常分为两个部分:1.等待数据到达内核;2.将数据从内核中拷贝到用户区;在实际的应用中,等待的时间往往比拷贝的时间多,因此我们要想提高效率,必然要将等待时间减少(在一定的时间内减少等待比重);IO多路转接就是解决这个问题的:一次监视多个文件描述符;在IO多路转接中,由于一次等待多个文件描述符...

2019-09-17 21:47:27 307

原创 IO多路转接模型-----epoll及epoll版本服务器的实现

epoll的实现原理:epoll模型是linux下性能最高的IO多路转接,在epoll下就绪事件变得不同。对于可读事件就绪就是接受缓冲区的数据大小大于低水位标记(一般为一字节);对于可写事件就绪就是可写缓冲区的空闲空间大小大于低水位标记(1B);epoll在内核中是一红黑树进行节点的删除和添加,还有一个rdlist双向链表,用来存储就绪事件的链表;epoll也是采用事件结构来进行监控的;...

2019-09-17 21:47:07 308

原创 IO多路转接模型-----poll及poll版本的TCP服务器的实现

poll函数的实现及原理:poll实际上和select类似,都是在内核中开辟一个空间,但是不是监控每种事件,poll监控的是事件结构化的事件集合;1.函数模型:struct pollfd{ int fd; short events;//监控的事件 short revents;//就绪的事件}常用的事件就是POLLIN和POLLOUT:#include <poll.h...

2019-09-17 21:45:35 252

原创 高级IO:五种IO模型

本文重点:1.理解五种IO模型的基本概念;2.掌握select编程模型,能够实现select版本的TCP服务器;3.掌握poll编程模型,能够实现poll版本的TCP服务器;4.掌握epoll编程模型,能够实现epoll版本的TCP服务器;5.理解epoll的LT模式IT模式;6.理解select和epoll的优缺点对比;五种IO模型:一.在总结五种IO模型之前我们了解一下什么...

2019-09-13 16:55:28 256

转载 关于HTTP的8种请求方法

关于HTTP请求方法中的8种请求方法(简单介绍)HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分配的。当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。我们也可以自己指定访问端口如:http://www.ip138.com:80。 需要注意的是,现在大多数访问都使用了HTTPS协议,而H...

2019-09-05 20:05:32 2142 1

原创 项目:信息共享工具

一.项目介绍:该项目是一个局域网中进行附近文件共享下载的工具;实现能够进行搜索匹配局域网中运行工具的主机获取到局域网中在线主机列表,然后获取指定主机所共享的文件列表信息,并且对指定主机的指定文件进行多进程分块下载提高传输效率;实质:搜索到局域网中的在线用户,获取到在线用户的列表后查看指定用户的共享文件列表,然后对感兴趣的文件进行选择下载;二.整体的项目框架:服务器端设计:设计实现http...

2019-09-03 23:21:05 350

原创 如何查看CentOS7的版本信息

一.查看版本号:CentOS的版本号信息一般存放在配置文件当中,在CentOS中,与其版本相关的配置文件中都有centos关键字,该文件一般存放在/etc/目录下,所以说我们可以直接在该文件夹下搜索相关的文件;ll /etc/*centos*显示结果为:其中存放其版本配置信息的文件为“centos-release”,翻译过来就是“CentOS的发行版”,所以说我们可以在这里查看Cent...

2019-09-02 17:48:46 282

原创 归并排序的思想及其实现方法

思想:1.整个数组是无序的;然后将数组平均切分成两份;2.分治算法:先对左边的区间进行归并排序; 再对右边的区间进行归并排序;直到size=0或size=1;3.合并两个有序数组;归并排序的实现:void Merge(int array[], int left,int mid, int right, int extra[]){ int i = left; int...

2019-09-01 13:03:06 277

原创 常见排序算法的实现------交换排序

交换排序:交换排序的分类:冒泡排序快速排序1.冒泡排序:思想:从数组的末尾元素开始比较两个元素的大小,然后根据大小换位置,直到将最大或最小的元素排到数组的起始位置;代码实现如下:void Swap(int *left,int* right){ in tmp=*left; *left=*right; *right=tmp;}void Bubblesort(int ar...

2019-09-01 12:53:49 396

原创 C++ 智能指针

本文重点:1.智能指针的概念;2.auto_ptr,unique_ptr,shared_ptr等智能指针的使用及原理;

2019-08-31 23:12:25 283

原创 常见的排序算法的实现----选择排序

选择排序:选择排序的分类:直接选择排序堆排1.直接选择排序:

2019-08-20 20:44:35 181

原创 二叉树的基本概念及顺序结构的实现

一.树的概念:1.树的概念:树是一种非线性的数据结构,它是由n个有限节点组成的一个具有层次关系的结合;2.树的特点:每个节点有0个或多个子节点;没有父节点的节点为根节点;每个非根节点有且只有一个父节点,每个子节点可以分为多个不相交的子树;3.关于树的几个基本概念:(1)节点的度:一个节点含有的子树的个数;(2)叶节点:节点的度为0的节点;(3)双亲节点:一个节点含有子节点,则该节点...

2019-08-20 20:38:56 584

转载 为什么HTTPS比HTTP更安全?

原文链接:https://blog.csdn.net/howgod/article/details/89596638前言近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。读完本文,希...

2019-08-20 18:13:54 408

原创 C++ 模板(二)

非类型模板参数;类模板的特化;

2019-08-20 15:29:40 151

原创 关于顺序表和链表的区别总结

顺序表:一.概念:通过一段连续的物理地址存储数据元素的线性结构,通常用数组进行存储;二.时间复杂度:在尾插/尾删时,时间复杂度为O(1);在中间或前面进行插入删除时,时间复杂度为O(n);三.底层空间:顺序表的底层空间是连续的,相当于数组存储;四.顺序表支持随机访问;五.顺序表可能需要扩容:顺序表在存储元素的时候第一步是判断是否有足够的空间可以进行存储,如果空间不够时,此时就需要...

2019-08-18 16:56:32 619

原创 常见的排序算法的实现------插入排序

插入排序:插入排序的分类:直接插入排序希尔排序1.直接插入排序:思想:插入排序在执行的过程中就像我们平时玩扑克牌一样,把待排序的数值依次插入到已经排好序的数据中,直到所有的数据都插入数据完成为止;void InsertSort(int array[],int size){ for(int i=0;i<size;++i){ int key=array[i]; in...

2019-08-16 14:30:16 176

原创 常见的七种排序算法

一.关于排序的概念:排序的概念:排序就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作;排序的分类:排序分为内部排序和外部排序;内部排序:数组元素全部放在内存中的排序;外部排序:数据元素太多,不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序;二.关于排序的常见算法分类:算法之间的时间复杂度,空间复杂度,以及稳定性的比较:...

2019-08-16 13:21:14 222

原创 进程间通信

一.进程间通信的目的:1.数据传输:一个数据需要将它的数据发送给另一个进程;2.资源共享:多个进程之间共享同样的资源;3.通知时间:一个进程需要向另一个或一组进程发送消息,通知发生了什么事;如子进程终止时要通知父进程;4.进程控制:有些进程希望完全控制另一个进程的执行,(如Debug进程);此时控制进程希望能够拦截另一个进程的所有缺陷和异常,并能够及时知道它的状态改变;二.进程间通信的分...

2019-07-31 21:28:05 183

原创 Linux 进程间通信------消息队列

一.关于消息队列的概念:1.消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法 ;2.每个数据块都被认为有一个数据类型, 接收者进程接收的数据可以有不同类型的数据 ;3.消息队列也有管道一样的不足, 就是每个消息的最大长度是有上限的(MSGMAX), 每个消息队列的总的字节数是有上限的(MSGMNB), 系统上消息队列的总数也有一个上限(MSGMNI) ;4.进程通信,消息队列的...

2019-07-31 21:23:48 200

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

共享内存是最快的一种IPC形式;因为消息队列,管道等都需要用到系统接口,而共享内存则是直接改变逻辑地址到物理地址的映射关系,即当一个进程A看到这片内存时,对应的只要改变进程B的映射关系,此时进程B就可以立马看到这份公共资源;1.共享内存的原理:(1)在物理内存上开辟一块内存空间;(2)将这块内存通过页表映射到进程的虚拟地址空间;(3)进程可以直接通过进程的虚拟地址访问到这块物理内存,进行操...

2019-07-31 20:58:02 444

原创 Linux 进程间通信---管道

一.管道的概念:管道是一种最基本的IPC机制,通过半双工通信方式传输数据资源;其本质原理是让多个进程通过访问到相同的缓冲区来实现通信;管道的局限性:(1)数据自己读不能自己写。(2)数据一旦被读走,便不在管道中存在,不可反复读取。(3)由于管道采用半双工通信方式;因此,数据只能在一个方向上流动;即可选方向的单向传输;如图所示:管道没有固定的输入输出接口,但是只能从一端向另一端传输--...

2019-07-31 20:14:00 261

原创 对于标准IO库接口 & 系统调用接口的介绍及用法总结

一.标准IO库接口的介绍:1.标准库IO接口的分类:(1)fopen:打开文件;接口:FILE *fopen(const char *path, const char *mode);参数:path:文件路径;mode:文件打开方式;r:只读方式打开文件,读的位置在文件的起始位置;r+:可读可写方式打开文件,文件的读写在文件的起始位置;w:只写方式打开文件,若文件不存在则创建,若...

2019-07-26 16:32:43 544

原创 实现微型shell的原理和方法

本文重点:

2019-07-25 14:33:28 203

原创 Linux 进程控制

本文重点:1.进程创建:2.进程终止;3.进程等待;4.程序替换;

2019-07-24 17:59:38 265

空空如也

空空如也

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

TA关注的人

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