- 博客(77)
- 资源 (40)
- 收藏
- 关注
原创 TCP协议详解
TCP连接的建立正常情况下需要三次握手,断开正常情况下需要四次挥手;文章中介绍了TCP的特殊名词,各种标志位、状态解释及状态变迁图;重点介绍了TCP协议可靠性保障的原因,逻辑清晰的总结了TCP协议重传、流量控制和拥塞控制策略等;
2016-10-23 13:27:03
6181
1
原创 Unity3D控制人物移动跳跃,处理CharacterController的isGrounded总是返回false问题
在Unity3D中控制人物移动的方法很多,可以使用transform.Translate方法,但为了不穿越其他物体,需要使用刚体rigidbody。还可以使用角色控制器,角色控制器是自带刚体Rigidbody和碰撞器Collider的,移动可以使用CharacterController组件。在使用CharacterController组件实现跳跃时,需要检测人物是否在地面上,Character
2016-05-10 09:35:13
24909
3
原创 C#学习笔记
1、C#变量命名可以以邮件符@开头2、C#中字符串值可以@开头,如此该字符串则是逐字指定的字符串,两个双引号中的任意字符都作为字符串处理,特殊字符也不需要转义,但是双引号需要,否则会被视为字符串的结束。如:"asdasd:item1item2"3、C#支持goto语句4、C#的switch语句不允许从一个case的
2016-05-07 00:26:09
3639
原创 Spring Transaction template 事务模板
http://jinnianshilongnian.iteye.com/blog/1441271Nested:嵌套事务支持,使用PROPAGATION_NESTED指定,如果当前存在事务,则在嵌套事务内执行,如果当前不存在事务,则创建一个新的事务,嵌套事务使用数据库中的保存点来实现,即嵌套事务回滚不影响外部事务,但外部事务回滚将导致嵌套事务回滚Nested和Re
2016-05-07 00:24:37
1635
原创 Spring AOP原理
一、AOP(Aspect Oriented Programming)是Spring框架的核心技术之一,要理解AOP,先理解一些基本概念。*横切关注点(Cross-cutting concerns):*在软件开发中,分布于应用中多处的相同功能,例如:日志、安全和事务管理等,它们都是贯穿在软件的各个功能模块的,但又不是各功能模块的核心功能。*切面(Aspect):*横切关注点可以被模块
2016-05-07 00:21:34
4062
原创 Spring bean的初始化和销毁
另外一个方法让bean实现Spring的InitializingBean和DisposableBean接口,InitializingBean的afterPropertiesSet()和DisposableBean的destroy()方法分别会在bean初始化和移除应用上下文时被调用,这样Spring容器就会让它们在Bean的生命周期中被调用。如果许多bean都需要设置相同的初始化和销毁方法
2016-05-07 00:20:05
1151
原创 Spring bean的三种注入方式
Spring的一个重要原理就是IOC(Inverse Of Control),即控制反转。IOC就是一种将组件依赖关系的创建和管理置于程序外部的技术,在Spring中Bean组件的实例化和依赖关系的管理控制都由Spring容器负责,对象与对象之间的关系可以简单的理解为对象之间的依赖关系:在 类 A 需要类 B 的一个实例来进行某些操作时,比如在类 A 的方法中需要调用类 B 的方法来完成功能,叫做
2016-05-07 00:17:30
6097
原创 Spring bean的三种创建方式
1、创建Spring工程使用eclipse创建一个Spring工程,一个简单的方法就是先创建一个Java工程,然后将Spring的Jar包全部放入到工程里面即可开始编写基于Spring框架的程序。Spring的Jar包可以从github上的源码中取得,下载地址是:https://github.com/spring-projects/spring-framework。下面是在学习《S
2016-05-07 00:12:52
9384
原创 Spring 简介
在1996年,Java语言兴起之时,因其Applet可以创建富客户端和动态的Web应用而受到广泛关注。然而Java语言因Applet而来,却是因组件化而留,因为Java可以使用模块化编程,从而用于构建复杂系统。后来,Sun公司发布了JavaBean主要用于构建用户界面窗口部件。随后,Sun又发布了EJB,提供了企业级服务,但是EJB却并没有使得企业级应用开发变得简单,反而使代码实现变得异常复杂。随
2016-05-07 00:10:27
4405
原创 进程、线程以及CPU调度
一、进程概念进程是执行中的程序,形成所有计算的基础。更完整的解释是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。二、进程状态进程有五种状态,分别是:新的:进程正在被创建运行:指令正在被执行等待:进程等待某个事件的发生
2015-11-15 00:13:06
10634
原创 CentOS系统下Hadoop、Hbase、Zookeeper安装配置
最近两天给一个项目搭建linux下的大数据处理环境,系统是CentOS 6.3。主要是配置JDK,安装Tomcat,Hadoop、HBase和Zookeeper软件,本人在Hadoop这方面也是新手,配置这个环境遇到过许多问题,查了许多资料,这里做一个总结,以便日后回顾。首先是账户权限的修改,安装软件环境需要上传文件和一些系统文件的修改权限,所以最好设置成root权限权限修改方法:http
2014-10-17 21:02:04
2382
原创 AVL树(平衡二叉查找树)
1、AVL树的定义平衡二叉查找树,又称作AVL树(以提出此树的两人人名命名的),AVL树是一种高度平衡的二叉查找树,它或者是一颗空树,或者是具有下列性质的二叉查找树:(1)它的左子树和右子树都是平衡二叉查找树(2)它的左子树和右子树的深度差的绝对值不超过1将二叉树上的节点的左子树的深度减去右子树的深度的值定义为节点的平衡因子,因此平衡因子的值只可能是:-1、0 和 1。
2014-09-13 20:47:39
1535
原创 算法导论 第13章 红黑树(图文详细解说)
二叉查找树的基本操作包括搜索、插入、删除、取最大和最小值等都能够在O(h)时间复杂度内实现,因此能在期望时间O(lgn)下实现,但是二叉查找树的平衡性在这些操作中并没有得到维护,因此其高度可能会变得很高,当其高度较高时,而二叉查找树的性能就未必比链表好了,所以二叉查找树的集合操作是期望时间O(lgn),最坏情况下为O(n)。红黑树也是一种二叉查找树,它拥有二叉查找树的性质,同时红黑树还
2014-08-27 23:36:18
2918
1
原创 算法导论 第12章 二叉查找树
二叉查找树是一种树数据结构,它与普通的二叉树最大的不同就是二叉查找树满足一个性质:对于树中的任意一个节点,均有其左子树中的所有节点的关键字值都不大于该节点的关键字值,其右子树中的任意一个节点的关键字值都不小于该节点的关键字值。在二叉查找树上可以进行搜索、取最小值、取最大值、取指定节点的前驱、取指定节点的后继以及插入和删除节点操作,因此二叉查找树和堆(大顶堆和小顶堆)一样,也可以做优先队列,都能够在 O(lgn) 的时间内取得集合的最大值和最小值。一个二叉查找树的期望高度为O(lgn),因此在二叉查找树上的基
2014-08-27 00:52:59
2093
原创 算法导论 第11章 散列表
散列表是主要支持动态集合的插入、搜索和删除等操作,其查找元素的时间在最坏情况下是O(n),但是在是实际情况中,散列表查找的期望是时间是O(1),散列表是普通数组的推广,因为可以通过元素的关键字在数组对元素进行直接定位,所以能够在O(1)时间内访问数组的任意元素。
2014-08-26 12:03:05
1615
原创 模式匹配 KMP算法详解
/* * KMP 模式匹配算法 */#include #include using namespace std;/* * 计算模式串的next数组 * 模式串既做主串,又做模式串,进行匹配 * 时间复杂度为O(m),m为模式串的长度 */void countNext(char* strPattern, int len, int* next){ int i = 0, j
2014-08-25 16:48:13
1244
原创 基础数据结构 链表、栈、队列
数据结构是程序设计中一个非常重要的部分,基本的数据结构包括链表、栈和队列,当然高级一点的还有树、图等,实际上链表、栈和队列都是线性表,只是在操作和表示方式上有所不同,线性表用顺序结构表示就是顺序表,用链结构表示就是链表,如果对线性表的操作加以限制,只能有在表尾进行插入和删除元素,这就变成栈了,如果只能允许元素从表尾插入,表头删除,这就变成队列了。链表/* * 数据结构 链表 *
2014-08-24 19:15:44
1938
1
原创 排序算法小结
经典的排序算法有十种,分别是:选择排序、插入排序、希尔排序、冒泡排序、堆排序、合并排序、快速排序、计数排序、基数排序和桶排序。下面对这些算法分类如下:选择排序:简单选择排序、堆排序插入排序:直接插入排序、二分插入排序、希尔排序快速排序:快速排序、随机化快速排序线性时间排序:计数排序、基数排序、桶排序其他:冒泡排序、合并排序这些排序排序算法的时间复杂度,稳
2014-08-20 14:40:40
1037
原创 算法导论 第9章 中位数和顺序统计学(线性时间选择算法)
/* * 算法导论 第九章 中位数和顺序统计学 * 线性时间选择元素 */#include #include using namespace std;int minimum(int *arr, int len);int randomizedSelect(int *arr, int p, int r, int i);int randomizedPartition(int *ar
2014-08-18 18:18:28
2910
原创 算法导论 第8章 线性时间排序(计数排序、基数排序、桶排序)
/* * 算法导论 第八章 线性时间排序 * 计数排序、基数排序和桶排序 */#include #include #include #include using namespace std;void printArray(int arr[], int len, char *str){ cout << str << endl; for (int i=0; i<len; i
2014-08-11 22:14:10
1449
原创 算法导论 第7章 快速排序
快速排序在最坏情况下的时间复杂度为O(n^2),虽然在最坏情况下运行时间比较差,但是快速排序通常是用于排序的最佳选择,因为其平均性能相当好,期望的运行时间为O(nlgn),且在O(nlgn)的记号中隐含的常数因子很小。快速排序和合并排序有相似之处,都是需要划分序列,在合并排序中,划分的过程很简单,直接选择元素序列的中间位划分位置,排序是在合并的过程中实现的,所以合并排序的合并过程很重要;相比合
2014-08-10 14:13:32
1633
原创 算法导论 第6章 堆排序(简单选择排序、堆排序)
堆数据结构实际上是一种数组对象,是以数组的形式存储的,但是它可以被视为一颗完全二叉树,因此又叫二叉堆。堆分为以下两种类型:大顶堆:父结点的值不小于其子结点的值,堆顶元素最大小顶堆:父结点的值不大于其子结点的值,堆顶元素最小堆排序的时间复杂度跟合并排序一样,都是O(nlgn),但是合并排序不是原地排序(原地排序:在排序过程中,只有常数个元素是保存在数组以外的空间),合并排序的多有元素都被
2014-08-05 22:03:46
1324
原创 算法导论 第2章 算法入门(直接插入排序、希尔排序、冒泡排序、合并排序)
本章主要是算法知识的基础讲解,介绍了循环不变式,几个简单的排序算法,递归分治算法等内容。1、循环不变式循环不变式主要用来说明算法的正确性,那么什么是循环不变式呢,其实就是在循环过程中,一些元素数据必须保持的一些性质,例如在插入排序中,数组为A,必须保证三个性质:(1) 初始化:在循环开始之前,循环不变式是成立的,即:A[0]是有序的,A[1...n-1]是无序的。(2) 保持:在循
2014-08-05 15:07:31
1453
原创 USACO Section 2.2 Party Lamps
/*ID: lucien23PROG: lampsLANG: C++*//* * 此题的技巧之处就是需要注意到任何button只要按下2的倍数次就相当于没有按 * 所以其实只需要考虑4个按钮,每个按钮是否被有效按下过一次就好 * 直接使用枚举法,一共只有2^4=16种情况 * 对于每种情况需要知道被按下的有效次数(也就是被按下过的按钮数),必须满足 * (C-有效次数)%2=0
2014-08-04 15:13:27
1157
原创 USACO Section 2.2 Runaround Numbers
/*ID: lucien23PROG: runroundLANG: C++*/#include #include #include using namespace std;int main(){ ifstream infile("runround.in"); ofstream outfile("runround.out"); if(!infile || !outfil
2014-08-04 13:32:08
1089
原创 USACO Section 2.2 Subset Sums
/*ID: lucien23PROG: subsetLANG: C++*/#include #include using namespace std;int main(){ ifstream infile("subset.in"); ofstream outfile("subset.out"); if(!infile || !outfile) { cout <<
2014-08-04 11:00:15
1295
转载 程序中的堆栈解析
在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。要点:堆:顺序随意栈:先进后出堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2014-08-01 14:32:05
3832
转载 程序中的内存分配解析
1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3
2014-08-01 14:26:58
773
原创 循环链表 约瑟夫环问题实现
#include#includetypedef struct LNode{//构造结点类型 int data; struct LNode *next;}*LinkList;void CreateList(LinkList &L,int n);//创造一个循环链表void OutList(LinkList &L,int m);//数到m出列,并释放该结点void main()//主
2014-08-01 11:12:14
1025
原创 循环队列 队列的顺序表示和实现
#include#include#define MAXQSIZE 100typedef struct//构造循环队列数据类型{ int *base;//队列数组指针 int front; int rear;}CircleQueue;void InitQueue(CircleQueue &Q);//初始化创造循环队表void QueueLength(CircleQueue Q);/
2014-08-01 11:11:19
1013
原创 无栈非递归求赫夫曼编码算法
//-----------无栈非递归遍历赫夫曼树,求赫夫曼编码---------------- HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); p=m; cdlen=0; for(i=1;i<=m;++i) HT[i].weight=0; while(p) { if(HT[p].weight==0) { HT[p].weight==1
2014-08-01 11:07:50
2872
原创 赫夫曼树编码及解码
#include#includetypedef struct{ char content; int weight; int parent,lchild,rchild;}HTNode,*HuffmanTree;//动态分配数组存储赫夫曼树typedef int **HuffmanCode;//动态分配数组存储赫夫曼编码表void HuffmanCoding(HuffmanTree
2014-08-01 11:06:38
2144
原创 顶点间最短路径求解
#include#define INFINITY 100 //表示∞#define MAX_VERTEX_NUM 20 //最大顶点个数typedef enum {DG,DN,UDG,UDN} GraphKind;//图的种类typedef struct//邻接矩阵{ int adj; //表示权值 char *info; //与弧相关信息的指针}AdjMatrix[MAX_VER
2014-08-01 11:06:20
1171
原创 广义表建树算法
void CreateBiTree(BiTree &T){//用广义表来创建并输入二叉树 int k; char ch; BiTNode p,q; SqStack S; CreateStack(S); if(!(T=(BiTree)malloc(sizeof(BiTNode)))) { printf("ERROR!\n"); return; } T->data=0; T
2014-08-01 11:05:38
2311
原创 单链表的插入与删除
#include#includetypedef struct LNode//构造结点类型{ int data; struct LNode *next;}*LinkList;void InitList(LinkList &L,int len);//创建链表void InsertList(LinkList &L,int i,int e);//插入元素void DeleteList(Li
2014-08-01 11:05:01
1836
原创 二叉树的基本操作及遍历
#include#include#define LENGTH 100 //初始分配栈的长度#define ADD_LEN 10 //栈长增量typedef struct BiTNode{//构造二叉树结点类型 char data; struct BiTNode *LChild,*RChild;}BiTNode, *BiTree;typedef struct {//构造栈的数据类
2014-08-01 11:04:43
1435
原创 栈的基本操作 出栈与入栈
#include#include#define LENGTH 100 //初始分配栈的长度#define ADD_LEN 10 //栈长增量typedef struct {//构造栈的数据类型 int *base; int *top; int stacksize;}SqStack;void CreateStack(SqStack &S);//初始化一个栈void PushS
2014-08-01 11:02:53
5126
原创 数据结构 串的堆分配
#include#includetypedef struct{ char *ch; int length;}HString;void StrAssign(HString &T,char *chars);void StrLength(HString S);void StrCompare(HString S,HString T);void ClearString(HString &S
2014-08-01 11:01:32
1439
原创 栈应用 表达式求值
#include#include#define LENGTH 100 //初始分配栈的长度#define ADD_LEN 10 //栈长增量typedef struct //定义字符栈{ int *base; int *top; int stacksize;}SqStack;void InitStack(SqStack &S); //初始化一
2014-08-01 11:00:48
1429
原创 模式匹配 KMP算法中Next值求解
#include#include#includetypedef struct{ char *ch; int length;}HString;void StrAssign(HString &T,char chars[]);int get_next(HString T,int next[]);void main(){ HString T; char chars[80]; in
2014-08-01 10:59:44
1862
软件工程课程设计—基于VS2010的聊天系统(C++MFC)
2012-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人