自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 开源工具之mysql

是什么?关系型数据库(一个结构化的数据集合)存储在磁盘上存储的都是二维表,行称记录,列称字段,支持SQL语句能干啥?存储大量数据,方便检索跟访问保存信息,保证数据信息的一致和完整共享与安全通过组合分析产生有用的信息那为什么使用mysql呢?文件也能存数据,为什么用数据库?mysql和文件都在磁盘上存储,那他们的性能瓶颈在磁盘IO上mysql支持SQL,直接通过SQL语句...

2018-10-21 22:03:27 590

原创 开源工具之Druid.io

是什么?Druid.io是面向海量数据的、用于实时查询与分析的OLAP存储系统。Druid的四大关键特性:亚秒级的OLAP查询分析。Druid采用了列式存储、倒排索引、位图索引等关键技术,能够在亚秒级别内完成海量数据的过滤、聚合以及多维分析等操作。实时流数据分析。区别于传统分析型数据库采用的批量导入数据进行分析的方式,Druid提供了实时流数据分析,采用LSM(Long structur...

2018-10-21 21:56:33 511 1

原创 开源工具之Redis

是什么?Redis 是一个高性能的key-value存储系统(数据库)。作用解决应用服务器的cpu和内存压力减少io的读操作,减轻io的压力关系型数据库的扩展性不强,难以改变表结构,redis可以很好解决这个问题适用场景:数据高并发的读写海量数据的读写对扩展性要求高的数据不适场景:需要事务支持(不适用于非关系型数据库)基于sql结构化查询储存,关系复杂使用场景...

2018-10-21 21:42:20 428

原创 开源工具之storm

是什么?一个免费并开源的分布式实时计算系统。功能可靠地处理无限的数据流可以实时处理数据对于实时处理实时处理一般流程在Storm之前,进行实时处理是非常痛苦的事情: 需要维护一堆消息队列和消费者,他们构成了非常复杂的图结构。消费者进程从队列里取消息,处理完成后,去更新数据库,或者给其他队列发新消息。问题所在我们主要的时间都花在关注往哪里发消息,从哪里接收消息,消息如何序列化,真...

2018-10-21 21:18:53 1095

原创 开源工具之Hadoop

是什么?Hadoop是一种分析和处理大数据的软件平台,是一种对大量数据进行分布式处理的软件框架。Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储MapReduce为海量的数据提供了计算.HDFS是什么?Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。特点HD...

2018-10-21 21:03:31 813

原创 开源工具之kafka

是什么?一个分布式的消息系统(消息队列),在流式计算中,一般用来缓存数据。kafka作为一个集群运行中在一个或多个服务器上。主要核心组件Topic:消息根据Topic进行归类Producer:消息生产者,就是向kafka broker发消息的客户端。Consumer:消息消费者,向kafka broker取消息的客户端。broker:每个kafka实例(server),一台kafka...

2018-10-21 20:40:59 611

原创 开源工具介绍之Flume

是什么?一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输系统。功能收集数据对数据简单处理,并写到数据接收方的能力介绍一下flume的主要组件:Flume的运行核心是Agent。(一个完整的数据收集工具)Agent主要由source,channel,sink三个组件组成。一个Agent包含多个sources和sink。允许多个Agent连接在一起成多级跳。source从...

2018-10-21 18:55:24 518

原创 开源工具之Nginx

是什么?Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。功能反向代理Nginx作为反向代理器可以代表我们要访问的目标服务器。Nginx作为代理服务器的工作流程:代理服务器接收请求,然后将请求转发给内部网络中集群化的服务器,后端服务器将请求处理并返回结果给Nginx代理服务器,Nginx再将结果转发给客户端。期间有一个速度匹配问题:由于客户端和Nginx...

2018-10-20 18:39:09 625 1

原创 TCP and UDP

TCP服务的特点:面向连接、字节流、可靠传输(发送应答机制、超时重传机制) TCP连接是全双工的(双方数据读写可以通过一个连接进行) TCP协议连接是一对一的(多个主机地址的应用不能使用TCP服务) TCP模块发送的TCP报文段个数和应用程序执行的写操作次数之间没有固定数量关系字节流服务:当接收端收到一个或多个TCP报文段后,TCP模块将他们按TCP报文段的序号一次放入TCP...

2018-04-06 15:13:49 213

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

编译、链接、运行的过程?编译分为3部,预编译,编译,汇编。 1、预编译主要是对条件预编译指令的处理; 【1】宏的展开 【2】头文件的引入 【3】把所有的注释都替换为空格 【4】保留所有#pragma 2、编译主要是进行代码优化和符号汇总; 【1】扫描 【2】语法分析 【3】语义分析 【4】源代码优化...

2018-04-06 14:48:59 1187 1

原创 TCP状态转移

对于服务器端的状态转移:1、服务器程序运行,listen监听之后服务器进入LISTEN状态,等待客户端的连接 2、当服务器监听到服务请求(接收到同步报文段),会发送SYN同步报文段和确认报文段,并进入SYN_RCVD状态。 3、当服务器接收到客户端返回的ACK确认报文段,服务器进入ESTABLISHED状态 情况一: 4、当服务器先发起断开连接(执行close)向客户端发送FI...

2018-04-05 15:05:37 277

原创 页面置换算法

最佳置换算法(Optimal)被淘汰的页是以后永不使用的,或许是未来最长时间内不再被访问的页面。 该算法无法实现!!!假设系统为某个进程分配了三个物理块,考虑有以下页面的号引用串 现将7 0 1三个页面装入内存,当访问页面2时,将会产生缺页中断。根据最佳置换算法,选择第7页淘汰,因为第5次将访问页面0,第14次将访问页面1,第18次才会访问页面7,所以页面7将会被置换出去…按这样的...

2018-03-31 23:12:56 301

原创 BF算法与KMP算法

BF算法两个字符串 str sub 算法基本思想: 初始 i=0,j=0 1、当str[i]==sub[j]时i++,j++; 2、当str[i]!=sub[j]时,i=i-j+1,j=0; 3、当j>=strlen(str)或者i>=strlen(sub)结束BF 算法的时间复杂度是:O(mn) m 代表主串的长度, n 代表子串的长度。 代码实现:int

2018-01-28 18:00:54 714

原创 数据结构——排序

1、直接插入排序假设由小到大排序 主要思路:把第一个数字当有序数,来一个数按大小,进行前插后插;再来一个,按大小插入合适位置,直到所有数据有序!时间复杂度: 有序 O(n),无序 O(n2),稳定void Insert_Sort(int *str, int len){ assert(str != NULL); for (int i = 1; i < len;

2018-01-26 17:36:33 294

原创 库函数——字符串

strcat:字符串连接函数函数原型:char *strcat (char *dest,char *src);头文件:# include函数功能:将两个字符串连接合并成一个字符串,也就是把字符串src连接到字符串dest后面,连接后的结果放在字符串dest中返回值:指向字符串dest的指针char *My_Strcat(char *dest, char *src)//字符串

2017-12-21 00:37:22 374

原创 主函数

主函数可以有形参int main(int arg, char *argc[],char *env[]){ return 0;}arg:参数个数argc[ ]:指针数组,存放的是指向每一个参数的指针,他的第一个元素即 argv[0]为编译生成的可执行文件名(包括路径), int argc表示argv的大小,是实际参数个数+1env[ ]:环境变量 main函数中

2017-12-21 00:23:59 378

原创 循环~跳转表

1、空语句:只包含一个分号的语句。2、if 语句,for 语句,while,do while() for 语句:适用于已知循环次数,for循环一般都有输出执行语句,除非定义的循环初始条件满足退出条件,直接退出循环。while():适用于未知循环次数,while()加循环条件,一但条件不满足就不执行语句。do while():适合于循环至少执行一次的,先执行后判断。do w

2017-12-21 00:19:57 467

原创 静态库与共享库

Linux头文件存放在那个地方?对于c语言来说,头文件存放在/usr/include目录及其子目录中 对于依赖特定Linux版本的头文件,存放在/usr/include/sys或/usr/include/linux在调用c编译器时,使用-I来包含保存在子目录或非标准位置下的头文件 gcc -I/usr/openwin/include main.c 指示编译器不仅在标准库下找头文件,也要在/us

2017-12-21 00:08:20 307

原创 文件

1. 程序文件:源程序文件,目标文件,可执行文件 数据文件:不是程序,而是供程序运行时读写数据2. 流:数据如流水一样从一处流向另一处3. 二进制文件:以二进制存储(存储在内存的数据映像—映像文件) 文本文件(ASCLL文件):看得懂的文件 10000以二进制文件输出占用4字节 以文本文件输出占用5字节4. 文件缓冲区 内存将缓冲区在以下情况下向磁盘输入数据 1.文件缓

2017-12-06 12:55:37 286

原创 Linux-编译链接过程及命令

编译链接过程【1】预处理源代码被预编译为一个 .i文件 在Linux下,对于一个已经编写好的main.c源程序,代码 gcc -E mainn.c -o main.i 完成对程序的预处理。 或者:cpp main.c &gt; main.i预处理主要工作: 1.宏替换,展开所有宏定义 2.处理所有预编译指令,将包含的文件插入到预编译指令处 3.删除所有注释 4.添加行号...

2017-12-04 00:01:08 866

原创 引用和指针的区别

1. 指针是一个变量,一个实体,开辟空间,存放指向空间的地址。 引用是一个别名,不开辟空间。int a=10;int *p=&a;int &b=a;2. 引用–没有空引用,必须初始化 指针–可以等于NULLint *p=NULL;3. 引用–不分等级,没有所谓的二级引用 指针–有二级,三级,等多级指针int *p; int * *p; int * * *p … 4 . 指

2017-12-01 13:10:32 275

原创 结构体

struct Student// struct自定义类型{ int id; char name[20]; char sex[3]; int age; float score;};void main(){ int a;// Student st; a=10; st.id=1;//点运算符 //st.name = '

2017-11-28 22:32:35 329

原创 void的用法

含义 抽象类,无对应实体,不允许有对应变量,所有类型都继承自void void“无类型” void * 为“无类型指针”,可以指向任何类型的数据。用法: int a; void *p; int *s=&a; 一、无类型指针可以存放所有地址(包括自身地址),但是不具备读取能力,也不具备+1的能力。p=&s;//正确*p=>s;//错误,没有读取能力p=&p;//正确,可以

2017-11-16 16:38:23 667

原创 malloc

原型: extern void *malloc(unsigned int num_bytes); 定义: malloc 指动态内存分配,该函数是一种分配长度为num_bytes字节的内存块的函数,可以向系统申请分配指定size个字节的内存空间。返回值: 返回类型是 void* 类型。 如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用

2017-11-16 15:59:54 3469

原创 Linux 命令

1、改变文件属性和权限Chgrp 改变文件所属用户组Chgrp -R:进行递归的持续更改,即连同子目录的所有文件、目录都更新成为这个用户组。常用在更改某一目录内所有文件的情况。Chown 改变文件所有者Chown -R:进行递归的持续更改,即连同子目录下所有文件都要更改Chmod 改变权限数字类型改变权限(r==4 ,w==2, o==1) Chmod 777 +文件或目录:属主,同组,其他

2017-11-13 22:31:25 253

原创 函数返回类型和形参

函数返回类型1、int *add—–return &c; 2、int add——return c; 3、局部变量不允许以引用(或者指针)形式返回,函数结束,局部变量生存期就到了int &add(int a,int b){ int c=a+b; return c;//=>return &c}void main(){int x=10,y=20;int z=add(x,y

2017-11-13 21:47:08 962

原创 二维数组

int a3,a2,a1,a0; int *p3,*p2,*p1,*p0;//*p3指向a3;*p2指向a2…. int **s=&p0; s+1;//s指向p0,加一指向p1,加4个字节 *s+1;//*s是p0的值,p0存放a0地址,加1加到a1的地址,所以加4个字节 **s+1;//**s是a0的值,加一,数值加一,不加字节char a3,a2,a1,a0; char *p3,

2017-11-13 19:24:06 299

原创 指针

‘ * ’的意义void main(){ int a=10, b=20; int *p=NULL;}c = a * b;//乘法 int * p; //类型 * 标识符==>指针*声明,与变量名结合,不是与类型结合(int*) p,s;//编译器认为(类型名 *),识别为强转*p ;//指向void main(){ int a; int *p;

2017-11-13 18:55:04 198

原创 &

1、位与char a=5; //a=>0000 0101char b=18; //b=>0001 0010char c=a&b;//c=>0000 0000&只能对整型操作2、引用viod mian(){ int a=10; int &b=a;//==>int *const b=a int *p=b;//==>int *p=&*b}注意: 1、无空引用,必须初始

2017-11-02 15:18:37 228

原创 why静态变量只能被初始化一次?

函数1int fun() { static int i=0; i++; return i; } 当fun函数被调用时,i会一直++函数2 int fun() { int i=0; i++; return i; } 当函数被调用时只会return 1;因为: 1、这两个变量i同名但是不同意义 静态变量:作用在

2017-11-02 14:47:27 2843 2

转载 静态数据成员与非静态数据成员的区别

数据成员:静态数据成员是类的一部分,为类的所有实例共享(静态区); 非静态数据成员,类的每个实例都有一份拷贝(动态区)。静态数据成员的访问:静态数据成员是类的一部分,在产生任何实例之前已经存在,通过 类名::静态成员变量名 访问。函数成员(都在代码区):静态函数成员与非静态函数成员都为类所有,对象并不存在函数的拷贝。静态成员函数和非静态成员函数的根本区别在于非静态函数由对象名.或者对象指针->

2017-11-02 14:24:19 4593

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

1.在函数中数组退化为指针 int ar[10]={12,23,34,45,56,67,78,89,90,100}; ar[0]=100;//*(ar+0)=100 for(int i=0;i2.ar [ ]={ }; int * p=ar; &ar =>首元素地址 &p =>指针地址3.ar++;//(错误)数组不能自加和赋值 p++;//指针可以4.数组指针(也称行指针) 定义

2017-10-22 14:02:49 299

转载 3种指针

1.野指针:未初始化的指针,指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作很容易造成程序错误。野指针主要是因为这些疏忽而出现的删除或申请访问受限内存区域的指针。一.指针变量未初始化任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它

2017-10-20 22:59:26 336

原创 for循环的几种写法

1.for(int y=x;y>0;y=y/10){num++;}2.int y=x;for(    ;  y>0  ;  y/10  ){num++;}3.int y=x;for(   ; y>0 ; ){num++;y/10;}4.int y=x;for(   ; ; ){if(y{break;

2017-10-20 22:51:27 4526

转载 声明与定义

区别一:从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量被使用,编译器并不会为它分配任何内存。而定义就是分配了内存。例1:void Func(){int a;int b=1;a=0;}对于第一行代码,编译器不会做任何事,它不会为它在栈中分配一点东西,直到第三句,a=0;时,编译器才会将其压入栈中。而对于int b=1;这一句,编译器就会生成一条指令,为它赋值

2017-10-16 18:40:55 353

转载 switch

switch语句,又称开关语句,用于处理多分支结构的条件选择语句,使用switch语句直接处理多个分支其一般形式为:switch(表达式){       case 常量表达式1:         语句1;      break;            case 常量表达式2:         语句2;      break;……      c

2017-10-13 23:34:05 497

转载 跳转语句

goto: goto语句是一种无条件转移语句goto 语句的使用格式为: goto  语句标号;1.标号需要申请,在程序开头写label ,,……;2.标号必须为四位以内的正整数。3.在该段落内还需要有:语句表示将要转向的方向。其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与g

2017-10-13 23:03:13 380

原创 作用域

全局作用域局部作用域块作用域int a=10; / /全局变量void main(){int a=200; / /局部变量if( a==200)    {      int a =300; / /块作用域         printf("%d",a);    }}==>编译成功当局部变量与全局变量命名冲突时,在以上情况是打印不出局部变量

2017-10-12 23:48:49 233

原创 可见性和生存期

可见性和生存期可见性:从对标识符的引用的角度来看,表示从内层作用域向外层作用域“看”时能看见什么生存期:对象从生产到结束的这段时间在生存期内,对象保持它的值,直到被更新为止生存期又分为     静态生存期:与程序运行期相同,文件作用域中声明的对象具有这种生存期,在函数内部声明静态生存期对象,要冠以关键字static。     动态生存期:开始于程序执行到声明点时,结束于命名

2017-10-09 20:33:20 354

原创 字符串输入相关

gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。字符串接受结束后自动加'\0'语法:gets(字符数组名或指针);gets(ch);gets(str);

2017-09-30 16:09:53 315

空空如也

空空如也

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

TA关注的人

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