自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HTTPS加密方式-全流程梳理

对称加密通信的两端, 使用用一个秘钥对数据进行加密和解密操作, 常用的方法有AES, DES, 加密解密, 因为采用的对位的操作, 对位的异或和移位操作, 执行的过程中, 速度会很快非对称加密通信的两端, 生成公私秘钥, 任何一方加密的, 只能用另一方进行解密.(公加密, 私解密. 或 私加密, 公解密), 常用的算法有RSA.非对称加密, 使用的是c^e mod N的计算方法, 会比对称加密的直接移位效率会差很多, 而且特别体现在解密的时候, 解密的时候, 会非常的耗费费时间数字签名通过计算h

2021-10-11 00:23:47 736 1

原创 Linux软链接和硬链接

软链接软链接类似于Windows的快捷方式, 通过这种方式, 快速的访问到对应的文件或目录软链接的创建ln -s oldfile slink//////////////////////////////////[white@WhiteCloud file]$ lldrwxrwxr-x 2 white white 4096 Dec 10 17:09 test-rw-rw-r-- 1 white white 1546 Feb 18 14:28 test.cc[white@WhiteClou

2021-02-18 14:59:38 307

原创 智能指针shared_ptr为什么会造成循环引用

循环引用是什么循环引用是因为智能指针对象所管理的A类型的对象中, 含有指向该A类型对象的智能指针对象可能会有点绕口, 请注意区分A类型的对象 和 智能指针对象因为A类型对象 甲中的智能指针对象指向了另外一个A类型对象 乙, 而另外一个A类型对象 乙中的只能指针对象也指向了A类型对象 甲, 之后再释放的时候, 发生了接下来的画面, 产生了循环引用, 而最终导致了资源浪费.此时还未出现循环引用(图在下面)第一个A对象甲中的智能指针已经指向了已, 开始指向已的计数器已经发生了变化(图在下面)循环引

2021-02-18 11:31:40 561 8

原创 通信时MTU的获得和路径MTU

由于以太网物理性质的限制,我们在IP层发送数据的时候, 如果发送向物理层的数据包大于物理层的限制, 就会发生错误. 该物理层限制就叫做MTU.而在网络传输中, 每一条传输线路都有可能有自己不同的传输限制, 虽然路由器可以在IP层进行数据包分片传输, 但是有IP层进行的分片传输, 一旦在对端重组的时候, 有一个出现了错误, 就会发生丢包, 不论是对于TCP还是UDP,都是非常不好的.所以, 为了不让IP层进行分片, 我们在传输数据的时候, 就需要获得发往该目的地的路线上的最小的传输线路的限制大小. 这

2021-01-02 17:57:48 660

原创 TCP 图解 网络拥塞和流量控制

流量控制流量控制的原因在于, 传输中接收端的接受能力是有限的, 如果发送的数据过多, 就会出现接受端缓冲区塞满, 数据被迫丢弃, 造成丢包问题, 浪费资源.TCP协议中, 为了控制这种情况的出现, 引入了流量控制.发送端和接收端, 互相在传输中, 协商缓冲区大小, 控制发送的数据量, 合理的利用网络资源.接收端在返回给发送端的响应中, 在TCP报头中放入自己的剩余缓冲区大小发送端根绝接收端发送给自己的缓冲区剩余大小, 动态的调整每次发送的数据的多少如果接收端的缓冲区已经满了, 就会返回给

2020-12-27 15:11:45 523

原创 快速 简单 理解重载、重写、同名隐藏

C++ 快速理解 函数重载、重写、同名隐藏重载同一个作用域内,两个函数除了返回值类型不同外,其余都相同的情况下,就构成了函数重载class A{ void fun1() {} void fun1(int a)//和前面的构成了重载,因为参数类型不同 {} //error int fun1(int a)//仅有返回值类型不同,不构成重载,错误 {}};重写重写需要 完全一致,完全一致,完全一致重写发生在类继承时,虚函数之间. 父类的虚函数被子类函数重写. 在使用一个指

2020-12-16 22:02:52 174

原创 友元,以及为什么operator<<需要被声明为友元

1.友元如果你想直接看输出运算符重载,可以直接跳过前面这一部分1.1什么是友元友元就是声明一个函数或者类 F , 该类 F 可以随意访问你自己类中的任何成员.友元是单向的, 比如有 A 和 B ,将 B 作为 A 的友元类. 注意,这里的 A 是主体, B 是 A 的一个友元. 这个时候, B可以随意访问 A , 而 A 并不能随意访问 B友元是不具备传递性的. 比如(依旧使用上面的 A 和 B ):B 是 A 的友元,我们再加入一个 C , C 是 B 的友元,那 C 就可以随意看 B 的

2020-08-18 23:04:04 1989 2

原创 如何用UDP协议搭建一个可以进行网络通信的网络环境

准备工作网络字节序由于每一台主机的大小端都有可能是不一样的,我们在主机内部进行通信的时候,不会有大小端不同的问题,而在进行跨主机进行通信的时候,就会出现两台主机的字节序不同,为了统一标准,在网络中通信的数据,统一采用大端的存储方式。如果机器是大端,在发送的时候,不做任何修改,如果主机是小端的字节序,则在发送的时候,需要先将数据转化为大端,然后再发送。为了便于我们直接通过调用一些已经写好的接...

2020-04-21 11:09:12 1073

原创 什么是网络?网络的基本框架是什么?

网络是什么网络的诞生在计算机刚刚诞生的时候,由于人们如果对同一个文件进行操作的时候,需要甲先操作完,然后人工的拷贝给乙,这期间,耗费了很多的时间和精力,所有,为了使 甲在操作完文件后,可以直接发给乙,或者,直接同步给乙,网络就应运而生。开始的网络,就只是简单的线性结构,多台主机,连接一个服务器,然后,通过对同一个服务器上的文件进行操作,在操作完成后,服务器的数据会更新,保证下一个访问文件的...

2020-04-16 23:19:37 2664

原创 Linux 文件描述符到底是什么东西

这篇博客很长,希望你能看完,是我自己对文件描述符的一些理解,希望能帮助到你文件描述符什么是文件描述符文件描述符是操作系统在进行进程文件管理时,所引入的一种管理方法,这种管理方法是 先描述文件的一系列信息,然后再通过这个文件描述符,进行文件的一些列读写操作文件描述符在进程中是如何存储的在进程的PCB中,有专门寸出文件描述符的位置。在PCB中,有一个*files 的指针...

2020-04-01 14:56:36 505

原创 进程间通信是什么?如何实现进程间的通信

进程间通信由于进程之间在执行时,是完全独立执行的,所有,进程间如果需要进行通信,就需要一块共享的区域,我们可以通过创建一个多个进程共享的区域,将所需要共享的数据放在这个共享区当中,当进程间需要通信的时候,写数据的进程将数据写入该区域,需要读数据的进程将数据从该区域中读取出来。##进程间通信的分类管道System V进程间通信POSIX IPC##管道管道是进程间通信的一种手段,通...

2020-03-30 16:28:27 2252

原创 二叉树的层序遍历

如果想让二叉树实现层序遍历并进行打印的话,我们需要用到一个队列的性质。队列因为可以实现先进队列的先出,所以我们就可以让二叉树的每一层一次进入队列,这样,在对队列的元素进行出队操作,然后打印,这样,所得到的就是一个层序遍历的二叉树了。我做了一个简单的图来进行示意:首先,我们有这样的一个二叉树的,并且我们已经有了一个空队列,我们现在开始进行入队操作。1.首先进行根节点的入队操作...

2019-10-31 20:06:58 144

原创 时间复杂度和空间复杂度

在计算执行程序的过程中,有两个衡量一个程序的所要消耗的空间和时间,这两个单位就是空间和时间复杂度。因为如果只是单纯的对计算机的执行时间进行一个时间复杂度的定义,因为每台计算机的执行速度因配置而定,很难完全相同,所以这样定义的时间复杂度是有问题的,但是如果将时间复杂度定义为一个程序最大执行的次数,就可以避开这个问题,因为无论是配置怎样高的计算机,他对一个程序的执行次数是肯定的,所以时间复杂度就是...

2019-09-25 17:39:15 201

原创 单向无头链表的基本操作

对于单向无头链表的基本操作有创建一个链表,销毁,从尾部加一个数进去,从头加一个数进去,从尾部删去一个,从头部删去一个,以及放回这个链表的长度。具体的实现并不难,只是一个简单的逻辑,需要注意的点就是,在进行尾部插入和删除的时候,一定要记得对最后的一个节点的next置为NULL,这样才能保证print函数和Size函数正常进行。#include <stdio.h>#in...

2019-09-25 13:21:48 140

原创 有头的单链表的基本操作

对于单链表的基本操作有 初始化,销毁,以及头部插入,尾部插入,头部删除,尾部删除以及计算单链表的长度。我这里的初始化函数,因为有一个链表头,所以malloc的时候,是从第二个空间进行空间开辟的。并且在释放的时候,也是从第二个空间开始释放的。并且头部的插入和删除,也都是第二个位置的删除与插入,如果需要修改头的值,就需要调用另外一个函数。这个我会在别的博客里面写清楚。具体实现并不难,咋们直接...

2019-09-24 20:36:00 370

原创 单链表的逆序

我自己的链表逆序是通过三个指针,不停地进行位置的变换,然后直接对单向链表进行逆序,但我这里的单链表逆序的是因为没为我没有咋测试函数中进行返回值的接受,所以没行头指针的变换,大家看的时候注意一下,思路是我的思路,不需要头指针的自己改变一下测试函数以及初始化函数和释放函数就可了,思路图如下:这张图便是直接翻转的思路,利用三个移动的指针,一个不动的指针,在开始的时候,先保证 bef 的 next...

2019-09-21 16:51:58 254

原创 C++的string

string就是字符串类,这个字符串类中有很多的方便我们进行操作的函数。string类在进行使用的时候,需要引用头文件<string>,这样才能正常的进行这个类的操作。string类的对象具有以下几个函数,分别是 :size() length() capacity() empty() clear() resize() reserve() 这几个函数,作用如下:...

2019-09-21 13:20:30 158

原创 C++类和对象

在C++中,结构体内不仅可以定义变量,还可以定义函数。但是C++的结构体完全不同于C语言的结构体,C语言的结构体仅仅只是一个多个基本数据类型的集合,但在C++中,结构体却是类的一种体现。两者几乎没有差别。面向对性的三大特性:继承、封装、多态。C++的结构体即是是孔结构体,在内存中也是占有一字节的空间的。类是什么:类就是遵循了面向对象的原则,对某一个真实存在的类抽象成为一个计算机中的类,...

2019-09-21 13:19:50 128

原创 C++基础(1)

命名空间(namespace):通过命名空间来限制变量的作用域,通过这样的作用域的限制,避免了命名上的冲突,函数和变量通过 命名空间的不同,会在内存中存储的时候,形成不同的名字,这样,就避免了各种各样的命名冲突。 输入和输出(cout << / cin >>):C++的输入和输出,通过运算符来实现,但是因为有命名空间的限制,所以...

2019-08-27 14:52:03 147

原创 链式二叉树的7种遍历方式

在说链式二叉树的遍历之前,我们先来说一下如何创建一个链式二叉树。创建一个链式二叉树,需要一个已知的字符串,这个字符串必须支持创建二叉树的规则。比如:我们通过递归来实现二叉树的创建,开始先向左走,如果遇到#,就返回,然后向右走,直到遇到#,就返回一个NULL,这样,就完成了一个链式二叉树的创建。这里先将除了主要函数外的其他调用到的函数放在这里,供查阅头文件#ifndef _BTREE...

2019-08-20 17:59:31 355

原创 C指针详细讲解(帮助理解)

指针,是一种数据类型,是用来存储地址的数据类型。我们可以通过定义指针变量,然后给这个指针变量中存储地址,然后再通过指针来访问这个地址所对应的内容。上面的是指针的基本感念,几乎所有的C语言学习者都会在书籍中看到这样的概念,但是并不会详细讲解指针应该如何进行理解。我个人对指针变量的理解是:指针,通过名字可以理解为一根针,这根针指向一个内存地址,将这个内存地址存储在一个指针变量中,在需要用的时候...

2019-06-08 13:37:00 178

原创 C语言写一个能进行文件存储的完整通讯录

用C语言制作一个通讯录,这个通讯录需要完成一系列基本的通讯录应有的工作:增加、删除、查找、修改、展示、退出。这个通讯录需要做到动态的内存开辟,以及将写好的通讯录的内容写入文件,每次在开始时可以调出原来写好的内容。至于如何实现这些功能,我接下来一个接一个说明,说明完成后,就直接将源代码全部放出来,源代码分为三个文件,一个头文件,两个源文件。这里强调一下,就我个人目前写代码的经验,我觉得在写一...

2019-06-07 19:34:38 918 1

原创 结构体的大小计算

结构体是C语言的一种数据类型,是一种多种基本数据类型混合的类型。既然他是数据类型,那么就有数据类型在内存中所占字节数,即大小。如何计算数据类型的大小呢?是简单的将一个个简单数据类型的大小相加吗?还是有自己特殊的存储方式?我们这里先通过举多个例子来看看实际运行的结果,然后再讨论规律。struct stu //例子1 { int a; char b; char c; }st...

2019-05-27 08:52:25 374

原创 计算机大小端以及大小端查看

数据在计算机中存储的时候,分为大端存储和小端存储,每个计算机的大小端存储都不同,为了了解自己的机器中的大小端类型,可以通过很多方法查看。这里我们主要讲解两种查看大小端的方法。那么到底什么是大小端呢? 大端存储是 数据的低位存储在高地址处 小端存储是 数据的低位存储在低地址处 我个人在理解的时候,将大小端的存储理解为数...

2019-05-26 12:59:27 1850

原创 C语言扫雷游戏

Window上最经典的游戏肯定免不了扫雷游戏了,那么如何用C语言写一个自己的扫雷游戏。为了写一个扫雷游戏,一定要先搞清楚如何尽心一个游戏整个过程的设计,在游戏代码的构建之前,一定要将游戏每一步搞清楚,然后将游戏按照步骤进行逐步实现,这样写出来的游戏,才会最大限度的满足自己的要求。扫雷游戏的只要思路是:进行一次游戏是否开始的选择,并且在一次游戏结束后,不用退出游戏,然后重新开始,而是可以通过...

2019-04-15 15:33:54 217

原创 C语言三子棋游戏

为了实现三子棋游戏,首先要知道三子棋游戏需要做到那些关键步骤,明白每一步步骤,然后按照步骤,将代码分步写出来。复杂的代码是由一个个最简单的代码块复合起来的。咋们现在来看看三子棋游戏需要怎演的步骤才能将其实现。进行一个游戏开始的选择,即是否进行游戏,如果不进行游戏,那就退出。在这一步的实现的时候,还要考虑到在一次游戏结束后,如果还要再进行游戏,不需要进行重新运行代码,而是进行一个循环,进行一...

2019-04-14 10:57:40 259

原创 windows下的win+ 快捷键

Win + A:打开操作中心; Win + B:将焦点转移到任务栏通知区域,之后你可以通过左右方向键选择项目,按回车打开; Win + C:打开Cortana微软小娜,并开始聆听...... Win + Alt + 数字键:打开任务栏上对应位置应用或程序的跳转列表; Win + 加号:打开放大镜并放大屏幕内容; Win+Ctrl+D:新建桌面; Win+Ctrl+F4:关闭正在使用的桌...

2018-11-01 16:00:31 5690 1

原创 头文件的搭建

       在编程过程中,为了避免在多个源文件中头文件被多次的包含,可以通过搭建一个头文件避免这种情况。       在搭建头文件时,先要在一个·文件下建立一个空白头文件,例如现在搭建一个 Add.h 头文件,需要在头文件中写入                   #ifndef __ADD_H__                   #define __ADD_H__     ...

2018-09-23 20:18:37 244

原创 结构体和结构体链表

在c语言表针中有多种数据类型,他们的应用使变量的应用变得灵活多变。而除了c语言默认的int ,float ...等类型外,我们还可以自己定义一些数据的类型,结构体类型便是可以实现数据类型自定义的类型。 结构体是一种类型,他的应用和int,float等变量类型的应用方法一致,切记,结构体是一种类型,不可当作变量进行使用。 在结构体类型使用时要先进行结构体...

2018-08-24 16:12:07 22556 4

原创 简单选择排序

       在算法中有很多的排序方法,选择排序就是比较常用的排序方法。选择排序是利用每个元素之间的比较来进行交换,然后利用循环将各个元素按照顺序排列。例如,让一个数组中的元素按照从小到大进行排列,主要思路为,定义两个指针,先让第一个指针指向第一个元素,第二个指针指向第二个元素,第一个元素和第二个元素进行比较,如果第一个元素大于第二个元素,则两两交换,然后保持第一个指针的位置不变,第二个指针向后跳...

2018-08-23 12:53:21 147

原创 c语言 解析常用字符操作函数

       在c语言中有很多的字符操作函数,而我们经常用到的字符操作函数有strcpy ,strncpy ,strcat ,strcmp ,strlen ,strlwr ,strupr ,gets ,puts ,等等很多很多。      下面我们来解析一下这些字符操作函数。       1.strcpy(字符数组)       这个函数的作用是字符串的拷贝,在c语言的函数栈帧中有一块...

2018-08-11 11:20:31 214

原创 c语言 冒泡排序

        在算法中有几种经典的算法,其中就有冒泡排序法。冒泡排序,顾名思义,就是将元素冒泡出来,进行大小的对比,然后进行排序。冒泡排序算法的思想是在一个循环中将两个元素为一组单独拿出来,然后进行大小对比,按照程序员的目进行排序的方式进行排序,每次只拿出两个元素为一组进行排序,大小对比后进行如果满足条件则进行下一组排序,反之则是将两个元素互换后进行下一组排序,每次的最后一次排序的结果即是这列数...

2018-08-03 21:12:29 847

原创 c语言设计简单计算器实现加减乘除运算

      编写程序的目的就是使程序有他应用的地方,编写一个简单的计算器来实现我们计算的目的。          利用swich  case 语句和循环结构来实现简单程序的编写。利用选择语句来进行输入的选择,然后利用所输入的数字的不同进行不同类型的运算,然后当需要退出时,则通过break语句跳出循环,实现一个程序的全部运行。       在这个计算器中,主要部分是构建分支语句的函数,使每一...

2018-08-03 17:28:57 27235 2

原创 c语言 利用联合和结构体将IP地址进行打印

       在每一个计算机中都有他自己的IP地址,而IP地址是如何在计算机中存储的是一直以来我们都不知道的。       在计算机中,IP地址的存放是由10进制数组组成的,而计算机将IP地址呈现给我们时则是以点分十进制表示的。       例如  IP地址为 57.163.109.40  ,其实他在计算机中存储的是  678273849,而计算机就是利用这个十进制数字将IP地址以点分十进...

2018-08-01 11:13:21 1114

原创 c语言 函数递归的简单应用

       利用函数递归来时现将一个sh数的每一位拆出来然后求和,即是:例如一个shu数  1888;它的每一位sh是 1  8  8   8,而每一位的每一位的和最终是  25,而接下来jian建立用函数的递归来sh实现这个算法。#include&lt;stdio.h&gt;int add(int souce,int ant){ if (souce &gt; 9) { ant...

2018-07-31 21:28:10 255

原创 c 语言 用函数递归来实现求 k 的 n 次方

       如果求取k的n次方,既可以用普通的方法实现,也可以用函数的递归来实现。       函数的递归即是自己调用自己的函数应用形式,即在main函数下定义一个函数,然后在这个函数内自己为了实现某个目的,函数自身反复调用自己来完成这个目标的形式叫做函数递归。       因此,这个算法的思路即是自己调用自己,每次实现调用函数时 *k,然后根据 n 的变化最终完成所有的k相乘,实现目标...

2018-07-31 20:58:05 1542

原创 c语言 求第n个数的斐波拉契数

斐波拉契数是指一个数组中从第三个起,一个数等于他前两位数的和,由这样的有序数列叫斐波拉契数列。例如  //1 2 3 5 8 13 21 34 55 89   这就是1-10的斐波拉契数。而在算法中如何求得斐波拉契数需要知道最基本的定义,然后再写算法。在斐波拉契数中,第一和第二位的元素是固定的,第三位和以后的位数是由前两位相加所得,算法思路是  先判断输入的数是否是1 和2 如果是,直接返...

2018-07-31 20:14:56 487

原创 c语言 寻找一个由成对元素组成的数组中的不成对元素

       在一个数组中有很多对的元素,相互成对出现,而有2个元素则是不成对出现,要找到这两个元素,并将其打印在屏幕上,需要用到位运算和运算符的应用。       例如{1,2,3,1,2,3,5,8},这一组元素中, 5 , 8  这两个元素不是成对出现的,我们的目的就是找出这两个元素。整个思路就是先进性数组中所有元素的异或运算,然后将所得的数 &amp;1,找出异或后出现 1 的那一位,...

2018-07-31 12:22:26 270

原创 c语言 将一个数组中的奇数和偶数分开放在一起

       在一个数组中的元素大多奇数和偶数是混在一起的,而将数组中元素奇数和偶数分开存放则是我们要解决的问题。       将奇数和偶数分开存放然后打印出来的思路是先创建两个空间,将奇数和偶数分别存放起来,然后再将他们又存进原数组,最后将数组元素循环打印就完成了奇数和偶数的分别存放。#include&lt;stdio.h&gt;int main(){ int arr[] = {...

2018-07-31 10:20:47 8159

原创 c语言 一个数的二进制位的倒位

      在32位计算机中存储一个int类型的整形数时是按照二进制的的32个比特为存储的,例如"25"存储时存储的是“00000000 00000000 00000000 00011001”,而将其二进制数到位得到的是“11001000 00000000 00000000 00000000”.       为了实现二进制数的倒位可以通过位运算和函数递归的方式实现,思路是先将每一个二进制的位上的...

2018-07-29 15:10:25 1322

空空如也

空空如也

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

TA关注的人

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