自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【 C++ 】常用容器用法总结

一、容器概念:容器是存储其他对象的对象。被存储的对象必须是同类型。基本特征:以下用X表示容器类型,T表示储存的对象类型(如int);a和b表示为类型X的值;u表示为一个X容器的标识符(如果X表示vector<int>,则u是一个vector<int>对象。)表达式 返回类型 说明 复杂度 X::iterator 指向T的迭代器类型 ...

2019-09-19 16:23:23 877

原创 【 Linux 】网络编程过程详解

Linux网络编程基础API我们将从下面三个方面讨论Linux网络API:socket地址API。socket最开始的含义是IP地址和端口对(ip,port)。它唯一的表示了使用了TCP通信的一端。本文称其socket地址。 socket基础API。socket主要的API都定义在 sys/socket.h 头文件中...

2019-08-01 18:55:16 419

原创 【 Linux 】 I/O复用详解之select、poll和epoll

I/O复用概念: I/O复用可以使得程序能够同时监听多个文件描述符,这对提高程序的性能至关重要。I/O复用的应用场景:客户端程序要同时处理多个socket。 客户端程序要同时处理用户输入和网络连接。 TCP服务器要同时处理监听socket、连接socket。 服务器要同时处理TCP请求和UDP请求。 服务器要同时处理多个端口,或者同时处理多种服务。 ...

2019-07-23 20:44:44 218

原创 【 Linux 】TCP和UDP联系与区别

TCP和UDP是传输层的两个协议。1、UDP的概念: UDP(User Datagram Protocol 用户数据报协议):是OSI(Open System Interconnection 开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。UDP除了端口号,其他什么都没...

2019-04-05 23:49:57 1100

原创 【 C++ 】抽象容器类型

抽象容器数据类型顺序容器:拥有一个单一类型元素组成的一个有序集合。两个主要的顺序容器是 list 和 vector 【第三个顺序容器为双端队列deque,它提供了与 vector 相同的行为,但是对于首元素的有效插入和删除,提供了特殊的支持。】关联容器:支持查询一个容器是否存在,并且可以有效的获取元素。两个基本的关联容器类型是 map(映射)和 set(集合)。map是一个键/值(key/...

2019-09-17 17:28:43 400 1

原创 【 C++ 】动态内存分配和指针

在C++中对象可以静态分配——即编译器在处理程序源代码时分配,也可以动态分配——即程序执行时调用运行时刻库函数来分配。这两种内存分配方法的主要区别是效率与灵活性之间的平衡准则不同。出于静态内存分配是在程序执行之前进行的,因而效率比较高。但是,他缺少灵活性,他要求在程序执行之前就直到所需内存的类型和数量。例如,利用静态分配的字符串数组,我们无法很容易的处理和存储任意的文本文件。一般来说,存储未知数目...

2019-09-09 16:38:03 680

原创 【C++】C++教程之C++开始

开始 本文介绍C++语言的基本元素;包括内置数据类型、对象的定义、表达式、语句、函数的定义和使用。本文将给出一个最小的合法C++程序,主要用它来讨论程序的编译过程、预处理,并将首次介绍C++对输入输出的支持。 1、C++程序在C++中,动作被称为表达式(expression)。以分号结尾的表达式被称作...

2019-09-09 11:48:38 873

原创 【 Linux 】多线程编程

Linux线程概述1、线程模型线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身份,线程可分为用户线程和内核线程。内核线程在有的系统上也称为LWP(Light Weight Process ,轻量级进程),运行在内核空间,由内核来调度;用户线程,运行在用户空间,...

2019-09-06 15:42:26 171

原创 【 Linux 】内核---进程管理

一、进程进程就是处于执行期的程序(目标代码存放在某种存储介质上)。但进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还包括用来存放全局变量的数据段等。实际上,进程就是正在执行的程序代码的实时结果。内核需要有效而又透明的管理所有细节。执行线程,简称线程(threa...

2019-08-30 15:17:04 116

原创 【 Linux 】TCP协议详解

导读:TCP协议是TCP/IP协议族中另一个重要的协议。和IP协议相比,TCP协议更靠近应用层,因此在应用程序中具有更强的可操作性。一些重要的socket选项都和TCP协议相关。本文从以下四个方面来讨论TCP协议:TCP头部信息。TCP头部信息出现在 每个TCP报文段中,用于指定通信的源端端口号、目的端端口号,管理TCP连接,控制两个方向的数据流。 TCP状态转移过程。TCP连接的任...

2019-08-30 10:42:29 359

原创 【 Linux 】TCP/IP协议族

导读: 现在Internet(因特网)使用的主流协议族为TCP/IP协议族,他是一个分层、多协议的通信体系。本文简要讨论TCP/IP协议族各层包含的主要协议,以及他们之间是如何协作完成网络通信的。 TCP/IP协议族包含众多协议,本文我们将简单介绍其中几个相关协议:ICMP协议、ARP协议和DNS协议, 学习他们对于了解网络通信有很大帮助。1.1 ...

2019-08-29 10:36:26 209

原创 【 算法 】全排列

对于给定的集合 R = {a1,a2,a3,......,aN},其中n个元素互不相同,如何输出这些元素的所有排列?(全排列) 这里以R = {1,2,3}为例,来说明全排列的生成方法,对于这个集合,其包含3个元素,所有的排列情况有3!=6种,对于每一种排列,其第一个元素有3种选择1,2,3,对于第一个元素为1的排列,其第二个元素有2种选择2,3;第一个元素为2的排列,第二个元素也...

2019-07-30 18:23:44 262

原创 【 Linux 】详解线程同步方法

一、什么是线程同步 线程同步包含线程同步与线程互斥。 线程同步:同步就是协同步调,按预定的先后顺序进行运行。线程同步是指多线程通过特定的设置(如:信号量、事件对象、临界区)来控制线程之间的执行顺序(即所谓的同步)也可以说是在线程之间通过同步建立起执行顺序的关系。 线程互斥:线程互斥是指对于共享的进程系统资源,在各个单位线程访问时的排他性,当有若...

2019-07-29 17:52:29 181

原创 【 C++ 】C++中 const 的使用详解

一、概念和作用常类型是指使用类型修饰符 const 说明的类型,常类型的变量或对象的值是不能被更新和改变的。 const 关键字的作用主要有以下几点:可以定义 const 常量,具有不可变性。例如:const int Max = 100;int Array[Max];便于进行类型检查,使编译器对处理内容有更多的了解。消除了一些隐患。例如:void f(const int ...

2019-07-29 15:22:53 307

原创 【 C++ 】C++中指针与引用的区别

1、指针 指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元。2、引用 引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。举例说明:int a = 10; int *p = &a;//p指针指向a的地址,指向a的存储单元,即p的值是a的地址int a = 10; int &p = a;/...

2019-07-27 20:21:34 167

原创 【力扣】题目4:寻找两个有序数组的中位数

题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。 你可以假设 nums1 和 nums2 不会同时为空。示例1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0...

2019-07-27 19:54:55 131

原创 【力扣】题目3:无重复字符的最长子串

题目: 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。...

2019-07-27 19:27:28 145

原创 【 C++ 】 内存池

一、内存池简介 内存池是池化技术中的一种形式。通常我们在编写程序的时候回使用 new delete 这些关键字来向操作系统申请内存,而这样造成的后果就是每次申请内存和释放内存的时候,都需要和操作系统的系统调用打交道,从堆中分配所需的内存。如果这样的操作太过频繁,就会找成大量的内存碎片进而降低内存的分配性能,甚至出现内存分配失败的情况。 而内存池就是为...

2019-07-27 18:29:58 182

原创 【力扣】题目2:两数相加

题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输...

2019-07-27 17:52:22 135

原创 【力扣】题目1:两数之和

题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返...

2019-07-26 20:33:38 183

原创 【 C++ 】new / delete 和 malloc / free的区别

一、new / delete 和 malloc / free C语言提供了malloc 和 free两个系统函数完成对堆内存的申请和释放,而C++提供了两个关键字new 和 delete。1、使用规则new/delete是关键字,效率高于malloc和free。 配对使用,避免内存泄漏和多重释放。避 免交叉使用,比如malloc申请空间delete释放,new出的...

2019-07-26 16:22:07 205

原创 【 Linux 】进程间通信之消息队列

进程间通信---消息队列1、概念 消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构,并且通过维护这个数据结构来维护这个消息队列。向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点。2、消息队列的创建 调用的函数为 msgget() ,其功能是打开一个现存...

2019-07-26 14:15:41 209

原创 【 C++ 】C和C++区别

1、C语言 C语言是面向过程的语言:面向过程编程就是分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用的时候一个个的依次调用就可以了。面向过程就是自顶向下的编程。 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源。 缺点:没有面向对象易维护,易复用、易扩展。2、C++ ...

2019-07-25 22:49:28 196

原创 【 C++ 】虚拟地址空间布局

2019-07-25 21:06:06 137

原创 【 Linux 】进程间通信之信号量

进程间通信方式---信号量1、概念 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行。而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它,也就是说信号量是用来调协进程对共享资源的访问的。...

2019-07-25 20:40:27 113

原创 【 Linux 】进程间通信之管道

进程间通信1、概念 进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。2、进程通信的应用场景数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立...

2019-07-25 19:58:18 137

原创 【 Linux 】浅谈动态库和静态库及两者区别

库文件 1、概念 在 windows 和 Linux 平台下,都存在着库。本质来说,库是一种可执行的代码的二进制形式,可以被操作系统载入内存执行。 2、静态库制作命令及参数意义 1、静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 2、静态库的后缀是 .a 它的产生分两步...

2019-07-25 18:55:10 191

原创 【 C++ 】编译链接运行原理

1、预编译(生成 .i 文件) 1>、将所有 #define 删除,并且展开所有的宏; 2>、处理掉所有的预编译指令,如 #if,#ifdef,#endif,#else等; 3>、处理 #include 指令,这是一个递归过程; 4>、删除所有注释 // 和/*.....*/; 5>...

2019-07-23 21:14:02 104

原创 【 Linux 】select、poll和epoll的区别

注:详细I/O复用详解及select、poll、epoll请前往:https://blog.csdn.net/Ambition_HAO/article/details/97024189select:用户通过3个参数(readfds、writefds,exceptfds)分别传入感兴趣的可读、可写及异常等事件,内核通过对这些参数的在线修改来反馈其中的就绪事件。这使得用户每次调用select都要重...

2019-07-23 20:51:03 113

原创 [ Linux ] 多进程与多线程的区别

进程:运行中(加载到内存上)的程序。-->执行过程称之为进程。线程:线程是轻量级的进程,是进程中的一条执行序列(一组有序指令),一个进程至少有一条线程。 main函数所代表的执行序列称之为主线程。通过线程库创建的线程称之为函数线程。对比维度 多进程 多线程 总结 数据共享,同步 数据共享复杂,需要用IPC; 数据是分...

2019-07-23 19:05:47 340

原创 HTTP和HTTPS协议

基础概念 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器...

2019-04-06 14:38:20 162

转载 IP协议特点及其包头

IP协议的主要特点:①IP协议是一种无连接、不可靠的分组传送服务的协议。②IP协议是点-点线路的网络层通信协议。:IP协议是针对原主机-路由器、路由器-路由器、路由器-目的主机之间的数据传输的点-点线路的网络层通信协议。③IP协议屏蔽了网络在数据链路层、物理层协议与实现技术上的差异。:通过IP协议,网络层向传输层提供的是统一的IP分组,传输层不需要考虑互联网在数据链路层、物理层协议与实...

2019-04-06 14:30:53 1322

原创 详解三次握手与四次挥手

建立TCP需要三次握手才能建立成功,而断开连接则需要四次挥手,详解如下:建立连接:首先Client端发送连接请求报文,Server端接收到了连接请求报文后回复ACK报文(表示我已接收到你的请求报文),并且为这次连接分配资源。Client端接收到Server端发送的ACK报文后,也回复ACK报文(表示我已知道你同意),并分配资源,此时TCP建立成功。断开连接:【注意...

2019-04-05 23:04:24 97

原创 进程与线程

1、什么是进程: 答:操作系统最核心的概念就是进程。其实进程简单来说就是操作系统中运行的程序,他是操作系统资源管理的最小单位。但是进程是一个动态的实体,他是程序执行的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。2、什么是线程: 答: 线程是进程的一个实体,是CPU调度和分...

2019-03-23 11:32:08 117

转载 malloc和new的区别

1. malloc()函数1.1 malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void *malloc(unsigned int num_bytes);说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。1....

2019-03-05 19:04:11 95

原创 希尔排序

希尔排序的思想:先将整个待排序记录序列分割成为若干个子序列分别进行直接插入排序,带整个序列中的记录“基本有序”时再对全体记录进行一次直接插入排序。一趟shell过程:void Shell(int *arr,int len,int gap)//gap:分组{    int tmp;    int i;    int j;    for(i=gap;i&lt;len;i++) ...

2018-12-04 20:51:48 95

原创 数字处理方法

 题目:给一个不多于五位的正整数,要求:求出他几位数 分别输出每一位数字; 按逆序输出各位数字,例如原数为321,应输出123.源代码:#include &lt;math.h&gt;int Di(int n){ int x=0; while (n!=0) {  n=n/10;  x++; } return x;}int Out(int num){ if(...

2018-12-02 15:53:21 185

原创 插入排序

 //插入排序的最大特点:越有序越快,完全有序则为O(n(1)对于五个关键字,由于第一个关键字不用做插入处理,因此只需要插入4次插入操作。同理对于待排序的关键字序列a,第i个关键字用ai表示,其具有n个关键字,则需要n-1次处理。(2)当插入第i个关键字ai时候,需要和前一个i-1个关键字作比较,这个关键字用aj表示(1&lt;=j&lt;i),若ai&lt;aj,则把aj向后...

2018-12-02 15:24:25 107

原创 顺序表的基本操作

//源文件:函数的实现#include "seqlist.h"#include &lt;stdio.h&gt;#include &lt;assert.h&gt;//初始化顺序表psvoid InitSeqList(PSeqList ps)//PSeqList == SeqList *;{    assert(ps != NULL);    if(ps == NULL)    {...

2018-12-02 15:20:15 152

原创 数组

一维数组:int arr[4];  数据类型arr           int *arr+1         int*arr[0]        int二维数组        brr[3][4]         数据类型   int(*p)[4]:指向数组的指针brr               int(*p)[4]brr+1             int(*p)[4]brr[0]       ...

2018-04-24 16:31:09 109

空空如也

空空如也

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

TA关注的人

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