自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

原创 剖析STL空间配置器

为什么需要空间配置器呢? 原因一:当系统频繁的申请释放内存时,会造成内存碎片问题,导致明明剩余的总内存够需要分配的内存,但是由于这样内存不是连续的,而是一块块的,每一小块又达不到需要分配的内存的大小,所以造成内存碎片问题(外碎片),但是,当我们提前将这些内存按照不同大小组织起来,需要分配时,根据需要分配不同大小的内存,这样便能很好地缓解内存碎片问题(外碎片),但是也引入了内碎片问题。 原因二:...

2018-04-11 20:33:24 388

原创 基于Huffman编码的文件压缩

原理剖析:我们的Huffman文件压缩,是基于Huffman编码实现的,思路如下: 首先,获取原文件中每个字节的值(unsigned char)类型,范围为0-255,并记录每个值出现的次数,以这些值出现的次数为数据,利用贪心算法构建Huffman编码,然后,将对应的字节以其对应的Huffman编码替换达到压缩文件的目的。当然,为了能更好的解压缩我们需要将相应的字节与它们出现的次数也存储在压...

2018-04-11 20:23:08 552

原创 JFreeChart用户开发指南1.0.6(中文)

JFreeChart用户开发指南1.0.6(中文) 免费的哦~链接: https://pan.baidu.com/s/1NGqWOXFPtkvgTwv2_6OcLA 密码: w2ql

2019-09-04 18:01:57 526 2

原创 JFreeChart的开发人员指南 免费下载哦~

JFreeChart的开发人员指南1.0.6(英文版)链接: https://pan.baidu.com/s/1kbnykVoNzRCj-nndZMaMNA 密码: k9w2

2019-09-04 17:46:29 396

原创 Linux网络基础-高级IO之epoll

编写epoll服务器,并总结epoll优缺点,重点优点 总结select/poll/epoll各自的优点缺点,整理成表格 总结epoll LT与ET模式,调研两者应用特点。 LT/ET模式: select/poll/epoll优缺点总结: epoll()函数:优点:缺点:基于epoll的ECHO服务器:...

2018-07-19 03:00:05 430

原创 Linux网络基础-高级IO之poll

编写poll服务器,并总结select优缺点,重点缺点 编写epoll服务器,并总结epoll优缺点,重点优点 总结select/poll/epoll各自的优点缺点,整理成表格 总结epoll LT与ET模式,调研两者应用特点。 poll服务器:优点:缺点:epoll服务器:优点:缺点:LT/ET模式:...

2018-07-17 19:15:19 283

原创 Linux网络基础-高级IO之select

深度阅读本文档,总结5种IO模型 深度理解在不同的背景下同步异步的区别 编写select服务器,并总结select优缺点,重点缺点 编写poll服务器,并总结select优缺点,重点缺点 编写epoll服务器,并总结epoll优缺点,重点优点 总结select/poll/epoll各自的优点缺点,整理成表格 总结epoll LT与ET模式,调研两者应...

2018-07-17 04:10:39 320

原创 Linux网络基础-传输层

////////////>* 深度阅读本文档,理解各层作用,理解各层常见协议 应用层 /////////////>* 编程实现基本的http服务器代码 /////////////>* 总结常见应用层对应端口号(http(80) https(443)) /////////////>* 调研tcpdump工具的使用方法与常见选项(重点如何抓取tcp,udp,htt...

2018-07-14 21:28:25 275

原创 Linux网络基础-应用层

深度阅读本文档,理解各层作用,理解各层常见协议 编程实现基本的http服务器代码 总结常见应用层对应端口号(http(80) https(443)) 总结网络常用命令,总结TIME_WAIT状态 总结TCP可靠性保证都有哪些机制,各自保证可靠性当中的那些方面 调研网络当中常见的攻击手法与原理 调研NAT技术与代理服务器的区别,调研常见的代理服务器...

2018-07-12 19:55:44 986

原创 Linux 网络编程socket套接字

socket编程接口: #include <sys/types.h> #include <sys/socket.h&

2018-07-04 17:53:00 318

原创 Linux进程关系&守护进程

进程组: 每个进程除了是一个单独的进程外,它还属于一个进程组,进程组是一个或多个进程的集合。每个进程除了有一个进程ID外还有一个进程组ID,用于标记该进程属于那个进程组,每个进程组都可以有一个组长进程,组长进程的标识是:其进程ID等于进程组ID,组长进程可以创建一个进程组、创建进程组中的进程、退出(只要进程组中还有一个进程存在,则进程组存在,无论组长进程存在与否),另外,每个进程组的标识是唯一的...

2018-06-14 03:06:46 240

原创 Linux线程

进程与线程的区别和联系:什么是线程? 在程序中的一个执行流就叫做线程。一个进程至少包含一个线程。进程与线程的区别:进程是资源分配的最小单位线程是程序执行的最小单位进程与线程的联系:线程间共享的进程数据:同一地址空间(代码段、数据段等)、文件描述符表、每种信号的处理方式、当前工作目录、用户ID和组ID等。虽然线程间共享进程数据,但也拥有自己的一部分数据:线程ID、一组...

2018-05-16 20:16:37 232

原创 Linux信号

信号的基本概念:信号是操作系统中进程间通讯的一种有限制的方式。它是一种异步的通知机制,用来提醒进程一个事件已经发生,当一个信号发送给一个进程,操作系统中断了进程正常的控制流程,此时,任何非原子操作都将被中断,如果进程定义了信号的处理函数,那么它将被执行,否则就执行默认的处理函数。 注:在Linux系统中,可通过kill -l 查看系统定义的信号列表。34号以上的信号为实时信号,在此不做讨论,...

2018-05-05 21:48:11 484

原创 Linux进程间通讯(信号量)

信号量信号量主要用于进程间的同步与互斥,类似于计数器,用于标记资源个数。 S > 0:S表示可用资源个数。 S == 0:表示无可用资源,无等待进程。 S < 0:|S|表示等待队列中,等待资源进程资源个数。 进程互斥: 由于进程间要求资源共享,而有些资源一次只能被一个进程访问(临界资源),从而进程间竞争使用这种资源,进程间的这种关系称为进程互斥。 程序中涉及到临界资源...

2018-05-02 21:41:11 275

原创 Linux进程间通讯(消息队列&共享内存)

消息队列:消息队列提供了一种从一个进程向另外一个进程发送“一块”数据的方法。每块数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型。消息队列的每块消息有最大长度的上限(MSGMAX),每个消息队列的总字节数也是有上限的(MSGMNB),系统上消息队列的总数也是有上限的(MSGMNI)。内核为每个IPC对象维护一个结构体(struct ipc_perm),该结构存储了...

2018-04-30 11:11:03 513

原创 Linux进程间通讯(匿名管道&命名管道)

匿名管道:什么是管道? 管道是unix中最古老的进程间通讯方式。 具有亲缘关系的两个进程间连接的数据流称为一个管道。 注:yum进程与grep进程同为shell进程创建,所以为兄弟进程。#include <unistd.h>int pipe(int pipefd[2]);说明: 此函数用于创建一个匿名管道。 参数: pipefd[2]:输入输出型参数...

2018-04-18 22:59:02 268

原创 Linux文件相关系统调用接口、fd文件描述符与FILE结构体对比

文件相关系统调用接口:open():#includ e <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t ...

2018-04-16 01:25:23 434

原创 支持输入、输出、追加重定向的shell

重定向的原理是关闭相应的标准流文件描述符(stdin(0)、stdout(1)、stderr(2)),打开要重定向的文件并得到文件描述符,因为Linux中文件描述符的分配是从0开始查找第一个没有使用的描述符进行分配,所以打开的文件描述符便会代替标准流文件的描述符达到重定向的作用。 代码如下:#include<stdio.h>#include<string.h>#i...

2018-04-15 21:05:26 1042 1

原创 popen/system函数与fork函数的区别

popen函数:#include <stdio.h>FILE *popen(const char *command, const char *type);int pclose(FILE *stream);函数说明:popen()函数:首先,调用fork()函数创建一个子进程,执行一个shell命令,其次,调用pipe()函数创建一个管道,与子进程进行通讯。这...

2018-04-10 17:53:37 357

原创 模拟实现进程创建函数process_create

利用fork()、wait()等函数模拟实现进程创建函数process_create()函数#include<stdio.h>#include<unistd.h>#include<stdlib.h>typedef void *(*FUNC)(void *); typedef struct Arg{ int reg;} Arg;voi...

2018-04-10 10:54:14 1481

原创 简单shell的实现

#include<stdio.h> #include<string.h>#include<unistd.h>void Run(char *buf,char *argv[]){ while(1){ printf("myshell:>"); int argc = 0; //1.获取命令行 gets(buf); ...

2018-03-24 14:51:28 323

原创 Linux进程创建、等待、终止以及vfork&return详解

进程控制:进程创建:利用fork()创建一个子进程:#include<stdio.h>#include<unistd.h>int main(){ pid_t id = fork(); if(id < 0){ //fork()失败 perror("fork:"); }else if(id == 0){ /...

2018-03-15 17:52:04 329

原创 Linux下fork()&vfork()的区别、getenv()&setenv()函数以及僵尸进程、孤儿进程讲解

在讲解僵尸进程前,我们先来说说其它知识,因为我们一会的代码需要用一个叫fork()的系统调用来创建子进程,所以我们先来聊聊fork()这个系统调用。fork()、vfork()的区别:#include<unistd.h>pid_t fork(void);//pid_t为int的类型别名//fork()是一个比较特殊的函数,调用成功返回两个值,调用失败返回-1....

2018-03-14 12:26:58 521

原创 Linux下进度条小程序、软件的几种安装方法、进程PCB(task_struck)结构体讲解

彩色进度条程序:#include<stdio.h>#include<unistd.h>//系统调用头文件int main(){ const char sign[]= "-\\|/";//旋转标记字符 char str[1024] = {0};//#进度条字符 size_t i = 0; for(;i<=100;i++){ str[...

2018-03-08 23:51:46 399

原创 Linux下的重要目录、命令讲解以及gcc/g++、gdb、vim的安装

今天,小主为大家讲讲Linux下的基本目录,学习之余以作巩固。 在介绍Linux基本目录之前,我们先来说一说关于目录的权限的问题,大家都知道文件和目录的权限都有r/w/x(读/写/执行)三种权限,那么目录和文件的r/w/x权限作用是否一样呢?还是说它们的r/w/x权限有所区别呢?让我们来一探究竟。 原来,Linux中目录和文件的r/w/x是有区别的,对于普通文件来说:r是指对该文件具有读的权限...

2018-03-07 23:56:45 392

原创 《海量数据处理》

依照冯·诺依曼体系结构,计算机在运行程序的时,必须把程序先加载进内存中,然后CPU才能按照程序的逻辑依次执行。一般情况下,我们PC机的内存是4GB/8GB大小,当我们要处理一些较大的文件并在内存中需要开辟较大的空间(超过我们PC机的物理内存大小4GB/8GB)时,我们并不能随便改变物理内存的大小,此时,我们该如何解决此类问题呢?于是,便引出了今天我们要讨论的——海量数据处理。典例://1)给一个超

2017-11-29 15:31:09 596

原创 《 set/map 的使用 ----STL》

首先,对较简单的begin()、end()、rbegin()、rend() 等成员的介绍做简单的一笔带过。 begin():返回指向集合的第一个元素(升序的第一个元素)的迭代器。 end():返回指向集合的最后一个元素后面(升序,一般为NULL的迭代器)的迭代器。 rbegin()、rend() :类似于begin()、end(),不过返回的为逆向的迭代器。注:以下增删改查都是指在升序下看待。

2017-11-24 18:14:52 410

原创 《“vector+list”的使用——STL》

学习c++语言STL必不可少,今天首先为大家简单介绍下STL中vector和list的使用,其次,再简单模拟下库中的vector和list以方便大家更好的理解STL。vector的使用: 代码:#include<iostream>#include<vector>using namespace std;void Print_Vector(vector<int>& v){ vector<

2017-10-11 16:47:24 357

原创 《C++智能指针》

智能指针的源由: c/c++之所以强大,一部分功劳应归结于c/c++语言对指针的支持,有了指针c/c++便可高效、方便的操纵内存,但大部分事物总是不可避免的具有两面性,指针也不例外。指针可以高效、方便的操纵内存极大的提高了c/c++程序员编程的灵活性,但同时指针也给初级c/c++程序员带来了一些大麻烦,为什么这么说呢?请看下面一个例子://智能指针源由#include<iostream>usi

2017-08-09 20:28:56 372

原创 《模板的分离编译问题》

一般情况下,在建立工程时我们喜欢将函数的声明与定义放在不同的文件中(.h/.cpp),这样当我们在编写源文件程序时需要用到其他文件中的函数时只需在本文件中包含进该函数声明所在的头文件便可引用该函数,这种方式也是标准库函数的使用方式,使编程编程效率大大提高,减少了可复用性代码的重复编写,深得人们喜爱,但当学习了C++中模板之后,以类似的方式组织文件时却出现了问题,这究竟又是怎么一回事呢?接下来,我们就

2017-08-05 23:27:08 921 1

原创 《C++大数据运算(+、-、*、/)》

计算机中整数数据的最大类型为long long类型,依据计算机位数的不同它的范围也不同,以32位为例long long类型的取值范围为【-9223372036854775808,9223372036854775807】,那么计算机可以进行的数值运算就必须在这个范围之内吗?未必,所以产生了大数据运算来解决更大范围内的数值运算,它的思想是以字符串代表数值进行各类运算。 Test.c#include

2017-08-05 15:19:45 3822

原创 《C++多态的对象模型之单/多继承、菱形/菱形虚拟继承》

多态: 多态的两个必要条件:①子类中必须重写父类中的虚函数。②父类的引用/指针依据指向的不同对象(父类或者子类)来调用不同的虚函数。即:父类的指针或引用指向父类时,调用父类的虚函数。父类的指针或引用指向子类时,调用子类的虚函数。 多态的单/多继承对象模型:单继承://单继承#include<iostream>using namespace std;typedef void(*VFPT

2017-07-29 23:03:03 591

原创 《C++多继承之菱形继承》

导言: java、python等面向对象语言仅支持单继承,而c++语言不仅支持单继承,也支持多继承。c++语言在支持多继承的同时也会带来一些小麻烦——菱形继承。菱形继承: 多继承中的菱形继承之所以得名是因为菱形继承的关系模型像一个菱形而得名。如下图所示: #include<iostream>using namespace std;class A{public: i

2017-07-26 13:48:17 759

原创 《深、浅拷贝解析(C++)》

引言: 问题:在c++中如果没有显式定义拷贝构造函数,编译系统会生成默认的拷贝构造函数,这种机制方便程序员编写程序的同时也为程序员带来了一些麻烦。当类中含有指针成员变量时,默认的拷贝构造函数会将拷贝函数的指针变量值赋给待拷贝构造函数的指针变量,使两个指针变量指向同一片空间,对象销毁时,析构函数就会释放两次动态分配的空间,从而造成错误。 解决方案: ①深拷贝:当类的成员变量含有指

2017-07-24 18:17:35 565

原创 《函数调用时参数、返回值所做的优化处理+编译器NRV优化》

摘要: c++中创建对象以及销毁对象时,会自动调用对象的构造、析构函数(默认的或自定义的),因此,当我们在c++中调用函数时应该特别注意传参以及返回值时的优化处理,以减少构造、析构函数调用时的开销。同时编译器也会针对不同情况的函数调用,在不产生错误的情况下采用“NRV优化”(函数返回时,不产生临时变量)。示例代码:#include<iostream>using namespace std;

2017-07-22 01:39:15 802

原创 C/C++动态内存管理

目录:总结并剖析malloc/free和new/delete之间的关系和差异。剖析new/delete和new[]/delete[]做了什么?实现NEW_ARRAY/DELETE_ARRAY宏,模拟实现new[]/delete[]申请和释放数组 剖析malloc/free、new/delete。 它们都是动态管理内存的入口。malloc/free是C/C++标准库的函数,dew/d

2017-07-20 10:40:24 390

原创 《类和对象+四个默认函数+运算符重载》

类和对象: 基础知识: c++中的类与c中的自定义结构体类型非常相似,但类中比结构体类型多了对数据的操作(成员函数),众所周知c是面向过程的语言,数据与操作是分离的,而c++是面向对象的语言,c++中类充分体现了面向对象的思想,将数据和操作同时封装在类中以提高程序的复用性、灵活性和扩展性。类类似于现实世界中建造大楼的设计图纸,有了图纸我们就可以建造出类似的多栋大楼,建造出来的每栋大楼就类似

2017-06-28 01:33:31 336

原创 《CPP入门基础知识》

目录: 命名空间. C++基本的输入输出流. 函数重载. C++缺省参数. 指针和引用. 命名空间: 命名空间的定义: 命名空间的定义是由 namespace关键字开始,后接命名空间名字 name,并在一对花括号中定义成员的。命名空间可以在全局域或其它域中定义( 类和函数内部除外 ),但命名空间的名字在所定义域中是唯一的,并且命名空间与类和结构体不同不以

2017-06-26 23:47:15 1860

原创 《C语言实现链表相交、带环问题》

例题://1.判断单链表是否带环?若带环,求环的长度?求环的入口点?//2.判断两个链表是否相交,若相交,求交点。(假设链表不带环)//3.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】//4.复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,//还有一个random指针指向这个链表中的一个随机节点或者NULL,//现在要求实现复制这个链表,返

2017-06-26 11:08:32 812

原创 《顺序表和单链表的区别及应用场景+单链表经典例题》

前言: 线性表可分为:顺序表与链表。其中,顺序表又可分为动态的和静态的两种,链表可分为单向链表、单向循环链表、双向链表、双向循环链表等。本篇文章主要讲解动态顺序表与单向链表的区别与应用场景以及关于链表的一些经典例题。 正文: 顺序表与单链表的区别: 顺序表可以实现下标的快速访问,单链表则不可以,单链表必须从头依次遍历查找。 顺序表在中间或者头部插入节点时必须依次挪动后

2017-06-24 19:07:32 6996

Linux下的简单C程序gcc编译、gdb调试。

Linux下的简单C程序gcc编译、gdb调试。

2017-03-22

空空如也

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

TA关注的人

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