自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mac_timmy

一定会熟练啦

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

原创 高级I/O中多路转接之epoll

在介绍epoll之前,先说说poll。我们都知道,select通过固定的参数位置加输入输出型参数来进行数据的传递。这样做就有一个很大的缺陷,操作麻烦。用户自己还需要创建一个新的数组,将进行监听的源数据保留下来。同时还有一个硬伤,就是select监听的fd是有上限的,这个上限只能通过修改内核的属性来实现增强。如果我们的服务器业务很大的话,就会发现select不够用。所以有后来出现了poll,po...

2018-08-10 11:19:29 325

原创 高级I/O中多路转接-select

我们都知道I/O的速度很慢,电脑的瓶颈很大一部分就在磁盘I/O速度跟不上CPU的处理速度。I/O的部分其实分为两部分,第一步是等待,就是等待数据到来的时候;第二步是数据拷贝。通常来说等待的时间占大头,为了提高I/O的效率就需要减少等待的时间。五种I/O模型阻塞I/O:这是最常见的I/O方式,在内核将数据准备好之前,系统调用会一直处于等待状态。网络套接字的默认方式都是阻塞方式。非阻塞I/...

2018-08-08 16:41:43 383

原创 数据链路层中以太网、MAC、MTU的解析

数据链路层在网络分层中处于倒数第二层,是在物理层上面的一层。他的作用主要是负责处于同一种数据链路节点中的两个设备之间进行传递数据。

2018-08-07 09:22:49 1436

原创 DNS系统

DNS出现的背景DNS叫做域名解析系统,它映射了域名和IP地址的关系。我们都知道,在网络中通过IP+port来确定唯一一主机中的唯一进程,但是IP地址不方便记忆,所以为了解决这个问题,提出了一个概念叫做主机名,是一个字符串,并使用hosts文件来描述字符串和IP的映射关系。刚开始是通过互联网信息中心来管理这个hosts文件的,但是这样很麻烦,如果有一个新的主机要接入网络或者IP地址变更,就...

2018-08-06 23:07:21 586

原创 网络层解析

网络层提供的服务网络层的任务是将多个网络通过路由器互连成一个互连网络,让网络中的多台计算机可以互相通信。其中网络层最重要的协议是IP协议。网络的特点是:向上提供简单灵活的、无连接的、尽最大努力交付的数据包服务。IP协议IP数据报头格式IP地址的分类IP地址和硬件地址地址解析协议ARP划分子网网际控制报文ICMP路由选择IP...

2018-08-06 10:03:11 1531

原创 HTTP协议解析-实现超简单的多线程版本HTTP服务器

http协议是一个应用层的协议,https是一个安全性更高的协议。本文讲述http协议的报头、报头属性以及实现一个简单的http服务器。url在认识http之前,我们有必要认识url。url就是我们常说的网址。...

2018-08-03 23:07:25 2137

原创 网络编程基础-简单的TCP回显程序(多进程和多线程版本)

这篇文章是对于上一篇文章的单进程版本的优化。不过这里采用的是回显方式,不是阻塞式聊天。客户端使用的同一个客户端代码。客户端代码多进程服务器端#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.

2018-08-03 11:46:51 347 2

原创 网络编程基础-简单的TCP阻塞式网络聊天应用(单进程版本)

本程序使用的TCP协议,该协议是面向连接、通过字节流进行通信的。实现了客户端和服务器端的阻塞式通信。主要锻炼了对于socket API的使用。程序使用的函数其中socket、bind、地址转换函数在网络基础编程-UDP为例已经分析过。这里介绍的函数适用于TCP这类面向连接的协议。listen当我们的网络程序需要使用TCP面向连接一类的协议的时候,socket中选用了SOCK_S...

2018-07-30 15:51:51 401

原创 网络编程基础-UDP为例

本文只是基于认识的讲述网络编程基础。基础认识认识IPIP地址是在IP协议中用来表示网络中不同的主机的地址IPv4是4个字节,32位;IPv6是16个字节,128位。目前通用的是IPv4。通常用点分十进制来的字符串来表示IP地址。例如常见的192.168.1.1,每一个点分隔一个字节,范围是0~255理解源IP地址和目的IP地址:源IP地址是发送端的IP地址,目的IP地址...

2018-07-24 16:41:40 526

原创 Linux中dup函数和dup2函数

个人博客传送门Linux 中进行文件描述符的重定向可以使用两个函数:dup函数和dup2函数,其中还有一个dup3函数,但是这个是Linux后面版本添加的,不是所有的Linux内核都支持,在这里不讨论。在Linux系统中约定文件描述符 0、1、2 对应标准输入、标准输出、标准错误,默认开启。dup()#include <unistd.h>int dup(int f...

2018-07-22 15:50:00 793

原创 TCP协议解析

TCP概述及特点TCP报头理解TCP的连接管理机制连接链接的工作三次握手三次握手出现报文丢失的情况分析:为什么不是二次握手,四次握手?断开四次挥手TIME_WAIT状态半关闭同时关闭状态转换服务器端状态转化可靠传输流量控制拥塞控制异常终止粘包问题基于TCP的应用协议本文主体参考谢希仁老先生计算机网络一书TCP概...

2018-07-21 23:53:56 652

原创 UDP协议解析

个人博客传送门本文主要参考谢希仁老先生的计算机网络一书UDP概述及特点UDP称为用户数据包协议,是传输层的协议。他的功能其实就是在ip的数据报服务之上添加了复用、分用和差错检验。特点:无连接,即发送数据之前不需要建立连接。无连接的好处就是快,省内存空间。因为维护连接需要创建大量的数据结构,在这里都不需要。UDP尽最大努力交付数据,即不保证可靠交付。没有TCP的确认机制、重传...

2018-07-18 16:48:06 3200

原创 经典排序算法

个人博客传送门 排序的分类有很多种,有很多的排序方法,这里只列举了七八种常见的排序算法。 交换排序冒泡排序冒泡排序的思路(升序):比较相邻的两个元素,如果第一个比第二个元素值要大,交换两者位置。指向第二个元素。一趟比较下来,最大的元素应该位于序列的最尾端进行下一趟比较,此时就不需要将最大的元素纳入范围,因为它已经在适合的位置了。重复直到全部完成。如图: ...

2018-07-16 22:16:08 185

原创 解决VMware 12安装VMware Tools后共享文件夹不出现的问题

个人博客传送门 VMware Workstation Pro 12.0中centos 7安装VMware Tools的时候,发现安装完成,在/mnt/hgfs/目录下,没有自己显示与windows共享的文件夹。可以通过以下步骤修复。一:升级VMware为14版本,问题解决二:通过修改VMware Tools的文件解决问题。安装VMware-Workstation-Pro 12.0...

2018-04-24 13:42:36 4231

原创 在旋转数组中找最小的值

个人博客传送门题目描述思路注意代码题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个 非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路本题最简单的做法就是从头到...

2018-04-19 09:34:10 201

原创 vector二维数组中的查找

个人博客传送门题目:解题思路:代码:vector构成的二维数组创建二维数组赋值遍历二维数组输出图示:题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:第一行到最后一行是递增,第一列到最后一列是递增,那么...

2018-04-19 08:56:20 2868

原创 基于HuffmanTree的文件压缩及解压

个人博客传送门HuffmanTree定义名词解释性质创建HuffmanTree节点定义构造函数参数解释构建的思想析构函数获取根节点函数补充文件压缩及解压缩哈夫曼编码压缩思路压缩原理压缩与解压代码分析结构体分析构造函数压缩函数构建哈夫曼编码函数解压函数代码HuffmanTree定义哈弗曼树是一种...

2018-04-05 14:21:48 479 2

原创 堆的解析和实现

个人博客传送门定义最大堆和最小堆完全二叉树用vector表示构造堆并调整空构造函数传参的构造函数reserve()函数的使用Adjustdown函数仿函数Adjustdown函数(一次向下调整函数),本文用最大堆来讲解小技巧补充插入函数Push函数AdjustUp函数(向上调整函数)出堆函数判空,大小,堆顶元素完整代码...

2018-04-02 20:47:39 458

原创 二叉搜索树插入和删除(递归和非递归实现)

个人博客传送门性质节点插入思路图示代码实现查找代码实现删除删除思路第一类,叶子节点或者有一个子树为空左子树为空右子树为空注意第二类,两个子树都存在代码实现中序遍历代码实现完整代码性质二叉搜索树是一个优化的二叉树,也称作二叉排序树、二叉查找树、BST等。一般在每个节点定义一个关键值Key。插入的时候按...

2018-04-02 15:17:10 765 1

原创 C语言输入输出函数详解

个人博客传送门总览错误报告函数:void perror( char const* str );终止执行函数:void exit( int status );打开文件函数:FILE* fopen( char const* filename, const char* mode );关闭文件函数:int fclose( FILE* stream );输入输出函数总览字符输入函数...

2018-03-22 18:22:58 617

原创 Linux下简易彩色进度条

个人博客传送门前言在Linux下安装文件的时候,都会有个进度条来提示我们安装的进度是多少。这里我们模拟输出这个进度条。主要用到输出函数的操作、缓冲区的刷新、usleep函数、linux终端颜色的显示等知识。 效果如下: 铺垫知识点缓冲区 缓冲区分位三种:无缓冲,行缓冲,全缓冲。 无缓冲:没有缓冲,也就是信息在输入输出的时候,立马输入或输出。典型的代表就是标准错误流std...

2018-03-19 21:16:55 292

原创 查看Linux系统版本信息

个人博客传送门查看内核版本cat /proc/version uname -a 查看系统版本cat /etc/redhat-release lsb_release -a这个命令需要安装,安装命令: yum install lsb -y cat /etc/issue 都说可以,这个我的查出来很奇怪 rpm -q centos-release ...

2018-03-08 20:47:03 1268

原创 Linux中时间的设置

个人博客传送门test: CentOS Linux release 7.4.1708 (Core)查看时区 date -R +0800 表示在东八区 其中: CST:中国标准时间(China Standard Time),这个解释可能是针对RedHat Linux。 UTC:协调世界时,又称世界标准时间,简称UTC,从英文国际时间/法文协调时间”Universal...

2018-03-08 20:42:13 6634 3

原创 判断元素的入栈和出栈顺序是否合法

个人博客传送门题目提供两个元素的集合,一个是元素入栈的顺序,另一个是元素出栈的顺序。设计一个函数,判断两个元素集合是否满足入栈出栈的规则。如:入栈顺序:“12345”,出栈顺序是:“54321”,这样就是符合要求的。如果出栈顺序是:“51234”,这样不符合要求。思路根据题目的要求,就是判断两数组是否满足出栈入栈的顺序。可以这样做:1、先按照入栈顺序的集合进行入栈。2、在入...

2018-03-07 15:45:26 910

原创 二叉树的基本实现

个人博客传送门二叉树本文将使用c++实现模板类的二叉树,内容包括创建、递归遍历、非递归遍历、结点个数、深度、叶子结点的个数、第K层结点个数等函数。结点、二叉树结构二叉树的结点是一个结构体,包括值_data,指向左子树的指针和指向右子树的指针_left和_right。还有构造函数,用于创建结点。 将BinaryTreeNode<T>typedef为Node,很多...

2018-03-06 15:41:31 259

原创 四种智能指针剖析

个人博客传送门 智能指针是C++中一个编程技巧。它保证内存的正确释放,解决了内存泄漏的问题。有一个思想叫做RAII,RAII指的是资源分配即初始化。我们通常会定义一个类来封装资源的分配和释放,在构造函数中完成资源的分配和初始化,在析构函数中完成资源的清理。 在C++中,我们一般是使用new和delete来实现内存的初始化和释放。正确的配对使用可以处理绝大部分问题,但是如果出现了执行流的跳转,比...

2018-02-26 15:56:44 179

原创 C++模板与分离编译

个人博客传送门分离编译模式一个项目如果有多个源文件组成,每个源文件单独编译,形成目标文件。最后通过链接器将所有的目标文件链接起来,形成一个可执行的文件。这个过程就叫做分离编译。模板不能分离编译有一个项目,其中函数声明放在”test.h”中,函数实现放在”test.cpp”中,函数调用放在”main.cpp”中。如果没用使用模板,将不会有任何问题。而且这样是被推荐使用的。但是如果...

2018-02-24 22:54:33 305

原创 C++模板的类型萃取

个人博客传送门 类型萃取,是C++中的一种编程技术。当我们希望对模板传递的不同类型进行不同的操作的时候,同时我们又不希望改变该模板的封装方式。我们可以通过这种技术,对传入的不同类型进行不同的原理操作。特化要明白类型萃取,首先要知道模板中的特化。一般来说,我们的模板是通用类型的,但是如果有一些类型,我们希望有不同的操作方式,我们就可以通过特化的方式。例子如下:#include &l...

2018-02-24 17:25:36 407

原创 浅读《STL源码剖析》笔记 4章-vector&&list

个人博客传送门4 序列式容器4.1 容器的概观与分类 所谓序列式容器,其中的元素都是可序的(ordered),但未必有序(sorted)。C++本身有array,其它是STL提供的。4.2 vector4.2.1 vector概述array是静态的,vector是动态增长的,随着元素的增加,内部机制自动扩充空间以容纳元素,不需要自己分配空间。4.2.3...

2018-02-09 14:55:32 182

原创 浅读《STL源码剖析》笔记 3章

个人博客传送门3 迭代器(iterator)概念与traits编程技法迭代器(iterator)是一种抽象的设计概念,iterator模式定义如下;提供一种方法,使之能够按照次序访问某个聚合物(容器)所含有的各个元素,而同时又无需暴露该聚合物的内部表述方式3.1 迭代器设计思维STL的中心是将数据容器和算法分开,然后用一个胶合剂将他们联系在一起,这个就是iterators的作用...

2018-02-08 17:16:17 320

原创 浅读《STL源码剖析》笔记 1、2章

个人博客传送门1 STL概论与版本简介1.2 STL六大组件容器(containers):vector,list,deque,set,map,用来存放数据算法(algorithms):sort,search,copy,erase迭代器(iterators):扮演容器与算法之间的胶合剂,所谓的“泛型指针”。从实现角度来看,迭代器器将operator*,operator++,op...

2018-02-03 11:26:12 453

原创 C++中static const integral data member在类中的初始化

个人博客传送门 1. 当我们在类中定义了一个静态成员变量的时候,我们需要在类之外初始化它,因为他是属于所有的类的。该类的其它对象对这个静态变量也是可以进行修改的。```c++//非常量静态成员变量初始化对比#include <iostream>using namespace std;class person{ public: static int...

2018-01-30 14:47:57 261

原创 创建一个不能被继承的类并能够正常使用

个人博客传送门题目:题目很简单,就是创建一个不能够被继承的类,同时能够正常使用。思路:题目分为两部分组成,第一个是不能被继承的类。类如果要不能被继承,那么子类肯定不能够调用基类的构造函数或者析构函数。那么我们只要将构造函数或析构函数定义为私有成员函数就好了。第二个要求,能够正常使用,这样显然之前的方式是行不通的。构造函数为私有了,就无法创建对象了。那我再给他加一个友元函数,...

2018-01-29 11:36:10 337

原创 1+2+……+n的特殊求法

个人博客传送门 参考来源题目:求1+2+3+…+n,要求不能使用乘除法,for,while,if,else,switch,case等关键字以及条件判断语句。自己思考想到了一种方法,递归的思路,但是判断终止的条件不是if,利用了&&的性质,当前操作数为假的时候,不再进行后操作数的运算。然后在网上查阅,得到了其他的做法。1、利用&&操作符,|| 也...

2018-01-27 18:10:14 763

原创 C++继承中虚函数和多态

继承体系中虚函数、重写、多态纯虚函数

2018-01-13 11:42:36 243

原创 C++菱形继承和虚继承

菱形继承、虚继承、虚基表

2017-12-10 16:03:08 418

原创 C++ String类的引用计数的浅拷贝、写时拷贝

引用计数的浅拷贝写时拷贝

2017-12-09 22:03:06 418

原创 C++中new/delete剖析及其宏模拟

new/delete/new[]/delete[]的剖析及其模拟

2017-12-07 00:59:15 601 1

原创 Liunx目录的权限

对于普通文件来说,文件权限分别是: 但是对于目录文件来说: 以下,通过创建一个目录并修改其拥有不同的权限来解释。1)创建一个practice的目录,并查看其拥有者的权限。普通用户创建的目录文件拥有775 的权限。 用root 用户创建的目录文件拥有755 的权限。 2)在practice 中创建一个叫 first的文件,一个叫 second 的目录。 firs...

2017-12-03 13:51:54 391

原创 C++对传参和传返回值的优化

编译器对传参和返回值的优化c++

2017-11-28 20:32:56 408

空空如也

空空如也

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

TA关注的人

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