自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ChenYang1998的博客

技术学习之路

  • 博客(46)
  • 收藏
  • 关注

原创 Shell脚本总结

谢谢

2018-07-16 18:17:12 266

原创 Linux系统编程网络编程总结

2018-07-16 18:14:33 387

原创 搜索结构之【哈希】

查找分类在很多的时候,我们需要从元素的集合中查找出给定的关键字是否存在的过程,这个过程通常有两种结果:查找成功,查找失败。 用于搜索数据的集合,称之为搜索结构,一般是由统一类型的元素的集合。 而查找的环境分为静态环境和动态环境。 静态环境:在插入或者删除等操作前后搜索结构不会发生改变,向顺序表,链表。 动态环境:为了保证较高的搜索效率,在插入或者删除的前后搜索结构会自动进行调整,结构可...

2018-07-16 18:10:22 423

原创 C++学习总结

学习总结

2018-07-09 15:30:10 837

原创 Shell脚本学习

ShellShell是一个用C语言编写的程序,它是用户和Linux内核交流的桥梁,我们把它称之为命令解释器。Bash是Shell中的一种,下面所学的就是Bash的基本符号和语法。Shell有三大特点:1.弱类型,2.解释非编译型,3交互模式:交互式和批处理式,Shell脚本文件名以.sh结尾,并且在文本的第一行#!开头,/bin/bash告诉操作系统那一个shell执行。在执行的时候,给文件加...

2018-07-09 15:15:07 211

原创 多路复用之select,poll

五种I/O模型程序数据的输入,输出称之为I/O。我们在前面学习的socket套接字阶段,从网络中读取和发送数据,就属于I/O操作。当网络中没有数据可读的时候,进程就会阻塞式的等待,直到有数据准备就绪。socket套接字默认的都是阻塞的方式。阻塞式I/O I/O操作分为两部,第一部分是等待,第二部分是进行数据的拷贝。阻塞式I/O的特点就是当没有是数据就绪的时候,程序一直等待底层有数...

2018-07-04 15:38:54 349

原创 I/O多路转接之【epoll】

epoll在Linux中,还提供了第三种I/O多路转接的方式,那就是epoll,它几乎具备了select和poll的全部优点,是公认的Linux2.6下的最好的多路I/O就绪通知方法。 先来看一下接口,再根据参数解释epoll的工作原理。epoll将多路转接拆分为三个步骤。 第一步:创建一个epoll语柄 这个函数用来创建一个epoll语柄,其中size一般被忽略,返回值是一个文件描...

2018-07-04 15:38:01 273

原创 STL之【空间配置器】

什么是空间配置器空房间配置器,顾名思义就是用来配置,管理,分配,释放内存空间的,有了它,它为我们的各种容器提供了生存的空间。有人会问,为什么不直接用malloc来申请呢,而要用空间配置器呢?提高效率:频繁的向系统申请小块内存,效率低下。减少内存的碎片问题:提高代码复用率和功能模块化。空间不足时,有对应的应对措施。隐藏实际内存分配的细节,确保分配出去的内存都会回收。二...

2018-06-05 19:31:40 303

原创 ARP,DNS以及NET技术

APR协议所谓ARP协议,是通过目的主机的IP地址获得目的主机的MAC地址的一个协议,它利用mac帧来进行操作的,因此ARP协议是一种介于数据链路层和网络层的协议。下面来看一下ARP协议的报头信息。 在这里以太网的首部是MAC帧的报头信息,剩下的28个字节是ARP协议的报头消息。 硬件类型:表示底层是以太网还是令牌环网。 协议类型:表示需要转换的地址类型,0x800表示IP协议。 ...

2018-05-29 16:34:35 686

原创 IP协议及MAC帧格式

网络层学习网络层,最重要的就是学习IP协议,它保证了我们的数据有能力从一台主机递达另外一台主机。首先来看看IP协议的报头信息。 IP协议和TCP协议一样,报头都是固定的20个字节。 4位版本号:ip协议有ipv4和ipv6,这个字段标识的一般是我们的ipv4协议。 4位首部长度:即就是IP数据的报头长度。 8位服务类型:3位优先权字段以及舍弃,4位TOS字段和一位保留字段。 16...

2018-05-25 18:14:33 12254 3

原创 TCP协议

TCP协议在学习网络的时候,我们知道TCP协议一种在传输层的协议,与之对应的还有UDP协议,TCP协议的特点如下:有连接的面向字节流的保证数据传输的可靠性全双工的通信方式其中,保证数据传输的可靠性是它最大的特点,那么如何保证,我们下面来看一看,TCP协议的报头信息。 他们代表的含义分别是: 1.源端口和目的端口:都占用两个字节,代表发送主机端口和接收方目的端口,和...

2018-05-08 17:02:40 255

原创 MySql数据库之表操作及基本数据类型

一.表的操作1.创建表create table 表名(列名1 数据类型1,列名2 数据类型2...)charset 字符集 collate 校验规则 engine 搜索引擎;字符集和校验规则还有搜索引擎可以不显示给出,MySql默认的是utf8字符集和utf8_general_ci字符校验规则和MyISAM搜索引擎。不同的搜索引擎,在创建表的时候文件不一样,当使用MyISAM搜索...

2018-05-07 16:36:07 1261

原创 gdb调试【多进程,多线程】

一.gdb简介gdb工具是Linux环境下的调试工具。(本文在centos6.5环境下测试)在编译源文件时候必须加上 -g选项。开始调试方式:gdb binfile退出方式 quit 或者ctrl+d.gdb调试过程常用命令: list/l 行号:显示源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run...

2018-05-02 19:32:29 344

原创 网络编程之【TCP服务器】

TCP服务器基于上一篇文章,我们利用socket编写了一个UDP服务器,链接如下:UDP服务器 今天我们来实现一个TCP服务器并且对这个TCP服务器进行优化。TCP协议的特点有连接的面向字节流的可靠的传输 -TCP服务器需要用到的接口 TCP服务器和UDP服务器相同,都是利用SOCKET API接口来实现的,那么创建socket,和绑定bind和UDP是一摸一...

2018-04-30 16:16:04 289

原创 网络编程之【UDP服务器】

一、SOCKET网络套接字 在网络中,要进行两台主机之间的通信,我们需要借助SOCKET网络套接字,那么什么是套接字呢,我们先来认识以下两个概念IP地址和端口号。1.IP地址        IP协议位于网络层,IP协议有两个版本,一个是IPV4,另外一个是IPV6,这里我们讨论的是IPV4协议,IP地址又叫软件地址,是在全世界内标识唯一一台主机的地址,对应IPV4来说,IP地址是占4个字节的,例如...

2018-04-28 19:17:03 640

原创 计算机网络基础知识

计算机网络分层OSI网络七层结构OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI 七层模型是一种框架性的设计方法 ,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,其最主要的功能使就是帮助不同类...

2018-04-26 12:03:00 1267 1

原创 排序【5】基数排序和计数排序

前面介绍的几种排序方式都是比较式的排序,今天,我们来介绍两种非比较排序。计数排序和基数排序。一、计数排序1.基本思想:遍历待排数组,找到数组中最大的元素,然后开辟一个比这个最大元素大1的新数组,以新数组的下标表示待排元素,统计原数组中所有元素出现的个数放在新数组相应的位置,然后把新数组中除过0次出现的其余元素,按顺序拷贝回原数组即可。2.思想流图:

2018-04-24 17:15:45 275

原创 MySQL数据库的基本操作

一.MySQL数据库1.什么是数据库?为什么要有数据库?数据用文件存储就可以了,为什么要用数据库保存呢。是因为文件存储数据有以下几点缺点:    (1)文件的安全性得不到保障,谁都可以通过文件查看数据。  (2)文件不利于数据的查询,和对数据的管理。(3)文件无法存放海量数据。  (4)我们在很多情况下需要通过程序访问数据,文件在程序中不利于控制。为了解决这些问题,开发

2018-04-21 21:15:48 307

原创 排序【4】归并排序

归并排序1.基本思想:   将待排序的元素分为两个长度相等的子序列,为每一个子序列排序,然后将他们合并成一个序列。合并两个子序列的过程叫做两路归并。2.具体步骤:  (1)按照类似于快速排序的道理,我们把待排序区间划分成两个长度想等的子区间。  (2)递归其子区间,直到区间里面的元素只剩下一个,我们认为这个子区间已经有序。  (3)当区间只剩下一个元素时候,每次将相邻两个区

2018-04-19 20:17:38 298

原创 排序【3】交换排序

冒泡排序基本思想:为什么叫冒泡排序呢,,是因为每一次排序就像是鱼儿吐泡泡,一个个泡泡从水底到水面会变得越来越大,泡泡就像元素,随着算法的进行,较大的元素就会到后面去。如果升序排列,那么就会对相邻两个元素进行比较,如果前者大于后者,那么就交换这了两个元素,直到最大的元素被排到最后一个位置,第一趟冒泡完成,进行第二趟冒泡,把次大的元素排到倒数第二的位置,重复这个过程。直到所有的元素都被冒泡到合适的...

2018-04-18 22:09:34 312

原创 排序【2】选择排序

选择排序算法思想:以升序为例,在整个区间中找出排序码最小的元素,如果这个元素不是这组序列中的第一个元素,那么将它和第一个元素进行交换,使得最小的元素就在第一个位置,然后缩小区间,循环执行上述操作,只到区间中只剩下一个元素。 具体步骤(升序):在区间中找到关键码最小的元素。如果不是待排序区间的第一个元素,则和带排序区间第一个元素交换。缩小待排序区间。 代码实现:void ...

2018-04-17 16:14:44 237

原创 排序【1】插入排序

常见排序在实际生活中,排序的运用很多,排序就是将一组杂乱无章的数据升序或者降序排成有序的序列。常见的排序算法有。 不同的排序算法适用于不同的场景下,衡量一个排序算法的标准不仅有空间复杂度,空间复杂度,还有稳定性。一个稳定的排序算法,相同的排序码在排序前后相对位置是不会发生变化的。 当然,排序也会根据数据量的情况,分为: 1.内部排序:数据可以加载到内存中进行排序。 2.外部排序:数据元...

2018-04-17 11:26:35 469

原创 Linux下的进程间关系

进程组 在linux中,每一个进程还属于一个进程组,一个进程组有多个进程组成,通常,他们联合起来作业,可以接受从同一个终端下的各种信号。并且每一个进程组都有一个进程组ID。在Linux中叫做PGID,一个进程组由多个进程组成,进程组中有一个组长进程,组长进程的标识是他的进程ID和组ID相同。一般一个进程组中第一个创建的进程就是组长进程。一个进程组中只要还有一个进程存在,那么这个进程组就存在。 ...

2018-04-16 10:07:00 1450

原创 搜索结构之AVL树

AVL树概念 搜索二叉树虽然降低了查找的效率,但是如果数据有序或者接近有序,那么搜索二叉树就会退化成单枝树,搜索的时间复杂度就会变成O(n),极大的降低了效率,因此我们引入了AVL树,在向树中插入元素的时候,能保证每一个节点的左右子树的高度不会相差1,从而降低了树的高度,提高了查找的效率。 2.我们把具有一下性质的树称之为AVL树:1. 首先它是二叉搜索树。 2. 二叉树每个节点的...

2018-04-14 18:43:16 243

原创 基于链表和环形队列的生产者消费者模型

生产者,消费者模型在学习系统编程当中,有一种很重要的模型,那就是生产者消费者模型,在编写多线程代码时候,一个个线程就扮演着生产者,消费者的角色。举一个例子,在生活中,我们去商店买东西,那么我们相当于消费者,而货物生成厂家就是生产者,商店扮演着交易场所。我们总结为:三中关系,生产者与生产者,生产者与消费者,消费者与消费者。两种角色,生产者和消费者。一个交易场所生产者和生产者 ...

2018-04-13 21:12:52 330

原创 Linux下的线程操作

线程线程的概念 我们在前面讲过,进程的概念,了解1了系统中的进程控制块PCB,虚拟地址空间,页表映射,今天,我们就来看看在linux下的线程。我们把在一个程序中的一个执行流程路线就叫做一个“线程”,一个程序中的执行流线最少要有一个才可以。 进程和线程的区别进程是系统分配资源的基本单位,线程是程序执行的最小单位。cpu在调度时,实际调度的是线程。进程之间的资源一般不共享,线程共享...

2018-04-13 19:00:44 485

原创 Linux下的进程信号

信号什么是信号? 在生活中,我们可以看到交通信号,火警信号,急救信号,这些都是信号,通知我们做出相应的反映,在操作系统中,我们也有信号这一个机制,来确保进程的合理运行,当一个程序运行起来的时候,我们在键盘上按一个ctrl+c,进程就会停下来,这实际上就是给进程发了一个信号,cpu从用户态切入内核态,来处理这个硬件中断,把它理解成一个SIGINT的信号记录在当前pcb下,然后当某个时候需...

2018-04-03 17:57:40 302

原创 Linux下基础I/O

Lin9ux下的基础I/OC语言阶段在学习C语言的时候,我们要实现程序的I/O操作,需要调用fopen()和fclose来打开和关闭文件,fopen()成功返回FILE*的文件指针,利用fread和fwrite函数来进行文件的读写操作。当然我们还学过fseek重置文件指针,ftell,rewind等函数我们还知道,C会默认打开流,stdin,stdout,stderr,并且这三个...

2018-04-02 21:46:43 223

原创 Linux下进程的控制

linux下进程的控制进程的创建首先,我们知道进程的创建需要调用fork()函数。fork()一次调用两次返回,子进程返回0,父进程返回子进程的pid。同样也可以调用vfork来创建子进程,但此时父子进程共享地址空间,因此我们一般不建议使用。#include<stdio.h>#include<unistd.h>int main(){ ...

2018-03-31 17:43:30 220

原创 Linux下的进程间通信

进程间通信我们知道,在进程运行期间,每个进程都是相互独立的,而有的时候,我们需要将多个一个进程的数据传输给另外一个进程,或者实现多个进程共享同一份资源,又或者是一个进程发消息给另外一个进程,此时。就需要进行多个进程之间的通信,本文将在linux操作系统下简介进程间通信的基本概念以及方法。1.进程间通信的分类*管道通信(分匿名管道和命名管道)*System V IPC(主要有三种方式

2018-03-31 13:15:53 218

原创 初始Linux下进程及其创建

一.冯诺依曼体系    这就是冯诺依曼体系。我们常见的笔记本,计算机,服务器大多数都是遵循冯诺依曼体系的,大体上它包含了输入输出设备,cpu,存储器三大组件。而这里的存储器我们一般指的是内存,并且在不考虑缓存的情况下,cpu只能对内存进行读写操作,不能访问外设,同样,外设要想输入或者输出数据,也只能向内存中进行读写,不能够访问cpu。总之,一切的设备都只能和内存打交道。我们的程序同样也是如

2017-12-05 21:38:40 586

原创 初识Makefile

1.为什么需要Makefile?       在LInux下,一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell一样,其中也可以执行操作系统的命命令。2.什么是Makefile?

2017-12-02 16:15:44 247

原创 我的第一个Linux小程序----进度条

今天给大家展示一个在Linux下编写的小程序----进度条#include#includeint main(){char array[101]="#";int i=0;char* buf="-/-|\\";for(i=0;i<101;i++){printf("[%-100s][%c]\r",array,buf[i%5]);array[i]='#';fflush(stdo

2017-11-28 19:59:22 295

原创 巧用栈结构实现迷宫游戏

当我们学习了栈这种数据结构以后,我们就可以利用栈来实现一个简单的迷宫游戏 ,首先我们给出迷宫的地图,这是一个二维数组。 {0,0,1,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,0,0,0}, {0,0,0,0,0,0,1,0,0,0}, {0,0,0,1,0,0,1,0,0,0}, {0,0,0,1,1,1,1,0,0,0}, {0,0,0,1,0,0,

2017-11-19 20:26:41 948

原创 几种形式队列的实现

队列是一种特殊的线性数据结构,它的特点是先进的元素先出,后进的元素后出,我们分别用顺序存储结构和链式存储结构来实现一个队列。1.循环队列templateclass Stack{public: Stack() :_array(new T[3]) , _size(0) , _capacity(3) {} void Push(const T& data) { _Ch

2017-11-19 20:15:32 739

原创 单例模式的三种实现方法

在实际开发中,我们往往需要一个类只能被实例化一次,如果有多个对象的话,就会导致混乱情况发生。优点一、实例控制单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。二、灵活性因为类控制了实例化过程,所以类可以灵活更改实例化过程。缺点一、开销虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过

2017-11-18 13:40:36 507

原创 Linux常用命令

ls命令ls 列出磁盘文件ls -l 打印文件属性ls -a 列出目录下的所有文件,包括以.开头的隐藏文件ls -i 输出文件的i节点索引信息ls -k 以k字节的形式列出表示文件大小ls -F 在每个文件后附加上一个字符用来表示文件类型。*表示普通文件,/表示目录,@表示符号链接, l表示FIFOS, =表示套接字ls -t  时间排序ls -s 文件后输出该文件

2017-11-16 18:47:44 195

原创 利用栈解决括号匹配和逆波兰表达式

当我们学习了栈这种数据结构滞后,我们就可以利用栈来解决一些实际问题。这里是我们给出的动态顺序栈的实现templateclass Stack{public: Stack() :_array(new T[3]) , _size(0) , _capacity(3) {} void Push(const T& data) { _Checkcapacity(); _

2017-11-12 19:12:33 449

原创 智能指针与弱指针解决循环引用

当我们学会使用智能指针的时候,会发现他有很多好处,但库里面提供的智能指针shared_ptr也并不是万能的,他会存在循环引用的问题,下面我们就通过实例来具体分析循环引用这种情况。struct Node{ Node( const T&data) :_data(data) , _Pre(NULL) ,_Pnext(NULL) { } shared_ptr> _Pre; s

2017-10-29 22:31:21 1291 1

原创 通用冒泡排序算法

通常的冒泡排序算法只能解决指定类型的数据以及固定的升序或者降序排列,而当我们学习了C++模板以及仿函数的之后,我们就可以写一个通用的冒泡算法来处理不同类型数据以及想要排序的方式。void bubblesort(int* array, size_t sz){ for (int i = 0; i < sz - 1; i++) { for (int j = 0; j < sz - 1 -

2017-10-28 15:09:44 432

空空如也

空空如也

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

TA关注的人

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