程序设计
文章平均质量分 67
程序设计 杂项
m_buddy
大表哥,还有大招吗... PS:本人所有文章均免费公开,任何收费条目请咨询平台
展开
-
二维动态数组与图的遍历
1. 二维动态数组 一般图结构创建是根据邻接矩阵的定义,采用链表的的方式实现。对于这里的邻接矩阵借鉴了存储图像数据的动态二维数组结构,他的构造和析构如下:const int num = 5;//分配空间int **array = new int* [num];for (int i=0; i<num; i++){ array[i] = new int[num];}//释放资原创 2016-01-25 22:54:47 · 935 阅读 · 0 评论 -
TCP 的超时与重传
1. TCP的管理定时器TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。对每个连接,TCP管理4个不同的定时器。1) 重传定时器:使用于当希望收到另一端的原创 2017-07-04 17:13:29 · 2085 阅读 · 1 评论 -
TCP 窗口协议
这里使用可视化展现窗口协议在上面这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口(offered window),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。由于窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个原创 2017-07-04 17:02:29 · 782 阅读 · 0 评论 -
TCP连接建立与结束(三次握手与4次挥手)
1. 概述TCP的连接建立需要进行三次的数据交互,在结束时需要进行4次的数据交互,具体的流程图如下图所示注意Seq:是发送方当前报文的顺序号码ack:是发送方期望对方在下次返回报文中给回的Seq2. 连接建立与结束2.1 连接建立建立连接需要进行三次数据传输,也就是三次握手第一次握手:客户端向服务端发送连接请求包,标志位SYN(同步序号)置为1,顺序号码原创 2017-07-04 16:57:50 · 992 阅读 · 0 评论 -
TCP半工作模式
TCP连接有两种场景分别是半打开(Half-Open)连接和半关闭(Half-Close)连接。TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相对于全双工的"全"来说的。1. 半开连接从协议定义的角度来说,TCP的半开连接是指TCP连接的一端异常崩溃,或者在未通知对端的情况下关闭连接,这种情况下不可以正常收发数据,否则会产生RST(后面内容我们在介绍RS原创 2017-07-04 16:44:55 · 1210 阅读 · 0 评论 -
TCP同时打开和同时关闭
1. 同时打开两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。每一方必须发送一个SYN,且这些SYN必须传递给对方。这需要每一方使用一个对方熟知的端口最为本地端口。当出现同时打开的情况时,状态迁移图就与标准的连接状态迁移图不一样了。两端几乎同时发送SYN并进入SYN_SENT状态。当每一端收到SYN时,状态变为SYN_RCVD,同时它们都再发SYN并对收到的SYN进行原创 2017-07-04 16:41:25 · 2537 阅读 · 1 评论 -
TCP:传输控制协议
TCP被誉为是可靠的数据传输协议,它是通过下面的方式来提供可靠性的:(1)应用数据被分割成TCP认为最合适发送的数据块。这和UDP完全不同。应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段。(2)当TCP发出一个端之后,它启动一个定时器,等待目的端确认接收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。(3)当TCP接收到发自TCP连接另一端的数原创 2017-07-03 18:17:54 · 588 阅读 · 0 评论 -
UDP:用户数据报协议
UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。这与面向流字符的协议不同,如TCP,应用程序产生的全体数据域真正发送的单个IP数据报可能没有什么联系。下图是将UDP报文封装成为一份IP数据报的格式UDP首部(8字节)格式:UDP检验和覆盖UDP首部和UDP数据。回想IP首部的检验和,他只是覆原创 2017-07-03 18:11:13 · 517 阅读 · 0 评论 -
CRC校验原理
1. CRC校验原理CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而转载 2017-07-03 18:05:31 · 466 阅读 · 0 评论 -
素数判决和素数序列生成
前言质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。1. 素数的判定方法1bool IsSushu(const int num){ if(num < 2) return false; int temp(num); for(int i=2; i<temp; ++i) { if原创 2017-07-27 10:11:00 · 990 阅读 · 0 评论 -
斐波那契数列生成
前言斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。原创 2017-07-27 10:52:10 · 1362 阅读 · 0 评论 -
Cascade R-CNN训练自己的数据
1. 前言Cascade RCNN是目标检测非常不错的一种方法,没有过分强调主干网络,而是采用层叠的方式提高IOU阈值来提纯样本,对不同的主干网络都能取得2~4个点的提升。这里使用的是Cascade RCNN example下的vgg-9s-600-rpn-cascade模型,这里的9s代表的是有9个anchor,600代表短边的尺寸,这里记录在使用这个代码训练自己的数据的过程,这里需要的目标检...原创 2019-03-07 23:07:03 · 7603 阅读 · 25 评论 -
ncnn Windows10 64bit编译配置
前言本篇博客记录在Windows10 64bit上配置Tencent ncnn的过程,这里使用的Visual Studio版本为2015,CMake-3.14。**注意:**这里配置的并不可以在VS中跟踪到cpp文件,这样的需要通过工程添加源码配置。安装参考文档:Build for Windows x64 using Visual Studio Community 2017step1: pr...原创 2019-02-19 22:46:43 · 6482 阅读 · 9 评论 -
VS2013+VTK8.1配置及演示Demo
1. 配置在上一讲中已经说过了VTK的编译,这一讲就来说说新版VTK的配置,VTK的配置和OpenCV的配置很类似,下面就用截图来详细说明1.1 包含目录 在其中添加VTK的include目录 1.2 库目录 添加配置项 1.3 Windows运行库目录这里是添加到了工程的设置里面,还是最好将其添加到系统变量里面 1.4 附加依赖库 添加原创 2018-01-15 11:20:18 · 5369 阅读 · 6 评论 -
VS2013+CMake+VTK-8.1.0编译
1. 资料准备1.1 VTK源码这里需要使用VTK的源码,可以在这里去下载对应版本的源码包。1.2 CMake去官网下载CMake Windows安装版本 2. CMake生成VS工程解压VTK的安装包到一个目录下,之后打开CMake将source code选项定位到该位置 最后点击“Configure”,选择好编译器 等待其生成完成之后,就会出现原创 2018-01-12 15:49:01 · 6143 阅读 · 5 评论 -
浏览器中网址访问过程详解
浏览器中网址访问过程详解前言当我们在浏览器中输入一个网址,比如www.google.cn,浏览器就会加载出百度的主页。那么浏览器背后完成的具体是怎么样的呢? 总结起来大概的流程是这样的: (1)浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP (2)然后通过IP地址找到IP对应的服务器后,要求建立TCP连接 (3)浏览器发送完H原创 2017-09-02 14:21:55 · 51360 阅读 · 21 评论 -
数据包在网络中漫游的经历
数据包在网络中漫游的经历在网络分层结构中,各层之间是严格单向依赖的。“服务”是描述各层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务提供者, 上层是请求服务的用户。服务的表现形式是原语(primitive),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原 语。网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。 传输原创 2017-09-02 14:27:55 · 1799 阅读 · 0 评论 -
TCP的拥塞控制
1. 网络拥塞1.1. 拥塞控制的原理概念:在某段时间,若对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种情况叫做拥塞。网络拥塞往往是由许多因素引起的,简单的提高节点处理机的速度或者扩大结点缓存的存储空间并不能解决拥塞问题。例如当某个结点缓存容量扩展到非常大,于是凡到达该结点的分组均可在结点的缓存队列中排队,不受任何限制。由于输出链路的容量和处理机的速度原创 2017-08-21 17:06:16 · 714 阅读 · 0 评论 -
TCP粘包问题
1. TCP包粘包问题的原因主机A向主机B发送两个数据包,主机B的接收情况可能是产生粘包问题的原因有以下几个:(1)应用层调用write方法,将应用层的缓冲区中的数据拷贝到套接字的发送缓冲区。而发送缓冲区有一个SO_SNDBUF的限制,如果应用层的缓冲区数据大小大于套接字发送缓冲区的大小,则数据需要进行多次的发送。(2)TCP所传输的报文段有MSS的限制,如果套接字缓冲区的原创 2017-08-21 17:19:06 · 624 阅读 · 0 评论 -
IP数据报格式详解
1. IP数据报报文格式由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首都中的源地址和目的地址都是 IP 协议地址。2. 相关字段详解①版本:占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。日前广泛使用的 IP协议版本号为 4 (即 IPv4)。IPv6 目前原创 2017-07-03 16:38:14 · 5734 阅读 · 0 评论 -
ARP 地址解析协议
1. ARP协议在网络通信中,每一台主机和路由都能了解局域网内的IP地址和MAC地址的对应关系,这是实现IP包封装(encapsulation)到帧的基本条件。IP地址与MAC地址的对应是通过ARP协议传播到局域网的每个主机和路由。每一台主机或路由中都有一个ARP cache,用以存储局域网内IP地址和MAC地址如何对应。ARP协议(ARP介于连接层和网络层之间,ARP包需要包裹在一个原创 2017-07-03 14:36:47 · 637 阅读 · 0 评论 -
MFC双缓存绘图实现
1. 前言之前有一篇博客记录了如何在MFC的视图窗口上绘制图像,但是在后来的实际运行中出现了难以忍受的显示区域闪烁现象。产生这样问题的原因是频繁刷新视图窗口,且在当绘图操作复杂度越来越高的情况下越严重。在这样的情况下就要使用双缓存技术来缓解绘图区域闪烁的情况。所谓双缓存技术就是:使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘原创 2016-11-17 09:32:19 · 5177 阅读 · 1 评论 -
使用PLSQL配置监听连接远程数据库
这里给大家分享一下使用PLSQL配置监听连接远程数据库的方法,这里不需要下载和安装完整版的Oracle客户端软件。step 1:准备需要的软件:1. PLSQL,这里提供免安装的PLSQL,直接双击启动图标就可以运行2. Instant Client,这里推荐下载32bit的软件包step 2:配置下载完成Instant Client之后将其解压到一个你拟定的目录下面,原创 2016-10-27 09:53:03 · 13418 阅读 · 0 评论 -
使用VAssistX为VS2013中C++函数添加规范注释
在VAssistX中为C++提供了比较规范注释模板,用这个注释模板为编写的C++代码添加注释是很便捷的选择,操作起来也很简单,具体方法和步骤如下:Step 1:编辑注释模板之后注释模板中编辑自己需要的注释内容:Step 2:添加注释编辑好注释模板之后将输入光标定位到需要添加注释的C++函数,然后右键进行添加这样便添加好了比较规范的注释,良好的注释原创 2016-10-26 11:34:30 · 4441 阅读 · 0 评论 -
C#项目中使用Log4net日志工具
1. Log4net使用这里我直接给出Log4net.dll的资源同大家直接使用,Log4net是很强大的日志记录工具,这里将介绍如何在C#的工程中使用它。首先,将下载好的Log4net.dll添加到你的工程目录,之后添加工程引用在工程代码中添加:using log4net; 在类中添加Log4net的对象:private ILog log = LogManag原创 2016-09-13 11:15:10 · 3984 阅读 · 0 评论 -
Ubuntu 14.04 git使用
说明:仅供参考1. 安装git安装gitsudo apt-get install git一些全局变量的初始化git config --global user.name "你的git名"git config --global user.email "你的git邮箱"查看你刚刚添加的global信息git config --list2. git添加SSH原创 2016-06-23 18:08:48 · 620 阅读 · 0 评论 -
Ubuntu vsftp搭建和C# Winform FTP操作
学生作业(个人经验仅供参考):1. Windows下虚拟机Ubuntu 14.04 搭架vsftp2. Winform下对FTP操作原创 2016-06-12 22:04:02 · 1109 阅读 · 0 评论 -
堆算法(二叉树创建、遍历)
最近看算法导论回顾了下数据结构,便用基于二叉树写了堆排序算法二叉树存储结构typedef double datatype; //数据类型取别名typedef struct HeapNode //树存储结构定义{ datatype data; //树数据域 struct HeapNode* left; //树左孩子 struct HeapNode* right; //树右原创 2016-01-07 18:27:05 · 1104 阅读 · 0 评论 -
数据结构-赫夫曼树
引言:赫夫曼编码是属于一种变长编码形式。它在压缩领域有重要的运用。可以利用二叉树来构建赫夫曼树来对信号进行编码。该树的构造思想是:对于有n个叶子节点(既是需要编码的字符数)的赫夫曼树,应该有2*n-1个结点(整个赫夫曼树的总结点数)。在树进行构造的时候输入的参数是长度为2*n-1的静态链表(类型为赫夫曼树的数据类型)首指针,该静态链表的前n个位置存放叶子结点,后面的n-1个结点存放的是分支原创 2016-01-09 21:11:30 · 694 阅读 · 0 评论 -
MFC窗口初始化的cs参数
typedef struct tagCREATESTRUCT{ LPVOID lpCreateParams; // 创建窗口的基本参数 HANDLE hInstance; // 拥有将创建的窗口的模块实例句柄 HMENU hMenu; // 新窗口的菜单句柄 HWND hwndParent; // 新窗口的父窗口句柄 int cy; // 新窗口的高度 int原创 2016-11-17 10:09:49 · 749 阅读 · 0 评论 -
在Winform窗口中为DataGridview单元格添加ComboBox
1. 前言在进行软件开发时遇到需要在DataGridView控件的单元格中添加ComboBox的需求,经过网络博客等方式查找解决办法,最后成功解决,在本文中予以记录。2. 实现首先这里需要一个动态的ComboBoxprivate ComboBox Score_ComboBox = new ComboBox();在窗体初始中设置它的基本属性和将其添加到DataGridView原创 2016-11-24 15:07:51 · 12640 阅读 · 10 评论 -
网络协议概述
这篇文章主要描述TCP/IP模型和OSI标准模型之间的关系,首先看一下在一端的应用层给另外一端的应用层发送数据,需要经过的模型层。如下图所示这张图展示了应用层数据之间传输的流程。标准的OSI模型和TCP/IP模型之间的对应关系和相关的协议是这样的下面将对TCP/IP中的层做介绍:对于TCP/IP中的各个模型的解释是这样的(1)物理层所谓的物理层,是指光纤、电原创 2017-07-03 11:12:14 · 1082 阅读 · 0 评论 -
C++实现遍历指定文件或文件夹
1. 概述在这片文章中将讲诉用C++实现实现遍历指定文件和文件夹,一个是基于Win32平台开发的,一个是基于MFC平台开发的,在这里贴出来与大家分享。在完成过程中参考了这篇博客2. 基于Win32平台开发定义的两个成员变量private: std::vector filepath; //保存图像数据的位置信息 char m_szInitDir[1000]; //初原创 2016-12-28 16:57:58 · 4079 阅读 · 0 评论 -
C++实现INI文件读写
1. 概述本文章主要参考这篇博客进行修改的,增加注释和修复了一些问题。这里给出完整的实现文件,在需要的地方包含该头文件就好了。2. 实现CMyINI.h#pragma once#include #include #include #include #include #include using namespace std;//INI文件结点存储结构clas原创 2017-01-05 19:41:23 · 15355 阅读 · 5 评论 -
列向量互信息计算
1. 概述首先信息熵的计算公式如下其中I(X)表示X的信息量注:这里对数所使用的底,通常是 2, 自然常数e,或是10。当b = 2,熵的单位是bit;当b = e,熵的单位是nat;而当 b = 10,熵的单位是dit。p(xi)是xi发生的概率英文里面叫做probability mass function,一个随机产生的事件所包含的信息本体数量,只与事件发生的机原创 2017-05-31 11:01:14 · 17741 阅读 · 31 评论 -
C# 保存表格数据到Excel
方法1这种方法需要在本机安装了Office,然后在程序中调用Windows Office的组件。 首先需要包含的空间:using Excel = Microsoft.Office.Interop.Excel;下面是导出到Excel表格的响应函数,(m_table是界面上的DataGridView控件)//导出到excel文件 private void button_ToExcel_原创 2017-05-18 16:51:11 · 11501 阅读 · 8 评论 -
理解动态规划——01背包问题
1. 概述01背包问题是很经典的动态规划问题。它的核心便是一个最大化公式其中f(i, j)前面i个商品在背包容量为j的情况下达到的最大的价值;weight[i]是第i件商品的重量;prize[i]是商品的价值。也就是在现在这个背包大小情况下在选择还是不选择当前商品中求取总价值最大化。本文中使用较为经典的方式(使用中间表)来解决该问题。这是本文中测试数据得到的中间表:原创 2017-02-19 21:16:27 · 806 阅读 · 0 评论 -
理解汉诺塔递归算法
1. 概述第一次遇见汉诺塔问题是在数据结构课本上,是一个很经典的递归算子。汉诺塔问题实际上就是要将柱子A上由小到大排列的圆环按照相同的大小顺序移动到柱子C,之间的过程可以使用柱子B。这个问题使用递归和归纳的思想来思考的话就很容易理解了。下面这货就是汉诺塔了其递归的归纳思想是这样的:(1)首先,当只有一个盘子的时候只需要将A上的1号盘子移动到C上就行了(2)当有2个盘子在原创 2017-02-19 20:37:15 · 2276 阅读 · 0 评论 -
VS下TinyXml使用
1. 概述TinyXml是C++平台下简单易用的XML操作工具,可以从SourceForge上下载到最新版本的软件。记录TinyXml的基本使用。2. 使用step1:下载TinyXml之后得到一个压缩包文件,解压文件得到TinyXML的代码文档等。step2:在vs的工程中添加下面6个文件,并且在cpp文件中添加#include "stdafx.h"step3:在原创 2016-12-28 17:22:52 · 1329 阅读 · 0 评论 -
Cascade R-CNN Python测试脚本
代码地址# -*- coding=utf-8 -*-import osimport sysimport argparseimport numpy as npfrom PIL import Image, ImageDrawimport cv2import timecaffe_root = '/home/xxxxx/codes/cascade-rcnn'sys.path.inser...原创 2019-04-02 09:06:42 · 1285 阅读 · 6 评论