自定义博客皮肤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)
  • 收藏
  • 关注

原创 关于QQ使用协议的那点事

关于QQ使用的协议:事实上,QQ使用的协议包含了 UDP、TCP、HTTP这三种。登录: 客户端client采用 TCP协议 向服务器 server 发送信息,使用HTTP协议下载信息。登录之后,会有一个 TCP连接来保持这种在线状态。和好友发消息: 客户端client 采用 UDP 状态,但是需要通过服务器来转发。腾讯为了保证传输消息的可靠,一般采用上层协议来保证可靠传输。如果消息传...

2020-04-22 00:06:04 1881

原创 学习TCP——三次挥手、四次握手

标题 接下来将从几个方面深入学习TCP:1.TCP基本认识2.TCP连接建立3.TCP连接断开4.socket编程正文#01 TCP 基本认识TCP头部格式序列号:在建立连接时,由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次,就累加一次该数据字节的大小。 (用来解决网络包乱序问题)问题:初始序列号为什么要随机初始化呢?答:保证网络...

2020-04-07 01:27:06 835 1

原创 学习STL标准库——容器

STL是什么?STL是 ——标准库,是一个高效的C++标准库,是一些 容器、算法和其他一些组件的集合。STL是目的是为了标准化组件,这样就可以不用再构建新的组件、直接使用现成的组件STL现在是C++的一部分,被内置在你的编译器中。STL可以保存对象,内建对象和类对象。它们能安全的保存对象,并且定义一个我们能操作它的接口。STL组件有什么?STL主要分为三类:容器、算法、迭代器。1.容...

2019-09-14 18:35:37 445

原创 键盘输入一个RUL按下回车键后具体发生什么事情?

URL即为域名,例:http://www.baidu.com 大概发生以下步骤: 1.浏览器的地址输入URL按下回车键; 2.浏览器首先会检查当前的URL是否存在缓存,并检查缓存是否过期; (1)首先查找浏览器是否有缓存,近期浏览过的网站,浏览器会缓存DNS记录一段时间; (2)再查找系统缓存:从c盘的host文...

2019-09-04 11:08:40 313

原创 HTTP状态码有哪些?分别代表什么意思?

HTTP状态码:100:继续,continue200:请求成功,并且服务器创建了新的资源202:服务器已经接受请求,但是尚未处理301:请求的网页已经永久移动到新位置302:临时性重定向303:临时性重定向,且总是以get方式请求新的URL304:自从上次请求后,请求的网页从未修改过400:无法理解请求的格式401:请求未授权403:禁止访问404:找不...

2019-09-03 22:11:41 325

转载 同步异步、堵塞非堵塞的区别

同步和异步关注的是: 消息通信机制; 阻塞和非阻塞关注的是:程序在等待调用结果(消息,返回值)时的状态.1.同步与异步同步:就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回或者不能继续向下之执行。但是一旦调用返回, 就得到返回值了。换句话说,就是由*调用者*主动等待这个*调用*的结果。异步:与之相反,调用在发出之后,这个调用就直接返回了或...

2019-09-03 20:19:42 469

转载 select、poll、epoll总结

select、poll、epoll总结 ...

2019-09-01 10:50:35 307

原创 C++——单例模式

单例模式是什么?单例模式其实就是设计一个类,并在程序中这个类中只能实例化一个对象,不允许有多个对象产生。举一个非常简单的例子帮助理解一下,程序就好比一个学校,一个学校当然就只能有一个校长,不能有多个,对吧,要是多个那到底谁说话管事呢! 校长就好比 这个实例,只能实例化一个,不允许多个。我们一般的实现方法是: 将 构造函数、赋值运算符函数、拷贝构造函数写在私有下,禁止他人访问;如果不写在私有下...

2019-08-24 19:13:54 202

原创 进程篇——进程间通信《消息队列》

一、什么是消息队列?消息队列就是消息的链表,存放在内核中并由消息队列标识符表示。消息队列提供了一个从一个进程向另一个进程发送数据块的方法,每一个数据块都可以被认为是有一个类型,接收者接受的数据块可以有不同的类型。但是和管道类似的是,它有一个不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数(MSGMNB),系统上消息队列的总数上线(MSGMNI)。内核为每个IP...

2019-08-22 20:13:03 277

原创 进程篇——进程间通信方式《管道》

一、进程间通信(IPC)**我们知道进程之间都是相互独立的,任何一个进程的全局变量在另一个进程中是看不到的,如果进程之间需要交换数据,那么是需要通过内核的。进程间通信的本质就是 让两个进程看到共同的资源。进程间通信的目的1. 数据传输:一个进程需要将它的数据发送到一个进程;2. 资源共享:多个进程之间共享同样的资源;3. 通知事件:一个进程需要向另外一个进程发送消息,通知发生了某间事情(...

2019-08-21 17:41:00 308

原创 进程篇——信号

信号是什么? 信号其实就是传递的一种信息,让我们能根据这个信息进一步的去处理响应的事件。比如说:红绿灯,绿灯亮了,这就是一个信号,提醒我们此时可以安全的过马路了。比如我们键盘按下:Ctrl-C 给前台进程发送信号,终止进程。 对于信号的理解,我们可以类比现实生活,举个例子:老师给我们布置了一个作业,然后我们将作业记录下来是什么,然后需要一段时间去完成作业,最后上交给老师。...

2019-08-21 14:10:05 990

原创 C++中全局变量和局部变量的区别

可从下面四个方面进行区别:作用域: 全局变量作用于整个程序; 局部变量作用于当前函数。2.内存分配: 全局变量内存分配在自由分配区; 局部变量分配在栈区。3.生存周期不同 全局变量:跟随系统的创建而创建,销毁而销毁; 局部变量:局部函数内部,甚至局部循环体内部,退出就不存在。4.使用...

2019-08-20 16:09:38 2910 1

原创 C++:指针和引用的区别

知识扩充:使用指针的优点和必要性:指针能够有效的表示数据结构; 能动态分配内存,实现内存的自由管理; 能方便的使用字符串; 便捷高效的使用数组; 指针直接和数据的存储地址有关:比如 : 值传递没有地址传递高效,因为值传递先从实参的地址取出值,再赋值给形参代入函数计算;指针则是把 实参的地址直接指向实参地址,使用时直接取出数据,效率提高,特别是在频繁赋值等情况下(形参的改变会影...

2019-08-20 16:07:54 168

原创 C++中class和struct的区别

C中的struct不能有函数,但是C++中可以。 C++中的struct对C中的struct进行了扩充,它已经不再是一个包含不同数据类型的数据结构了。它已经获取了太多的功能。Struct能包含成员函数吗? 能!Struct能继承吗? 能!Struct能实现多态吗? 能!三方面:默认的访问权限:Class中的成员默认的访问权限都是privateStruct中的成员默认的...

2019-08-20 16:04:05 217

原创 进程篇——进程创建-fork及vfork

扩展内容:我们都知道程序在系统中是以进程为单位运行的,进程是可执行程序运行的单元。进程执行过程中就需要OS为其分配可供执行的资源。其中最难理解的就是 内存资源的分配,OS到底是怎么为新进程合理的分配资源呢,这就产生了虚拟地址空间的概念。1.虚拟地址空间和物理内存虚拟内存存在的意义:计算机内存资源是相对匮乏的资源,每个可执行程序都需要哦OS为其分配一定的内存资源,现代计算机已经实现了...

2019-08-12 11:50:45 363

原创 进程篇——了解库文件、静态库及动态库的定义和区别

什么是库文件在Windows和linux平台下都大量存在着库。库文件是预先编译好的方法的集合,都是按照可重用的规则编写的,通常通过一组由相关联的函数组成以执行某项常见的任务。比如说我们提前要写好一些数学公式的实现,将其打包成库文件,然后我们以后只需要使用库文件即可,不用再需要重新编写。标准系统库文件一般存放的位置是 /lib和/usr/lib目录下。库文件的名字总是以lib开始,随后...

2019-08-10 16:21:01 708

原创 进程篇——了解Makefile文件

一个工程中的源文件不计其数,其按照类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重编译,甚至进行更复杂的功能操作。Makefile文件主要包括五方面内容:显示规则、隐晦规则、变量定义、文件指示、注释功能:关系到整个工程的编译规则,也可执行操作系统的命令好处:实现“自动化编译”,一旦写好,...

2019-08-10 16:19:27 286

原创 进程篇——程序编译链接的过程

一个源文件生成最终的可执行文件的过程可以分为四步:预编译 编译 汇编 链接如下图运行过程:使用gcc命令不跟任何的选项的话,会默认执行预编译、编译、汇编、链接这整个过程,就会得到一个可执行文件,默认为a.out1.预编译gcc -E hello.c/ *-o hello.i */ -E::提示编译器只执行完预编译处理就停下来,对应生成...

2019-08-10 16:18:26 226

原创 理解进程、线程的含义及区别

什么是进程? 概念:进程是操作系统动态执行的基本单元,进程就可以说是运行的一段程序(程序:存储在磁盘的可执行文件),当我们有很多程序同时执行时,就有了一种类似于排队的模式,就比如说我去银行柜台取钱,为了同时进行,我们可以规定让每一个人一次性只能取500块钱,取完之后,下一个人接着取,如此循环,先取完钱就相当于程序执行完了,然后慢的就继续刚刚的排队。 进程是指一个内存中运...

2019-07-31 15:18:28 1283

原创 C++——oop思想

oop:面向对象编程(object oriented programming),是一种计算机编程架构。对象是由数据和容许的操作组成的封装体,和客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而继承性是具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识理解、刻画客观世界和设计、构造相应的软件系统。属性和方法...

2019-07-25 15:56:30 451

原创 关键字static的作用和用途

在C语言中,关键字static的意思是静态的,主要有三种作用:(修饰函数,全局变量,局部变量)(1)在函数体内,一个被声明为静态的变量在这一函数被调用的过程中其值维持不变。(2)在模块内(但是在函数外),它的作用域范围是有限制的,如果一个变量被声明为静态的,那么该变量可以被模块内所有的函数访问,但不能被模块外的其他函数访问。(3)内部函数应该在当前源文件中说明和定义,对于可在当前源文件...

2019-07-24 20:45:53 2510

原创 详解const 用法

const关键字的基本功能和用法:1.const的用法:(1)定义常量(2)修饰函数的参数(3)修饰函数的返回值(4)修饰函数的定义体 1.将限定符声明为只读,修饰普通类型的变量。 在类型前/后加上关键字const,该变量必须被初始化,否则编译错误;该变量不能被重新赋值,否则也编译错误。举例: const int i=100; //okco...

2019-07-24 11:51:57 4620 1

原创 C和C++的区别

区别:c语言: 面向过程的语言,c++:面向对象的语言 .二者动态管理内存的方法不一样:c语言:使用malloc/free函数,c++除此之外还有new/delete关键字(知识点1:new和malloc的区别) 关于重载:c语言不支持重载,但是c++支持函数重载。c++支持重载的原因在于c++的名字修饰和c不同,例如在c++中 int fun(int,int)函数的形式就是 _fun...

2019-07-22 20:45:49 206

原创 【MySQL】资源分类,锁的分类、死锁的产生原因、避免和解决方法

什么是资源: 系统中有很多资源,在采用互斥性访问并且不可被抢占的资源就叫 临界性资源。对于资源的分类:1.根据使用次数分类:(1)可重用性资源: 每一个可重用性资源中的单元都只能被一个进程所使用,不允许多个进程共享。 进程使用资源顺序:a:请求资源(如果请求失败,则会进程堵塞或者循环等待),b:使用资源,c:释放资源 系统中的可重复性...

2019-07-20 15:31:27 453

原创 内存管理之内存池

在编程实践中,不可避免的要大量的用到堆上的内存。例如我们在维护一个链表的数据结构的时候,每次新增或者删除一个新的节点的时候,就会在内存堆上进行内存的申请和释放;例如我们在维护一个动态的数组的时候,如果动态数组的大小不能满足程序需要的时候,那么也要在堆上分配新的内存。系统默认的内存管理函数及其不足之处: new/delete/malloc/free 等。当我们在使用这些系统默认的...

2019-03-24 11:21:41 276

原创 详解计算机网络——TCP/IP协议、TCP协议、UDP协议、三次握手,四次挥手

TCP/IP协议:由网络层的IP协议和出传输层的TCP协议组成。通俗点讲:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有的数据完全传输到目的地,而IP协议是给因特网的每一台互联网设备都规定一个地址。IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更...

2019-03-02 16:58:05 404

原创 详细解析直接插入排序和希尔排序

直接插入排序:    (1) 基本思想:            每一趟将一个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。   直接用一个事例来解释说明:   给一无序的数列:49,38,65,97,76,13,27,49   对于这个进行直接插入排序,如图:代码:#include<stdio.h&gt...

2018-12-04 19:54:53 212

原创 位运算剖析——二进制中1的个数

什么是位运算: 位运算是把数字用二进制表示之后,对每一位上0和1的运算。 二进制是指:把数字的每一位都是0或者1。比如十进制的2转换为十进制为10,而十进制的10转化为二进制为1010。与、或、异或的运算规律: 左移运算符 m << n 表示把 m 左移 n 位。 在左移 n 位的时候,最左边的 n 位将会被丢弃,同...

2018-12-03 01:14:25 1036

原创 菲波那契数列

题目:求斐波那契数列的第n项写一个函数,输出n,求斐波那契数列的第n项,斐波那契数列的定义如下:第一种思路: 运用递归来解,以求解分f(10)为例,必须先要求得f(9)和f(8),同样要求得f(9),必须先要求得分f(8)和f(7)....依次类推,如下图:如上图中,在树中,遍历节点求值时,会发现很多的节点是重复的,而且节点是数是重复会随着n的增大而急剧增...

2018-11-28 14:22:46 226

原创 旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如{1,2,3,4,5}是{3,4,5,1,2}的一个旋转,该数组的最小值为1。解题思路:对于这个已经排序的数组,仔细看其实是由两个排序的数组组成,我们取其中间的那个值就会发现,如果它落在前面那个有序的数组,那么它的值一定会大于该数组的第一个值并且大于后面那个...

2018-11-28 13:49:48 102

原创 从尾到头打印链表

题目:输入一个链表的头节点,从头到尾反过来打印出每个节点的值。链表节点定义如下:Struct ListNode{int m_nKey;ListNode*m_pNext;};思路:在不改变原来链表的结构时,我们可以用递归来实现这个函数。当每访问到一个节点的时候,先递归输出它后面的节点,再输出该节点自身。逆置链表再打印就OK了。代码:#include<...

2018-11-28 13:46:38 104

原创 替换空格

题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“we are happy”,则输出“we%20are%20happy”。解题思路:转换的规则是在 %后面跟上ASCII码的两位十六进制的表示。即为 原来一个空格字符现在要替换成 ‘%’, ’2’, ’0’这三个字符,原本一个空格字符占用一个字节,现在将会增加空格2个字节,所以现在总的字符串会变长,即增加 空格数*2...

2018-11-28 13:37:56 105

原创 c++:类与对象,封装,访问限定符,默认成员函数

到底什么是类?什么是对象? 类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。 类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。对象是一个动态的概念,每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为,对象的属性可以随着它自己的行为而发生改变。 ...

2018-11-26 00:13:59 495

原创 函数的堆栈调用

每一个程序的执行都使用了栈,栈被定义为一个特殊的容器,用户可以将数据压入栈中(入栈,push),也可以将已经压入的数据弹出(pop,出栈),但栈这个容器必须遵守一条规则“先进后出”。在操作系统中,栈是动态内存区域,程序可以将数据压入栈中,也可以将数据从栈顶弹出。在i386下,栈顶由称之为esp的寄存器进行定位。栈在程序运行中具有举足轻重的地位。栈保存了一个函数调用所需要的维护信息,被称之为...

2018-11-19 21:53:12 294

原创 虚拟地址空间的深度剖析

1.为什么引用虚拟内存: 当我们运行一个程序时,会将程序全部装入内存,然后运行。但是在运行时经常会出现一些问题:(1)继承地址空间没有隔离,没有权限保护。 由于程序都是访问物理内存,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间的数据,很不安全。(2)内存使用的效率极低 当内存空间不足时,要将其他程序暂时拷贝到硬盘,让...

2018-11-19 21:00:50 354

原创 宏定义#Define和Typedef的用法和区别

一:各自的定义 (一) Typedef 本身是一种存储类的关键字,在计算机编程语言中用来为复杂的声明定义简单的别名。 Typedef 的含义:找到你所要声明的通用格式。例如这里申明 inta[4],b[4],c[4],只有a,b,c不同,但是他们有相同的申明模式 int<名字>[4]; 用你想要申明的新类型名代替通用格式中的变化部分。例如这里就是用新类型int...

2018-11-10 15:30:22 1035

原创 进程篇——僵死进程和孤儿进程概念及处理方法

一:定义 首先明白,在linux系统中,子进程是通过父进程创建的,子进程自身再创建新的进程。并且父进程和子进程是异步运行的,即父进程永远无法预测子进程何时结束,当然也就不知道何时去收集子进程的退出信息了。孤儿进程:在一个父进程退出后,剩余的它的一个子进程或者多个子进程仍然在运行,并没有退出,那么这些子进程就会变成孤儿进程,这些孤儿进程将被init进程(进程号为1)所收养,并...

2018-11-10 15:09:51 683

原创 动态内存malloc,calloc,realloc的详细用法

对于 指针,正确的分配动态 内存是十分重要的,本文将着重阐述动态内存分配函数malloc,calloc,realloc的用法。1.对于malloc作用是在 内存的堆区分配一个大小为size的连续空间,如果分配内存成功,函数返回新分配内存的首地址,否则,返回 NULL,注意:鉴于上述这点,一般在写程序需要判断分配内存是否成功。//栈的大小为1M,可配//堆能分配的最大的分配空间为1....

2018-04-27 21:49:17 346

原创 递归的构成原理和实现

递归,就是在运行的过程中调用自己。构成递归需具备的条件:函数嵌套调用过程示例1. 子问题须与原始问题为同样的事,且更为简单;2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。//栈的大小:使用局部变量,1m:1024*1024时间复杂度:1....

2018-04-23 23:04:18 1089

原创 指针加减法的要点

指针加减法的要点1. 指针加数字:int arr[10]={1};int *ip=arr;ip++; //加一个整型单元格,因为是int型,所以加4个字节=sizeof(int)double brr[10]={12.3}'double *dp=brr;dp++; //加一个double型单元格,8个字节=sizeof(double)指针加法需要调整,调整的...

2018-04-19 00:29:44 787

空空如也

空空如也

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

TA关注的人

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