自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 快速排序算法代码

快速排序#include <iostream>#include <vector>using namespace std;void QSort(vector<int>& nums, int low, int high);int partition(vector<int>& nums, int low, int high);void swap(vector<int>& nums, int low, int high

2021-01-31 16:57:32 475

原创 memset函数()通俗易懂解释

什么是memset()函数?memset()函数原型是 extern void* memset(void *buffer, int length, int buf)buffer 是指针或者数组,void是要初始化的首内存的首地址;length是要初始化的变为的数据,buf是buffer的长度,即大小。网络编程中memset函数多用于socket套接字编程中清空数组,如:memset(IPNumber, 0, 4) ; //将IPNumber数组中的4位置为0该函数用于将一段内存空间全部设置为某个

2021-01-31 10:59:10 3304

转载 一文掌握进程、线程和协程的关系

转载链接地址(收藏300+)进程、线程和协程之间的区别和联系:https://blog.csdn.net/daaikuaichuan/article/details/82951084

2021-01-31 09:15:04 336

原创 RAII机制介绍

RAII机制介绍RAII全程为Resource Acquisition Is Initialization(资源获取即初始化),RAII是C++语法体系中的一种常用的合理管理资源避免出现内存泄漏的常用方法。以对象管理资源,利用的就是C++构造的对象最终会被对象的析构函数销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。使用RAII机制的原因RAII是合理管理资源避免出现内存泄漏的常用方法。那

2021-01-31 08:42:32 5137

原创 TCP/IP四层模型与OSI七层模型

OSI七层模型物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接

2021-01-31 08:04:23 422

原创 CSDN写博客时如何让文章的代码有颜色显示

代码没有颜色的情况代码有颜色的情况只需在插入代码块的```后添加输入的代码类型即可,如我的C++代码添加了cpp,代码则自动带颜色高亮显示。

2021-01-30 09:45:45 829

原创 进程间通信(IPC)总结

IPC机制总结管道:使用简单FIFO:非血缘关系间信号:开销小共享内存:非血缘关系间本地套接字:稳定性好管道FIFO共享存储映射本地套接字(domain)socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、

2021-01-30 08:19:37 656

原创 进程间通信(IPC)方法之管道

进程间通信概念Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。在进程间完成数据传递需要借助操作系统提供特殊的方法,如:文件、管道、信号、共享内存、消息队列、套接字、命名管道等。随着计算机

2021-01-30 08:02:33 664

原创 堆排序(大、小顶堆)完整代码

大顶堆#include <iostream>using namespace std;#include<vector>void swap(int* vec, int i, int j);void heapadjust(int *vec, int i, int n) { int temp = vec[i]; for (int j = 2 * i + 1; j <= n; j = j * 2 + 1) { if (j + 1 < n

2021-01-29 20:22:55 525

原创 Microsoft Visual C++运行库下载地址 2008~2017等各版本下载

各版本汇总Microsoft Visual C++下载链接https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloadsMicrosoft Visual C++ 2005x86:https://www.microsoft.com/zh-cn/download/details.aspx?id=3387x64:https://www.microsoft.com/zh-cn/download/

2021-01-29 12:13:21 24406

转载 守护进程的概念及其创建

什么是守护进程?守护进程是后台运行的、系统启动是就存在的、不予任何终端关联的,用于处理一些系统级别任务的特殊进程。通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,一般采用以d结尾的名字。Linux后台的一些系统服务进程,没有控制终端,不能直接和用户交互。不受用户登录、注销的影响,一直在运行着,他们都是守护进程。如:预读入缓输出机制的实现;ftp服务器;nfs服务器等。实现思路:实现一个守护进程,其实就是将普通进程按照上述特性改造为守护进程的过程。需要注意的一点是,不同版本的 Un

2021-01-29 08:56:15 483

原创 父进程与子进程、线程与进程之间的关系

父进程、子进程的关系资源:子进程得到的是除了代码段是与父进程共享的,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,所以二者并不共享地址空间。两个是单独的进程,进程具有私有地址空间的属性。子进程在继承了父进程之后就父进程没有什么关联了,子进程单独运行。通过MMU实现写时复制技术。文件描述符:继承父进程的文件描述符时,相当于调用了dup函数,父子进程共享文件表项,即共同操作同一个文件,一个进程修改了文件,另一个进程也知道此文件被修改了。线程、进程的关系通常意义上

2021-01-29 08:08:00 3235

原创 线程概念详细总结

什么是线程LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间。 独居(进程);合租(线程)。Linux下:线程是最小的执行单位;进程是最小分配资源单位,可看成是只有一个线程的进程。Linux内核线程实现原理类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因此在这类系统中,进程和线程关系密切。轻量级

2021-01-29 08:01:12 721

原创 ubuntu16.04中vim编辑常用功能配置教程

首先打开终端,输入以下代码sudo vim /etc/vim/vimrc在vim的命令行模式下输入大写G达到最后一行输入小写i,进入vim的编辑模式,在最后一行添加如下两行代码set autorndent set cindent前者代表的是回车时自动对齐,后者代表自动缩进。但是有时候会出现默认自动缩进距离为8个space空格距离。查阅了一些资料,发现同样可以在此配置文件中添加一些语句改变自动缩进的距离。同样默认的vim在输入()后光标停留位置是)后,并不在()中,查阅资料,可以再同样的配置

2021-01-28 20:13:37 455

原创 进程相关概念详细总结

程序与进程程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)进程,是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)程序 → 剧本(纸) 进程 → 戏(舞台、演员、灯光、道具…)同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)如:同时开多个终端。各自都有一个bash但彼此ID不同。如图所示打开的三个终端彼此对应的进程ID各不相同。并发、并

2021-01-28 14:43:26 606

原创 Linux下对‘pthread_create’未定义的引用的解决办法

在编写一个简单的多线程test.c时,已经在test.c文件中包含了头文件,程序缺一直报错,错误提示代码如下输入命令man pthread_create查看帮助文档发现,pthread库其实并非Linux系统默认的库,在链接使用时需要使用库libpthread.a,在使用pthread_create创建线程时,需要在编译中要加-pthread参数指令完成编译与链接添加-pthread指令后的编译效果,编译成功并得到了可执行文件pthread_create...

2021-01-28 08:22:27 8174 9

转载 extern关键字用法详解

在C语言的语法体系中,关键词extern放在变量、函数的声明式前,表示变量、函数是在别处(可以是别的文件或者程序的其他位置)定义的,但是此处声明使用。1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。能够被其他模块以extern修饰符引用到的变量通常是全局变量。还有很重要的一点是,extern int v可以放在a.c中的任何地方,比如你可以在a.c中的函数fun定义的开头处声明extern in

2021-01-28 07:55:17 1355

原创 HTTP的长连接与短连接介绍

在许多因特网应用程序中,客户与服务器在一个相当长的时间范围内通信,其中客户发出一系列的请求并且服务器对每个请求进行响应。依据应用程序以及该应用程序的使用方式,这一系列请求可以以规则的间隔周期性地一个接一个发出。当这种客户—服务器的交互是经由TCP进行时,应用程序的研发人员就应该做出决定,是对每个请求/响应经过各自单独的TCP连接发送,还是所有的请求/响应经由相同的TCP连接发送。前者就是短连接,后者就是长连接。HTTP既能使用短连接也能使用长连接,默认使用长连接。HTTP客户和服务器也能配置成使用短连接。

2021-01-27 16:20:49 1026

转载 详解GET与POST的区别

GET 和 POST 的区别一、概述本文的内容源自其他博客的总结,属于笔者的读书笔记,结构如下:HTTP 的请求报文GET 方法的特点POST 方法的特点GET 和 POST 的区别二、HTTP 的请求报文首先我们要解决的第一个问题是:GET 和 POST 是什么?GET 和 POST 其实都是 HTTP 的请求方法。除了这 2 个请求方法之外,HTTP 还有 HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS 这 6 个请求方法。所以HTTP 的请求方法共计有 8

2021-01-27 15:46:28 666

原创 直接插入排序

直接插入排序概念直接插入插排的插入原理是:当插入第i(i >0)时,前面的arr[0],arr[1],……,arr[i-1]已经排好序。这时,用arr[I]的排序码与arr[i-1],arr[i-2],…的排序码依次顺序进行比较,找到插入位置即将arr[i]插入,插入后其他原来位置上的元素向后顺移。也就是每次都把一个待插入元素按照大小插入到前面已经排好序的恰当地方,直到全部元素插入完成。测试代码如下:#include <stdio.h>void display(int arr[

2021-01-27 08:07:46 298

原创 内存碎片的概念

碎片在操作系统的内存管理中,造成堆利用率很低的主要原因是一种称为碎片(fragmentation)的现象,当虽然有未使用的内存但不能来满足分配请求时,就发生这种现象。碎片的形式有两种:内部碎片和外部碎片。内部碎片内部碎片是在一一个已分配块比有效载荷大时发生的。很多原因都可能造成这个问题。例如,一个分配器的实现可能对已分配块强加一-个最小的大小值,而这个大小要比某个请求的有效载荷大。或者,就如我们在图934b中看到的,分配器可能增加块大小以满足对齐约束条件。内部碎片的量化是简单明 了的。它就是已分配块

2021-01-26 20:44:49 1202 1

转载 C++ list::splice()函数作用详解

list::splice实现list拼接的功能。将源list的内容部分或全部元素删除,拼插入到目的list。函数有以下三种声明:一:void splice ( iterator position, list<T,Allocator>& x );二:void splice ( iterator position, list<T,Allocator>& x, iterator it );三:void splice ( iterator position, list

2021-01-26 19:25:28 623

原创 C++多态性质

多态概念在C++语法体系中,多态分为静态多态和动态多态。静态多态就是重载:因为在程序编译期间(地址早绑定)即可确定,所以称静态多态,在编译时就可以确定函数的调用地址。动态多态就是重写:派生类通过继承重写父类中的虚函数实现动态多态,在程序运行(地址晚绑定)时将会根据对象的实际类型类调用相应的函数。如果对象类型是子类,就调用子类的函数;如果对象类型是父类,就调用父类的函数,(即指向父类调父类,指向子类调子类)此为多态的表现。多态的实现构成多态需要两个条件:调用函数的对象必须是父类的指针或者引用。

2021-01-26 16:43:08 601

转载 Socket网络编程心跳包介绍

跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。心跳包一般来说都是在逻辑层发送空的echo包来实

2021-01-26 08:07:42 1420

原创 心跳包、乒乓包、SO_KEEPLIVE

概述心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。长连接断开后一直占用系统资源,可以通过心跳包判断连接是否断开;使用心跳包检测到连接已经死了,就断开连接。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项:SO_KEEPALIVE。系统默认是设置的2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处

2021-01-26 08:04:51 657

原创 硬链接、软链接的关系

硬链接与软链接的联系在Linux操作系统中,文件被分为两个部分:用户数据(user data)与元数据(metadata)。用户数据代表文件数据块(data block),数据块则代表记录文件真实内容的地方;元数据仅仅为文件的一些附加属性,例如文件大小、文件创建时间、文件所有者、文件所属权限等等的相关附加属性信息。在Linux文件系统中,元数据中的inode索引节点号才是文件的唯一标识。而文件名并不具备这种唯一标识作用,文件名的作用仅仅是为了方便人们对文件的记忆而已,对于系统或程序而言,都是通过inode

2021-01-25 19:43:58 756

原创 TCP三次握手、四次挥手

为什么需要三次握手而不是两次握手为了防止已经失效的连接请求报文段被服务端接受,从而产生错误。失效的连接请求:发生超时的”第一个“连接请求。若客户端向服务端发送的连接请求发生超时,客户端在等待应答丢失后,就会再次发送连接请求,此连接请求正常发送至服务器端,服务器端也正常做出应答,并将响应发送回客户端。假如此时采用的是两次握手,此时客户端—服务器端已经成功建立起TCP连接,假设在通信完成并通信结束后,已经失效到达服务器端,此时连接就建立了,服务器端会一直等待客户端发送数据,从而白白浪费服务器的资源而如

2021-01-25 09:25:12 504

空空如也

空空如也

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

TA关注的人

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