自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

我想成为一个伟大的程序员#include<stdio.h>int main(){ int succeed = 0; int effort = 0; int deliberate = 0; while(1) { succeed = (effort++ + deliberate++);//成功 = 无止境的努力 +无止境的思考 }...

2018-12-06 16:40:34 445 2

原创 图解中台

近来的实习内容是对中台的完善与测试,通过这篇文章和大伙分享下,中台是什么以及中台能做什么。思维导图1.前置知识点1.1什么是后台?  后台并不直接面向用户,而是面向运营人员的配置管理系统,比如商品管理、物流管理、结算管理。后台为前台提供了一些简单的配置。  后台管理着企业的关键核心数据,常常涉及企业安全,审计,合规等特限制,不能快速变化,不能被前台系统直接使用.1.2什么是前台?   所谓前台即包括各种和用户直接交互的界面,比如web页面,手机app;也包括服务端各种实时响应用户请求的业务

2020-09-24 21:25:08 435

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

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

2019-09-09 18:05:10 249 1

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

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

2019-09-08 14:01:41 377

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

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

2019-09-06 12:41:53 339

原创 网络层 - IP协议

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

2019-07-26 15:21:38 213

原创 TCP协议详解

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

2019-07-24 21:13:19 777

原创 UDP协议详解

引言:上一篇文章,我们已经学会了应用层的HTTP协议,今天就让我们学习传输层两个最重要的协议之一的UDP协议,这个简单的协议能帮助我们更好的了解传输层。什么是UDP协议?UDP(用户数据报协议),是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务.UDP报头:如何分离?报头格式是定长的,通过UDP长度-固定报头长度,可以得到有效载荷如何分用?通过目的端口号,确认将有效载...

2019-07-21 20:15:12 1484

原创 什么是端口号?

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

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

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

引言:在网络基础中我们了解到了网络是分层的(OSI模型),因此如果我们想深入理解网络,想要了解信息是如何从一台主机传到另外一台主机上,打开浏览器是如何申请,服务器又是如何通过申请的话,我们就必须深入了解OSI模型,今天我们就从最上层的“应用层”开始了解。应用层:通俗易懂的来说,应用层是提供一个给我们程序员解决一个个实际问题,满足我们日常需求的平台。只要能够保证我们在一端构造的信息,能够在另...

2019-07-20 19:20:26 1565

原创 System V 共享内存

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

2019-07-19 17:48:54 321

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

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

2019-07-17 20:43:09 6169 1

原创 系统IO

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

2019-07-15 21:15:10 160

原创 最简单的TCP协议实现

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

2019-07-12 14:36:58 629

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

IP和端口号:1.IP地址:IP数据报的头部有两个IP地址,分别叫做IP源地址和IP目标地址。2.端口号:传输协议的内容大小:2字节16位的整数端口号用来标识一个进程,告诉操作系统,这个数据要交给哪一个进程处理。IP地址 + 端口号:能够标识网络上的某一台主机的某一进程(套接字)特点:1.标识唯一一个进程 2.不能被多个进程绑定与PID的区别:不一定每一个进程都有端口号(只有要联...

2019-07-10 15:40:09 2265

原创 进程基础1

引言上一次,我们已经学习过了什么是进程和进程与程序的区别,这次我们要学习如何创建,终止,等待进程。1.进程创建1.1 fork函数初识头文件:#include<unistd.h>pid_t fork(void);返回值:自进程返回0,父进程返回子进程id,出错返回-1。当系统调用fork的时候,内核要做:1.分配新的内存块和内核数据结构给子进程。2.将父进程部分数...

2019-07-09 17:54:09 134

原创 网络基础

计算机网络背景:1.网络发展:1.独立模式:计算机之间相互独立,一个个主机独立工作2.网络互连:多台计算机连接在一起,完成数据共享。存在可靠性(数据丢失问题)3.局域网LAN:计算机网络数量更多,通过交换机和路由器连接在一起。两种模式:令牌环网和以太网每一台主机都有一个MAC地址,由48bit位控制。MAC(标识)->网卡(标识)->主机地址。出现了关于碰撞的问题。...

2019-07-09 16:31:06 159

原创 linux空间详解

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

2019-07-03 15:24:51 185

原创 初识环境变量

引言当我们想要运行某个程序的时候,我们要在前面加上./,是为了告诉操作系统我们想要运行的程序处于当前文件中。但是在我们使用ls , pwd等变量的时候却不需要,为什么?这就是因为我们接下来要讲的环境变量。环境变量1.基本概念:概念:操作系统中用来指定操作系统运行环境的一些参数特性:具有全局性2.常见的环境变量:PATH:制定命令的搜索路径。PWD:查看当前步骤所处位置。3...

2019-07-03 11:40:45 148

原创 进程基础

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

2019-07-02 13:06:41 264

原创 初识linux操作系统

冯诺依曼体系结构无论是我们常见的(笔记本)还是不常见的(服务器)大多都遵循冯诺依曼原则,如下图:存储器:内存,出了存储器之外的设备都可以被称为外设。输入设备,输出设备:也就是我们常说的外设,有具体情况判定是什么输入还是输出。运算器和控制器:中央处理区(CPU)。重点:1.存储器指内存。2.不考虑缓存情况,这里的CPU能且只能对内存惊醒读写,不能访问外设。3.外设要输入或者输出数...

2019-07-01 17:42:18 145

原创 C++11各种特性

1.C++的初始化:1.1C++98中初始化问题在C++98中,能用大括号对数组元素初始化,如下: int a[] = {1,2,3,4}但是不能对自定义类型却不能用大括号初始化,如下 vector<int> v{1,2,3,4};上面的初始化在C++98中是不允许的,但是在C++11中扩大了大括号括起的列表的作用范围,使其可以用于所有的内置类型和自定义类型,在使用初...

2019-06-26 18:40:50 521

原创 C++的类型转换

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

2019-06-25 09:58:16 241

转载 正确定义二维数组

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

2019-06-24 16:23:17 35830 5

原创 inline函数的总结

思维导图1.使用方法-1. 在函数返回类型前加Inline。成员函数可以在声明时候添加Inline也可以在定义时候添加inline。2.将成员函数定义在类定义式内,这个成员函数就被隐喻为Inline。内联说明对于编译器仅仅是一个建议,编译器可以忽略这个建议下面没有加lnline的时候,机器进行编译操作一般的函数调用,进行压栈操作,导致系统开销加大,花费了更多时间。下面是加了i...

2019-05-22 16:40:39 330

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

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

2019-05-21 16:16:43 3900

原创 this指针的特性

思维导图特性

2019-05-20 15:50:38 288

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

2019-05-18 15:15:35 213

原创 C++多态

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

2019-05-18 15:14:33 279

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

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

2019-05-16 12:53:17 515

原创 指针和引用的区别

参考文章思维导图1.为什么使用指针1.1每一个编程语言都使用指针C++将指针暴露给了 用户(程序员),而java和C#等语言则将指针隐蔽起来了。1.2使用指针的有点和必要性:指针能够有效的表示数据结构能动态分配内存,实现内存的自由管理能方便的使用字符串指针直接与数据的存储地址有关。比如:值传递不如地址传递高效,因为值传递先从实参的地址中取值,再赋值给形参代入函数计算。而指针...

2019-05-15 13:20:05 38249 7

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

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

2019-05-14 14:37:43 423

原创 memcpy和strcpy的区别

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

2019-05-12 15:13:28 1208

原创 strcpy和strncy的缺陷

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

2019-05-11 15:52:23 2587

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

思维导图1. 定义: char* fun1(char* p1, char* p2)// 1 char** fun2(char* p1, char* p2);// 2 char*(*fun3)(char* p1, char* p2);// 31,2,3分别是什么意思呢?很简单,char*是返回类型,fun1是函数名,括号内是参数和1相似,char** 是返回类型...

2019-05-09 18:36:17 22728 2

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

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

2019-05-08 13:57:40 47251 6

原创 NULL和nullptr的区别

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

2019-05-07 15:27:15 2210

原创 mem函数(memset)

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

2019-05-07 11:12:38 1129

原创 mem系列函数(memcpy)

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

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

原创 const关键字总结

一.关于const关键字的思维导图二:const的使用方法1.定义const对象const修饰符把对象修饰为常量,意思是接下来对象都被当成常量使用,不能被修改在用const修饰的值不能更改一开始就要初始化类中的const对象需要通过构造函数初始化定义2.const对象默认为文件局部变量在全局作用域声明的const变量是文件的局部变量,只能被当前文件使用,不能被其他文件访问。如果...

2019-05-03 16:22:31 340

空空如也

空空如也

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

TA关注的人

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