下载频道  >  hezl520的资源
  • 软件可靠性工程手册(中文版)

    软件可靠性工程手册

    2011-02-22
    19
  • 设计模式可复用面向对象软件的基础

    设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相 关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关 系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。 你也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下 子就得到复用性和灵活性好的设计,即使不是不可能的至少也是非常困难的。一个设计在最 终完成之前常要被复用好几次,而且每一次都有所修改。 有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总 是求助于以前使用过的非面向对象技术。新手需要花费较长时间领会良好的面向对象设计是 怎么回事。有经验的设计者显然知道一些新手所不知道的东西,这又是什么呢? 内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解 决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的 部分原因。因此,你会在许多面向对象系统中看到类和相互通信的对象( c o m m u n i c a t i n g o b j e c t)的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终复 用性更好。它们帮助设计者将新的设计建立在以往工作的基础上,复用以往成功的设计方案。 一个熟悉这些模式的设计者不需要再去发现它们,而能够立即将它们应用于设计问题中。

    2011-02-22
    3
  • 程序员面试宝典(第二版)

    程序员面试宝典(第二版)

    2011-02-22
    5
  • c有史以来最全的C语言笔试面试题

    1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的? 答案:虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数 组.而对象的隐藏成员--虚拟函数表指针是在运行期--也就是构造函数被调用时进行初始化的,这是实 现多态的关键. 3.main主函数执行完毕后,是否可能会再执行一段代码?(朗讯的一道笔试题) 答案:可以,可以用_onexit 注册一个函数,它会在main 之后执行; 如果你需要加入一段在main退出后执行的代码,可以使用atexit()函数,注册一个函数。 语法: #include <stdlib.h> int atexit(void (*function")(void)); #include <stdlib.h> #include <stdio.h> void fn1( void ), fn2( void ), fn3( void ), fn4( void ); int main( void ) { atexit(fn1); atexit( fn2 ); atexit( fn3 ); atexit( fn4 ); printf( "This is executed first.\n" ); } void fn1() { printf( "next.\n" ); } void fn2() { printf( "executed " ); } void fn3() { printf( "is " ); } void fn4() { printf( "This " ); } 结果: This is executed first. This is executed next. 4.一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? 在子类的空间里,有没有父类的这个函数,或者父类的私有变量? (华为笔试题) 答案:只要基类在定义成员函数时已经声明了virtue关键字,在派生类实现的时候覆盖该函数时,virtue关键字可加 可不加,不影响多态的实现。子类的空间里有父类的所有变量(static除外)。 5.给一个字符串、例如 “ababc”要求返回“ab”. 因为“ab”连续重复出现且最长。 用C/C++语言写一函数完成该算法,给出复杂度 6.对序列1、1、2、3、5、8、13。。。。 是Fab..数列 2、3、5、13...是Fab..质数数列,因为他们与自己前面的Fab...数列都互质 给出k,返回第k小的Fab..质数 7.101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币 重的结论。 8.完成字符串拷贝可以使用 sprintf、strcpy 及 memcpy 函数,请问这些函数有什么区别 ,你喜欢使用哪个,为什么? 答案:这些函数的区别在于 实现功能 以及 操作对象 不同。 1.strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能。 2.snprintf 函数操作的对象不限于字符串:虽然目的对象是字符串,但是源对象可以是字符串、也可以是任 意基本类型的数据。这个函数主要用来实现(字符串或基本数据类型)向字符串的转换功能。如果源对象是 字符串,并且指定 %s 格式符,也可实现字符串拷贝功能。 3.memcpy 函数顾名思义就是 内存拷贝,实现 将一个 内存块 的内容复制到另一个 内存块 这一功能。内 存块由其首地址以及长度确定。程序中出现的实体对象,不论是什么类型,其最终表现就是在内存中占据一 席之地(一个内存区间或块)。因此,memcpy 的操作对象不局限于某一类数据类型,或者说可 适用于任 意数据类型,只要能给出对象的起始地址和内存长度信息、并且对象具有可操作性即可。鉴于 memcpy 函 数等长拷贝的特点以及数据类型代表的物理意义,memcpy 函数通常限于同种类型数据或对象之间的拷贝, 其中当然也包括字符串拷贝以及基本数据类型的拷贝。 对于字符串拷贝来说,用上述三个函数都可以实现,但是其实现的效率和使用的方便程度不同: * strcpy 无疑是最合适的选择:效率高且调用方便。 * snprintf 要额外指定格式符并且进行格式转化,麻烦且效率不高。 * memcpy 虽然高效,但是需要额外提供拷贝的内存长度这一参数,易错且使用不便;并且如果长度 指定过大的话(最优长度是源字符串长度 + 1),还会带来性能的下降。其实 strcpy 函数一般是在 内部调用 memcpy 函数或者用汇编直接实现的,以达到高效的目的。因此,使用 memcpy 和 strcpy 拷贝字符串在性能上应该没有什么大的差别。 对于非字符串类型的数据的复制来说,strcpy 和 snprintf 一般就无能为力了,可是对 memcpy 却没有 什么影响。但是,对于基本数据类型来说,尽管可以用 memcpy 进行拷贝,由于有赋值运算符可以方 便且高效地进行同种或兼容类型的数据之间的拷贝,所以这种情况下 memcpy 几乎不被使用。memcpy 的长处是用来实现(通常是内部实现居多)对结构或者数组的拷贝,其目的是或者高效,或者使用方便, 甚或两者兼有。 9.变量的声明和定义有什么区别? 10.请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质: #include <stdio.h> #include <stdlib.h> int main(void) { char a[30]; char *b = (char *)malloc(20 * sizeof(char)); printf("%d\n", sizeof(a)); printf("%d\n", sizeof(b)); printf("%d\n", sizeof(a[3])); printf("%d\n", sizeof(b+3)); printf("%d\n", sizeof(*(b+4))); return 0 ; } 12.请完成以下题目。注意,请勿直接调用 ANSI C 函数库中的函数实现。 a)请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请给出该题的至少一 个不同解法。 第一种unsigned int TestAsOne0(char log) { int i; unsigned int num=0, val; for(i=0; i<8; i++) { val = log >> i; //移位 val &= 0x01; //与1相与 if(val) num++; } return num; } 第二种unsigned int TestAsOne1(char log) { int i; unsigned int num=0, val; for(i=0; i<8; i++) { val = (~log) >> i; //反码? val &= 0x00; //与0相与 if(!val) num++; } return num; } b)请编写一个 C 函数,该函数将给定的一个字符串转换成整数。 int Invert(char *str) { int num=0; while(*str!='\0') { int digital=*str-48; num=num*10+digital; str=str+1; } return num; } c)请编写一个 C 函数,该函数将给定的一个整数转换成字符串。 void IntToCharChange(int num, char* pval) { char strval[100]; int i, j; int val0 = 0; int val1 = 0; val0 = num; for(i=0; i<100; i++) { val1 = val0 % 10; //取余 val0 = val0 / 10; //取整 strval[i] = val1 + 48; //数字—字符 if(val0 < 10) { i++; strval[i] = val0 + 48; break; } } for(j=0; j<=i; j++) //倒置 { pval[j] = strval[i-j]; } pval[j] = '\0'; } d)请编写一个 C 函数,该函数将一个字符串逆序。 void AntitoneValue(char* father, char* child) { int i; char source[100]; int j = 0; while(father[j]) //放入source,[j]为长度 { source[j] = father[j]; j++; if(j > 99) { return; } } source[j] = '\0'; for(i=0; i<j; i++) { child[i] = source[j-i-1]; //反序 } child[i] = '\0'; } e)请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。 int search(char *cpSource, int n, char ch) //起始地址,搜索长度,目标字符 { int i; for(i=0; i<n && *(cpSource+i) != ch; ++i); return i; } f)请编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一 字符组成的。 int ChildString(char*p) //自己写 { Char *q=p;  int stringlen=0, i=0,j=1,len=0,maxlen=1;  while(*q!=’\0’) //不能用strlen,求得长度stringlen  {   Stringlen++;   q++; } while( i< Stringlen ) { if(*(p+i)==*(p+j)&&j< Stringlen) { len++; //统计子串长度 i++; j++; } else { if(len>maxlen) //统计最大子串长度 { maxlen=len+1; len=0; } else { len=0; } i++; j++; } } return maxlen; } 给出演示上述函数功能的一个简单程序,并请编写对应的 Makefile 文件

    2011-02-22
    10
  • STL源码剖析--侯捷

    STL源码剖析

    2011-02-22
    0
  • Windows XP SP3下的IIS6.0安装包

    Windows XP +SP3,IIS6.0安装包Windows XP +SP3,IIS6.0安装包Windows XP +SP3,IIS6.0安装包Windows XP +SP3,IIS6.0安装包Windows XP +SP3,IIS6.0安装包

    2010-07-27
    0
  • SVR算法程序(可运行)

    SVR实现程序,本程序是基于SVR算法而设计的程序, 可以运行,通过调试。可好的资料,千万别错过哦!!!!!!!!!!

    2010-07-24
    32
  • SVR(SVM)()()

    对于分类问题,支持向量机的基本思想是将线性不可分样 本经非线性变换币映射到另一个高维空间E中,在变换后的 空J’日J中寻找一个最优的分界面(超平面),使其推广能力最好。 以两类分类问题为例说明支持向量机的基本原理。

    2010-07-24
    8
  • 指针引用和动态空间管理

    一、指针的概念 1、内存由顺序排列的存储单元组成。 存储单元以字节为单位。 每个存储单元对应一个地址。 2、指针是存储特定类型数据的地址。 3、指针的类型就是指针所指向的数据类型

    2010-07-24
    4
  • 基于GA参数优化的在线学习SVM算法及其在气象预测中的应用

    基于GA参数优化的在线学习SVM算法及其在气象预测中的应用基于GA参数优化的在线学习SVM算法及其在气象预测中的应用基于GA参数优化的在线学习SVM算法及其在气象预测中的应用基于GA参数优化的在线学习SVM算法及其在气象预测中的应用基于GA参数优化的在线学习SVM算法及其在气象预测中的应用

    2010-07-24
    12
img
hezl520

关注 私信