分类:笔试 字号: 大大 中中 小小 一、 


单项选择题 


  1.Java是从( 


)语言改进重新设计。 


  A.Ada B.C++ C.Pasacal D.BASIC 


  答案:B 


   


  2.下列语句哪一个正确( 


) 


  A. Java程序经编译后会产生machine code 


  B. Java程序经编译后会产生byte code 


  C. Java程序经编译后会产生DLL 


  D. 


以上都不正确 


  答案:B 


   


  3.下列说法正确的有( 


) 


  A. class中的constructor不可省略 


  B. constructor必须与class同名,但方法不能与class同名 


  C. constructor在一个对象被new时执行 


  D. 


一个class只能定义一个constructor 


  答案:C 


   


  4.提供Java存取数据库能力的包是( 


) 


  A.java.sql B.java.awt C.java.lang D.java.swing 


  答案:A 


   


  5.下列运算符合法的是( 


) 


  A.&& B.<> C.if D.:= 


  答案:A 


   


  6.执行如下程序代码 


  a=0;c=0; 


  do{ 


  --c; 


  a=a-1; 


  }while(a>0); 


  后,C的值是( 


) 


  A.0 B.1 C.-1 D.死循环 


  答案:C 


   


  7.下列哪一种叙述是正确的( 


) 


  A. abstract修饰符可修饰字段、方法和类 


  B. 


抽象方法的body部分必须用一对大括号{ }包住 


  C. 


声明抽象方法,大括号可有可无 


  D. 


声明抽象方法不可写出大括号 


  答案:D 


   


  8.下列语句正确的是( 


) 


  A. 


形式参数可被视为local variable 


  B. 


形式参数可被字段修饰符修饰 


  C. 


形式参数为方法被调用时,真正被传递的参数 


  D. 


形式参数不可以是对象 


  答案:A 


   


  9.下列哪种说法是正确的( 


) 


  A. 


实例方法可直接调用超类的实例方法 


  B. 


实例方法可直接调用超类的类方法 


  C. 


实例方法可直接调用其他类的实例方法 


  D. 


实例方法可直接调用本类的类方法 


  答案:D 


   


  二、 


多项选择题 


  1.Java程序的种类有( 


) 


  A.类(Class) B.Applet C.Application D.Servlet 


  2.下列说法正确的有( 


) 


  A. 


环境变量可在编译source code时指定 


  B. 


在编译程序时,所能指定的环境变量不包括class path 


  C. javac一次可同时编译数个Java源文件 


  D. javac.exe能指定编译结果要置于哪个目录(directory) 


  答案:BCD 


   


  3.下列标识符不合法的有( 


) 


  A.new B.$Usdollars C.1234 D.car.taxi 


  答案:ACD 


   


  4.下列说法错误的有( 


) 


  A. 


数组是一种对象 


  B. 


数组属于一种原生类 


  C. int number=[]={31,23,33,43,35,63} 


  D. 


数组的大小可以任意改变 


  答案:BCD 


   


  5.不能用来修饰interface的有( 


) 


  A.private B.public C.protected D.static 


  答案:ACD 


   


  6.下列正确的有( 


) 


  A. call by value不会改变实际参数的数值 


  B. call by reference能改变实际参数的参考地址 


  C. call by reference不能改变实际参数的参考地址 


  D. call by reference能改变实际参数的内容 


  答案:ACD 


   


  7.下列说法错误的有( 


) 


  A. 


在类方法中可用this来调用本类的类方法 


  B. 


在类方法中调用本类的类方法时可直接调用 


  C. 


在类方法中只能调用本类中的类方法 


  D. 


在类方法中绝对不能调用实例方法 


  答案:ACD 


   


  8.下列说法错误的有( 


) 


  A. Java面向对象语言容许单独的过程与函数存在 


  B. Java面向对象语言容许单独的方法存在 


  C. Java语言中的方法属于类中的成员(member) 


  D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同 


  答案:ABC 


   


  9.下列说法错误的有( 


) 


  A. 


能被java.exe成功运行的java class文件必须有main()方法 


  B. J2SDK就是Java API 


  C. Appletviewer.exe可利用jar选项运行.jar文件 


  D. 


能被Appletviewer成功运行的java class文件必须有main()方法 


  答案:BCD 


   


  三、 


判断题 


  1.Java程序中的起始类名称必须与存放该类的文件名相同。( 


) 


  答案:正确 


   


  2.Unicode是用16位来表示一个字的。( 


) 


  答案:正确 


   


  3.原生类中的数据类型均可任意转换。( 


) 


  答案:错误 




1.分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。 

答案: 

BOOL : if ( !a ) or if(a) 

int : if ( a == 0) 

float : const EXPRESSION EXP = 0.000001 

 if ( a < EXP && a >-EXP) 

pointer : if ( a != NULL) or if(a == NULL) 




2.请说出const与#define 相比,有何优点? 

答案:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。 

 2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。 


3.简述数组与指针的区别? 

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。 

(1)修改内容上的差别 

char a[] = “hello”; 

a[0] = ‘X’; 

char *p = “world”; // 注意p 指向常量字符串 

p[0] = ‘X’; // 编译器不能发现该错误,运行时错误 

(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。 

char a[] = "hello world"; 

char *p = a; 

cout<< sizeof(a) << endl; // 12 字节 

cout<< sizeof(p) << endl; // 4 字节 

计算数组和指针的内存容量 

void Func(char a[100]) 

{ 

cout<< sizeof(a) << endl; // 4 字节而不是100 字节 

} 


4.类成员函数的重载、覆盖和隐藏区别? 

答案: 

a.成员函数被重载的特征: 

(1)相同的范围(在同一个类中); 

(2)函数名字相同; 

(3)参数不同; 

(4)virtual 关键字可有可无。 

b.覆盖是指派生类函数覆盖基类函数,特征是: 

(1)不同的范围(分别位于派生类与基类); 

(2)函数名字相同; 

(3)参数相同; 

(4)基类函数必须有virtual 关键字。 

c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下: 

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。 

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆) 


5. There are two int variables: a and b, don’t use “if”, “? :”, “switch”or other judgement statements, find out the biggest one of the two numbers. 

答案:( ( a + b ) + abs( a - b ) ) / 2 


6. 如何打印出当前源文件的文件名以及源文件的当前行号? 

答案: 

cout << __FILE__ ; 

cout<<__LINE__ ; 

__FILE__和__LINE__是系统预定义宏,这种宏并不是在某个文件中定义的,而是由编译器定义的。 


7. main 主函数执行完毕后,是否可能会再执行一段代码,给出说明? 

答案:可以,可以用_onexit 注册一个函数,它会在main 之后执行int fn1(void), fn2(void), fn3(void), fn4 (void); 

void main( void ) 

{ 

String str("zhanglin"); 

_onexit( fn1 ); 

_onexit( fn2 ); 

_onexit( fn3 ); 

_onexit( fn4 ); 

printf( "This is executed first.\n" ); 

} 

int fn1() 

{ 

printf( "next.\n" ); 

return 0; 

} 

int fn2() 

{ 

printf( "executed " ); 

return 0; 

} 

int fn3() 

{ 

printf( "is " ); 

return 0; 

} 

int fn4() 

{ 

printf( "This " ); 

return 0; 

} 

The _onexit function is passed the address of a function (func) to be called when the program terminates normally. Successive calls to _onexit create a register of functions that are executed in LIFO (last-in-first-out) order. The functions passed to _onexit cannot take parameters. 



8. 如何判断一段程序是由C 编译程序还是由C++编译程序编译的? 

答案: 

#ifdef __cplusplus 

cout<<"c++"; 

#else 

cout<<"c"; 

#endif 


9.文件中有一组整数,要求排序后输出到另一个文件中 

答案: 


#i nclude 


#i nclude 


using namespace std; 



void Order(vector& data) //bubble sort 

{ 

int count = data.size() ; 

int tag = false ; // 设置是否需要继续冒泡的标志位 

for ( int i = 0 ; i < count ; i++) 

{ 

for ( int j = 0 ; j < count - i - 1 ; j++) 

{ 

if ( data[j] > data[j+1]) 

{ 

tag = true ; 

int temp = data[j] ; 

data[j] = data[j+1] ; 

data[j+1] = temp ; 

} 

} 

if ( !tag ) 

break ; 

} 

} 



void main( void ) 

{ 

vectordata; 

ifstream in("c:\\data.txt"); 

if ( !in) 

{ 

cout<<"file error!"; 

exit(1); 

} 

int temp; 

while (!in.eof()) 

{ 

in>>temp; 

data.push_back(temp); 

} 

in.close(); //关闭输入文件流 

Order(data); 

ofstream out("c:\\result.txt"); 

if ( !out) 

{ 

cout<<"file error!"; 

exit(1); 

} 

for ( i = 0 ; i < data.size() ; i++) 

out<<DATA[I]<<" ?; 

10. 链表题:一个链表的结点结构 

struct Node 

{ 

int data ; 

Node *next ; 

}; 

typedef struct Node Node ; 



(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel) 


Node * ReverseList(Node *head) //链表逆序 

{ 

if ( head == NULL || head->next == NULL ) 

return head; 

Node *p1 = head ; 

Node *p2 = p1->next ; 

Node *p3 = p2->next ; 

p1->next = NULL ; 

while ( p3 != NULL ) 

{ 

p2->next = p1 ; 

p1 = p2 ; 

p2 = p3 ; 

p3 = p3->next ; 

} 

p2->next = p1 ; 

head = p2 ; 

return head ; 

} 

(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同) 

Node * Merge(Node *head1 , Node *head2) 

{ 

if ( head1 == NULL) 

return head2 ; 

if ( head2 == NULL) 

return head1 ; 

Node *head = NULL ; 

Node *p1 = NULL; 

Node *p2 = NULL; 

if ( head1->data < head2->data ) 

{ 

head = head1 ; 

p1 = head1->next; 

p2 = head2 ; 

} 

else 

{ 

head = head2 ; 

p2 = head2->next ; 

p1 = head1 ; 

} 

Node *pcurrent = head ; 

while ( p1 != NULL && p2 != NULL) 

{ 

if ( p1->data <= p2->data ) 

{ 

pcurrent->next = p1 ; 

pcurrent = p1 ; 

p1 = p1->next ; 

} 

else 

{ 

pcurrent->next = p2 ; 

pcurrent = p2 ; 

p2 = p2->next ; 

} 

} 

if ( p1 != NULL ) 

pcurrent->next = p1 ; 

if ( p2 != NULL ) 

pcurrent->next = p2 ; 

return head ; 

} 

(3)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。 (Autodesk) 

答案: 

Node * MergeRecursive(Node *head1 , Node *head2) 

{ 

if ( head1 == NULL ) 

return head2 ; 

if ( head2 == NULL) 

return head1 ; 

Node *head = NULL ; 

if ( head1->data < head2->data ) 

{ 

head = head1 ; 

head->next = MergeRecursive(head1->next,head2); 

} 

else 

{ 

head = head2 ; 

head->next = MergeRecursive(head1,head2->next); 

} 

return head ; 

} 




上海-亿川信息 



A. UNIX B. Linux C windows NT或sever D OS X 


2.中国的地域性顶级域名是: (C) 


A. an B. bn C cn D dn 


3.HTML中超连接的一对标记是: A 


A. <a></a> B. <b></b> C <i></i> D <p></p> 


4.下面哪种不属于VBscript程序的流程 (C) 


A. 顺序 B. 选择 C 交叉 D 循环 


5.Response.Write方法的作用是(A) 


A 向浏览器输出动态数据 


B 将用户信息提交到服务器 


C 查询服务器中的数据 


D 更新服务器数据 


6.下面对在网站建设中Cookies的解释正确的是(B) 


A 一种意大利小甜饼 


B 保存用户信息的一个小型文本文件 


C 保存在服务器上的用户信息文档 


D 保存在用户上的小程序 


7. 请问下面程序段执行完毕,页面上显示内容是什么:(C) 


<% 


Response.Write “<a href=’’http://www.sina.com.cn’’>新浪</a>” 


%> 


A. 新浪 B. <a href=’’http://www.sina.com.cn’’>新浪</a> 


C. 新浪(超链接) D. 该句有错,无法正常输出 


8 请问下面程序段执行完毕,页面上显示的内容是什么?(A) 


<% 


Response.Write “春秋” 


Response.End 


Response.Write “战国” 


%> 


A. 春秋 B. 战国 


C. 春秋战国 D. 春秋(换行)战国 


9.Application对象的默认有效期为多少分钟?(D) 


A. 10 B. 15 C. 20 D. 应用程序从启动到结束 


10. 下列Response对象的用法错误的是(A) 


A <% Response.Write 输出到浏览器信息 %> 


B <% = "输出到浏览器信息" %> 


C <% Response.End %> 


D 以上全都正确 




、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。 


排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 


快速排序的伪代码。 


/ /使用快速排序方法对a[ 0 :n- 1 ]排序 


从a[ 0 :n- 1 ]中选择一个元素作为m I d d l e,该元素为支点 


把余下的元素分割为两段left 和r I g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点 


递归地使用快速排序方法对left 进行排序 


递归地使用快速排序方法对right 进行排序 


所得结果为l e f t m I d d l e r I g h t 


6、请对以下在J2EE中常用的名词进行解释(或简单描述) 


web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接**互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 


EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。 


JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系 


,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。 


JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。 


JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。 


JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。 


RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。 



7、JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 


Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 


用try来指定一块预防所有\"异常\"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的\"异常\"的类型。 


Throw语句用来明确地抛出一个\"异常\"。 


Throws用来标明一个成员函数可能抛出的各种\"异常\"。 


Finally为确保一段代码不管发生什么\"异常\"都被执行一段代码。 


可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,\"异常\"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种\"异常\"进行处理,堆栈就会展开,直到遇到有处理这种\"异常\"的try语句。 


1、字符串abcdefg,要求按逆序输出为gfedcba 


public class Main { 

public static void main(String[] args) { 

 StringBuffer buf = new StringBuffer("abcdefg"); 

 buf = buf.reverse(); 

 System.out.println(buf.toString()); 

} 

} 


2、使用字符串的正则判断是否全部由数字组成 


import java.util.Scanner; 

import java.util.regex.Matcher; 

import java.util.regex.Pattern; 

public class JAVA { 

public static void main(String[] args) { 

 String regEx = "\\D+"; 

 Scanner in = new Scanner(System.in); 

 while (in.hasNext()) { 

 String str = in.next(); 

 Pattern p = Pattern.compile(regEx); 

 Matcher m = p.matcher(str); 

 if (!m.find()) { 

 System.out.println("输入的字符串全是数字"); 

 } else { 

 System.out.println("输入的字符串不全是数字"); 

 } 

 } 

} 

} 


3、把当前日期转换成yyyy年MM月dd日 


import java.text.SimpleDateFormat; 

import java.util.Date; 

public class JAVA { 

public static void main(String[] args) { 

 SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日"); 

 Date d = new Date(); 

 String s = sf.format(d); 

 System.out.println(s); 

} 

} 



4、编一个程序,它能读入两个正整数(第一个:n进制的基数(2-19) 第二个:要转换的十进制数),,并输出这个正整数的2-19进制形式,依次用A、B、C、D、E、F、G、H、I表示10、11、12、13、14、15、16、17、18。如输入为15 56时,输出为3B。 


import java.util.Scanner; 

public class Main { 

public static void main(String[] args) { 

 char[] charaters = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 

 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' }; 

 Scanner in = new Scanner(System.in); 

 StringBuffer ans = new StringBuffer(""); 

 int base = 0; 

 int digit = 0; 

 base = in.nextInt(); 

 digit = in.nextInt(); 

 if (2 <= base && base <= 18) { 

 while (digit != 0) { 

 ans.append(charaters[digit % base]); 

 digit /= base; 

 } 

 ans = ans.reverse(); 

 System.out.println(ans.toString()); 

 } else { 

 System.out.println("Input Error!"); 

 } 

} 

}