此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! 浙江大学计算机考研历年面试问题集王道论坛cairuiyu整理2009.4此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! 一、面向对象程序设计1、多态和动态链接的区别多态(Polymorphism)按字面的意思就是“多种形状”。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针动态链接库(DynamicLinkLibrary,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件与可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,而应由Windows应用程序直接或间接调用。动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。2、解释面向对象里面的动态绑定在面向对象语言中,可以从一个类派生出另一个类。派生出其它类的类称为基类,又称为父类。被派生的类称为派生类,又称为子类。派生类可以具有父类的特性,共享父类的成员函数,使用父类的成员,还可以定义自己的新特性,定义自己的数据成员和成员函数。一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。继承方式主要表示派生类继承基类时采用的继承方式,主要有三种,即公有继承、私有继承、保护继承动态绑定:如果一个基类(没有父类)含有虚函数,那么在编译时,编译器会生成一张虚函数表,表里是该类中所有虚函数的地址(按出现顺序排列);并且会在该类中动态的插入一个成员变量(__vfptr),它是一个指向这个虚函数表的指针。对于这个基类的所有子类,编译器都会生成各自的虚函数表,并且把继承得来的__vfptr指针指向它。静态绑定可以理解为在编译时知道了对象名,那么此时就可以访问相应的虚函数;而动态绑定因为是用一个基类的指针来代表,不到运行的时候程序并不知道这个指针是指向基类还是指向派生类,那么虚函数也就不确定了此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! 3、虚拟机的好处、坏处、种类、最快的虚拟机好处:虚拟机有很好的性能,有很好的可移植性。有利于测试,安全。坏处:低效率种类:有JVM,SableVM,IBM的VM,还有kissme..最快的虚拟机:BEAJRockit4、C++的特点封装,继承,多态支持面向对象编程和泛型编程5、C++异常处理机制抛出异常和捕捉异常;c++的异常处理机制使得异常的引发和处理不必在同一函数中,这样低层的函数可以着重解决具体问题,而不必过多的考虑对异常的处理,上层调用者可以在适当的我位置设有对不同类型异常的处理6、C/C++的区别前者面向过程,后者既可面向过程,又可面向对象后者是前者的超级7、纯虚函数简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数纯虚函数是一种特殊的虚函数,它的一般格式如下:Class类名{virtual类型函数名(参数表)=0;};在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。是纯虚函数只有函数名,返回类型和参数,函数体为空8、C++类中不定义虚函数和定义了虚函数的类在初始化的时候大小是不是一样不一样,定义了虚函数要大一些,因为要建立虚函数表9、什么是内存泄露?此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! 内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费10、Java怎么处理对象的分配和释放问题Java把内存划分成两种:一种是栈内存,一种是堆内存在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量为0时表示不再使用,释放11、Java垃圾收购机制?垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象(即释放其所占用的内存),按照特定的垃圾收集算法来实现资源自动回收的功能。(比较:在C++中,需要程序员自己调用delete或析构函数来回收内存。12、c++和JAVAC++容易出现内存泄露,需要手动回收内存。而JAVA有垃圾自动回收机制C++里面有指针,JAVA里面没有JAVA的可移值性更好,JAVA的类文件能够在不同的平台上使用。而C++在windows下生成的可执行文件在LINUX下不一定能运行,可能需要重新编码。JAVA生成的类可以认为是中间代码,java文件在JAVA虚拟机上运行,通过虚拟机来产生最终代码,linux和java下都会有虚拟机。而C++编译器生成的是最终代码,有时候系统调用在不同的系统下并不能够成功进行JAVA是纯面向对象,而C++是基于对象的。在JAVA里出现最多的就是类13、面向对象的特点1)对象唯一性。每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。2)分类性。此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! 分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。3)继承性。继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。4)多态性(多形性)多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。多态性允许每个对象以适合自身的方式去响应共同的消息。多态性增强了软件的灵活性和重用性。14、面向对象要素抽象、共享、封装(具体内容可以自己试着解释)15、C++和C字符串的区别C字符串是基本数据类型,即字符数组;C++字符串是类(这个是根本区别)C字符串函数是外部函数,字符串作为参数被传进来,进而对其进行操作;C++字符串函数是字符串类内部定义的,可以用‘.’来直接使用C++字符串里面对一些运算符进行了重载,比如==,=,<,>等16、友元函数有没有参数,输入输出如果没有参数会怎么样友元函数有参数,后半问我不太明白17、JAVA多线程用过么?应注意什么?怎么实现?Java对多线程的支持是非常强大的,他屏蔽掉了许多的技术细节,让我们可以轻松的开发多线程的应用程序。Java里面实现多线程,有2个方法1继承Thread类,比如classMyThreadextendsThread{publicvoidrun(){此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! //这里写上线程的内容}publicstaticvoidmain(String[]args){//使用这个方法启动一个线程newMyThread().start();}}2实现Runnable接口classMyThreadimplementsRunnable{publicvoidrun(){//这里写上线程的内容}publicstaticvoidmain(String[]args){//使用这个方法启动一个线程newThread(newMyThread()).start();}}一般鼓励使用第二种方法,应为Java里面只允许单一继承,但允许实现多个接口。第二个方法更加灵活。二、网络/网络安全1、电子邮件协议收件协议POP3:从客户端接受邮件服务器的邮件POP3(PostOfficeProtocol3)适用于C/S结构的脱机模型的电子邮件协议,目前已发展到第三版,称POP3.,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议发件协议SMTP:从客户端发送邮件在本地邮件服务器,从本地邮件服务器到远方的邮件服务器SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,或者说是由它来控制信件传输的一种中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地2、协议:HTTP此资料由王道论坛()整理并发布,任何个人或组织无权用于任何商业活动! FTP协议:文件传输协议3、说一个网络加密算法并解释一下DES使用一个56位的密钥以及附加的8位奇偶校验位,产生最大64位的分组大小。这是一个迭代的分组密码,使用称为Feistel的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES使用16个循环4、ppp,tcp是否面向连接,各属于什么层ppp协议是数据链路层,无连接tcp是传输层,面向链接5、100base-T是什么100表示介质传送速度是100bpsBase表示基带传送,传送数字信号,与宽带传送相对应,T表示介质是双绞线6、什么是网格网格能够把分布在因特网上数以亿计的计算机