自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

月已满西楼的博客

专注编程,专注解决各类编程难题

  • 博客(34)
  • 资源 (7)
  • 收藏
  • 关注

原创 day10 tcp状态转换

tcp状态转换图如下: 主动端是实线。被动端是虚线 主动关闭链接: 被动关闭链接 CLOSED:表示初始状态。 LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。 SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT状态,并等待服务端的发送三次握手

2017-05-31 20:37:03 355

原创 最长递增子序列

问题描述  在数字序列A中,按下标递增的顺序选出一个子序列B,如果选出的子序列B是严格递增的,则该子序列B称为原数字序列A的递增子序列。最长递增子序列问题就是找到原数字序列A中最长的递增子序列。例如数字序列{ 2, 1, 5, 3, 6, 4, 8, 9, 7 }的一个最长递增子序列为13489解题思路:  动态规划函数为:       L(i) = 1,        i = 1或者不存在

2017-05-31 17:11:03 438

原创 需要排序的最短子数组长度

题目: 给定一个无序数组,求出需要排序的最短子数组的长度。 例如:arr={1,5,3,4,2,6,7}返回4,因为只有[5,3,4,2]需要排序。思路:  解决这个问题可以在时间复杂度为O(N)、额外空间复杂度为O(1)完成。  初始化变量noMinIndex=-1,从右向左遍历,便利的过程记录右侧出现过的数的最小值,记为min。假设当前数为arr[i],如果arr[i]>min,

2017-05-31 15:30:08 431

原创 之字形打印矩阵

题目:  给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵。例如:    1   2   3   4     5   6   7   8    9  10  11  12  “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12  要求额外的空间复杂度为O(1)。解题思路:上坐标(tR,tC)的初始为(0,0),先沿着矩阵的第一行移动(tC++),当

2017-05-30 10:36:09 518

原创 day10 socket编程高并发服务器

高并发服务器多线程并发服务器使用多进程并发服务器时要考虑以下几点:父进程最大文件描述个数(父进程中需要close关闭accept返回的新文件描述符)系统内创建进程个数(与内存大小相关)进程创建过多是否降低整体服务性能(进程调度)server.c/* server.c */#include <stdio.h>#include <string.h>#include <netinet/in.

2017-05-29 19:43:10 414

原创 day9协议上限分析

day9协议上限分析

2017-05-28 20:40:02 570

原创 day9TCP三次握手四次握手

为什么会有TCP三次握手 IP:网络层不稳定,硬件联系紧密,一旦路由器出现问题数据不能到达, 传输层 对不稳定的网络层完全不弥补–>UDP—无连接不可靠报文传输;对不稳定的网络层完全弥补–>TCP—面向连接的可靠数据包传递。 在发数据之前先建立通路。—建立连接的过程就是三次握手TCP通信时序下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。SYN标志位

2017-05-28 20:17:36 498

原创 day8 socket编程CS模型完善错误处理

client.c/************************************************************************* > File Name: client.c > Author: sunxingying > Mail: 1159015605@qq.com > Created Time: 2017年05月24日 星期三

2017-05-26 21:04:28 442

原创 网络编程day7socket编程

client  client.c的作用是从命令行参数中获得一个字符串发给服务器,然后接收服务器返回的字符串并打印。/************************************************************************* > File Name: client.c > Author: sunxingying > Mail: 11590

2017-05-24 21:28:06 432

原创 day6-socket编程C/S模型

C/S模型-TCP下图是基于TCP协议的客户端/服务器程序的一般流程: server.c socket() 建立套接字 bind() 绑定IP 端口号 (struct sockaddr_in addr 初始化) listen() 指定最大同时发起连接数 accept() 阻塞等待客户端发起连接 read() 小–大 write 给 客户端 clo

2017-05-22 21:55:16 864

原创 c++返回类型协变

在C++中,只要原来的返回类型是指向基类的指针或引用,新的返回类型是指向派生类的指针或引用,覆盖的方法就可以改变返回类型。这样的类型称为协变返回类型(Covariant returns type).返回类型协变覆盖要求函数具有完全相同的入参。一般覆盖具有相同的返回值,否则会提示错误virtual double area ()const = 0;virtual float area ()const

2017-05-22 15:25:26 1809

原创 day6-socket编程-函数

sockaddr数据结构  strcut sockaddr 很多网络编程函数诞生早于IPv4协议,那时候都使用的是sockaddr结构体,为了向前兼容,现在sockaddr退化成了(void *)的作用,传递一个地址给函数,至于这个函数是sockaddr_in还是sockaddr_in6,由地址族确定,然后函数内部再强制类型转化为所需的地址类型。   struct sockaddr_in addr

2017-05-22 11:25:28 421

原创 AVL树插入小结

一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:  1. 它的左右子树都是AVL树  2. 左子树和右子树高度之差(简称平衡因子)的绝对值不超过1(-1、0、1)   如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在O(lgn),平均搜索时间复杂度O(lg(n))   在二叉搜索树中,我们知道要插入一个元素,必须将他插到合适的位置,但是在AVL树

2017-05-22 10:19:55 880

原创 计网笔记之打洞机制和socket编程

打洞机制图解: 套接字概念  Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。 既然是文件,那么理所当然的,我们可以使用文件描述符引用套接字。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作一致。区别是管道主要应用于本地进程间通信,而套接字多应用于网络进程间数据的传递。

2017-05-21 21:19:47 1006

原创 计算机网络学习day5

UDP数据报格式 下面分析一帧基于UDP的TFTP协议帧。以太网首部0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00IP首部0000: 45 000010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a80020: 00 01UDP首部0020: 05 d4 00 45 00 3f ac 4

2017-05-19 18:14:27 261

原创 计算机网络学习笔记day4

协议的概念什么是协议       从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。 假设,A、B双方欲传输文件。规定:   第一次,传输文件名,接收方接收到文件名,应答OK给传输方;   第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;   第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。   由此,无论A、B

2017-05-18 20:57:45 376

原创 二叉树的创建和递归与非递归遍历

二叉树的创建//index要给引用!!! void _Create(Node *&pRoot,T *arr,T invalid,size_t sz,size_t &index) { if (arr[index] != invalid&&index < sz) { pRoot = new Node(arr[index]);

2017-05-18 09:56:16 606 2

原创 计算机网络学习笔记day3

计算机网络的体系结构: 法律上的(de jure)国际标准 OSI 并没有得到市场的认可。 是非国际标准 TCP/IP 现在获得了最广泛的应用。 TCP/IP 常被称为事实上的(de facto) 国际标准。  计算机网络中的数据交换必须遵守事先约定好的规则。   这些规则明确规定了所交换的数据的格式以及有关的同步问题(同步含有时序的意思)。网络协议(network pr

2017-05-17 21:18:26 501

原创 条款18:让接口容易被正确使用,不容易被误用

“最好的情况,就是如果客户企图使用某个接口而却没有获得预期的行为,这个代码就不应该通过编译;如果代码通过了编译,它的作为就该是客户想要的。”   所以在接口设计时,应该从用户的角度出发,考虑用户会犯什么错误:   class Date { public: Date(int m, int d, int y):day(d),month(m),year(y){} private

2017-05-17 19:57:33 694

原创 条款17以独立语句将new置入智能指针

使用智能指针可以防止内存泄露,但是在使用时也要注意以下问题void func1(){} void func2(tr1::shared_ptr<int> p,void f()){} int main() { func2(tr1::shared_ptr<int> (new int(10)),func1); return 0; } 我们能够确定,编译器会做3件事:

2017-05-13 16:57:02 410

原创 计算机网络学习笔记day2

吞吐量:吞吐量(throughput)表示在单位时间内通过某个网络(或信道、接口)的数据量。吞吐量更经常地用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。吞吐量受网络的带宽或网络的额定速率的限制。传输时延:传输时延(发送时延 ) 发送数据时,数据块从结点进入到传输媒体所需要的时间。 也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间

2017-05-13 11:21:40 534

原创 new与delete原理解析

new和delete最终调用malloc和free,关于malloc和free实现原理参见这篇文章:http://blog.csdn.net/passion_wu128/article/details/38964045 new new操作针对数据类型的处理,分为两种情况: 1,简单数据类型(包括基本数据类型和不需要构造函数的类型) 代码实例:int* p = new int; 汇编码如下:

2017-05-12 17:00:02 721

原创 条款16:成对使用new和delete时要采取相同的形式

int* parr = new int[5];//分配的是一个数组 delete[] parr; int* pval = new int(5);//分配的是一个变量 delete pval; 与此相伴的一个问题是:如果一个人typedef了一个数组,那么在new和delete时就要小心了:typedef int ARRAY[4]; int* pArray = new ARRAY;

2017-05-12 16:41:44 422

原创 计网学习笔记day1

1.Internet :互联网 internet: 因特网 2.ISP因特网服务提供商(internet service provider) 用户通过ISP实现上网   根据提供服务的覆盖面积大小以及所拥有的IP 地址数目的不同,ISP 也分成为不同的层次。   从因特网的工作方式上看,可以划分为以下的两大块:   (1) 边缘部分 由所有连接在因特网上的主机组成。这部分是用

2017-05-10 21:23:27 510

原创 智能指针之scopedptr

话不多说直接上代码:#include<iostream>using namespace std;#include<cassert>template<class T>class Scopedptr{public: Scopedptr(T* ptr = nullptr) :_ptr(ptr) {} T *operator->() { retur

2017-05-10 20:26:55 821

原创 条款13:以对象管理资源

我们都知道,当new一个东西之后,必须delete它。但是问题可能出现在在new和delete之间:比如中间出现了异常,或者return之类的。一种比较好的作法是通过对象来管理:因为当对象的声明周期结束以后,会调用析构函数,而在析构函数中delete,这样的作法就靠谱多了。 其实就是使用智能指针

2017-05-10 20:12:47 361

原创 条款12:复制对象时勿忘其每一部分

复制对象时要把对象的每一部分都赋值到位,尤其在有基类的时候容易遗漏复制  #include<iostream>using namespace std;class Date{public: Date(int d = 1, int m = 1, int w = 1) :day(d), month(m), weekday(w) { cout << "基类构造函数"

2017-05-10 20:01:51 326

原创 条款10 令operator=返回一个reference to *this

显而易见 令赋值运算符返回一个引用有利于表达式连续赋值,其他需要连续操作的函数也如此,有一点需要注意,一般重载赋值运算符时,要记得判断是否是自己给自己赋值。

2017-05-08 21:16:44 312

原创 条款9:绝不在构造和析构过程中调用virtual函数

先看一段代码#include<iostream>using namespace std;#include<string>class Base{public: Base(int val = 0) { fun(); } ~Base() { cout << "基类析构函数" << endl; } virtu

2017-05-08 21:10:43 491

原创 条款7:为多态基类声明virtual析构函数

一般来讲如果基类类对象里如果申请了空间,基类对象的析构函数就应该声明为virtual析构函数,否则容易造成内存泄露。   举个栗子:   #include<iostream>using namespace std;class Base{public: Base(){ cout << "base 构造" << endl; } // virtual ~Base(){cout

2017-05-08 20:46:59 516

原创 条款6:若不想使用编译器自动生成函数,就该明确拒绝

前面我们已经知道,编译器会默认为我们合成六个成员函数分别是:构造函数、拷贝构造函数、析构函数、赋值运算符重载、取地址运算符重载、const取地址运算符重载。   那么如果我们如果不想要编译器为我们自动生成某些函数(尤其是复制和赋值构造函数)应该怎么办呢?   有一个简单的办法,就是将这个两个函数声明放在private中,而不去定义它们。这样,类的用户无法直接对这个类的对象进行赋值和复制。而且,因

2017-05-08 20:24:15 658

原创 定位new表达式

在cpp中,new主要有3种用法:实例化一个对象;实例化一个数组;定位new表达式。在这里主要讨论第三种用法,定位new表达式 定位new表达式是在已分配内存空间中调用构造函数初始化一个对象。new(空间地址)类型名;new(空间地址)类型名(初始化列表); 详情见代码:#include<iostream>using namespace std;class Array{public

2017-05-06 10:53:10 380

原创 effective c++条款5 了解编译器默认编写那些函数

一个空类里面都默认包含那些函数 . 构造函数 · 拷贝构造函数 . 析构函数 . 赋值操作符重载 . 取地址运算符重载 . const取地址运算符什么条件下编译器不会默认合成赋值操作符重载,和默认构造函数 . 当成员变量包含const成员变量时,因为const成员变量只能被在初始化列表初始化,不能被赋值,所以也不会合成默认构造函数 . 当成员变量包含引用时,因为引用只能引用一个实体

2017-05-06 10:20:47 394

原创 缓冲区

缓冲区分为三种分别是:全缓冲、行缓冲和无缓冲 1. 全缓冲:当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写 2. 行缓冲:在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O(流)操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。 3. 无缓冲:不进行缓冲,标准出错情况stderr是典型代表,这使

2017-05-06 08:54:23 489

qt的开源项目源码

qt的开源项目源码qt的开源项目源码qt的开源项目源码qt的开源项目源码

2018-07-18

qt源码 最好用的源码

qt源码 最好用的源码 qt源码 最好用的源码 qt源码 最好用的源码

2018-07-12

qt教程 qt高级

qt c++高级编程 c++ gui编程qt c++高级编程 c++ gui编程qt c++高级编程 c++ gui编程

2018-07-10

STL源码剖析-侯捷 里的源码 可用版

STL源码剖析 可用版 有工程直接可以运行 献给想要剖析源码的同学

2018-05-11

k-近邻算法 python可用版

k-近邻算法 python可用版 直接可以用,我的博客里也有相关教程,欢迎关注

2018-05-11

matlab视频图像去雾算法

matlab视频图像去雾算法 基于gui界面的,可更改代码,我的博客里也有相关教程

2018-05-11

密码学MFC实现仿射加密解密超级计算器源码

给大家送福利咯

2017-03-18

空空如也

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

TA关注的人

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