自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 我想成为一个伟大的程序员

我想成为一个伟大的程序员 #include<stdio.h> int main() { int succeed = 0; int effort = 0; int deliberate = 0; while(1) { ...

2018-12-06 16:40:34 179 0

原创 C/C++程序的内存分配

思维导图 内存空间布局图 C/C++编译的程序占用内存分为一下几个部分 栈区:由编译器自动分配与释放,存放着运行时函数分配的局部变量,函数参数,返回数据,返回地址。其操作类似于数据结构中的栈 堆区:一般由程序员移动分配,如果程序员没有释放,程序结束有OS回收。其分配类似于链表。...

2019-09-09 18:05:10 34 0

原创 【C语言】浮点型存储

引言: 让我们看看下面一段代码: #include<stdio.h> #include<stdlib.h> int main() { //A部分 int n = 9; float* f = (float*)&n; printf("...

2019-09-08 14:01:41 62 0

原创 【C语言】整形提升和整形截断

整形提升: K&R(C语言第一本编程书的编著者)在C中将整形提升定义为: “A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumerat...

2019-09-06 12:41:53 64 0

原创 网络层 - IP协议

网络层: 定义:网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间 功能:A主机经过路径选择将数据传到B主机 路径选择: 在众多网路中找到B主机所在网络(局域网)。 在目标网络中找到目标主机。 需要通过传输层协议(TCP协议)检验IP报文是否正确的从A->B。 ...

2019-07-26 15:21:38 42 0

原创 TCP协议详解

什么是TCP协议? TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 TCP报头 TCP是如何分离和分用的? 分离:4位首部有效长度确定报头,剩下的属于有效载荷 分用:与UDP相同,通过目的端口号确实交付给上层哪个协议 1.端口号: 1.源...

2019-07-24 21:13:19 70 0

原创 UDP协议详解

引言: 上一篇文章,我们已经学会了应用层的HTTP协议,今天就让我们学习传输层两个最重要的协议之一的UDP协议,这个简单的协议能帮助我们更好的了解传输层。 什么是UDP协议? UDP(用户数据报协议),是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务. UDP报头: ...

2019-07-21 20:15:12 313 0

原创 什么是端口号?

在谈论端口号之前我们必须先明白了解运输层的作用: 运输层:为相互通信的应用程序提供逻辑通信 我们都知道,在IP层协议能够把源主机A发出的分组,按照源IP地址,送到目的IP地址,那么,传输层是做什么的呢? 从网络层来说,通信的是两个主机(两个局域网),IP数据报的首部明确标志了这两台主机的IP地...

2019-07-21 19:27:51 1650 1

原创 HTTP协议详解(响应与请求)

引言: 在网络基础中我们了解到了网络是分层的(OSI模型),因此如果我们想深入理解网络,想要了解信息是如何从一台主机传到另外一台主机上,打开浏览器是如何申请,服务器又是如何通过申请的话,我们就必须深入了解OSI模型,今天我们就从最上层的“应用层”开始了解。 应用层: 通俗易懂的来说,应用层是...

2019-07-20 19:20:26 65 0

原创 System V 共享内存

引言: 再上一章中,我们知道了可以通过管道进行进程间通信,但是管道通信要经过进程->内核->进程,一共两次拷贝,效率偏低。而今天我们要学习的System V 共享内存将是最快的通信方式。 共享内存示意图 过程: 当一个进程(A)申请共享空间之后,操作系统会在物理内存中开...

2019-07-19 17:48:54 52 0

原创 什么是管道?(详解进程间是如何通过管道通信的)

引言: 我们都知道,进程运行时是具有独立性的,要让两个进程进行通信是一件很困难的事情。因此两个进程通信的前提条件是,需要让两个进程看到同一份资源(物理内存)。 进程通信分类 管道: 1.匿名管道pipe(有“亲情”关系(多用于父子进程)的进程进行通信) 2.命名管道(实现不相关进程之间的通信) ...

2019-07-17 20:43:09 1658 0

原创 系统IO

引言: 我们之前已经学过了C的IO流,这两者语言层面的IO相较于系统的IP流是较为上层的,C中的FILE*就封装有系统底层的文件操作,今天就让我们学习linux系统层面的输入输出流,从底层开始认识基础IO。 ...

2019-07-15 21:15:10 36 0

原创 最简单的TCP协议实现

引言: 上一篇文章中,我们学习了UDP协议,在传输层中,出了UDP之外,TCP协议也是经常被提起的,今天让我们写一个最简单的TCP服务端和客户端 UDP和TCP对比: 不可靠传输和可靠传输 无连接和有连接 面向数据流和面向字节流 在服务端方面: TCP要建立监听(listen)和接收链接(ac...

2019-07-12 14:36:58 141 0

原创 实现最简单的UDP协议(客户端和服务端)

IP和端口号: 1.IP地址:IP数据报的头部有两个IP地址,分别叫做IP源地址和IP目标地址。 2.端口号:传输协议的内容 大小:2字节16位的整数 端口号用来标识一个进程,告诉操作系统,这个数据要交给哪一个进程处理。 IP地址 + 端口号:能够标识网络上的某一台主机的某一进程...

2019-07-10 15:40:09 923 0

原创 进程基础1

引言 上一次,我们已经学习过了什么是进程和进程与程序的区别,这次我们要学习如何创建,终止,等待进程。 1.进程创建 1.1 fork函数初识 头文件:#include<unistd.h> pid_t fork(void); 返回值:自进程返回0,父进程返回子进程id,出错返...

2019-07-09 17:54:09 51 0

原创 网络基础

计算机网络背景: 1.网络发展: 1.独立模式:计算机之间相互独立,一个个主机独立工作 2.网络互连:多台计算机连接在一起,完成数据共享。存在可靠性(数据丢失问题) 3.局域网LAN:计算机网络数量更多,通过交换机和路由器连接在一起。 两种模式:令牌环网和以太网 每一台主机都有...

2019-07-09 16:31:06 33 0

原创 linux空间详解

引言 我们在之前C++和C中学过了C的地址空间,从上到下分为内核空间,命令行参数环境变量,栈,共享区,堆,未初始化数据,初始化数据,正文代码8个部分。但是这仅仅是C中的地址空间,在Linux中,这种地址被叫做虚拟地址空间,今天我们要学习的是Linux中的地址空间。 程序地址空间 让我们看看下...

2019-07-03 15:24:51 31 0

原创 初识环境变量

引言 当我们想要运行某个程序的时候,我们要在前面加上./,是为了告诉操作系统我们想要运行的程序处于当前文件中。但是在我们使用ls , pwd等变量的时候却不需要,为什么?这就是因为我们接下来要讲的环境变量。 环境变量 1.基本概念: 概念:操作系统中用来指定操作系统运行环境的一些参数 特性:具有...

2019-07-03 11:40:45 25 0

原创 进程基础

/ 程序:硬盘上的一个普通文件,里边包含着代码和数据。 进程:把程序运行起来,加载到内存中,操作系统为了管理进程,会创建一个PCB将进程描述起来,再通过一个链表将多个进程组织起来。 1.进程基本概念: 课本概念:程序的一个执行实例,正在执行的程序。 内核观点:担当分配系统资源(CPU时间,内存)的...

2019-07-02 13:06:41 40 0

原创 初识linux操作系统

冯诺依曼体系结构 无论是我们常见的(笔记本)还是不常见的(服务器)大多都遵循冯诺依曼原则,如下图: 存储器:内存,出了存储器之外的设备都可以被称为外设。 输入设备,输出设备:也就是我们常说的外设,有具体情况判定是什么输入还是输出。 运算器和控制器:中央处理区(CPU)。 重点: ...

2019-07-01 17:42:18 18 0

原创 C++11各种特性

1.C++的初始化: 1.1C++98中初始化问题 在C++98中,能用大括号对数组元素初始化,如下: int a[] = {1,2,3,4} 但是不能对自定义类型却不能用大括号初始化,如下 vector<int> v{1,2,3,4}; 上面的初始化在C++9...

2019-06-26 18:40:50 144 0

原创 C++的类型转换

C的类型转换 int main() { int i = 1; double d = i; printf("%d, %.2f\n", i, d); //隐式类型转换 隐式转换:相关类型,相近类型 int* p = &i; //显示类型转换 显示转换:无关类型...

2019-06-25 09:58:16 26 0

转载 正确定义二维数组

对二维数组进行正确初始化 二维数组必须指定列的数量,行的数量可以不定义即可以省略第一维的定义,但不能省略第二维的定义 1.分行进行初始化 int a[2][3] = {{1,2,3},{4,5,6}}; 在{}内部再用{}把各行分分开,第0行的初值是1,2,3。第1行的初值是4,5,6。相当于执...

2019-06-24 16:23:17 5487 0

原创 inline函数的总结

思维导图 1.使用方法 -1. 在函数返回类型前加Inline。成员函数可以在声明时候添加Inline也可以在定义时候添加inline。 2.将成员函数定义在类定义式内,这个成员函数就被隐喻为Inline。 内联说明对于编译器仅仅是一个建议,编译器可以忽略这个建议 下面没有加...

2019-05-22 16:40:39 35 0

原创 格式化输出--%m.n

思维导图 输出标准: 1.%:表示格式说明的起始符号,不能省略 2.-:有-b表示左对其输出,右边补空格,如省略表示右对齐,左边补空格 3.0:有0表示指定空格填0,如省略指定空格不填。 4.m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实形数...

2019-05-21 16:16:43 698 0

原创 this指针的特性

思维导图 特性

2019-05-20 15:50:38 106 0

原创 虚函数,纯虚函数,普通函数的区别

2019-05-18 15:15:35 19 0

原创 C++多态

思维导图 什么是多态? 多态,从字面意思上理解就是多种形态,多种形式。在C++这种面对对象的语言中,就是“一个接口,多种实现”。 多态分为静态多态和动态多态。 怎么区分静态多态和动态多态? 区别:在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定...

2019-05-18 15:14:33 34 0

原创 重载,重定义,重写的区别

思维导图 例子: class Person { private: virtual void id() { cout << "id()" << endl; } void name() { cout <&...

2019-05-16 12:53:17 225 0

原创 指针和引用的区别

参考文章 思维导图 1.为什么使用指针 1.1每一个编程语言都使用指针 C++将指针暴露给了 用户(程序员),而java和C#等语言则将指针隐蔽起来了。 1.2使用指针的有点和必要性: 指针能够有效的表示数据结构 能动态分配内存,实现内存的自由管理 能方便的使用字符串 ...

2019-05-15 13:20:05 11441 3

原创 STL——仿函数(函数对象)

仿函数(函数对象) 定义: 一种具有函数特征的对象,调用者可以像函数一样使用该对象,为了能够“行为类似函数”,该对象所在类必须自定义函数调用运算符operator(),就可以在仿函数对象后面加上一对小括号,以此调用仿函数定义的operator()操作。 class Mul2 { public: ...

2019-05-14 14:37:43 225 0

原创 memcpy和strcpy的区别

思维导图 1.memcpy用法 2.strycpy用法 3.区别 1.复制方法不同:strycpy不用指定复制长度,他遇到被复制字符串’\0’结束,容易溢出。memcpy是由第三个参数决定复制长度的 2.复制内容不同“strcpy只能复制字符串,而memcpy能复制任意内容 3...

2019-05-12 15:13:28 649 0

原创 strcpy和strncy的缺陷

思维导图 1.存在潜在越界问题 当dest的长度 < src的长度的时候,由于无法根据指针判定其所指指针的长度,故数组内存边界不可知的。因此会导致内存越界,尤其是当数组是分配在栈空间的,其越界会进入你的程序代码区,将使你的程序出现非常隐晦的异常。 2.字符串结束标志服’\0’丢失 ...

2019-05-11 15:52:23 679 0

原创 什么是函数指针?(理解及使用)

思维导图 1. 定义: char* fun1(char* p1, char* p2)// 1 char** fun2(char* p1, char* p2);// 2 char*(*fun3)(char* p1, char* p2);// 3 1,2,3分别是什么意思呢? ...

2019-05-09 18:36:17 4431 0

原创 野指针(概念,产生原因,危害,避免方法)

思维导图: 1.野指针与垂悬指针的区别: 野指针:访问一个已销毁或者访问受限的内存区域的指针,野指针不能判断是否为NULL来避免 垂悬指针:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。 2.概念 指针指向了一块随机的空间,不受程序控制。 3....

2019-05-08 13:57:40 4149 2

原创 NULL和nullptr的区别

1.C++98的指针空值 一般我们在声明一个变量时,最好给变量一个合适的初始化值,否则可能会出现不可预测的错误。而我们一般是按照如下方法初始化的: int main() { int a = 0; int b = NULL; //... } NULL实际是一个宏,我们在C头...

2019-05-07 15:27:15 443 0

原创 mem函数(memset)

1.函数介绍 void *memset(void *s, int ch, size_t n); 功能:将s中当前位置后面的n个字节用ch替换并返回s。 作用:在一段内存中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 ...

2019-05-07 11:12:38 361 0

原创 mem系列函数(memcpy)

看了好多面经之后,我发现有很多题目都似乎很简单,但是如果要自己写的话,总感觉能写出个大概,但好像差点什么,所以我打算把见过的面试题总结出来,方便以后复习。 memcpy 下面是我们常见的的错误写法: 这里把dest和src都强制转换成了(char*)类型,但是copy一定是一个个字节的吗?不...

2019-05-06 15:26:54 824 1

原创 const关键字总结

一.关于const关键字的思维导图 二:const的使用方法 1.定义const对象 const修饰符把对象修饰为常量,意思是接下来对象都被当成常量使用,不能被修改 在用const修饰的值不能更改一开始就要初始化 类中的const对象需要通过构造函数初始化定义 2.cons...

2019-05-03 16:22:31 70 0

原创 new和malloc的区别及malloc详解

1.new和malloc的区别 共同点:两者开的空间都存放在堆上,并且都需要手动释放 不同点: 在含义上: 1.malloc是一个函数,new是一个操作符。 初始化方面: 2.malloc申请的空间不会初始化,new可以初始化空间。 开辟空间方面: 3.malloc需要手动计算...

2019-05-03 13:47:01 205 0

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