自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 tcp协议和udp协议的使用场景

一:什么是TCP(Transmission Control Protocol,传输控制协议)tcp是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就...

2018-09-09 12:15:03 10702

原创 系统调用和库函数调用的区别

一:系统调用和库函数调用的区别:1:系统调用是最底层的应用,是面向硬件的。而库函数的调用是面向开发的,相当于应用程序的API(即预先定义好的函数)接口;2:各个操作系统的系统调用是不同的,因此系统调用一般是没有跨操作系统的可移植性,而库函数的移植性良好(c库在Windows和Linux环境下都可以操作);3:库函数属于过程调用,调用开销小;系统调用需要在用户空间和内核上下文环境切换,开...

2018-09-04 16:19:24 10960 2

原创 数据库sqlite的基本介绍

1:SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS,它可移植性好,很容易使用,很小,高效而且可靠。2:SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。3:嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也...

2018-09-02 21:26:53 1042

原创 C++面向对象的五大原则

一:什么是面向对象面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。二:面向对象的五大基本原则:SPR, OCP, LSP, DIP, ISP...

2018-09-02 11:29:08 1446

原创 接口继承和实现继承的区别

public继承概念由两部分组成,函数接口(function interfaces)继承和函数实现(function implementations)继承。作为类的开发人员,我们主要研究类的三种继承情况:1、派生类只继承成员函数的接口(也就是声明);2、派生类同时继承函数的接口和实现,但又希望能够覆写(override)它们所继承的实现;3、派生类同时继承函数的接口和实现,并且不允许覆盖任...

2018-08-29 22:33:27 5497

原创 虚函数不能声明为内联函数的原因解读

内联函数(inline)内联函数的目的是为了减少函数调用时间。它是把内联函数的函数体在编译器预处理的时候替换到函数调用处,这样代码运行到这里时候就不需要花时间去调用函数。但内联函数有个缺点是它会增加执行文件大小。所以如果不适当的使用内联函数会造成执行文件特别大。而使用内联函数有以下几点需要注意:头文件中不仅要包含inline函数的声明,还要包含inline函数的定义 编译器需要把inl...

2018-08-29 17:24:33 1059

原创 c++基类的析构函数为虚函数的原因

1、原因:   在实现多态时, 当用基类指针操作派生类, 在析构时候防止只析构基类而不析构派生类。2、例子:(1): #include<iostream>  using namespace std;  class Base{  public:    Base() {};   ~Base() {cout << "Output from the ...

2018-08-20 13:13:46 585

原创 c++之虚函数的声明规则详解

虚函数规则详解:定义: 虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,是C++多态的一种表现。 作用: 实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型,以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,...

2018-08-20 13:02:28 2920

原创 在C++中,编译器会为空类提供哪些默认成员函数?

一:问题描述:在C++中,编译器会为空类提供哪些默认成员函数?分别有什么样的功能呢? 二:详解1:空类在声明的时候,编译器并不会为其生成任何成员函数,只会生成1个字节的占位符。2:有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:一个缺省的构造函数、一个拷贝构造函数、一个析构函数、一个赋值运算符、一对取址运算符和一个this指针...

2018-08-19 19:31:25 1318 1

原创 内存池,进程池,和线程池的比较分析

池的概念由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。池是一组资源的集合,这组资源在服务器启动之初就完全被创建并初始化,这称为静态资源分配。当服务器进入正式运行阶段,即开始处理客户请求的时候,如果它需要相关的资源,就可以直接从池中获取,无需动态分配。很显然,直接从池中取得所需资源比动态分配资源的...

2018-08-16 20:47:57 1370

原创 详解两个栈如何实现队列的功能(考虑最全面)

话不多说。代码奉上,各种情况自认为考虑的比较完善啦,如有不足,请指正!注释上面都有,就不在一一解读啦。/*主要功能:用两个栈实现一个队列具体实现:两个栈,先进后出,现在要将其实现为队列,先进先出用栈s1完成数据的入,栈s2完成数据的弹出栈s1只管数据的入,栈s2弹出的时候,先要保证队列里面有元素才可以弹出,当栈s2为空时,必须将栈s1的元素全部弹出且入栈s2,不为空的时候直接弹...

2018-08-14 09:40:32 579

原创 详解c++指针和引用的区别与联系

 ★ 相同点:    1. 都是地址的概念;    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 ★ 区别:    1. 指针是一个实体,而引用仅是个别名;    2. 引用使用时无需解引用(*),指针需要解引用;    3. 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终” ^_^    4. 引用没有 const,这是因为引...

2018-08-13 20:44:04 224

原创 详解线程池的原理及作用

一:为什么引入线程池大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且...

2018-08-12 20:00:01 1643 1

原创 详解接口和抽象类的区别

一:首先要明白什么是抽象类和接口:抽象类:抽象类是特殊的类,只是不能被实例化(将定义了一个或多个纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它...

2018-08-11 15:55:08 446

原创 论述含参数的宏与函数的优缺点

论述函数的宏及函数的优缺点1.函数调用时,先求出实参表达式的值,然后带入形参。而使用带参的宏只是进行简单的字符替换。2.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,宏名无类型,它的...

2018-08-09 10:40:18 1010

原创 详解信号量和互斥锁之间的区别和联系

一:信号量与互斥锁之间的区别:(1):互斥量用于线程的互斥,信号线用于线程的同步。这是互斥量和信号量的根本区别,也就是互斥和同步之间的区别。(2):互斥量值只能为0/1,信号量值可以为非负整数。也就是说,一个互斥量只能用于一个资源的互斥访问,它不能实现多个资源的多线程互斥问题。信号量可以实现多个同类资源的多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源的互斥访问。信号量...

2018-08-08 20:50:55 21877

原创 大端小端模式及其判别方式

Little endian 和Big endian 是CPU 存放数据的两种不同顺序。对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放数据的低位字节到高位字节)。例如,假设从内存地址0x0000 开始有以下数据...

2018-08-04 21:14:09 1040

原创 将两个有序链表合并成一个链表

代码实现功能如下:将两个有序链表合并成一个有序链表。具体思路如下:首先自己调用链表的创建函数,手动创建两个有序链表,链表的创建以输入0作为截止标志。创建好两个有序链表之后,将两个链表的头结点进行比较,小的那个作为合并后的链表的头结点,同时,创建两个指针分别指向两个链表的的头结点或头结点的下一个节点,当两个链表进行比较的元素都不为空的话,依次从下到大连接,若有一个链表中比较的节点开始为空时,则将...

2018-08-04 17:05:37 29901 3

原创 c++中,重载,重定义,重写 的区别

一:重载在一个类中,函数名相同,参数列表不同(具体表现为参数个数或参数类型不同),至于返回型可同可不同。重载属于静态多态,而不是通过继承和虚函数实现的动态多态。编译器会根据这些函数的参数列表的不同,将同名的函数名称做修饰,从而生成不同名称的预处理函数。eg:double  max(double x,double y),int  max(int  x,int y);这两个函数就是...

2018-08-03 10:28:33 3323

原创 简单工厂模式,工厂模式,抽象工厂模式的区别

简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类。我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。用这三种设计模式都可以实现,那究竟这三种设计模式有什么异同呢?下面根据这三者之间的特点,优点,缺点,适用范围进行比较。一.特点简单工厂模式:专门定义一个...

2018-08-01 19:51:39 2319

原创 tcp和udp的区别详解

一:TCP协议与UDP协议的区别       首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!       TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。TCP/IP...

2018-07-27 15:24:26 269

原创 队列的链式存储结构及其实现

队列也是一种特殊的线性表,只允许在一端进行插入操作,在另一端进行删除操作。允许插入的一段为对尾,允许删除的一端为队头。本次记录的是队列的链式存储结构以及实现。该存储结构有两个指针,一个指向头节点,称为头指针(front);一个指向队尾,称为尾指针(rear)。当front==rear时,表示空队列。当需要在队列中插入元素时,需要将队尾结点指向新插入的结点,然后将尾指针指向新插入的结点。当要在队列中...

2018-07-24 16:08:14 3618

原创 栈的链式存储结构解读(附详细代码)

1 :链式存储结构  栈的链式存储结构,简称链栈。  由于栈只是栈顶在做插入和删除操作,所以栈顶应该放在单链表的头部。另外,都有了栈顶在头部了,单链表中的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。  对于链栈来说,基本不存在栈满的情况,除非内存已经没有使用空间了。  对于空栈来说,链表原来的定义是头指针指向空,那么链栈的空其实就是top=NULL。          ...

2018-07-24 11:06:41 9929 4

原创 c++实现链表( 链表的创建,打印,插入(头插,尾插,中插),逆置 )

在本人所写的代码:在链表创建的时候,需要自己输入一个个数来充当每个节点的数据,当输入零的时候,链表穿创建结束,但0本身并没有存储到链表里面去,当然,这里的0也可以自己改成一个字符,这样更好一点,不会让链表本身无法存储0这个数字。另外,本人创建的时候是创建了一个带头结点的链表。链表的插入本人是分成三个部分来写的,分别是头插,尾插,中插。 具体实现代码如下:#include <io...

2018-07-22 21:32:47 4792

原创 sizeof 统计类实例化对象所占内存大小的规则详解

一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小。 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。add charles 空结构体:struct d{} 的sizeof也是1。具体规则如下:1:sizeof统计的是内存四区中的堆和栈里面的数据,而不包含数据区和代码区,因...

2018-07-21 10:54:39 1372

原创 C语言内存四区

                          图一:内存四区模型流程说明1、操作系统把物理硬盘代码load到内存2、操作系统把c代码分成四个区3、操作系统找到main函数入口执行一:内存四区一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(h...

2018-07-19 09:54:28 760

原创 C语言实现随机分组

掌握随机分组的精要,个人最觉得是要知道并了解到   srand()   函数  与   rand()   函数,并了解到如何将已经存在的顺序给打乱掉,即实现它的乱序。其中,rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed...

2018-07-18 20:53:32 7284 1

原创 建立一个存储和处理字符串的类DelCharStr

建立一个存储和处理字符串的类DelCharStr。(1)私有数据成员char *s:字符串的首地址。int len:该字符串的长度值。(2)公有成员函数构造函数:动态申请存储字符串所需内存空间,并且即能用指定的字符串也能用默认的值0为所声明的对象进行初始化。析构函数:释放字符串所用的内存空间。void setstr(char *sn):重新设置str的值。viud showstr(...

2018-07-17 15:59:01 903

原创 试建立一个类Self,求出指定范围内的自守数

自守数定义:一个自然数的平方的尾数等于该数本身。例如:252=625,762=5776,93762=87909376,则25、76、9376均是自守数。试建立一个类Self,求出指定范围内的自守数,具体要求如下:(1)私有数据成员int a[20]:存放求出的自守数。int m , n , p:m、n存放自守数的取值范围,p存放求出的自守数的个数。(2)公有成员函数构造函数Self...

2018-07-17 14:55:42 283

原创 用c/c++实现strncpy函数

strncpy函数介绍1:strncpy是 C语言的库函数之一,来自 C语言标准库,定义于 string.h,char *strncpy(char *dest, const char *src, int n),把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回dest。2:函数原型char *strncpy(char *dest,char *src,si...

2018-07-17 10:10:00 4642

原创 Linux内核的五大组件

一个完整的Linux内核一般由五大部分组成,他们分别是内存管理,进程管理,进程间通信,虚拟文件系统和网络接口。1、内存管理 内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子系统对内存分配的请求。Linux内存管理支持虚拟内存,而多余出的这部分内存就是通过磁盘申请得到的,平时系统只把当前运行的程序块保留在内存中,其他程序块则保留在磁盘中。在内存紧缺时,内存管理负责在磁...

2018-07-11 15:58:18 4037

原创 C语言基于socket的文件传输(可循环发送多个文件)

基本简介:本次文件传输的实现主要是通过客户端向服务器发送下载请求,然后在服务器中找到对应的文件并打开文件,再继续向客户端传送文件,而客户端就在不停的接收。这是因为文件可能比较大,一个缓冲数组只能保存一部分文件内容,因此服务器得不断从文件中读取内容并发给客户端,而客户端得不停的循环接收。但是在事先,得将相应要发送的文件(照片,音频,视频等)保存在服务器相应的目录下。而这个是不符合实际要求的,通常来讲...

2018-07-10 10:32:57 21965 13

原创 c和c++的区别简答

c是一个结构化的语言,它是面向过程的。它的重点在于算法和数据结构,对于语言本身,c是c++ 的一个子集,c程序的设计首要考虑的是如何通过一个过程对输入进行运算处理得到输出。而对于c++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现过程控制。所以c和c++最大的区别在于他们用于解决问题的思想方法不一样,c++是面向对象的,但是它不是完...

2018-07-04 10:34:32 219

原创 静态链表和动态链表的区别

静态链表和动态链表是线性表链式结构的两张不同的表现方式。1、静态链表是用类似于数组方法来实现的,是顺序的存储结构,在物理地址上是连续的,而且需要预先分配地址空间的大小。所以静态链表的初始长度一般是固定的,在做插入和删除操作时不需要移动元素,仅需修改指针。2、动态链表是用内存申请函数(malloc/new)动态申请内存的,所以在链表的长度上没有限制。动态链表因为是动态申请内存的,所以每个节点的物理地...

2018-07-01 10:58:07 3395 1

原创 c/c++面试题目

问题一:定义了一个类,其指针成员是用new来初始化的,请指出可能出现的三个问题及其解决方法:答:首先,当这种类型的对象过期时,对象的成员指针指向的数据仍将保留在内存中,这将占用空间,同时不可访问,因为指针已经丢失。可以让类析构函数删除构造函数中new分配的内存,来解决这种问题。其次,析构函数释放这种内存后,如果程序将这样的对象初始化为另一个对象,则析构函数将试图释放这些内存两次。这是因为将一个对象...

2018-06-30 16:24:33 165

原创 编写类String的构造函数、拷贝构造函数、析构函数和赋值函数(附代码分析解读)

面试题:用c++编写类的String的构造函数、拷贝构造函数、析构函数和赋值函数具体实现代码如下:#include<iostream>using namespace std;class String{private: char *p;public: String(const char*p); //普通构造函数 String(const String&am...

2018-06-13 19:35:04 806

原创 单链表的的创建,测长,打印,插入(附代码解析)

具体代码如下:所实现的是一个带头结点的链表/*单链表的插入分为三种方法,在头结点插入,在中间插入,在末尾插入*/#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct node //创建一个结点,用来存储信息{ int data; struct ...

2018-06-12 17:41:02 241

原创 不调用C/C++ 的字符串库函数,编写strcpy

已知strcpy函数的原型是       char *strcpy(char *strDest, const char *strSrc);       其中strDest是目的字符串,strSrc是源字符串。要求:不调用C++/C的字符串库函数,请编写函数 strcpy#include<iostream>using namespace std;char *strcpy(char ...

2018-06-12 16:07:04 2875

原创 c++中有了malloc/free,为什么还需要new/delete?

一:malloc/free是c/c++中的标准库函数,new/delete是c++中的运算符。它们都用于申请动态内存和释放内存。二:对于非内部数据对象(eg:类对象),只用malloc/free无法满足动态对象的要求。这是因为对象在创建的同时需要自动执行构造函数,对象在消亡之前要自动执行析构函数,而由于malloc/free是库函数而不是运算符,不在编译器的控制权限内,也就不能自动执行构造函数和析...

2018-06-07 17:29:24 8205

原创 用c++来实现单例模式

单例模式是使用广泛的一种设计模式,又称为单件模式、单子模式。其意图是保证一个类仅有一个实列,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多的地方都需要这样的功能模块,如系统的日志输出,操作系统只能有一个窗口管理器,一台pc连一个键盘等等。单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显的很不优雅。 使用全局对象能够保证方便地访问实例,但是不...

2018-06-05 16:56:44 19311 1

空空如也

空空如也

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

TA关注的人

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