自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ipv6学习整理

1、ipv6产生背景ipv4是总共32位,2^32大概43亿个,当ipv4地址分配完后,将没有地址可分配,因此ipv6产生了,ipv6总共128位,采用冒号分隔十六进制进行区分。2、ipv6书写形式如: 2001:0da8:0207:0000:0000:0000:0000:8207可简写为:2001:da8 : 207: 0 : 0 : 0 : 0 :8207可简写为: 2001:da8:207::82073、ipv6地址类型单...

2020-11-13 14:53:10 400

原创 支撑网络直播的核心技术

HLS协议 HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTP、M3U8、TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。HLS整体架构图:图中左下部分表示视频源的类型,分为Audio和Video。server中包括Media encoder和...

2019-12-18 15:31:33 1116

原创 实习总结及收获

今天是实习的最后一天,马上要回学校做毕业设计了,回想起这一个多月,我踩了好多坑,也收获了很多学校学不到的知识。我是10月22号来的,上午办理了入职,下午就正式投入到工作中。刚来的时候,我们组就接了一个项目,然后组长就把项目介绍的文档和参考代码发给我,让我讲一下需求,出一个可行的方案 ,我当时一脸懵逼,但是想到刚来公司一定要把第一件事干好。我就下来不断查阅资料,大概搞懂了需求,第二天就给组内成员分...

2018-12-07 15:20:28 6262

原创 linux中的sz和rz命

最近在学习过程中,遇到了一个问题,我用的终端模拟软件是mobaXterm,想把公司云主机上的文件下载到本地,由于公司采用跳板机登录,无法用mobaXterm提供的sftp协议,就在这时我听说xshell有把文件上传和下载的命令,我就总结了一下!sz+文件名:将文件上传执行sz mod_preload.c: 再看一下rz命令rz将文件复制到本地执行rz:最后说...

2018-12-04 21:03:44 765

原创 强大的分布式版本控制系统——Git

git的使用(主要三步):git add 文件名                把文件从工作区放到暂存区git commit -m “注释” 把文件从暂存区放到本地仓库(版本库)git push                          把文件从本地仓库推送到远端仓库  工作区:就是你平时存放项目代码的地方暂存区:用于临时存放你的改动,事实上它只是一个文件,...

2018-11-28 18:24:40 197

原创 LVS负载均衡集群,提高网络利用率

LVS负载均衡集群介绍负载均衡集群的作用:提供一种廉价、有效、透明的方法,来扩展网络设备和服务器的负载带宽、增加吞吐量,加强网络数据处理能力、提高网络的灵活性和可用性。1)把单台计算机无法承受的大规模的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,提升用户体验。2)单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,...

2018-11-26 20:13:27 274

原创 网络中的中间商(CDN)

CDN发展背景CDN的全称是Content Delivery Network,内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的作用:解决由于网络带宽小、用户访问量大、网点分布不均等原因造成用户访问网站响应速度慢的问题。AKaMai...

2018-11-20 21:00:45 778

原创 程序的编译、链接、运行过程

一、编译过程:第一步,预编译,展开头文件,进行宏替换。第二步,编译,代码优化(gcc -O1234),符号汇总。第三步,汇编,根据对应关系,将汇编指令转换为本地操作系统的机器码。第四步,生成可重定位的目标文件(没有地址),可重定位的目标文件中包含符号表;二、链接过程:第一步,将所有的目标文件的段进行合并,其中包括合并符号表,进行符号解析,解析正确,给符号表的符号分配虚拟地址。第二步,将代码段的指令...

2018-03-31 17:12:01 1729

原创 八大排序总结

排序方式        时间复杂度(最好/最坏情况)     空间复杂度     稳定性冒泡排序            O(n^2)/O(n)                    O(1)          稳定选择排序              O(n^2)                       O(1)         不稳定直接插入排序            O(

2018-01-29 19:55:03 219

原创 字符串匹配算法(BF KMP)

BF算法(朴素算法): 思路: 子串的定位操作通常称做模式匹配,其中子串称做模式串,主串称做目标串,朴素的模式匹配算法即是模式匹配的一种算法,其优点是简单易懂,易于理解,某些应用场合效率较高。缺点是需要多次回溯,对于数据较大的文本文件而言效率极低。 例子: 在BF算法中,失配时,主串中的i回退到每次起始位置的下一个位置,即i= i-j+1;子串中的j回退到起始位置

2018-01-28 12:06:36 295

原创 堆排序

思路:   1、将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;   2、将堆顶元素与末尾元素交换,将最大元素”沉”到数组末端;   3、重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。 例子: 第一步:做成大根堆 第二步和第三步: 沉底并调整: 源代码:#include<stdio.h>#include<

2018-01-27 02:21:23 193

原创 快速排序

思路: 1、先从数列中取出一个数作为基准数。 2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3、再对左右区间重复第二步,直到各区间只有一个数。 例如: 将low指向头,high指向尾,将基准值放在tmp中,一次快排过程,如图: 源代码:int Partion(int *arr, int low, int high)//第一次快排{

2018-01-25 17:11:22 198

原创 对于fork()的一些总结

实现fork复制进程: 流程图: 源程序: 执行结果: fork分析: 测试结果: 运行结果中,parent的pid 3973小于child的pid 3974,结论:父进程的pid比子进程的pid先出现,为什么父进程和子进程的&n一样而n不一样?因为&n是逻辑地址,不是内存中的地址,这也是n的值不一样的原因。(逻辑地址相同,物理地址不一定相同)进程中打印的是逻辑地址,

2017-12-25 14:31:04 399

原创 一些对于字符串操作的函数

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

2017-12-22 17:05:33 321

原创 单位矩阵

问题描述: 1、row == col时,如果p[row][col] == 1,它就是单位矩阵。 2、row != col时,如果p[row][col] == 0,它就是单位矩阵。 源代码: 1、用一级指针#include< stdio.h>#include<assert.h>bool identity_matrix(int *p, int row, int col){ asse

2017-12-22 16:39:40 2200

原创 Linux下的静态库和共享库的创建和使用

静态库的创建和使用: 共享库的创建及使用: 第一次: 从/usr/lib下可以看出共享库应该是蓝色字体或是绿色字体,而我第一次创建的共享库却是黑色字体,显然不对,我又重新做了一遍 第二次: 这一次虽然创建好了libfoo.so,但是不能使用,找不到共享库?我又做了第三次 第三次: 我先将切换到管理员,然后 mv libfoo.so /usr/lib: 然后又按着第

2017-12-11 17:24:33 340

原创 linux整理

总结编译和链接过程: 预编译:gcc -E main.c -o main.i 编译:gcc -S main.c -o main.s 汇编:gcc -c main.s -o main.o 链接:gcc main.o -o main(gcc -o main main.o) gcc 使用一个和多个文件编译: 一个文件: 多个文件:参考《程序设计第四版》第1、2节: 什么是库? 库是一组预

2017-12-07 16:43:07 312 1

原创 结构体

定义结构体一般形式为: struct 结构体名 { 成员表列 }变量名表列; 例如:struct student{ int num; char name[20]; char sex; int age; float score; char addr[30];}student1,student2;说明: 1

2017-11-28 17:28:19 327

原创 内存泄漏

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 内存泄露的原因: 1~分配一个内存块并使用其中未经初始化的内容; 2~释放一个内存块,但继续引用其中的内容; 3~子函数中分配的内存空间在主函数出现异常中断时、或主函数对子函数返回的信息使用结束时,没有对分配

2017-11-17 20:44:19 246

原创 void 无类型

void 无类型 void不能定义变量,void是抽象类型,没有对应的实体,但void可以定义指针,被称为泛型指针。只要是指针, 都可以存放,但它不具有加1能力也不能读取,*p不能对内存解释(*p = a;//错误。p++;//错误)。void main(){ int a = 10; double dx = 12.23; char ch = 'a'; int

2017-11-16 18:32:57 303

原创 Linux 学习的一些整理

1 录结构/bin  可执行程序,命令/boot  内核,与系统启动有关的文件/dev  设备文件  (一切皆文件)/etc  系统的配置文件/lib  库文件/mnt  临时挂载点/proc  虚拟的目录,进程的信息映射到该目录中/usr  用户安装的软件,库等/root  管理员的家目录/home  普通用户的家目录2 文件类型-普通文件d目

2017-11-16 14:39:11 239 1

原创 引用和指针

引用和指针都属于复合类型(基于其他类型定义的类型)1、引用引用为对象起了另外一个名字,引用类型引用另外一种类型。通过声明符写成&d的形式来定义引用类型,其中d是声明的变量名:int  ival  =  1024;int  &refval  =  ival;                       //  refval指向ival(是ival的另一个名字)int  &

2017-10-23 12:50:38 261

原创 数组和指针的区别与联系

区别:C语言把内存划分成四个区,它把一般的变量和数组等存在于内存中的栈区,所以数组在C语言的定义中只是一组同类型的普通变量,即使这个变量有可能是指针。所以他的作用比指针小的很多,而指针可以指向任何区的任何数据,所以就会觉得指针和数组名很像,但是必须要注意的是,数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未

2017-10-20 14:49:43 308

原创 函数定义与声明的区别

对函数的“定义”和“声明”不是一回事。“定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参类型、函数体等,它是一个完整的、独立的函数单位。而“声明” 的作用则是把函数的名字、函数类型以及形参类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查(例如函数名是否正确,实参与形参的类型和个数是否一致)。从程序中可以看到对函数的声明与函数定义中的函数首部基本上是相同的。因此可

2017-10-16 13:00:07 9736

转载 内联函数

定义: 内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质。内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。编译时,类似宏替换,使用函数体替换调用处的函数名。一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。 作用: 内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。 一个小内存空

2017-10-15 11:28:16 418

原创 跳转语句

跳转语句中断当前的执行过程。C++语言提供了4种跳转语句:break、continue、goto和return。 1、break语句 break语句负责终止离它最近的whlie、do whlie、for和switch语句,并从这些语句之后的第一条语句继续执行。 break语句只能出现在迭代语句(循环)或者switch语句内部(包括嵌套在此类循环里的语句或块的内部)。break语

2017-10-14 23:35:18 452

原创 输入一个字符串,大写转换成小写,小写不变。

#define _CRT_SECURE_NO_WARNINGS#include#includevoid main(){char s[80];int i, a;scanf("%s", &s);a = strlen(s);for (i = 0;i {if (s[i] >= 'a'&&s[i] {printf("%c", s[i]); }if

2017-10-13 22:20:23 932

原创 9*9乘法表

#includeint main(){for(int i = 1;i{for(int j = 1;j{printf("%d*%d=%d\t",i,j,i*j);}printf("\n");}return 0;}

2017-10-13 19:08:59 325

转载 strlen 与sizeof()的区别

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。   char aa[10];cout  char aa[10]={'\0'}; cout  char aa[10]="jun"; cout  而sizeof()返回的是变量声明

2017-09-29 22:46:00 183

转载 typedef与#define的区别是什么?

typedef是为原有类型声明一个新的名字,“typedef int* PINT_TYP ”就是声明了一个新的数据类型,数据类型名为PINT_TYP,其功能与int *是完全一样的,也就是说,PINT_TYP与int *本质上完全相等(在程序中遇到PINT_TYP不是简单地替换)。而“#define PINT_DEF int*”是简单的宏定义,在预处理阶段就已经将PINT_DE

2017-09-29 10:58:50 326

原创 带负号字符串转换成整型

#include #include #include  int StrToInt(char *p){int len = strlen(p);int i = 0;int flag = 0;if (len == 0){return -1;}if (p[0] == '-'){i = 1;flag = 1;}int sum = 0;f

2017-09-28 07:51:21 4130

原创 宏(#define)、枚举(enum)、常变量(const)

宏和枚举的区别:宏和枚举之间的差别主要在作用的时期和存储的形式不同,宏是在预处理的阶段进行替换工作的,它替换代码段的文本,程序运行的过程中宏已经不存在了。而枚举是在程序运行之后才起作用的,枚举常量存储在数据段的静态存储区里。宏占用代码段中空间,而枚举除了占用空间,还消耗CPU的资源。常变量(const)与符号常量(#define)的区别:符号常量不占用内存空间,在预编译时就全部由符号常量的

2017-09-27 17:36:56 711

转载 我所了解的指令和数据的13种寻址方式

指令的寻址方式:1、顺序寻址方式。2、跳跃寻址方式。操作数的基本寻址方式:(形式地址A变换为有效地址EA)3、隐含寻址指指令不是明显的给出操作数的地址,而是在指令中隐含着的操作数的地址,操作数在专用寄存器中。主要优点:无储存器访问。主要缺点:数据范围有限。4、立即寻址:指令的地址字段指出的不是操作数的地址,而是操作数本身。立即寻址的特点是指令中包含的操作数立即可用,节省了访问内

2017-09-25 21:21:41 1600

转载 我对_stdcall和_cdecl的一些了解

_stdcall,被这个关键字修饰的函数,其参数都是从右向左通过堆栈传递的(_fastcall的前面部分由ecx、edx传),函数调用在返回前要由被调用者清理堆栈。实质:函数调用约定。注:ecx是计数器,edx是用来存放整数除法产生的余数。_cdecl是c和c++程序的缺省调用方式,每一个调用它的函数在返回前清空堆栈的代码,所以产生的可执行文件的大小比调用_stdcall函数的大,

2017-09-24 10:59:04 285 1

原创 我对printf函数的一些理解

printf函数:printf函数的一般格式:printf(格式控制,输出表列)。printf一般将整型(char  short  int)扩充成int整型(4字节)。printf一般将浮点型(float  double)扩充成double双精度型(8字节)。这是我对printf函数的一些理解,随着学习的深入会有更深的理解。

2017-09-24 10:29:08 315

转载 我了解的部分指令与寄存器

部分指令:mov   传达指令,格式:mov   op1,op2  (REG/MEM,REG/MEM/IM)。sub    减法指令  (不带借位),格式:sub    op1,op2    (op1-op2—>op1)。add    加法指令(不带进位),格式:add   op1,op2   (op1+op2—>op1)。jmp    无条件跳转指令。  

2017-09-24 09:01:28 414

转载 大端与小端

高位数存放在高地址,低位数存放在低地址称为小端。高位数存放在低地址,低位数存放在高地址称为大端。如何判断大小端存放?int  checkEnd(){       int   i   =   0x12345678;      char *c   =   (char *) &i;      return   ( *c   ==   0x12);

2017-09-24 08:57:58 201

空空如也

空空如也

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

TA关注的人

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