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