自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 致敬科比,实现查询科比每赛季数据的Web服务器

前言:我从2007-2008赛季,加索尔来湖人之后,湖人三进总决赛的第一个赛季开始喜欢科比,那时候我五年级,现在十年过去了,我大三了,科比已经退役两年了。 我目前的技能足以支持我实现一个简单的关于科比的Web服务器,这是我两前,2016-4-14日(科比最后一场比赛)结束以后,就想完成的事情。 ...

2018-08-09 16:59:50

阅读数 2484

评论数 1

原创 庖丁解牛:剖析STL库空间配置器

在学习一个技术之前,知道为什么要学习它,学习它有什么用是必要的,所以我要先说明为什么需要空间配置器: 内存碎片问题 假设依次向系统申请了16字节,8字节,16字节,4字节的空间,还剩下面的8字节空间未被分配; 随后,这两个16字节的空间被收回; (淡紫色部分表示已经被系统收回,粉色部分...

2018-07-17 12:00:06

阅读数 168

评论数 0

原创 驱动:学习Linux内核如何用宏来操作设备号

1.设备号,主设备号,次设备号 **主设备号:**应用程序根据设备文件的主设备号,到这个内核的一个大数组中找到在内核中找到唯一驱动程序。 **次设备号:**应用程序根据主设备号找到驱动程序,驱动根据次设备号找到对应的唯一的硬件外设。 **设备号:**同时包含了主设备号和次设备号,它的数据类型...

2019-06-13 20:08:59

阅读数 40

评论数 0

转载 Telnet和SSH(ssh1,ssh2)间区别

一、TELNET 使用Telnet这个用来访问远程计算机的TCP/IP协议以控制你的网络设备相当于在离开某个建筑时大喊你的用户名和口令。很快会有人进行监听,并且他们会利用你安全意识的缺乏。传统的网络服务程序如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,...

2019-03-21 10:38:41

阅读数 171

评论数 0

翻译 文件I/O

五个主要的函数:open read write close lseek 一:文件描述符 对于操作系统内核来说,所有打开的文件都通过文件描述符引用;文件描述符(fd)是非负整数; 0:标准输入 STDIN_FILENO 1:标准输出 STDOUT_FILENO 2:标准错误 STDERR_FILEN...

2019-03-18 15:22:14

阅读数 62

评论数 0

原创 红黑树旋转的通俗易懂版本以及判断一个树是否为红黑树

红黑树属于二叉搜索树,但是每个节点增加了一个存颜色的位,它的规则是: 1.根节点为黑色。 2.不能有连续的两个红节点,所以如果一个节点的颜色为红,那么它的子节点若不为空则一定为红。 3.每条路径上黑节点数量相同。 所以保证了最长路径不超过最短路径的两倍,没有AVL树那么严格的平衡,但是旋转少效率高...

2018-09-23 10:15:41

阅读数 765

评论数 0

原创 AVL树的C++代码实现,如何旋转,判断是否为AVL树

我们知道,二叉搜索树的搜索时间复杂度为O(LgN),但是当插入的K值为有序时,如插入1,2,3,4,5,6…,搜索的时间复杂度又会变为O(N),因为此时的二叉搜索树以及差不多是一个单链表了,如图: 所以为了解决这样尴尬的局面,出现了AVL树,源代码如下: template &amp...

2018-09-22 17:57:40

阅读数 308

评论数 0

原创 二叉搜索树的C++代码实现

template<class K,class V> struct BinaryNode{ K _key; V _value; BinaryNode<K,V>* _left; BinaryNode<K,V>*...

2018-09-22 17:49:40

阅读数 577

评论数 0

原创 进程地址空间布局

创建一个进程时,操作系统会为该进程分配一个 4GB 大小的进程地址空间,本文具体讲的是进程地址空间的各个部分: 栈: 存放程序临时创建的局部变量,也就是代码块之内或者函数之内的变量,但不包括static修饰的(static修饰的变量放在数据段);还存放函数参数和返回值等。 堆 存放动态...

2018-09-22 09:13:14

阅读数 169

评论数 0

原创 模拟实现atoi函数

int atoi(const char* ptr) ; 1.跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace( )函数来检测; 2.遇上数字或正负符号才开始转换,而在遇到非数字或’\0’才结束转换,并将结果返回。 3.如果 ptr不能转换成 int 或者 ptr为空字符串...

2018-08-20 15:46:57

阅读数 82

评论数 0

原创 简单介绍C++强制类型转换

在介绍C++强制类型转换之前,我们先来看一看C语言风格的强制类型转换,的确,C风格的强制类型转换用起来很方便。 它的格式是: (类型)变量 void test_c_cast() { //隐式类型转换(相近类型) int i = 1; double d = i; ...

2018-08-20 10:31:02

阅读数 56

评论数 0

原创 探索类型萃取的必要性

首先我们来实现一个能装string的容器,只实现了尾插和打印接口。 template <class T> class SeqList{ public: SeqList() :_a(NULL), _size(0),...

2018-08-16 16:04:04

阅读数 98

评论数 0

原创 C++对象模型图示总结

本文的图片全部是由我自己所画,如有错误,感谢大家指出。 菱形继承和菱形虚拟继承 有虚函数的类对象 有虚函数的单继承 有虚函数的多继承 有虚函数的菱形继承 有虚函数的菱形虚拟继承 ...

2018-08-16 09:31:43

阅读数 159

评论数 0

原创 C++:为什么在继承关系中,父类的析构函数最好定义为虚函数?

我们先来看一段简单代码,A类有一个指针成员_pa,B类公有继承了A类,然后自己有一个指针成员_pb: class A{ public: A(int x = 1) :_pa(new int(x)) {} ~A() { cout &a...

2018-08-15 15:14:33

阅读数 2570

评论数 2

原创 C++:重载,重定义,重写的区别

这是比较容易混淆的概念,在此整理,以便理解。 一:重载 重载指的是在同一个作用域内,两函数的函数名可以相同,但是参数不能完全相同,可以是参数类型不同或者是参数个数不同,至于返回值,不影响重载。 如图,构成了重载: 如何实现重载? C++代码在编译时会根据参数列表对函数进行重命名,例如...

2018-08-15 14:44:31

阅读数 2421

评论数 0

原创 C++写时拷贝

一:浅拷贝 一个类,如果不写拷贝构造函数,那么它的默认拷贝构造函数为浅拷贝,浅拷贝有什么问题呢? 拿一个简单的String类举例: class String{ public: String(char* str = "\0") ...

2018-08-14 19:57:14

阅读数 602

评论数 0

原创 模拟实现C++的new/delete

本文只讨论关于自定义类型的new/delete。 模拟实现new: template<class T> T* New(size_t n) { //先开辟一段空间,要多开4字节,用来存放开了多少个对象 T* ptr = (T*)oper...

2018-08-13 15:19:24

阅读数 48

评论数 0

原创 C++中const关键字

一:const修饰指针变量 int num = 0; 1.const在 * 前面,表示const修饰指针指向的内容 const int* p = # int const* p = # 2.const在 * 后面,表示const修饰指针变量 ...

2018-08-13 11:20:53

阅读数 50

评论数 0

原创 C语言static关键字的作用

一:当static修饰函数或者代码块之外的变量时 改变的是函数或全局变量的链接属性,外部链接属性变为内部链接属性,而存储类型和作用域不受影响。 换句话说,被static修饰的函数或全局变量,只能在当前源文件中访问。 二:当static修饰代码块内部的局部变量时 在函数中定义局部变量,如果没...

2018-08-11 08:38:05

阅读数 147

评论数 0

原创 宏和函数有什么区别?

define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏。 宏分为普通宏定义和函数宏定义: 普通宏定义:#define MAX 1024 函数宏定义:#define MIN(a, b) ((a) < (b) ? (a) : (b)) 宏函数可以完成一些简单...

2018-08-10 11:27:23

阅读数 37

评论数 0

原创 一个C语言程序的编译过程

这是一个再简单不过的C语言程序: #include <stdio.h> int main() { printf("hello world!\n"); return 0; } 执行gcc te...

2018-08-10 11:01:48

阅读数 899

评论数 0

原创 如何建立Windows和Linux之间的共享文件夹

以win10和centos为例: 第一步,点击虚拟机,设置: 第二步,点击选项: 第三部,点击共享文件夹,点击总是启用,然后点击添加: 第四步,添加共享文件夹: 添加成功之后,在 /mnt/hgfs 目录下,就会有共享文件夹。 ...

2018-08-10 07:20:24

阅读数 1793

评论数 0

原创 总结指针和引用的区别

一:什么是引用 引用就是给一个已经定义的变量起一个别名,并没有定义新的变量; 引用的格式为:类型& 引用变量名 = 已定义过的变量名; int a = 1; int& b = a; cout <...

2018-08-07 19:23:50

阅读数 60

评论数 0

原创 详细解读域名解析(DNS)

DNS是一个从域名映射到IP地址的系统。 一:DNS的背景 TCP/IP使用IP地址和端口号来瞄准对应网络上一台主机的一个进程,但是IP地址不好记; 于是有了主机名(字符串),并且使用hosts文件来描述主机名和IP地址的关系。 如图: 最初是互联网信息中心来管理这个hosts文件,...

2018-08-03 16:07:25

阅读数 336

评论数 0

原创 总结数据链路层

上一篇文章说到:网络层实现的是直至目的地址(主机A到主机B)的通信,而具体的实现某一个跳转的通信,是由数据链路层实现的,如图: 具体附链接: https://blog.csdn.net/han8040laixin/article/details/81354588 数据链路层的作用:用于两...

2018-08-03 14:01:12

阅读数 80

评论数 0

原创 总结网络层IP协议

本文主要讨论IP协议及相关内容,如有错误,感谢大佬指正! 基本概念: 主机:有ip地址但不进行路由控制的设备 路由器:既有ip地址又能进行路由控制 节点:主机和路由器的统称 IP协议: 提供了一种能力,将数据报从A主机发送至B主机,但是不一定能发送到,可靠性是由上层的TCP保证的。 ...

2018-08-02 11:56:41

阅读数 102

评论数 0

原创 什么是子网掩码?怎么根据子网掩码得到网络号?

在学习子网掩码之前,必须搞懂网段划分 互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。 IP地址分为两部分: 网络号:保证相互连接的两个网段具有不同的标识。 主机号:同一网段内,主机之间虽然具有相同的网络号,但是必须有不同的主机号,这样才能找得到。 如...

2018-08-01 11:49:41

阅读数 2317

评论数 0

原创 详细解读传输层UDP,TCP协议

首先应该明确一个思路: 在TCP/IP协议中,用 源IP,源端口号,目的IP,目的端口号,协议号 这样一个五元组来标识一个网络通信(通过netstat -n查看) 那么传输层如何把有效载荷交给应用层? 1.将报头和有效载荷分离; 2.有效载荷通过某种方式交到上层(报头中必定有源端口号和目的...

2018-07-31 12:20:45

阅读数 257

评论数 0

原创 TCP连接管理机制

本文主要涉及到TCP的连接机制及其过程详解,TIME_WAIT状态详解,以及为什么需要三次握手和四次挥手,如果有错误,感谢大佬们指正。 一:TCP连接管理机制 服务器状态转化: 1.CLOSED -> LISTEN:服务器创建监听套接字后进入LISTEN状态,等待客户端建立...

2018-07-30 14:07:22

阅读数 1025

评论数 1

原创 Linux下通过Shell脚本快速进入指定目录

现在有一个现实的场景: 每一次打开Linux,都是在 目录下; 我最近想练习网络的代码,所以创建了一个目录,路径为: 可以看到,这个路径很长,如果没一次都通过cd /home/admin/linex/internet/practice,那太麻烦了! 那么如果应用到Shell脚本,把这...

2018-07-29 10:19:02

阅读数 13600

评论数 0

原创 网络编程套接字

之前说了多路转接,那么今天我来谈谈我对网络编程套接字的理解。 初识ip地址和端口号 ip地址 ip地址有两个版本:ipv4和ipv6,我在这里介绍ipv4: 1.ip地址是在ip协议中,用来标识网络中不同主机的地址,它分为两部分: 2.对于ipv4来说,ip地址是一个4字节32位的整...

2018-07-27 17:05:02

阅读数 79

评论数 0

原创 I/O多路转接之epoll

按照man手册的说法:是为了处理大批量句柄而作了改进的poll。 这句话对我而言,说和不说没什么区别,太抽象了,所以要弄清楚什么是epoll,还是要从底层剖析! epoll的三个相关系统调用 一:epoll_create:创建一个epoll模型(也是文件) 参数解释: size:指定...

2018-07-27 10:59:32

阅读数 64

评论数 0

原创 非阻塞IO

文件描述符默认都是阻塞的IO 那么如何把一个fd设为非阻塞呢?需要用到fcntl函数: 参数解释: ①fd:需要操作的文件描述符 ②根据cmd值得不同,决定后面追加的参数。 fcntl函数共有以下五种功能,分别对应五个cmd的值: 可以利用第三种功能,获取/设置文件状态标记,就...

2018-07-27 10:25:59

阅读数 52

评论数 0

原创 I/O多路转接之poll

2018-07-26 08:16:55

阅读数 33

评论数 0

原创 面试题:在字符串中找出连续最长的数字串

题目要求: 在字符串中找出连续最长的数字串,并把这个串的长度返回;函数原型: unsigned int Continumax(char** pOutputstr, char* intputstr); 后者是输入字符串,前者是输出的连续最长的数字串。 如果连续最长的数字串的长度为0,应该返...

2018-07-25 18:40:05

阅读数 2563

评论数 0

原创 I/O多路转接之select

一:什么是多路转接?什么是select? 简单来说,select只做一件事,那就是等,等至少一个文件描述符的读写时间就绪。 具体来讲,系统提供select来实现多路复用输入/输出模型: select系统调用可以让程序监视多个文件描述符的状态变化; 程序会在select这里等待,直到被监视的...

2018-07-22 14:55:59

阅读数 62

评论数 0

原创 初识Shell脚本

说起Shell,我们并不陌生,但很多人又不能很准确的说出Shell到底是什么,所以准确认识Shell的定位,是很有必要的。 一:Shell的初识 Shell的定位: Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁,是一种与内核交流的外壳应用程序的统称。 这个应用程序提供了...

2018-07-21 11:28:41

阅读数 563

评论数 0

原创 剑指offer:复杂链表的复制

所谓复杂链表,指的是:    每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点(可以指向自己,可以为空)。结构如下:struct RandomListNode { RandomListNode(int x) :label(x) , next(NULL)...

2018-06-05 10:36:00

阅读数 36

评论数 0

原创 面试题(剑指offer):顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.如图所示:实际上,就是每一次打...

2018-05-30 18:05:06

阅读数 1126

评论数 0

原创 c语言:如何将字符串转为整数?

题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空。输出描述:如果是合法的数值表达则返回该数字,否则返回0例如:输入:+2147483647 1a33输出: 2147483...

2018-05-24 19:36:36

阅读数 4356

评论数 0

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