导航:首页 > 程序命令 > 程序员必考50道题

程序员必考50道题

发布时间:2023-08-14 12:56:17

Ⅰ 求程序员面试题

java面试题集集锦

1.C++或Java中的异常处理机制的简单原理和应用。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

2. Java的接口和C++的虚类的相同和不同处。

由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是 public static,所有方法默认情况下是public.一个类可以实现多个接口。

3. 垃圾回收的优点和原理。并考虑2种回收机制。

Java语言中一个显着的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

4. 请说出你所知道的线程同步的方法。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

5. 请讲一讲析构函数和虚函数的用法和作用。

6. Error与Exception有什么区别?

Error表示系统级的错误和程序不必处理的异常,

Exception表示需要捕捉或者需要程序进行处理的异常。

7. 在java中一个类被声明为final类型,表示了什么意思?

表示该类不能被继承,是顶级类。

8. 描述一下你最常用的编程风格。

9. heap和stack有什么区别。

栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。

堆是栈的一个组成元素

10. 如果系统要使用超大整数(超过long长度范围),请你设计一个数据结构来存储这种超大型数字以及设计一种算法来实现超大整数加法运算)。

public class BigInt()

{

int[] ArrOne = new ArrOne[1000];

String intString="";

public int[] Arr(String s)

{

intString = s;

for(int i=0;i
{

11. 如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现

12,谈谈final, finally, finalize的区别。

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

13,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

14,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

15,HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

16,Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。

17,什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 Assertionerror。它用于调试目的:

assert(a > 0); // throws an Assertionerror if a <= 0

断言可以有两种形式:

assert Expression1 ;

assert Expression1 : Expression2 ;

Expression1 应该总是产生一个布尔值。

Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

javac -source 1.4 Test.java

要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。

要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。

要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。

18,GC是什么? 为什么要有GC? (基础)。

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

19,String s = new String("xyz");创建了几个String Object?

两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

20,Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

21,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

22,sleep() 和 wait() 有什么区别? 搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

23,Java有没有goto?

Goto—java中的保留字,现在没有在java中使用。

24,数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。

String有有length()这个方法。

25,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

26,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

27,给我一个你最常见到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, , DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,

ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

28,error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

29,List, Set, Map是否继承自Collection接口?

List,Set是

Map不是

30,abstract class和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

31,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

都不能

32,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

33,启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

34,构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

35,是否可以继承String类?

String类是final类故不可以继承。

36,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

37,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前执行。

38,编程题: 用最有效率的方法算出2乘以8等于几?

有C背景的程序员特别喜欢问这种问题。

2 << 3

39,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

40,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

41,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

42,编程题: 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {

private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪?

//注意这是private 只供内部调用

private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问

public static Singleton getInstance() {

return instance;

}

}

第二种形式:

public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

//使用时生成实例,提高了效率!

if (instance==null)

instance=new Singleton();

return instance; }

}

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

Hashtable和HashMap

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在

多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap

就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

43.描述一下JVM加载class文件的原理机制?

44.试举例说明一个典型的垃圾回收算法?

45.请用java写二*树算法,实现添加数据形成二*树功能,并以先序的方式打印出来.

46.请写一个java程序实现线程连接池功能?

47.给定一个C语言函数,要求实现在java类中进行调用。

48、编一段代码,实现在控制台输入一组数字后,排序后在控制台输出;

49、列出某文件夹下的所有文件;

50、调用系统命令实现删除文件的操作;

51、实现从文件中一次读出一个字符的操作;

52、列出一些控制流程的方法;

53、多线程有哪些状态?

54、编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示,直到输入"END"为止,让你写出客户端的程序;

55、作用域public,private,protected,以及不写时的区别

答:区别如下:

作用域 当前类 同一package 子孙类 其他package

public √ √ √ √

protected √ √ √ ×

friendly √ √ × ×

private √ × × ×

不写时默认为friendly

56、ArrayList和Vector的区别,HashMap和Hashtable的区别

答:就ArrayList与Vector主要从二方面来说.

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

就HashMap与HashTable主要从三方面来说。

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

57、char型变量中能不能存贮一个中文汉字?为什么?

答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

php程序员上机面试题(并附答案,回答好的加分)

题集网上有一套php的面试题:http://www.tijee.com/tags/46-php-face-questions/posts

Ⅲ 初级程序员考试内容

主要考试科目是两科:上午是综合知识,75道单选题;下午是应用技术,5道案例题,主要考流程图1题,C语言3题,C++和JAVA二选一,以填空题和选择题为主。

Ⅳ 2013年计算机软考程序员考试部分真题

试题 1

A. 最有可能成为国际上操作系统的标准的操作系统.

B. 在目前,用于保证软件质量的主要手段.

C. 进入80年代后,已迅速成为常用的程序设计语言之一.

D. 在软件开发中,有利于发挥集体智慧的一种做法.

E. 在开发软件时,可用来提高程序员的工作效率.

供选择的答案:

A. (1)MS-DOS (2)VMS (3)VM (4)UNIX

B. (1)正确性证明 (2)测试 (3)自动程序设计 (4)符号执行

C. (1)Smalltalk-80 (2)Ada (3)C (4)PROLOG

D. (1)设计评审 (2)模块化 (3)主程序员组 (4)进度控制

E. (1)程序开发环境 (2)操作系统的作业管理功能

(3)编译程序的优化功能 (4)并行运算的大型计算机

试题 2

最初的软件开发方式是(A), 人们用笔和纸编写程序. 从60年代后期开始, *

软件开发方式逐步发展成为使用终端设备编写程序的(B), 从80年代初开始, 发*

达坦颤轿国家的软件开发方式正在向(C)转变.

在结构化程序设计思想提出以前, 在程序设计中曾经主要强调程序的(D). *

现在, 与程序的(D)相比, 人们更重视程序的(E).

供选择的答案:

A,B,C: 1.实时方式 2.分时方式 3.批方式 4.并行方式 5.工作站方式 6.阵列方式

D,E: 1.安全性 2.专用性 3.一致性 4.合理性 5.可理解性 6.效率

试题 3

从下列叙述中选出5条正确的叙述.

(1) 每种程序设计语言都有它特定的语法.

(2) 结构化的程序设计语言中没有 GOTO 语句.

(3) 定义程序设计语言时用的字符集各种语言不完全相同.

(4) 在汇编语言中, 用调用指令, 返回指令和转移指令改变程序中指令的执行顺序.

(5) 由于 FORTRAN 语言的结构是块结构, 所以它特别适合于模块化程序设计.

(6) PASCAL 语言允让肆许用户定义结构化的数据结构.

(7) 一般而言, 语言级别越高, 用它编出的程序越短.

(8) 结构化程序设计可以大大提高程序的执行效率.

(9) 编译程序是一种常用的应用软件.

(10) 编译程序在进行优化时有时需要用到源程序的注释.

试题 4

(1) 按逻辑结构分, 文件主要有两类: (A) 和 (B) . UNIX 中的文件系统采用(B).

(2) 文件系统的主要目的是 (C).

(3) 文件系统中用 (D) 管理文件.

(4) 为了允许不同用户的文件具有相同的文件名, 通常在文件系统中采用 (E).

A,B : (1) 网状文件 (2) 只读文件 (3) 读写文件

(4) 记录式文件 (5) 索引文件 (6) 流式文件

C : (1) 实现对文件的按名存取 (2) 实现虚拟存贮器

(3) 提高外部设备的输入洞让输出速度 (4) 用于存贮系统文档

D : (1) 堆栈结构 (2) 指针 (3) 目录 (4) 页表

E : (1) 重名翻译 (2) 多级目录 (3) 约定 (4) 路径

试题 5

排序的方法有许多种, (A) 法从未排序序列中依次取出元素, 与已排序序列

中(初始时为空)的元素作比较, 将其放入已排序序列的正确位置上; (B) 从未排娦蛐蛄兄刑粞≡*, 并将其依次放入已排序序列的一端; 交换排序法是对序列中

的元素进行一系列比较, 当被比较的两元素逆序时, 进行交换.(C) 和 (D) 是基

于这类方法的两种排序方法, 而(D) 是比 (C) 效率更高的方法. 利用某种算法,

根据元素的关键值计算出排序位置的方法是 (E).

(1) 选择排序 (2) 快速排序 (3) 插入排序 (4) 冒泡排序 (5) 合并排序

(6) 二分排序 (7) 杂凑排序 (8) 基数排序

试题6

下列流程图用于从数组K中找出一切满足:

K(I)+K(J)=M

的元素对(K(I),K(J))(1<=I<=J<=N)。假定数组K中的N个不同的整数已按由小到大

的顺序排列,M是给定的常数。

开始



1→I



N→J

┌───────→↓ (A)

│ I:J──────────────┐

│ (B)│ ↓

│ ↓ > 结束

│ ┌───K(I)+K(J):M ────┐

│ ↓ ↓= ↓

│ (C) 输出I,J,K(I),K(J) (D)

│ │ ↓ │

│ │ (C) │

│ │ ↓ │

│ │ (D) │

└──┴─────┴───────┘

此流程图中,比较“K(I)+K(J):M"最少执行次数约为 (E) 。

供选择的答案

A、B : ① > ② ≥ ③ < ④ ≤ ⑤ = ⑥ ≠

C、D : ① I+1→I ② I-1→I ③ J+1→J ④ J-1→J ⑤ I→J ⑥ J→I

E : ① N/4 ② N/2 ③ N ④ 2N

试题 7

将十进制数 0.7109375 转换成二进制数是(A).用ASCII码(7 位)表示字符5 和7 是(B).

浮点数的阶码可用补码或增码(移码)表示,数的表示范围(C).在浮点表示方法中(D)是隐含的.

用 8 位补码表示整数 -126 的机器码算术右移一位后的结果是 (E).

A: (1) 0.1011001 (2) 0.0100111 (3) 0.1011011 (4) 0.1010011

B: (1) 1100101 和 1100111 (2) 1010011 和 0110111

(3) 1000101 和 1000111 (4) 0110101 和 0110111

C: (1) 二者相同 (2) 前者大于后者 (3) 前者小于后者

D: (1) 位数 (2) 基数 (3) 阶码 (4) 尾数

E: (1) 10000001 (2) 01000001 (3) 11000001 (4) 11000010

试题 8

一排队线路, 输入为 A,B,C, 其输出分别为 Fa, Fb, Fc, 在同一时间内只*

能有一个信号通过. 如果同时有两个以上的输入信号出现时, 则按 A, B, C的*

顺序输出. 例如, A=B=C=1, 则 Fa=1, Fb=Fc=0. 那么, Fb 和 Fc 的表达式:

Fb= (A) , Fc= (B).

设X=X1X2 和 Y=Y1Y2 是二个二进制的正整数. 则

判断 "X>Y" 的逻辑表达式 F1= (C); 判断 "X>Y" 的逻辑表达式 F2= (D);娕卸* "X<=Y" 的逻辑表达式 F3= (E)

━━━

━ ━

A,B : (1) A+B+C (2) A+B+C (3) A+B

━━━ ━━━━━ ━━━━━

━ ━ ━ ━

(4) A+B C (5) A+B+C (6) A+A B

━ ━ ━ ━ ━ ━

C,D,E: (1) X1X2+Y1Y2+X1Y2+X2Y1 (2) X1Y1+X2Y1Y2+X1X2Y2

━ ━ ━ ━ ━ ━ ━

(3) X1Y1+X1X1Y2+X1Y1Y2 (4) X1Y1+X1X1Y2+X2Y2

━ ━ ━ ━ ━ ━

(5) Y1Y1+X1Y1X2+X1X2+X1Y1+X1Y1Y2

━ ━ ━ ━ ━ ━ ━ ━

(6) X1Y1+X2Y1Y1+X1X2Y2+X1Y1+X1X2Y2+X2Y1Y2

试题 9

从下列叙述中选出5条正确的叙述.

①磁盘存储器的主要技术指标有存储容量,查找时间,传输速率和记录密度等.

②磁盘转速提高一倍,平均查找时间缩小一半.

③磁盘存储器的数据传输速率决定于磁头定位时间,旋转等待时间和单位时间内

读出或写入的字节数.

④在单总线结构的计算机系统中,I/O设备与主机之间传送数据的方式一般有

程序查询,程序中断和 DMA 三种方式.

⑤对个人计算机进行二次开发后, 可以作为多用户主机的仿真终端. 这样个人计

算机既可以作为独立的计算机使用, 又可以在必要时共享主机的资源.

⑥DMA 方式的地址修改, 传送字节计数等完全由硬件电路来实现.

⑦DMA 用于传送成组数据, 因此不能每传送一个字节就由 DMA 控制器提出一次

总线请求.

⑧通常每个外部设备都用一个接口电路于主机联接. 因此, 主机只能用一个的

地址来访问一个外部设备.

⑨在计算机中处理汉字和处理西文的方法是类似的. 因此, 在西文计算机上扩充

汉字处理功能后, 原有的西文终端都可用作汉字终端.

⑩CRC 校验码的生成或校验可用由移位寄存器, 半加器和简单门电路构成的电路

来实现.

试题 10:

* 在计算机的指令系统中, 通常同时采用多种确定操作数的方式. 当操作数直

接由指令给出时, 操作数称为 (A). 当操作数的地址由某个指定的变址器的内容于

位移量相加得到时, 称为 (B). 如果操作数的地址是主存中于该指令地址无关的存

贮单元的内容, 则称为 (C). 是否进行 (C), 用指令中的某个特征位指定. 把 (D)

看做变址器进行 (B), 称为 (E).

A,B,C,E: (1) 间接寻址 (2) 相关寻址 (3) 相对寻址 (4) 单纯寻址

(5) 变址寻址 (6) 直接数 (7) 低位数 (8) 堆栈寻址

D: (1) 地址寄存器 (2) 指令计数器 (3) 数据寄存器 (4) 缓冲寄存器

试题 11:

Since the time of John von Neumann, the basic conceptual model used to think

about computers and programs has (A) unchanged, in (B) of many advances in

both hardware and software technology. In the (C) that von Neumann proposed, the

basic instruction cycle is for the processor to fetch the instruction pointed at

by the program counter, (D) the program counter, and then execute the instruction.

Because instructions are executed strictly sequentially, there is little inherent

parallelism, and (E) opportunity to employ large numbers of processors to gain 妔peed.

(1) small (2) big (3) add (4) little (5) model

(6) remained (7) style (8) increase (9) stead (10) spite

(11) already (12) period (13) formula (14) decrease (15) not

试题 12

In a computer program, an entity that possesses a value and is known to program

by a name: (A).

An ordered set which contains a fixed number of elements: (B).

To submit a program to a computer for execution: (C).

A secret code used to deny access to unauthorized users: (D).

A large collection of data in support of a set of data processing tasks: (E).

(1) data base (2) password (3) keyword (4) array

(5) procere (6) run (7) data entry (8) variable

(9) vector (10) access (11) user name (12)

试题 13:

(1)When the electricity is switched off, the ROM is cleared of its contents, the

RAM is not.

(2) IF-THEN-ELSE structures in a programming language provide selection.

(3) A program in its original form is known as an object program, and the tran-

slated version is known as a source program.

(4) The CPU is the most important piece of hardware in the entire system and yet

one of the sinplest.

(5) The lowercase letters come after the uppercase letters in the ASCII table.

(6) Queue insertions and deletions are made at the same end of the queue.

(7) Improvements in software quality are necessary to rece program maintenance

costs.

(8) A recursive procere is one that activates itself ring its activations.

(9) A floppy diskette machine is an example of a direct access storage device.

(10) Comments specify actions for a computer to perform when a program is run.

下午试题

试题一 [说明]

本流程图是对某种简单密码文(密文)解密.密文由字符序列组成,解密后产

生的字母序列称为原文.解密算法如下:

把密文s1s2...sn按顺时针方向看成一个环,如下所示:

s1

sn

s3

sn-1

si

解密时按读入的整数值KEY(KEY>1),从S1起顺时针计数,当计数到第KEY个字

符时,取出该字符作为原文的第一个字符,并把它从环中删去.接着从下一个字符

起继续计数,取出第KEY个字符作为原文的第二个字符,并从环中删去.依次类推,

直至N个字符全部取完.由上述算法依次取出的字符序列即为原文.

例如,当KEY=3时,密文NUITP的原文为INPUT.

开始解密时,密文存放在字符数组S中, 长度为N(N>1),所得到的原文也存

放在数组S中.为了从S(1)起依次存放原文字符,在必要时部分未解密的字符作适

当的移动.

试题三(15分)

[程序说明] 本题给出的是计算两个多项式之积的子程序.

设两个多项式分别为

n n-1

F(X)=FnX +Fn-1X +...+F1X+F0

m m-1

G(X)=GmX +Gm-1X +...+G1X+G0

则它们的积多项式为

k k-1

P(x)=F(X)G(X)=PkX +Pk-1X +...P1X+P0

其中, k=n+m; Pi=∑Fi-j*Gj (i=0,...,k);

j

记号∑Fi-j*Gj;表示对给定的i(0≤i≤n+m),和所有满足

0≤i-j≤n,≤j≤m

的j,对Fi-j*Gj求和.

程序用数组存贮多项式的序数,即数组的第i(≥0)个元素存贮多项式i次幂

的系数.例如:

5 3 2

F(X)=5.7X -10.8X +0.49X +2.7用数组表示为

0 1 2 3 4 5

2.7 0 0.49 -10.8 0 5.7

设程序已定义了如下的数据类型:

const maxp=100; {允许的多项式次幂}

type poly=record

power: 0..maxp; {多项式的次幂}

coef: array[0..maxp] of real

{coef [i] 存贮多项式的i次幂项的系数}

end;

[程序]

procere prod(f,g: poly; var p:poly);* var i,j,low,high:integer;

temp: real;

begin

for i:=0 to f.power + g.power do

begin

if __________________

then low:= ____________________

else low:=0;

if __________________

then high:= ____________________

else high:=i;

temp:=0.0;

for j:=low to high do

temp:= _____________________

p.coef[i]:=temp

end;

_______________________

end;



试题七

[程序说明] 本程序用于判别输入的字符串是否为如下形式的字符串:

W&M$

其中子字符串M是子字符串W的字符反向排列.在此假定W不含有字符&和字符$,

字符&用作W与M的分隔符,字符$用字符串的输入结束符.

例如,对输入的以下字符串:

ab&ba$, 11&12$

ab&dd$, &$

程序将分别输出

OK.(是), NO.(不是),

NO.(不是), OK.(是).

[程序]

program accept (input,output);

const

midch='&';

endch='$';

var

an:bollean; ch :char;

procere match (var answer: boolean);

var

ch1,ch2:char;

f:boolean;

begin

read(ch1);

if ch1>endch then

if ________________ then

begin

match (f);

if f then

begin

read (ch2); answer:=____________________

end

else answer:=false

end

else ___________________

else ___________________

end;

begin

writeln('Enter string:');

match (an);

if an

then begin

_______________________

if __________________________ then writeln ('OK.')

else writeln ('NO.')

end

else writeln ('NO.')

end.

试题十一

[程序说明] 本题给出的是将数组a的元素a1,a2,...,an从大到小排列的子程序.

子程序采用改进的选择方法,该方法基于以下思想:

在选择第一大元过程中,al与aj(j=n,n-1,...2)逐个比较,若发现aj1〉

al,则aj1与a1交换,交换后新的aj1有性质aj1≥at(j1<t≤n).若再有aj2 p=""> </t≤n).若再有aj2>

〉a1(j2<j1),aj2与a1交换,则交换后的aj2也有性质aj2≥at(j2<t≤n). p=""> </j1),aj2与a1交换,则交换后的aj2也有性质aj2≥at(j2<t≤n).>

如在挑选第一大元过程中,与a1交换的元素有k(k≥0)个,依次为aj1,aj2,...

ajk则它们都满足这一性质.它们的下标满足n≥j1>j2>...>jk>1.有了这些下标,

在确定第二大元时,可只考虑a2与aj(j=jk,jk-1,...,3)逐个比较.倘若jk=2,

则可不经比较就知道a2就是第二大元.在选择第二大元过程中,将与a2交换过

的元素下标也记录下来,可供选择其他大元使用.但在选则第二大元时,应保证与

a2交换的那些位置上的新值也都满足上的述性质.依次类推,顺序选择第一,第

二,...第n01大元,实现对a的排序.

设程序包含有常量和类型定义:

const maxn=1000;

type vector=array [1..maxn] of integer;

index=1..maxn;

[程序]

procere sort (var a:vector;n:index);

var

p:vector;

i,j,k,m,t:integer;

begin

k:=0;i:=1;m:=n;

while i<n p="" do

begin

for j:=m downto i+1 do

if a[i]<a[j] p="" then

t:=a[i];a[i]:=a[j];a[j]:=t;

k:=k+1;______________

end;

repeat

______________;

if _____________ then _____________

else

begin m:=p[k];k:=k-1 end

until (i<m) (i="n);

if _____________ then

begin

t:=a[i];__________;___________

end

end

end

Ⅳ 急需程序员笔试题,附带答案

一、选择题(每题1分,共20分)
1. 下列那种语言是面向对象的(C)
A. C B. PASCAL C. C++ D. FORTRAN77
2.在 Windows9x 下,可以进入 MS-D0S 方式。当在 DOS 提示符下键入 (B ) 命令后,
系统将退出 MS-DOS方式,返回到 WIndows 方式。
A. CLOSE B. EXIT C. QUIT D. RETURN
3.下面哪些是面向对象的基本特性:(A,B,C )
A 多态 B 继承 C 封装 D 接口
4.在C++中经常要进行异常处理,下面哪些是异常处理常用到的关键词:(A,B,C)
A try B catch C throw D break E contiue
5.数据库技术中的“脏数据',是指(D)的数据。
A.错误 B.回返 C.未提交 D.未提交的随后又被撤消
6.TCP/IP是一种(A,B)
A.标准 B.协议 C.语言 D.算法
7. 下面有关计算机操作系统的叙述中,不正确的是( )
A 操作系统属于系统软件
B 操作系统只负责管理内存储器,而不管理外存储器
C UNIX 是一种操作系统
D 计算机的处理器、内存等硬件资源也由操作系统管理
8.微机上操作系统的作用是( D)
A 解释执行源程序 B 编译源程序
C 进行编码转换 D 控制和管理系统资源
9.下列存储器中存取速度最快的是(A )
A 内存 B 硬盘 C 光盘 D 软盘
10.在计算机中,—个字节是由多少个二进制位组成的( )
A. 4 B. 8 C. 16 D. 24
11. 存储16×16点阵的一个汉字信息,需要的字节数为( )
A 32 B 64 C 128 D 256
12. 以下选项中合法的字符常量是(C)
A."B" B. '\010' C. 68 D. D
13. 假定x和y为double型,则表达式x=2,y=x+3/2的值是()
A. 3.500000 B. 3 C. 2.000000 D. 3.000000
14. 以下合法的赋值语句是()
A. x=y=100 B. d--; C. x+y; D. c=int(a+b);
15. 设正x、y均为整型变量,且x=10 y=3,则以下语句
pprintf("%d,%d\n",x--,--y); 的输出结果是()
A.10,3 B. 9,3 C. 9,2 D.10,2
16. x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是()
A .INPUT x、y、z; B. scanf("%d%d%d",&x,&y,&z);
C. scanf("%d%d%d",x,y,z); D. read("%d%d%d",&x,&y,&z);
17.以下数组定义中不正确的是()
A) int a[2][3]; B) int b[][3]={0,1,2,3};
C) int c[100][100]={0}; D) int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
18. 以下程序的输出结果是()
main()
{
int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};
printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1],a[3][0];
}
A) 0650 B) 1470 C) 5430 D) 输出值不定
19 以下程序的输出结果是()
main()
{
char st[20]= "hello\0\t\\\";
printf(%d %d \n",strlen(st),sizeof(st));
}
A) 9 9 B) 5 20 C) 13 20 D) 20 20
20. 当调用Windows API函数InvalidateRect,将会产生什么消息()
A:WM_PAINT B:WM_CREATE
C:WM_NCHITTEST D:WM_SETFOCUS

二、填空题(每题3分,共30分)
1.请列举当前一些当前流行的数据库引擎__________
2. 为了将当前盘当前目录中的所有文本文件(扩展名为.TXT)的内容打印输出,正确
的单条DOS命令为______。
3. 计算机网络分为局域网和广域网,因特网属于 广域网。
4. 设y是int型变量,请写出判断y为奇效的关系表达_______。
5. 设有以下程序:
main()
{ int n1,n2;
scanf("%d",&n2);
while(n2!=0)
{ n1=n2%10;
n2=n2/10;
printf("%d",n1);
}
}
程序运行后,如果从键盘上输入1298;则输出结果为____。
6.以下程序运行后的输出结果是______。
main()
{ char s[ ]="9876",*p;
for ( p=s ; pbr>}
7.以下函数的功能是:求x的y次方,请填空。
double fun( double x, int y)
{ int i;
double z;
for(i=1, z=x; ibr>return z;
}
8.以下程序段打开文件后,先利用fseek函数将文件位置指针定位在文件末尾,然后调
用ftell函数返回当前文件位置指针的具体位置,从而确定文件长度,请填空。
FILE *myf; ling f1;
myf= ______("test.t","rb");
fseek(myf,0,SEEK_END); f1=ftel(myf);
fclose(myf);
printf("%d\n",f1);
9. 以下程序输出的最后一个值是______。
int ff(int n)
{ static int f=l;
f=f*n;
return f;
}
main()
{ int i;
for(I=1;I<=5;I++ printf("%d\n",ff(i));
)
10. 以下程序运行后的输出结果是_____。
main()
{ int i=10, j=0;
do
{ j=j+i; i-;
while(i>2);
printf("%d\n",j);
}

三、判断题(每题2分,共20分)
1:动态链结库不能静态调用。
2:UDP是面向无连接的网络连接
3:ASP是一种数据库引擎
4:队列是先进后出。
5:Weblogic是分布式应用服务器。
6:TCP,UDP都是传输层的协议。
7: 两个线程不能共存于同一地址空间
8: JAVA是一种跨平台的开发工具
9.在WINDOWS操作系统中对外设是以文件的方式进行管理
10. 虚拟内存实际是创建在硬盘上的

四、问答题(每题10分,共30分)
1. 写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出
的和以总和显示的SQL。
Select No、Name、Num1、Num2 from custom;
2. 何为“事务处理”,谈谈你对它的理解。
3. 常用的数据结构有哪些?请枚举一些。(不少于5个)
4. 什么是OOP?什么是类?请对比类和对象实例之间的关系。
5. 有一组数字(3,10,6,8,98,22),请编程排序(升降序皆可),语言不限,算法不限,但须注明是何种算法。
[email protected]

Ⅵ 程序员面试经常被提到的问题

java 程序员常用面试题- -

Java程序员面试三十二问

Java程序员面试三十二问
作者:佚名 来自:未知

第一,谈谈final, finally, finalize的区别。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以

implements(实现)interface(接口)?

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

第四,&和&&的区别。

第五,HashMap和Hashtable的区别。

第六,Collection 和 Collections的区别。

第七,什么时候用assert.

第八,GC是什么? 为什么要有GC?

第九,String s = new String("xyz");创建了几个String Object?

第十,Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

第十二,sleep() 和 wait() 有什么区别?

第十三,Java有没有goto?

第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()?

它们有何区别?

第十七,给我一个你最常见到的runtime exception.

第十八,error和exception有什么区别?

第十九,List, Set, Map是否继承自Collection接口?

第二十,abstract class和interface有什么区别?

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是

synchronized?

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体

类(concrete class)?

第二十三,启动一个线程是用run()还是start()?

第二十四,构造器Constructor是否可被override?

第二十五,是否可以继承String类?

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它

方法?

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行

,什么时候被执行,在return前还是后?

第二十八,编程题: 用最有效率的方法算出2乘以8等于几?

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对



第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后

的结果,那么这里到底是值传递还是引用传递?

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

第三十二,编程题: 写一个Singleton出来。

以下是答案

第一,谈谈final, finally, finalize的区别。

final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父

类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,

可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能

读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时提供 finally

块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入

finally 块(如果有的话)。

finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去

之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是

在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执

行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以

implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口

,由另一个内部类实现。

第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。

Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套

类最大的不同就在于是否有指向外部的引用上。具体可见http:

//www.frontfree.net/articles/services/view.asp?id=704&page=1

注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2

不能从一个static内部类的一个对象访问一个外部类对象

第四,&和&&的区别。

&是位运算符。&&是布尔逻辑运算符。

第五,HashMap和Hashtable的区别。

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步

的。

第六,Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection是个java.util下的接口,它是各种集合结构的父接口。

第七,什么时候用assert。

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为

false,那么系统会报告一个 AssertionError。它用于调试目的:

assert(a > 0); // throws an AssertionError if a <= 0

断言可以有两种形式:

assert Expression1 ;
assert Expression1 : Expression2 ;

Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。

断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:

javac -source 1.4 Test.java

要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。

可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。

不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参

数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任

何方式改变程序的状态。

第八,GC是什么? 为什么要有GC? (基础)。

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收

集,可以调用下面的方法之一:

System.gc()
Runtime.getRuntime().gc()

第九,String s = new String("xyz");创建了几个String Object?

两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。

第十,Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;

第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为

s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。

第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。

这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更

高的优先级,(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对

象进入等待状态,直到被唤醒或等待时间到。

第十三,Java有没有goto?

Goto?java中的保留字,现在没有在java中使用。

第十四,数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()这个方法,有length的属性。
String有有length()这个方法。

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类

之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其

父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子

类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或

有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改

变返回值的类型。

第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它

们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相

等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的

内容和类型相配的话,返回真值。

第十七,给我一个你最常见到的runtime exception。

ArithmeticException, ArrayStoreException, BufferOverflowException,

BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException,

CMMException, , DOMException, EmptyStackException,

IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,

IllegalStateException, ImagingOpException, IndexOutOfBoundsException,

MissingResourceException, NegativeArraySizeException, NoSuchElementException,

NullPointerException, ProfileDataException, ProviderException, RasterFormatException,

SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException,

UnsupportedOperationException

第十八,error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能

处理这样的情况。

exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

第十九,List, Set, Map是否继承自Collection接口?

List,Set是

Map不是

第二十,abstract class和interface有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基

本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而

可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象

静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代

之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的

接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量

。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即

将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。

由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类

型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是

synchronized?

都不能

第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类

(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类

必须有明确的构造函数。

第二十三,启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由

JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

第二十四,构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

第二十五,是否可以继承String类?

String类是final类故不可以继承。

第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它

方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行

,什么时候被执行,在return前还是后?

会执行,在return前执行。

第二十八,编程题: 用最有效率的方法算出2乘以8等于几?

有C背景的程序员特别喜欢问这种问题。

2 << 3

第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

不对,有相同的hash code。

第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后

的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数

的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int

、 short、 char 或者 byte。long,string 都不能作用于swtich。

第三十二,编程题: 写一个Singleton出来。

Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。

一般Singleton模式通常有几种种形式:

第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,

在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}

第二种形式:

public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}

其他形式:

定义一个类,它的构造函数为private的,所有方法为static的。

一般认为第一种形式要更加安全些

第三十三 Hashtable和HashMap

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许

还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为

contains方法容易让人引起误解。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,

不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

Ⅶ 程序员面试题

第一种推论:

A、假设有1条病狗,病狗的主人会看到其他狗都没有病,那么就知道自己的狗有病,所以第一天晚上就会有枪响。因为没有枪响,说明病狗数大于1。

B、假设有2条病狗,病狗的主人会看到有1条病狗,因为第一天没有听到枪响,是病狗数大于1,所以病狗的主人会知道自己的狗是病狗,因而第二天会有枪响。既然第二天也每有枪响,说明病狗数大于2。

由此推理,如果第三天枪响,则有3条病狗。

第二种推论

1 如果为1,第一天那条狗必死,因为狗主人没看到病狗,但病狗存在。

2 若为2,令病狗主人为a,b。 a看到一条病狗,b也看到一条病狗,但a看到b的病狗没死故知狗数不为1,而其他人没病狗,所以自己的狗必为病狗,故开枪;而b的想法与a一样,故也开枪。

由此,为2时,第一天看后2条狗必死。

3 若为3条,令狗主人为a,b,c。 a第一天看到2条病狗,若a设自己的不是病狗,由推理2,第二天看时,那2条狗没死,故狗数肯定不是2,而其他人没病狗,所以自己的狗必为病狗,故开枪;而b和c的想法与a一样,故也开枪。

由此,为3时,第二天看后3条狗必死。

4 若为4条,令狗主人为a,b,c,d。a第一天看到3条病狗,若a设自己的不是病狗,由推理3,第三天看时,那3条狗没死,故狗数肯定不是3,而其他人没病狗,所以自己的狗必为病狗,故开枪;而b和c,d的想法与a一样,故也开枪。

由此,为4时,第三天看后4条狗必死。

5 余下即为递推了,由年n-1推出n。

答案:n为4。第四天看时,狗已死了,但是在第三天死的,故答案是3条。

Ⅷ 75道程序员面试逻辑测试题(附答案)(1)

【1】 假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5升和6升。问题是如何只用这2个水壶从池塘里取得3升的水。

由满6向空5倒,剩1升,把这1升倒5里,然后6剩满,倒5里面,由于5里面有1升水,因此6只能向5倒4升水,然后将6剩余的2升,倒入空的5里面,再灌满6向5里倒3升,剩余3升。

【2】 周雯的妈妈是豫林水泥厂的化验员。一天,周雯来到化验室做作业。做完后想出去玩。"等等,妈妈还要考你一个题目,"她接着说,"你看这6只做化验用的玻璃杯,前面3只盛满了水,后面3只是空的。你能只移动1只玻璃杯,就便盛满水的杯子和空杯子间隔起来吗?"爱动脑筋的周雯,是学校里有名的"小机灵",她只想了一会儿就做到了。请你想想看,"小机灵"是怎样做的?

设杯子编号为ABCDEF,ABC为满,DEF为空,把B中的水倒进E中即可。

【3】 三个小伙子同时爱上了一个姑娘,为了决定他们谁能娶这个姑娘,他们决定用手枪进行一次决斗。小李的命中率是30%,小黄比他好些,命中率是50%,最出色的枪手是小林,他从不失误,命中率是100%。由于这个显而易见的事实,为公平起见,他们决定按这样的顺序:小李先开枪,小黄第二,小林最后。然后这样循环,直到他们只剩下一个人。

那么这三个人中谁活下来的机会最大呢?他们都应该采取什么样的策略?

小林在轮到自己且小黄没死的条件下必杀黄,再跟菜鸟李单挑。

所以黄在林没死的情况下必打林,否则自己必死。

小李经过计算比较(过程略),会决定自己先打小林。

于是经计算,小李有873/2600≈33.6%的生机;

小黄有109/260≈41.9%的生机;

小林有24.5%的生机。

哦,这样,那小李的第一枪会朝天开,以后当然是打敌人,谁活着打谁;

小黄一如既往先打林,小林还是先干掉黄,冤家路窄啊!

最后李,黄,林存活率约38:27:35;

菜鸟活下来抱得美人归的几率大。

李先放一空枪(如果合伙干中林,自己最吃亏)黄会选林打一枪(如不打林,自己肯定先玩完了)林会选黄打一枪(毕竟它命中率高)李黄对决0.3:0.280.4可能性李林对决0.3:0.60.6可能性成功率0.73

李和黄打林李黄对决0.3:0.40.7 0.4可能性李林对决0.3:0.7 0.6 0.70.7 0.6可能性成功率0.64

【4】 一间囚房里关押着两个犯人。每天监狱都会为这间囚房提供一罐汤,让这两个犯人自己来分。起初,这两个人经常会发生争执,因为他们总是有人认为对方的汤比自己的多。后来他们找到了一个两全其美的办法:一个人分汤,让另一个人先选。于是争端就这么解决了。可是,现在这间囚房里又加进来一个新犯人,现在是三个人来分汤。必须寻找一个新的方法来维持他们之间的和平。该怎么办呢?按:心理问题,不是逻辑问题

是让甲分汤,分好后由乙和丙按任意顺序给自己挑汤,剩余一碗留给甲。这样乙和丙两人的总和肯定是他们两人可拿到的最大。然后将他们两人的汤混合之后再按两人的方法再次分汤。

【5】 在一张长方形的桌面上放了n个一样大小的圆形硬币。这些硬币中可能有一些不完全在桌面内,也可能有一些彼此重叠;当再多放一个硬币而它的圆心在桌面内时,新放的硬币便必定与原先某些硬币重叠。请证明整个桌面可以用4n个硬币完全覆盖。

要想让新放的硬币不与原先的硬币重叠,两个硬币的圆心距必须大于直径。也就是说,对于桌面上任意一点,到最近的圆心的距离都小于2,所以,整个桌面可以用n个半径为2的硬币覆盖。

把桌面和硬币的尺度都缩小一倍,那么,长、宽各是原桌面一半的小桌面,就可以用n个半径为1的硬币覆盖。那么,把原来的桌子分割成相等的4块小桌子,那么每块小桌子都可以用n个半径为1的硬币覆盖,因此,整个桌面就可以用4n个半径为1的硬币覆盖。

【6】 一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多,看看谁的比较巧妙

把球放在平面上,把直尺的一边卡在平面上,一边卡在球上,球与尺子的接触点到平面的距离就是球的半径.因为直尺长度约为直径的2/3>半径,所以能测量.

【7】 五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆?

底下放一个1,然后2 3放在1上面,另外的4 5竖起来放在1的上面。

【8】 猜牌问题S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4黑桃J、8、4、2、7、3草花K、Q、5、4、6方块A、5。约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?于是,S先生听到如下的对话:P先生:我不知道这张牌。Q先生:我知道你不知道这张牌。P先生:现在我知道这张牌了。Q先生:我也知道了。听罢以上的对话,S先生想了一想之后,就正确地推出这张牌是什么牌。请问:这张牌是什么牌? 方块5

【9】 一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!一天教授给他们出了一个题,教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个!(每个人可以看见另两个数,但看不见自己的)教授问第一个学生:你能猜出自己的数吗?回答:不能,问第二个,不能,第三个,不能,再问第一个,不能,第二个,不能,第三个:我猜出来了,是144!教授很满意的笑了。请问您能猜出另外两个人的数吗?

经过第一轮,说明任何两个数都是不同的。第二轮,前两个人没有猜出,说明任何一个数都不是其它数的两倍。现在有了以下几个条件:1.每个数大于02.两两不等3.任意一个数不是其他数的两倍。每个数字可能是另两个之和或之差,第三个人能猜出144,必然根据前面三个条件排除了其中的一种可能。假设:是两个数之差,即x-y=144。这时1(x,y>0)和2(x!=y)都满足,所以要否定x+y必然要使3不满足,即x+y=2y,解得x=y,不成立(不然第一轮就可猜出),所以不是两数之差。因此是两数之和,即x+y=144。同理,这时1,2都满足,必然要使3不满足,即x-y=2y,两方程联立,可得x=108,y=36。

这两轮猜的顺序其实分别为这样:第一轮(一号,二号),第二轮(三号,一号,二号)。这样分大家在每轮结束时获得的信息是相同的(即前面的三个条件)。

那么就假设我们是C,来看看C是怎么做出来的:C看到的是A的36和B的108,因为条件,两个数的和是第三个,那么自己要么是72要么是144(猜到这个是因为72的话,108就是36和72的和,144的话就是108和36的和。这样子这句话看不懂的举手):

假设自己(C)是72的话,那么B在第二回合的时候就可以看出来,下面是如果C是72,B的思路:这种情况下,B看到的就是A的36和C的72,那么他就可以猜自己,是36或者是108(猜到这个是因为36的话,36加36等于72,108的话就是36和108的和):

如果假设自己(B)头上是36,那么,C在第一回合的时候就可以看出来,下面是如果B是36,C的思路:这种情况下,C看到的就是A的36和B的36,那么他就可以猜自己,是72或者是0(这个不再解释了):

如果假设自己(C)头上是0,那么,A在第一回合的时候就可以看出来,下面是如果C是0,A的思路:这种情况下,A看到的就是B的36和C的0,那么他就可以猜自己,是36或者是36(这个不再解释了),那他可以一口报出自己头上的36。(然后是逆推逆推逆推),现在A在第一回合没报出自己的36,C(在B的想象中)就可以知道自己头上不是0,如果其他和B的想法一样(指B头上是36),那么C在第一回合就可以报出自己的72。现在C在第一回合没报出自己的36,B(在C的想象中)就可以知道自己头上不是36,如果其他和C的想法一样(指C头上是72),那么B在第二回合就可以报出自己的108。现在B在第二回合没报出自己的108,C就可以知道自己头上不是72,那么C头上的唯一可能就是144了。

史上最雷人的应聘者

【10】 某城市发生了一起汽车撞人逃跑事件,该城市只有两种颜色的车,蓝15%绿85%,事发时有一个人在现场看见了,他指证是蓝车,但是根据专家在现场分析,当时那种条件能看正确的可能性是80%那么,肇事的车是蓝车的概率到底是多少?

15% 80%/(85%×20%+15% 80%)

【11】 有一人有240公斤水,他想运往干旱地区赚钱。他每次最多携带60公斤,并且每前进一公里须耗水1公斤(均匀耗水)。假设水的价格在出发地为0,以后,与运输路程成正比,(即在10公里处为10元/公斤,在20公里处为20元/公斤......),又假设他必须安全返回,请问,他最多可赚多少钱?

f(x)=(60-2x)*x,当x=15时,有最大值450。

450×4

【12】 现在共有100匹马跟100块石头,马分3种,大型马;中型马跟小型马。其中一匹大马一次可以驮3块石头,中型马可以驮2块,而小型马2头可以驮一块石头。问需要多少匹大马,中型马跟小型马?(问题的关键是刚好必须是用完100匹马) 6种结果

【13】 1=5,2=15,3=215,4=2145那么5=?

因为1=5,所以5=1.

【14】 有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。问:有多少种排队方法使得每当一个拥有1美元买票时,电影院都有50美分找钱

注:1美元=100美分拥有1美元的人,拥有的是纸币,没法破成2个50美分

本题可用递归算法,但时间复杂度为2的n次方,也可以用动态规划法,时间复杂度为n的平方,实现起来相对要简单得多,但最方便的就是直接运用公式:排队的种数=(2n)!/[n!(n+1)!]。

如果不考虑电影院能否找钱,那么一共有(2n)!/[n!n!]种排队方法(即从2n个人中取出n个人的组合数),对于每一种排队方法,如果他会导致电影院无法找钱,则称为不合格的,这种的排队方法有(2n)!/ (n-1)!(n+1)! 种,所以合格的排队种数就是(2n)!/[n!n!]- (2n)!/[(n-1)!(n+1)!] =(2n)!/[n!(n+1)!]。至于为什么不合格数是(2n)!/[(n-1)!(n+1)!],说起来太复杂,这里就不讲了。

【15】 一个人花8块钱买了一只鸡,9块钱卖掉了,然后他觉得不划算,花10块钱又买回来了,11块卖给另外一个人。问他赚了多少?

2元

【16】 有一种体育竞赛共含M个项目,有运动员A,B,C参加,在每一项目中,第一,第二,第三名分别的X,Y,Z分,其中X,Y,Z为正整数且X>Y>Z。最后A得22分,B与C均得9分,B在百米赛中取得第一。求M的值,并问在跳高中谁得第二名。

因为ABC三人得分共40分,三名得分都为正整数且不等,所以前三名得分最少为6分,40=5 8=4 10=2 20=1 20,不难得出项目数只能是5.即M=5.

A得分为22分,共5项,所以每项第一名得分只能是5,故A应得4个一名一个二名.22=5*4+2,第二名得1分,又B百米得第一,所以A只能得这个第二.

B的5项共9分,其中百米第一5分,其它4项全是1分,9=5+1=1+1+1.即B除百米第一外全是第三,跳高第二必定是C所得.

【17】 前提:

1 有五栋五种颜色的房子

2 每一位房子的主人国籍都不同

3 这五个人每人只喝一种饮料,只抽一种牌子的香烟,只养一种宠物

4 没有人有相同的宠物,抽相同牌子的香烟,喝相同的饮料

提示:1 英国人住在红房子里

2 瑞典人养了一条狗

3 丹麦人喝茶

4 绿房子在白房子左边

5 绿房子主人喝咖啡

6 抽PALLMALL烟的人养了一只鸟

7 黄房子主人抽DUNHILL烟

8 住在中间那间房子的人喝牛奶

9 挪威人住第一间房子

10抽混合烟的人住在养猫人的旁边

11养马人住在抽DUNHILL烟的人旁边

12抽BLUEMASTER烟的人喝啤酒

13德国人抽PRINCE烟

14挪威人住在蓝房子旁边

15抽混合烟的人的邻居喝矿泉水

问题是:谁养鱼???

第一间是黄房子,挪威人住,喝矿泉水,抽DUNHILL香烟,养猫;! f/ [% a: 6 L! J. Q9 x第二间是蓝房子,丹麦人住,喝茶,抽混合烟,养马;+ o8 _0 S) L8 i' E' u第三间是红房子,英国人住,喝牛奶,抽PALL MALL烟,养鸟;/ N9 o/ n2 M# U" c第四间是绿房子,德国人住,喝咖啡,抽PRINCE烟,养猫、马、鸟、狗以外的宠物;7 P5 l) G, G, |; C, {7 V第五间是白房子,瑞典人住,喝啤酒,抽BLUE MASTER烟,养狗。

【18】 5个人来自不同地方,住不同房子,养不同动物,吸不同牌子香烟,喝不同饮料,喜欢不同食物。根据以下线索确定谁是养猫的人。

10.养鱼的人住在最右边的房子里。

11.吸万宝路香烟的人住在吸希尔顿香烟的人和吸“555”香烟的人的中间(紧邻)

12.红房子的人爱喝茶。

13.爱喝葡萄酒的人住在爱吃豆腐的人的右边隔壁。

14.吸红塔山香烟的人既不住在吸健牌香烟的人的隔壁,也不与来自上海的人相邻。

15.来自上海的人住在左数第二间房子里。

16.爱喝矿泉水的人住在最中间的房子里。

17.爱吃面条的人也爱喝葡萄酒。

18.吸“555”香烟的人比吸希尔顿香烟的人住的靠右

第一间是兰房子,住北京人,养马,抽健牌香烟,喝茅台,吃豆腐;2 G7 x% z0 v; C第二间是绿房子,住上海人,养狗,抽希尔顿,喝葡萄酒,吃面条;% C2 k4 o8 t" p6 L* x第三间是黄房子,住香港人,养蛇,抽万宝路,喝矿泉水,吃牛肉;& N" S% x# o3 a; g第四间是红房子,住天津人,抽555,喝茶,吃比萨;7 5 s. J# d, Q/ N% N' O# ]第五间是白房子,住成都人,养鱼,抽红塔山,喝啤酒,吃鸡。

【19】 斗地主附残局

地主手中牌2、K、Q、J、10、9、8、8、6、6、5、5、3、3、3、3、7、7、7、7

长工甲手中牌大王、小王、2、A、K、Q、J、10、Q、J、10、9、8、5、5、4、4

长工乙手中牌2、2、A、A、A、K、K、Q、J、10、9、9、8、6、6、4、4

三家都是明手,互知底牌。要求是:在三家都不打错牌的情况下,地主必须要么输要么赢。问:哪方会赢?

无解地主怎么出都会输

【20】 一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?

先拿下第一楼的钻石,然后在每一楼把手中的钻石与那一楼的钻石相比较,如果那一楼的钻石比手中的钻石大的话那就把手中的钻石换成那一层的钻石。

阅读全文

与程序员必考50道题相关的资料

热点内容
手机怎么调整app大小 浏览:451
加密门禁卡揭秘 浏览:135
词释pdf 浏览:989
安卓手机上如何停止自动续费 浏览:880
加密编码摘要 浏览:785
疫情命令党 浏览:496
java转sql 浏览:705
android获取apn 浏览:74
phpfpm进程池 浏览:793
解压掏耳朵音频 浏览:674
爬香山解压 浏览:952
算法导论回溯 浏览:343
开盘指标源码查询 浏览:528
有道云保存服务器出错 浏览:641
生成360文件夹 浏览:1004
图库的文件夹是哪个 浏览:506
程序员为什么药学日语 浏览:424
熟悉linux常用命令 浏览:860
印度外卖小哥是程序员 浏览:414
绍兴程序员开发驻场流程 浏览:548