自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于TCP的网络聊天系统

想要自己动手实现一款专属自己的聊天室吗?那么就来看看这篇文章吧!!

2022-08-06 19:38:30 11648 6

原创 GZIP文件压缩原理以及实现

Huffman压缩,LZ77压缩,GZIP压缩三者的实现原理以及缺陷和代码实现

2022-08-06 19:09:41 5739 1

原创 IO/多路复用(select/poll/epoll)

五种基本的IO模型为什么需要IO多路转接呢?三种IO转接模型的优缺点 select/poll/epoll

2022-07-30 10:55:24 1250

原创 C++智能指针

智能指针是什么,它的实现原理,C++个版本的智能指针原理及其实现

2022-07-28 09:35:34 1038

原创 多线程(下)

一、信号量1.回忆下互斥锁+条件变量实现生产者与消费者模型的代码我们在判断资源是否可用的时候是程序员使用while循环来进行自己判断的,那么我们不想每次在访问资源的时候手动进行判断,那么我们就需要用到信号量了。2.信号量的原理资源计数器+PCB等待队列资源计数器:执行流获取信号量,获取成功,信号量计数器减1操作,获取失败,执行流放入到PCB等待队列中,执行流释放信号量成功之后,计数器加1操作。生产者与消费者原理图:3.信号量的接口初始化接口:int sem_

2022-05-10 10:00:00 726 1

原创 C++继承

一、继承的概念和定义1.继承的概念面试官:介绍下你所认识的继承?答:继承的概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类型的基础之上进行扩展,增加功能,这样产生的新类,称作派生类。继承呈现了面向对象设计的层次结构,体现了由简单到复杂的认知过程,以前我们接触的复用都是函数复用,继承是类设计层次的复用。举例:例如动物就是一个类,而狗就是建立在动物这个类的基础之上创建的类,它继承了属于动物所共有的特点,又有自己所独有的特点,狗和动物就属于继承的关系,动物就是

2022-05-06 19:59:54 1006

原创 Linux小王-----多线程(上)

一、线程概念1.线程和进程的关系(工厂与流水线的关系)线程是依附于进程才能存在的,如果没有进程,则线程不会单独存在。(没有工厂就没有流水线) 多线程的存在是为了提高整个程序的运行效率的。线程也被称之为执行流,因为在执行用户自己写的代码。(一个工厂可以建造多条流水线来提高效率)2.曾经学习过的线程(你却不知道)理解之前的:进程在内核当中就是一个task_struct,在该结构体当中的成员变量pid被我们称之为进程号。现在需要理解的:>>1.操作系统当中没有线程的概念,程

2022-04-23 22:51:18 1551 1

原创 vector

一:vector的相关使用与操作vector是表示可变大小数组的序列容器1.构造和析构2.迭代器3.容量的操作4.元素访问5.修改二:迭代器失效三:vector的模拟实现

2022-04-16 22:20:01 600

原创 string类的模拟实现以及浅拷贝问题

目录问:为什么要有string类?介绍一下标准库中的string类浅拷贝的问题以及解决方法:1.回顾浅拷贝问题:2.浅拷贝的两种解决方法>>1.深拷贝>>2.写时拷贝string类的模拟实现:问:为什么要有string类?答:C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问

2022-04-06 19:36:41 996

原创 STL容器

STL:standard template library-----标准模板库面试题:什么时STL?1.STL:standard template library----C++中的标准模板库2.通俗来说:STL就是将常见的数据结构以模板的方式进行封装,包含常用通用的泛型算法。数据结构:顺序表、链表、栈和队列、堆、二叉树、哈希等3.具体来说,STL中有六大组件a.容器>>序列式容器----线性数据结构string:动态类型的顺序表---只能存储字符---字符串v

2022-04-06 16:34:19 800

原创 C++类和对象(下)

一、再谈构造函数1.构造函数体赋值通过我们之前对构造函数的学习,我们知道了创建一个函数的时候编译器会自动调用构造函数,而我们也可以通过构造函数对类中的成员变量进行赋值,注意,这里说的是赋值,与初始化是不同的。那么什么是初始化呢?简单来说就是在创建变量的时候进行赋值,而且初始化只能有一次,而赋值却可以有多次。我们运行下面的代码:class Date{public: Date(int year, int month, int day) { _year = year; _mo

2022-04-03 17:45:26 848

原创 C++动态内存管理

问题:1.string和sizeof的区别2.malloc、calloc和realloc的区别3.malloc和new的区别与联系一、C/C++程序运行起来后,内存分布情况为什么操做系统设计的时候,需要将完整的内存空间化分成不同的区域?方便对内存空间进行管理。如上图:1.栈又叫做堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2.内存映射段是高效的I/O映射方式,用于装载一个共享内存的动态内存库。用户可使用系统接口创建共享内存,用于进程间通信。

2022-03-31 20:26:02 3098 1

原创 C++-----模板

一、泛型编程如何实现一个交换函数呢?void Swap(int& left, int& right) { int temp = left; left = right; right = temp;}void Swap(double& left, double& right) { double temp = left; left = right; right = temp;}void Swap(char& left, char& ri

2022-03-31 18:45:57 2599

原创 Linux进程信号

一、信号的概念信号是一个软中断,只是告诉有这样一个信号,但是这个信号具体怎么处理,什么时候处理由进程决定的,所以是软中断。举个不恰当的例子:看到了红灯你可以选择走也可以选择不走,绿灯你也可以选则走,也可以选择不走。二、信号的产生1.硬件产生(键盘敲):例如:ctrl + c:2号信号 SIGINT(退出一个进程)ctr + z:20号信号 SIGTSTP(终止一个进程),可以通过ps aus | grep “进程名”查看(运行着的进程)进程状态ctr + | :3号信号SIGQU

2022-03-27 00:17:43 336

原创 C++类(中)------6个默认成员函数

空类什么都没有吗?不是什么都没有,编译器会给类生成6个默认的成员函数:1.构造函数----->用来进行成员对象创建时的初始化工作2.析构函数------>对象销毁时资源的清理工作3.拷贝构造、赋值运算符的重载---->用来进行对象的拷贝4.两个取地址&的重载问:什么叫默认的成员函数?答:用户没有自己写,编译器会自动生成;一旦用户显示提供了编译器不再生成。一、构造函数1.概念我们知道在定义一个内置类型变量的时候,我们可以对其进行初始化,如下:

2022-03-24 23:09:50 1452

原创 系统章节-----进程间通信

1.为什么需要进程间通信?每一个进程的数据都是存储在物理内存之中的,进程通过各自的进程虚拟地址空间进行访问,访问的时候,通过各自的页表的映射关系,访问到物理内存。从进程的角度看,每个进程都认为自己有独立的4G的空间,至于物理内存当中如何存储,页表如何映射,进程是不清楚的。这也造成了进程的独立性:好处:让每个进程在运行的时候都是独立运行的,数据不会窜。坏处:如果两个进程之间需要数据交换,那么由于进程独立性,就没有那么方便了所以:进程间通信本质上是进程和进程之间交换数据的手段。2.常见的进程

2022-03-22 10:40:37 4329

原创 C++类的认识(上)

问题:1.面向对象和面向过程初步认识2.类和认识与结构体做区别3.封装特性4.this指针的认识5.this指针存在哪里?6.this指针可以为空吗?1.面向对象和面向过程C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用的方式解决问题。比如洗衣服这件事:我们可以将它分成以下几个步骤:C++是面向对象的,关注的是对象,将一件事拆分成不同的对象,靠对象之间的交互完成。比如洗衣服这件事就可以分为四个对象:人,衣服,洗衣粉,洗衣机.

2022-03-21 21:11:16 1151

原创 C++简单的入门知识,这些问题你会了吗?

问题:1.命名空间是什么?2.函数重载是什么?为什么C语言没有函数重载而C++有函数重载?3.传值和引用的效率哪个更高?4.引用和指针哪个效率更高呢引用和指针的区别?5.auto关键字的使用6.NULL和nullptr的比较1.C++关键字C++总计63个关键字,C语言32个关键字2.C++命名空间在C语言中,你是否会会因为变量的起名字而苦恼呢?当我们和别人一起开发一个项目的时候,自己负责自己的模块,互不干扰,但最后将代码进行整合,这时候就会出现问题了,有.

2022-03-18 17:29:28 1315 8

原创 系统章节-----基础IO

1.复习下C的文件接口fopen:打开文件 FILE *fopen(const char *path,const char *mode)path:带有路径的文件名称(如果说不带有路径,打开的文件可以是在当前路径下)mode:打开文件的方式下表为一些常见的mode文件使用方式 含义 如果指定文件不存在 “r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错 “w”(只写) 为了输出数据,打开一个文本文件 (输出...

2022-03-05 21:23:44 1140

原创 系统章节------2.进程控制

1.进程创建1.1回顾fork让正在运行的进程创建出来一个子进程。它从已存在的进程中创建一个新进程。新进程为子进程,原进程为父进程。pid_t fork(void):返回值:创建成功:>0:返回值大于0,返回给父进程,父进程的fork的返回值。==0:返回值等于0,返回给子进程,子进程的fork的返回值。创建失败:返回-11.2fork内部完成的事情创建子进程,子进程拷贝父进程的PCB分配新的内存块和内核数据结构(task_struct)给子程序 将父进程部分结构

2022-03-01 20:30:17 274

原创 系统章节------1.进程概念

1.操作系统概念与定位1.1操作系统是什么?操作系统 = 操作系统内核(win/linux) + 一堆应用操作系统内核:也就是代码程序,代码的作用就是(进程管理,内存管理,文件管理,驱动管 理等等)一堆应用:依附在操作系统内核上完成的某些功能,例如:QQ,微信,飞书等等。1.2操作系统在做什么事情操作系统在管理计算机的软硬件资源硬件资源:CPU,内存,硬盘,网卡,显示器等等软件资源:进程资源,驱动程序1.3操作系统是怎么完成这些事情的通过管理管理 = 描述(tas

2022-02-24 15:26:31 1365

原创 8种常见的排序算法-----你值得掌握(很细,很全)

一、排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 例如:内部排序:数据元素全部放在内存中的排序。 外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存

2022-01-21 11:11:44 4549 2

原创 Linux学习笔记2(工具章节)-------linux环境下代码的编辑、编译与调试

一、包安装器:yum1.yum 就是一个应用商店, 类似于华为商店, 苹果商店等等,里面有经过yum源认证的软件包。如果程序员想要用哪软件包,可以使用yum搜索和安装。由于是从yum源下载到本地进行安装 ,所以必须要有网络2.yum三板斧yum list : 查看yum都有哪些安装包(加上管道进行过滤)例如 : yum list | grep “tree”指令 用法 备注 yum install yum install [-y] [待要安装的软件包.

2022-01-10 18:42:09 532

原创 Linux学习笔记1(命令与权限)

一、命令ls :“.”代表当前目录“..”代表上级目录“/”代表Linux操作系统的根目录命令行参数:-l :罗列详细的信息-a : 罗列隐藏的文件-al :既罗列详细信息也罗列隐藏信息-lrt :对文件按照时间排序,修改时间最新的在最下面结论:在Linux操作系统下,不是以文件的后缀来区分文件的类型-l :罗列详细信息-a :罗列隐藏文件Linux操作系统下,隐藏文件是以“ . ”开头的,使用ls...

2022-01-09 16:28:54 625 2

原创 堆的创建以及堆的基本操作

一、堆的基本概念概念:将元素储存在一维数组中--->形成一颗完全二叉树 条件限制:每个节点比其孩子节点都大(小)--->大(小)堆大堆:二、堆的特性特性:堆顶元素是所有元素中最大(小)的 任意节点都比其孩子节点大(小) 从堆顶到所有叶子路径中是降序(升序)三、堆的相关操作1.创建堆头文件:#pragma once#include<stdio.h>#include&...

2021-12-06 17:43:13 3035

原创 栈以及队列的实现与基本操作

目录一、栈1.栈的基本概念2.如何实现一个栈1.>用数组实现一个可以动态增长的栈(建议)2.>栈的链式存储3.栈的基本操作1.>栈的创建2.>栈的初始化3.>入栈操作4.>出栈操作5.>获取栈顶元素6.>栈空的判断7.>栈的销毁二、队列1.队列的基本概念2.如何实现一个基本队列1.>顺序队的实现2.>链队的实现3.>循环队列的实现3.队列的基本操作(..

2021-12-02 16:14:56 1733 2

原创 如何用两个栈实现一个队列?

首先我们需要先实现栈的一些基本操作(创建,销毁,入栈,出栈,获取栈顶元素,栈的判空)具体代码如下:typedef char STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 int StackEmpty(Stack* ps){ assert(ps); return 0 == p

2021-11-29 16:44:04 229 1

原创 实现一个可以动态增长的栈以及栈的基本操作

头文件:#pragma once#include<stdio.h>#include<windows.h>#include<assert.h>#include<malloc.h>// 支持动态增长的栈typedef int STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 初始化栈

2021-11-29 16:24:58 127

原创 c语言链表实现简单的约瑟夫问题

//约瑟夫问题#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)typedef struct node{ int number; struct node*next;}person;person* initlist(int n){//初始化,先给每个节点赋值 person*head = (person*)malloc(sizeof(person)); head->number.

2021-11-18 15:21:15 892

原创 教你用C语言实现简单的手机通讯录

通讯录中包含的内容:我们用结构体实现typedef struct person{ char name[32]; char sex[8]; int age; int number[16]; char adress[64];}person_t;typedef struct contact{//通讯录大小,保存了多少联系人以及联系人的信息(柔性数组) int cap; int size; person_t persons[0];}contact_t;通讯录首先要有一个菜单:

2021-11-13 21:43:00 9846 1

原创 C语言的这个关键字你真的认识吗?

static这个关键字相信大家都是知道的,那么你真的很懂他吗?首先我想先问一个问题:为什么要有头文件?单纯的使用源文件,组织项目结构的时候,项目越大越复杂的时候,维护成本会变得越来越高。.h :头文件,组织项目结构的时候,减少大型项目的维护成本。那么C语言的头文件都包含哪些内容呢?1.c的头文件2.所有变量的声明3.所有函数的声明4.#define,类型typedef,struct当我们写头文件的时候需要注意一个问题:头文件被重复包含解决方案:#pragma warn

2021-11-13 18:06:49 752

原创 教你用c语言完成找单身狗问题

一组数据中只有两个数据单独出现,其余数据都是成对出现,找出 这些数据中单独的两个数并输出。#include<stdio.h>#include<assert.h>#include<windows.h>#pragma warning(disable:4996)void findnum(int num[],int len,int *xp,int *yp){ assert(xp); assert(yp); *xp = 0; *yp = 0; ////st

2021-11-09 21:34:37 1007 1

原创 动态内存管理(堆区)

为什么存在动态内存管理1.可以申请大块内存,进行较为大型的应用2.可以在程序运行期间进行申请,可以更灵活的使用内存空间。(申请空间用malloc()函数,必须是程序运行起来才能调用,编译的过程早就过了)如何进行空间管理?通过malloc函数申请空间和使用,用free函数释放空间常见细节:1.整体申请,整体释放。2.如果申请内存不归还,会造成内存泄漏。内存泄漏:一种严重的问题,会造成可用内存越来越少。 进程退出了,内存泄漏问题就不在...

2021-11-05 21:10:00 536

原创 字符函数和字符串函数

目录前言:1.求字符串长度strlen2.长度不受限制的字符串函数1>strcpy(字符串拷贝)2>strcat(字符串链接)3>strcmp(字符串比较函数)3.长度受限制的字符串介绍1>strncpy2>strncat3>strncmp4.字符串查找1>strstr(子串查找)2>strtok(分割字符串)5.错误信息报告strerror6.字符操作7.内存操作函数1&gt

2021-11-01 15:48:38 139 1

原创 常用字符串操作库函数的模拟实现

目录1.模拟实现strlen2.模拟实现strcpy3.模拟实现strcat4.模拟实现strstr5.模拟实现strcmp6.模拟实现memcpy7.模拟实现memmove1.模拟实现strlen2.模拟实现strcpy3.模拟实现strcat4.模拟实现strstr5.模拟实现strcmp6.模拟实现memcpy7.模拟实现memmove...

2021-11-01 15:47:46 91

原创 结构体、枚举、联合

结构体为什么会存在struct?计算机是为了解决人的问题,人认识自然世界的方式是通过“属性”认识的。任何事物抽象出的属性集合,都可以用来表示一类事物,及类型,这个工作中,c中,struct。结构体类型的声明struct tag{member_list;}variable_list;特殊的声明(在声明结构体的时候,可以有不完全的声明)比如://匿名结构体类型struct{ int a; char b; float c;}x;struct{

2021-10-31 08:47:39 109

原创 最全的指针内容

一、指针1.指针是什么?(指针是地址)在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向 (points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以 说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址 的内存单元。 那我们就可以这样理解:指针 指针是个变量,存放内存单元的地址(编号)。 那对应到代码:...

2021-10-21 10:05:08 744

原创 深度剖析数据在内存中的存储——浮点数的存储

一、十进制小数转换为二进制小数十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位。两部分分开转换。整数部分 除以2取余,逆序排列。小数部分 乘 2 取整,顺序排列。注意:为什么原理如上?首先有一点需要明白,十进制和二进制比较的基准点在哪里?也就是说,哪个数在十进制和二进制里面,都是代表相同的大小,必须找到这个基准点,然后才好讨论。很明显这个基准点是个位数1,十进制中的1和二进制中的1都是表示相同的大小的值。那么以1这个基准点为基础,整数部分,十进制是逢十进一,二进

2021-10-15 16:31:32 131

原创 深度剖析数据在内存中的存储-整形的存储

重点知识:一、数据类型的详细介绍。二、整形在内存中的存储。三、大小端字节序介绍及判断。内容:一、数据类型的详细介绍。1.数据类型的介绍:内置类型(char/short/int/long/long long/float/double)另外C语言没有字符串类型。类型的意义:(1)使用这个类型开辟空间的大小(大小决定了使用的范围)(2)如何看待内存空间的视角(给程序员看的)。注意:数据的存入和目标变量没有关系,目标变量只提供空间。2.类型的基本归类:整形+浮

2021-10-08 16:12:14 113

原创 小游戏——三子棋

建立棋盘(棋盘只用中间的10*10部分)static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ board[i][j] = INIT; } }}static void ShowBoard(char board[][COL], int row, int col)...

2021-05-31 17:49:29 89 4

空空如也

空空如也

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

TA关注的人

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