自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

flameboy的博客

喜欢交朋友,相互交流、相互学习。

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

原创 《UNIX 网络编程 卷1:套接字联网API 》笔记

第一部分 TCP/IPTCP是一个复杂、可靠的字节流协议,而UDP是一个简单、不可靠的数据包协议。理解connect、accept、close函数 TIME_WAIT状态最长分节生命期:2MSL。TIME_WAIT状态存在的两个理由: 1.可靠地实现TCP全双工连接的终止。 2.允许老的重复分节在网络中消逝。端口号:16位。范围0~65535。 0~10...

2018-05-22 17:33:28 959

原创 《TCP/IP》笔记

IP头部大小占20个字节生存时间TTL(Time To Time) 防止数据包在网络上环回,即无限循环跳转。每经过一个节点,TTL都会-1,当它为0时,则该数据报被丢弃。 Linux 下 输入traceroute + IP或者网址 可跟踪经过的路由跳数情况MTU(最大传输单元) MTU分片例子:源端口和目的端口:都为16位,范围 0~65535。**序列号:**...

2018-05-08 00:03:53 422

原创 守护进程(Daemon)的创建

(1)调用fork让程序转入后台运行。(2)脱离终端。 用setsid设置会话组长。(3)再次fork以避免无意中获得新的控制终端(4)改变工作目录和文件创建模式掩码 chdir(“/”) 和 umask(0)(5)关闭所有非必要的文件描述符。将0,1,2描述符转到null文件中。for(i=0;i<1024;i++){ close(i);}open(...

2018-05-30 16:40:55 215

原创 有个服务器的路由表如下,网卡ens18的IP地址为199.201.71.1,访问199.201.68.25时,底层数据的数据是怎么一步步发送到出去的?访问14.215.177.38又是如何的?

将目的IP 199.201.68.25与路由子网掩码 255.255.252.0 进行与操作,得到的值与该路由的子网相同,因此这类ip在同一网段。查看ens18的ARP缓存中是否存在199.201.68.25的MAC地址,如果存在则直接发送数据;否则,发送ARP广播请求199.201.68.25的MAC地址,199.201.68.25响应ARP请求,缓存中就会保存目的IP和MAC地址,此时可以...

2018-05-22 16:34:05 3051

原创 有一个HTTP的服务器,通过浏览器访问的时候发现打不开的页面(80端口),怎么去抓包分析?步骤和存在的可能原因?

原因:.可能80端口本身无法访问或者被占用。网站无法打开情况发生的原因较多,可能是由于路由或电脑导致,可能是由于服务器问题导致。 (1)ping该网络,如果能通说明网站是没有问题的,如果失败则可能是网络原因,也有可能是网站问题,逐一排查;如果能打开其他网站,则网络没有问题。 (2)查看抓包中是否存在TCP的三次握手,否则可能是TCP连接没有成功,可能是网站问题。 (3)查看建立连接或者发...

2018-05-22 16:31:32 5199

原创 ping如果出现“no route to host”,“目的主机不可达”等错误原因?

no route to host:直接原因是没有配置好默认网关地址,计算机上的路由表找不到到目标ip的路。绝大多数情况是DHCP无应答。目标主机不可达:网络本身就没有连接,防火墙没关、也有可能对方主机没有开,也可能对方主机限制了响应ping消息的响应,很多主机不让别人ping的。...

2018-05-17 21:42:57 22123

原创 DNAT是什么?

SNAT,DNAT就是对数据包的源地址和目的地址进行修改,并且保存修改前后的映射关系,并且根据需要进行还原操作。 SNAT:出去的时候改 变原地址(snat),回来的时候改变目的地(un_snat)。 DNAT:进来的时候改变目的地址(dnat),出去的时候改变源地址 (un_dnat)。例如回环,就用到了SNAT和DNAT。例如: src 192.168.1.2(client) ,dn...

2018-05-17 21:42:06 24363 1

原创 有一台服务器,通过netstat -an命令看到大量状态SYN_RCVD的连接,可能发生的原因是什么?

主要有两种可能: 1.对方(请求方或客户端)没有收到服务器发送的[SYN,ACK]包(一般是由于网络结构或安全规则限制导致(SYN,ACK)包无法发送到对方)。2.对方收到了[SYN,ACK]包却没有ACK。 这种情况分两种可能,一是对方程序有意这么做,如SYN Flood类型的DOS/DDOS攻击;二是对方收到的[SYN,ACK]包不合法,常见的是SYN包的目的地址(服务地址)和应答[SY...

2018-05-17 21:40:59 4717

原创 建立TCP连接的时候,syn包什么情况下会被对端rst?

1.访问的服务器端口未打开访问的主机对应的端口没有开放,就会回RST。2.请求超时例:主机A向主机B发送SYN信号,想连接6666端口,主机A设置了设置了recv的超时时间为100ms,如果在100ms内还没收到主机B的ACK和SYN回复,则主机A发送了RST拒绝进一步发送数据。3.服务端提前关闭socket例如,客户端发了两个请求,服务器只从buffer 读取第一个请求处理完...

2018-05-17 21:39:49 4025

原创 《Linux命令行与shell脚本编程大全》笔记二

第十五章 呈现数据1.Linux的三个标准文件描述符标准输入(0)STDIN ,标准输出(1)STDOUT ,标准错误(2)STDERR2.重定向输出重定向到文件描述符时,必须在文件描述符数字前加一个 &临时重定向: 例:永久重定向:exec 告诉shell在脚本执行期间重定向某个特定文件描述符。例:#exec 1>testoutexec

2018-05-16 17:25:45 420

原创 MySQL多表查询

1. 嵌套查询 主要用于顺藤摸瓜式的从另一张表查出本表某些字段的具体的值。 例如,Dept表只有部门编号,如果想要查出部门的名称就要使用另一张表(Emp)。- 2.内联结查询笛卡尔积。(a,b)×(1,2)= (a1,a2,b1,b2)如果将表看做集合,每个元素就是一个记录,则表和表的笛卡尔积就是记录×记录的组合。多表查询的内联结查询通常要生成笛卡尔积然后再加上条件约...

2018-05-15 23:29:03 261

原创 《Linux命令行与shell脚本编程大全》笔记一

第一章 初始 Linux shellLinux内核主要四种功能:1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理shell:交互工具。第三章 基本的bash shell 命令1.man:查系统手册。2.cd:切换目录。绝对文件路径:从“\”目录开始访问路径。可用 pwd 查看当前目录绝对路径值。相对文件路径:从当前目录开始,路径不以“...

2018-05-14 22:24:39 2837

原创 数据库的三大范式3NF

NF是normal form,是数据库设计的原则。1、1NF要求每个字段都是原子不可分的。假如学校要建立一个所有学生信息的数据库,有一个字段是学生的家庭住址。字段如下: 中国湖南省邵阳市隆回县顺子镇王炸村1号。这个字段可以切割成4个字段:国籍,省份,市,具体地址2、2NF要求每张表都要有一个主键,其它记录完全依赖主键。例如,如果花名册里只有名字,没有学号,则重...

2018-05-10 21:25:38 12730

原创 MySQL数据的基本操作

一、MySQL数据库比较普遍使用的一种数据库,是一种开源的关系型数据库。1.数据库的常用概念字段:相当于excel表里的列。 记录:一行称为一条记录。2.mysql数据库的安装和启动mysql是一种C-S架构型的数据库,服务器存放数据,客户端对服务器的数据进行SQL操作,两者使用socket通信。服务器一般用文件来存放数据,Linux系统下服务器的数据具体位于/var/l...

2018-05-10 21:18:54 272

原创 抓包工具tcpdump的常见用法

常用选项: -s :指定监听的数据包大小。 -c:指定要抓取的包的最终数量。 -i:指定tcpdump要监听的接口。 -n:对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。 -nn:除了-n之外,还把端口显示为数值。 -w:指定监听数据包写入文件。常用输出项: -XX:以16进制和ASCII方式输出包的头部数据。 -vvv:很详细的输出(想要详细的信息加...

2018-05-09 23:21:50 1595 1

原创 简易实现unique_ptr智能指针

c++11的unique_ptr智能指针: 一旦创建,就指向那块内存,以后再也不能让其它的智能指针指向同一块内存。 这个指针实现比较简单,只需定义一个类的实例时,自己类内部删除拷贝构造函数和删除赋值运算符重载函数就可以了。#include <iostream>using namespace std;template<typename T>class muniq...

2018-05-08 21:14:45 1283 2

原创 简易实现shared_ptr智能指针

shared_ptr智能指针与auto_ptr智能指针不同的是,拷贝构造或赋值后,原来的指针仍然能够使用。 原因是这种指针用一个引用计数来计算有多少个指针指向同一个空间,拷贝构造和赋值,都会让计数+1,智能指针析构的时候计数-1,计数为0才释放内存。所以根据这几点可以自己实现shared_ptr智能指针的功能。#include <iostream>using namespa...

2018-05-08 21:07:00 744 1

原创 简易实现auto_ptr智能指针

智能指针能够自动释放动态内存的指针。主要的机制就是用一个类来将指针包裹起来,然后在类的实例析构的时候自动释放内存。今天自己实现C++标准库的传统的auto_ptr智能指针。如果不是自己编写的智能指针,运行时要加 -std=c++11选项,因为c++11标准里定义了智能指针。#include <iostream>using namespace std;template&lt...

2018-05-08 20:54:58 238

原创 线程池的实现(Linux系统)

一、线程池 一开始就创建多个线程,让它们一直存活。一旦有任务就直接交给线程去执行。线程执行完任务后回到线程池也不销毁。二、实现借助第三者来传递任务。发布任务的人不要知道由谁来执行。执行任务的人不要知道谁发布的,第三者就是一个队列。发布任务的人将任务插到队列(进入队列尾部),线程从队列中取出第一个节点,然后执行任务。任务用函数和参数描述,使用函数指针和一个参数来保存。#includ...

2018-05-07 23:14:14 216

原创 内存映射实现文件拷贝

文件描述符文件描述符用来识别一个打开的文件,文件的修改读写关闭等等都以文件描述符为依据。它是一个非负整数。在用open函数打开文件后,返回一个文件描述符。 open如果失败,则返回-1。因此通常用fd==-1来判断是否打开失败。保留的文件描述符一般会保留3个文件描述符,0—标准输入端,1—标准输出端,2—标准错误端。 如果关闭这其中的一个,则新打开的文件的描述符就是被关...

2018-05-07 22:51:45 1425

原创 系统大小端模式的判定及转换

系统的存储模式有两种:大端模式,和小端模式 大端模式:(Big_endian):字数据的高字节存储在低地址,低字节存储在高地址 小端模式:(Little_endian):字数据高字节存储在高地址,低字节存储在低地址举例子说明一下: 如果a=0x12345678,大端模式输出a 为0x78564321 小端模式输出 0x12345678#include <stdio.h&...

2018-05-06 21:57:34 467

原创 哈希表(解决循环冲突链表问题)

哈希表 哈希表是基于数组的顺序结构,每一个存储目标都会存在一个key值,哈希表也称为散列表。为解决冲突问题(多个目标用hash函数计算出相同的位置),本代码用了拉链法,另外本代码还解决了字符串插入哈希表循环冲突拉链的问题。#include <stdio.h>#include <stdlib.h>#include <string.h>#de...

2018-05-06 21:06:46 2218 1

原创 树的深度和广度遍历

#include <stdio.h>#include <stdlib.h>#include <assert.h>#define MAX_SIZE 100 //队列的最大容量/*树:树是一种自定义结构.由n(n>0)个节点组成,有且只有一个节点作为树根.n-1个节点组成一个子树.树是一种递归定义.节点为0的树称为空树树节点由存储数据和指向其...

2018-05-06 20:18:49 5324

原创 无向图邻接表

#include <stdio.h>#include <stdlib.h>#define MAX_POINT_NUM 10 //最大顶点数/*图存储方法:1.邻接矩阵(有向图)2.邻接表3.多重邻接表3.十字交叉链表(有向图)*///下面是无向图邻接表的实现的方法//邻接节点类型typedef struct arcnode{ i...

2018-05-06 19:52:43 14560

原创 有向图邻接矩阵

图:是一种线性结构,由n个点和m条边组成,任意两个点之间可以用连线连接.#include <stdio.h>#include <stdlib.h>#define MAX_VALUE 8888 //初始化数组的默认值,相当于无限大#define MAX_POINT_NUM 10 //最大顶点数typedef int matrix[MAX_POINT...

2018-05-06 18:39:04 40800 3

原创 内存泄露账本(内存泄漏信息检测与输出并处理)

/* 系统给定mallo free 函数只负责内存分配与释放,并没有记录分配信息.通过自定义实现增加记账的作用,记账信息体是一个结构体。根据账本信息列出内存泄漏的内存的起始地址,占用字节大小,并处理那块内存。 */#include <stdio.h>#include <string.h>#include <stdlib.h>#define N...

2018-05-06 16:15:37 198

原创 非递归实现树的前序遍历和中序遍历

//这就要用栈来实现 #include <stdio.h>#include <stdlib.h>#include <assert.h>#define MAX_SIZE 100 //栈的最大容量/*访问二叉树三种方式:1.前序遍历:根 左 右2.中序遍历:左 根 右3.后续遍历:左 右 根*///定义树的节点typedef str...

2018-05-06 15:56:37 218

原创 堆排排序

堆排序的时间复杂度为O(nlogn) 构建堆的过程的时间复杂度为n,调堆的时间复杂度为logn#include<stdio.h>//大堆:根节点大于左右节点void Swap(int *a,int *b){ int tmp=*a; *a=*b; *b=tmp;}//调整最大堆 我的大堆下标是从0开始void adjust_max_heap(...

2018-05-06 11:53:47 151

原创 希尔排序

随便找了一张百度百科的希尔排序的词条图片: 该图片很好的说明了希尔排序的排序原理过程,根据该原理可以写出以下代码:#include<stdio.h>void sort(int * array,int length){ int i; int j; int k; for(i=length/2;i>0;i=i/2) { ...

2018-05-06 11:14:30 129

原创 归并排序

#include<stdio.h>//归并:把集合拆分成n个有序子集,再合并n有序子集//稳定排序,时间复杂度:(n*log2 n)void merger_sort(int * ptr_array1,int length1,int * ptr_array2,int length2){ int ptr_array[length1+length2]; int ...

2018-05-06 10:50:32 104

原创 《C陷阱与缺陷》笔记

第一章 词法“陷阱” 1.1 =和==的区别及注意事项 =是赋值运算,而==是条件判断符号,很多程序员在条件判断时,往往容易把==写成=号,例如: while(c = ’ ‘||c == ‘\t’ || c ==’\n’) c=getc(f); 此时,因为赋值运算=的优先级低于逻辑运算符号,实际是将以下表达式的赋给c: ’ ‘|| c == ‘\t’...

2018-05-05 11:28:56 299

原创 《checklist编程规范》笔记

简单的总结一下C编码风格: 第一章 排版1.1 缩进整个项目中要么4个空格缩进,要么一个TAB键缩进,不允许混用。TAB键要保证宽度是4个空格缩进要求:if else case for while语句要缩进,{ }要缩进,extern “C”,namespace 块、case除外空格使用:1.关键字if else swi...

2018-05-05 11:08:34 1311

原创 《C和指针》笔记

第一章 快速上手总结:1.所有C程序必须有一个main函数,它是程序执行的起点。2.printf函数执行格式化输出,scanf用于格式化输入,getchar和putchar分别执行非格式化字符的输入和输出。3.从逻辑上删除一段C代码,更好的办法是用#if指令。 例:#if 0 /* 代码*/ #endif4.C语言中,数组参数是传址调用,而标量和常量是按...

2018-05-05 11:03:12 957

原创 快排排序

/*快排(折半排序):从左右两边交叉获取待排序数据,与一个数比较,大放在该数右边,小的放在该数左边.重复按照上述方法进行. 时间复杂度:O(n*log2 n) */#include<stdio.h>#include<string.h>int quick_sort_index(int * array,int left,int right){ int t...

2018-05-05 10:26:29 217

原创 位排序

//位排序:在计数 排序基础上,把字节数组折算成位数组,依然用用数组下标作为待排序数处理.根据位操作将位数组元素值1.减少计数排序空间浪费void sort(int *array,int length){ int i; int max=array[0]; for(i=0;i<length;i++) { if(max<array...

2018-05-05 10:17:38 550

原创 插入排序

//插入:每一轮将一个数插入到前面有序数中 //时间复杂度 平均O(n^2)void sort(int *array,int length){ int i,j; for(i=1;i<length;i++) { int tmp=array[i]; j=i-1; while(j>=0 && t...

2018-05-05 10:14:47 91

原创 选择排序

//选择:每一轮从数中选择一个最小的值与待排序数组中的第一个数换 //时间复杂度 平均O(n^2) void sort(int *array,int length){ int i,j; int min_pos; for(i=0;i<length;i++) { int min=array[i]; min_pos=i...

2018-05-05 10:13:08 121

原创 交换排序

//交换:第一个数与后面数一一比较,有大小交换,继续用第一个数与后面数比较.一轮之后第一个数最小 //时间复杂度 平均:O(n^2)void sort(int *array,int length){ int i,j; for(i=0;i<length;i++) { for(j=i+1;j<length;j++) ...

2018-05-05 10:10:32 106

原创 冒泡排序

//前一个与后一个比较,大的交换,继续与后一个比较,每比较一轮最大的数在最后 //时间复杂度 平均:O(n^2)void sort1(int * array,int length){ int i,j; for(i=0;i<length;i++)//控制排序轮数 { for(j=0;j<length-i-1;j++)//控制每轮比较次数 ...

2018-05-05 10:09:26 110

原创 数据结构--排序算法

算法=数据+逻辑.一个算法的好坏关键在逻辑严谨性效率高。计算如何评估算法好坏? 1.理论性评估:拟出算法随着操作数递增,评估效率一个走向 2.实际运算时间:根据设备运行所消耗具体时间值(与设备有关)理论性评估一般是从: 1.时间:执行每条指令时间函数总和,函数成时间复杂度,一般用O(n) 2.空间(内存消耗):代码 数据 动态数据 内存消耗 程序中语句执行时间函数组成: 1....

2018-05-05 10:07:35 100

空空如也

空空如也

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

TA关注的人

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