迭代器模式(Iterator Pattern) 概念: 定义:迭代器模式 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 迭代器模式是一种简单常见的设计模式,在我们使用编程语言中的集合容器都会有迭代器。 组成: Aggregate(抽象聚合):共同的接口供所有的聚合使用。 ConcreteAggregate(聚合):持有一个对象的集合,并实现 createIterator 方法,返回集合的迭代器。 Iterator(抽象迭代器接口):包含所有迭代器都必须实现的方法。 ConcreteIterator(具体迭代器):实现了迭代器接口的具体迭代器。 例子: 现有两家超市,一家为水果超市,一家为零食超市。他们分别请了两位编程人员帮他们实现打印品种清单程序。结果第一家编程人员用数组集合来存储不同的水果,第二家编程人员用 ArrayList 集合来存储零食种类。如下: 物品类: public class Item { private String name; pr 继续阅读 >>


王伟豪 16/05/30 23:06:06
程序多语言实际就是在不同的地区根据主机不同的设定去匹配与之对应的语言环境。 要实现多语言环境首先可以通过Locale类创建一个本地语言环境对象,如下有三种方式: Locale locale = new Locale("zh", "CN"); Locale locale1 = Locale.US; Locale locale2 = Locale.getDefault(); 第一个是通过指定语言和地区指定; 第二个是通过语言代码构造语言环境 第三个是获取此JAVA虚拟机实例的当前默认语言环境 然后就是语言的自定义了 实际上这里就是通过读取不同的配置文件获取不同的语言对应的字符,因此这里就用到了ResourceBundle工具类绑定资源文件。 资源文件的命名包含了语言环境的代码,我创建了下面两个中文和英文的语言文件: IDEA直接识别不同语言环境的文件并将他们放在一起(因为它们的基本名称相同) 这里的资源文件是通过键值对的方式存储的,如下info_zh_CN.properties: username=\u7528\ 继续阅读 >>


朱新全 16/05/30 22:31:53
1.使用yum命令安装vsftpd yum install vsftpd -y 2.添加 ftp账号和目录 先检查nologin的地址,我的在 sbin/nologin 下 使用下面的命令创建用户 useradd -d /home/ftp -s /sbin/nologin yunftp 该命令指定用户/home/ftp为yunftp的家目录 修改该账户的密码 passwd yunftp usermod -g ftp yunftp 修改指定目录的权限 chown -R ftp.yunftp /home/ftp 3.配置vsftpd 编辑vsftpd.conf文件 vim /etc/vsftpd/vsftpd.conf “anonymous_enable=YES”改为“anonymous_enable=NO” 取消如下配置前的注释符号: local_enable=YES write_enable=YES chroot_local_user=YES 4.修改shell配置 vi编辑/ 继续阅读 >>


卢晓丹 16/05/30 21:32:23
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表. 3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放  5、程序代码区—存放函数体的二进制代码。 例如: int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() {           int b; 栈    继续阅读 >>


冯鑫 16/05/30 21:16:12
方法一:利用二级指针申请一个二维数组。 #include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态申请二维数组 int i,j; int m,n; printf("请输入行数\n"); scanf("%d",&m); printf("请输入列数\n"); scanf("%d",&n); a=(int**)malloc(sizeof(int*)*m); for(i=0;i<m;i++) a[i]=(int*)malloc(sizeof(int)*n); for(i=0;i<m;i++) for(j=0;j<n;j++) printf("%p\n",&a[i][j]); //输出每个元素地址,每行的列与列 继续阅读 >>


冯鑫 16/05/30 20:56:48
关于Python中面向对象 什么是面向对象 这可能对于很多初学者来说是个问题,关于面向对象和面向过程可以说一直是编程界的两大阵营吧,没有好与坏之分,全在于个人见解吧,但是不得不说,现在面向过程更加主流一些吧! 面向对象的语言很多,最典型应该算Java吧!而面向过程的语言也很多,代表应该就是C语言了,但同时,又有许多的语言为了照顾这两方面的人,既支持面向过程,又支持面向对象,而Python就是这种类型。 简单来说,面向过程就是在写代码的时候,注重的是实现目的的过程是什么方式的,这个过程是怎样的,通过什么样的步骤可以解决掉他。而面向对象是对整体的考虑,将万物看作类,不同的物品通过不同的类封装,一个类里面,有类自己的属性,方法等。python支持面向对象和面向过程,一般对与比较小的项目,可以使用面向过程的方法实现比较简单,而大型项目就需要定义不同的类,在每个类里面再进行具体方法的实现。 关于类与类的实例,我举个例子吧,水果和苹果的例子,水果就是一个类,而苹果就是水果的一个实例,我们在吃苹果时说是吃水果,但是我们不能只吃水果,我们吃的,一定是水果的一个实例。请 继续阅读 >>


周攀 16/05/30 16:50:43
1> define宏: (1)是在预处理阶段展开; (2)没有数据类型,不做任何类型检查; (3)可调试; (4)不分配内存,在程序中有几次替换就分配几次内存。 const常量: (1)是编译运行阶段使用; (2)有具体的数据类型,执行类型检查; (3)不能调试; (4)分配内存,对应一个内存地址,但不重复分配内存。 2> malloc分配二维数组时如果两次分配 int **a a=(int **)malloc(n*sizeof(int *)); /*第一维分配元素个数为n的指针数组, 用来存放第二维数组每行的首地址 */ for(i=0;i<n;i++) a[i]=(int *)malloc(m*sizeof(int)); //给第二维的每个数组分配m个大小的int空间 这样分配的结果会让每行的地址不连续 二维数组本质还是一维数组所以也可以一次分配 int *a a=(int *)malloc(m*n*sizeof( 继续阅读 >>


宫展京 16/05/30 14:34:14
1.const和define的区别: 1->const在编译阶段用,define在预处理阶段才替换 2->const检查类型,const int i=3.5,这就是错的;define不检查类型,只完成普通的替换 3->const常量会在内存中分配,而define则不会。 2.指针变量在内存中的字节大小: 大小根本取决于cpu当下的寻址能力,在vc6.0下这个和你的cpu,操作系统和编译器都有关占,领导如下:cpu>操作系统>编译器,如果cpu是32位,那么操作系统只能是32位,编译器只能是16位或者32,如果编译器32位,这时候寻址能力是4字节,如果编译器16位,这时候寻址能力2字节,总之,一层一层是有限制关系的,你需要看具体情况。嘿嘿!希望我表达清楚了。 3.sizeof()和strlen()区别: 如果是sizeof(),他计算的是这段空间所用的内存字节,而strlen()算的是有效字节是多少。举个栗子: char a[20]="xiaoxiaoxuezha"; sizeof(a)是实际上开辟了20字节给 继续阅读 >>


朱紫钰 16/05/30 12:49:13
    【Redis设计与实现】第三章 链表 【Redis设计与实现】第三章 链表 链表和 […] 继续阅读 >>


李林翰 16/05/30 12:30:05
模板方法模式(Template method Pattern) 概念: 模板方法模式 在一个方法中定义一个算法的 骨架,而将一些步骤延迟到子类。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 组成: templateMethod(模板方法):定义了某个算法的模板顺序或一组步骤,其中任何步骤都可以是抽象的,由子类来实现。 primitiveOperation1(抽象步骤方法):抽象类中声明,由子类各自实现。 hook(钩子函数):钩子是一种被声明在抽象类中的方法,但只有空的和默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩。要不要挂钩由子类自行决定。当我们的子类 “必须” 提供某个方法或步骤的实现时,就使用抽象方法。如果算法的这个部分是可选的,就用钩子。如果是钩子的化,子类可以选择实现这个钩子,但不强制这么做。简单来说 可选的步骤 一般实现为钩子函数。 例子: 咖啡店里的咖啡和茶制作时都有类似的步骤,首先加热水,然后放入茶或咖啡搅拌(冲泡),然后将饮料倒入杯子,最后加调料。这些步骤 继续阅读 >>


王伟豪 16/05/30 11:20:15