文档库 最新最全的文档下载
当前位置:文档库 › 200905_java企业面试题整理

200905_java企业面试题整理

200905_java企业面试题整理
200905_java企业面试题整理

1、1+2+3……+100构建一个函数。(易)

答案:

public int Sum(int n)

{

if(n == 1)

return 1;

else

return n + Sum(n - 1);

}

2、描述冒泡算法。(易)

答案:

基本思路:对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有n 个元素,那么一共要进行n-1 轮比较,第i 轮要进行j=n-i 次比较。(如:有5个元素,则要进行5-1轮比较。第3轮则要进行5-3次比较)

3、堆和栈的区别!(难)

答案:

二、堆和栈的理论知识

申请方式

栈:Stack

由系统自动分配。例如,声明在函数中一个局部变量int b; 系统自动在栈中为b开辟空间

堆:Heap

需要程序员自己申请,并指明大小,在c中malloc函数

申请后系统的响应

栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,

申请大小的限制

栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈

获得的空间较小。

堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

申请效率的比较:

栈由系统自动分配,速度较快。但程序员是无法控制的。

堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.

堆和栈中的存储内容

栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。

小结:

堆和栈的区别可以用如下的比喻来看出:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

4、用单利模式构建一个类(中)

答案:

public class SingletonTest {

private static SingletonTest instance;

private SingletonTest() {}

public static SingletonTest getInstance() {

if (instance == null) {

instance = new SingletonTest();}

return instance;

}

5、索引是怎样来提高搜索速度的!(难)

答案:

使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(lname)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。

6、画一个项目的体系结构图。(难)

答案:

1,对MVC的理解?(中)

答案:

MVC是Model-View-Controller 的缩写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),”View”是应用的表示面,用于与用户的交互(由JSP页

面产生)。“Controller”是提供应用的处理过程控制(一般是一个SERVLET)通过这种设计模型所应用逻辑处理过程和显示逻辑分成不同的组件实现这些组件可以进行交互和重用MODEL层实现系统中的业务逻辑VIEW层用于与用户的交互Controller层是Model与View 之间沟通的桥梁,可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射、为模型层可执行的操作

2.抽象类和接口的区别?(中)

答案:

接口是公开的,不能包含私有的方法或变量,而抽象类是可以有私有方法或私有变量的,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,

接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,

接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

3.同步和异步有何异同,在什么情况下分别使用它们?(难)

答案:

通俗版:

举个例子:普通B/S模式(同步)AJAX技术(异步)

同步:提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事

异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

--------------------------------------------------------------------------------------------------------------------

同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。

异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。

所以,要我请你吃饭就用同步的方法,要请我吃饭就用异步的方法,这样你可以省钱。

--------------------------------------------------------------------------------------------------------------------

举个例子打电话时同步发消息是异步

综述版:

异步通信”是一种很常用的通信方式。异步通信在发送字符时,所发送的字符之间的时间间隔可以是任意的。当然,接收端必须时刻做好接收的准备(如果接收端主机的电源都没有加上,那么发送端发送字符就没有意义,因为接收端根本无法接收)。发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。异步通信的好处是通信设备简单、便宜,但传输效率较低(因为开始位和停止位的开销所占比例较大)。

异步通信也可以是以帧作为发送的单位。接收端必须随时做好接收帧的准备。这是,帧的首部必须设有一些特殊的比特组合,使得接收端能够找出一帧的开始。这也称为帧定界。帧定界还包含确定帧的结束位置。这有两种方法。一种是在帧的尾部设有某种特殊的比特组合来标志帧的结束。或者在帧首部中设有帧长度的字段。需要注意的是,在异步发送帧时,并不是说发送端对帧中的每一个字符都必须加上开始位和停止位后再发送出去,而是说,发送端可以在任意时间发送一个帧,而帧与帧之间的时间间隔也可以是任意的。在一帧中的所有比特是连续发送的。发送端不需要在发送一帧之前和接收端进行协调(不需要先进行比特同步)。每个字符开始发送的时间可以是任意的t0 0 1 1 0 1 1 0起始位结束位t每个帧开始发送的时间可以是任意的以字符为单位发送以帧为单位发送帧开始帧结束

“同步通信”的通信双方必须先建立同步,即双方的时钟要调整到同一个频率。收发双方不停地发送和接收连续的同步比特流。但这时还有两种不同的同步方式。一种是使用全网同步,用一个非常精确的主时钟对全网所有结点上的时钟进行同步。另一种是使用准同步,各结点

的时钟之间允许有微小的误差,然后采用其他措施实现同步传输。

串口进行通信的方式有两种:同步通信方式和异步通信方式。同步通信方式要求通信双方以相同的时钟频率进行,而且准确协调,通过共享一个单个时钟或定时脉冲源保证发送方和接收方的准确同步,效率较高;异步通信方式不要求双方同步,收发方可采用各自的时钟源,双方遵循异步的通信协议,以字符为数据传输单位,发送方传送字符的时间间隔不确定,发送效率比同步传送效率低。

4.说说你所熟悉或听说过的J2EE中的几种常用模式,及对设计模式的看法(中)

答案:

工厂模式、单例模式、代理模式、门面模式等

设计模式就是解决某一类问题的方法论

5.servlet的生命周期(中)

答案:

实例化→初始化→服务→销毁

6.连接相数据库的几中方式(中)

答案:

直连

桥连

JNDI

7.String s=new String(“abc”);创建了几个对象?(易)

两个,一个是”abc”,一个是指向”abc”的引用

北京分形科技有限公司的笔试题目

选择题:

1.下列是类和对象关系得是(B)(易)

A.苹果和橘子 B.水果和苹果

C.水果和水果刀

D.苹果和水果刀

2.Int i=0; i=i++;执行这2句话后变量i的值为(A)(难)

A. 0

B. 1

C. 2

D. 3

程序题

一、.怎样用2个栈实现队列(难)

队列的要求是先进先出,用两个栈可以很容易的实现

假设其中一个栈为s1, 另一个为s2

1. 入队:将元素放入s1中,s2始终为空

2. 出队:

1). 首先将s1中的元素全部导入s2的栈中,清空s1,

2). 然后再将s2栈顶元素出栈,保留下来,

3). 将s2剩余元素导入s1中,恢复数据原有顺序,就可以了

二、用递归实现任意一个数的阶乘(中)

public class test

{

public static void main(String [] args)

{

System.out.println(fuc(100));

}

public static double fuc(int n)

{

if(n==1) return 1;

else return n*fuc(n-1);

}

}

三、使用递归检索指定文件夹中的资源(难)

package com.accp;

import java.io.File;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class Recursive {

private static List fileList = new ArrayList();

/**

* 使用递归搜索指定文件夹中的资源

*

* @param path

* 要搜索的文件目录

* @return 包含文件路径的列表

*/

public static List searchFile(String path) {

try {

// List fileList = new ArrayList();

File dir = new File(path);

File[] files = dir.listFiles();

if (files == null) {

return null;

}

for (int i = 0; i < files.length; i++) {

if (files[i].isDirectory()) {

fileList.add(files[i].getAbsolutePath());

searchFile(files[i].getAbsolutePath());

} else {

String strFileName = files[i].getAbsolutePath()

.toLowerCase();

fileList.add(files[i].getAbsolutePath());

}

}

return fileList;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

}

public static void main(String[] args) {

String path = "c:\\java";

long start = System.currentTimeMillis();

Recursive r = new Recursive();

List files = r.searchFile(path);

System.out.println("共有文件数量:" + files.size());

System.out.print("总共用时:");

System.out.println(System.currentTimeMillis() - start);

Iterator i = files.iterator();

while (i.hasNext()) {

System.out.println(i.next());

}

}

}

四、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。(难) import java.io.*;

public class Dicemal

{

public static void main(String[] args) throws Exception

{

int shang=0,yu;

boolean flag=false;

System.out.println("请输入一个数字(最大值为<"+Integer.MAX_VALUE+"):"); InputStream is = System.in;

InputStreamReader isr=new InputStreamReader(is);

BufferedReader br=new BufferedReader(isr);

String str=br.readLine();

char[] ch=new char[str.length()];

str.getChars(0, str.length(), ch, 0);

for(int a=0;a

{

if(!Character.isDigit(ch[a]))

{

System.out.println("有非数字字符");

System.exit(0);

}

}

try

{

shang=Integer.parseInt(str);

flag=true;

}

catch(Exception e)

{

System.out.println("数字过大");

}

str="";

if (flag)

{

while (shang != 0)

{

yu = shang % 2;

shang = shang / 2;

str = yu + str;

}

}

System.out.println(str);

}

}

1.请写出你知道的JA V A开源软件,并用一句话说明其功能。(中) 答:Struts WEB框架

Spring IOC/AOP 框架

Hibernate ORM框架

DWR ajax 框架

Log4j 日志调试

Validator验证框架

2.构建工具Ant使用的缺省xml文件名是?(中)

答:Build.xml

3.简述什么是SOA。(难)

答:

面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。

4.XML在JA V A中有那些解析方法。(难)

DOM/SAX

5.W AR包中的jar一般是放在哪个目录下?(难)

答:lib

6.简述Junit和单元测试的作用?(中)

答:检查程序和预期设计的是否一致.

7.什么是工作流?(难)

答:

工作流(Work Flow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的河水就是工作流。

工作流属于计算机支持的协同工作(Computer Supported Cooperative Work,CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。

许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。

金航网信息技术有限公司

1.与<@ include>的区别分别在什么时候使用(中).

答:动作属于动态包含,可以传参,而指令则属于静态包含,不可传参.

2.JavaEE是什么?(中)

答:是sun提出的一种规范和标准.现在有很多种实现

3.什么是webService, 有使用经验吗? (中)

答:基于WWW的一和服务,可以实现异构平台间的相互调用.

4.Struts,webWork 的理解. (中)

答:两个实现了MVC的WEB应用程序开发的框架.

5.对Spring 的理解. (中)

答:Spring是一个容器框架,其核心机制在于IOC和AOP

6.ORM的中间控件有哪些(举例). (中)

答:Hibernate , IbatIs, JDO , EntityBean

北京鑫万佳科技有限公司(java)

1.JSP 内置对象有哪些,,分别简述作用?(中)

答:

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息

response表示HttpServletResponse对象,并提供了几个用于设置浏览器的响应的方法

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间

session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page表示从该页面产生的一个servlet实例

2.JSP 动作有哪些,简述作用?(中)

答:

jsp:include:在页面被请求的时候引入一个文件。

jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。

jsp:forward:把请求转到一个新的页面。jsp:plugin:根据浏览器类型为Java插件生成OBJECT 或EMBED标记。

3.写出JA VA的8个基本数据类型(易)

答:

Short, char, int, float, double, byte, Boolean, long

4.请写出线程同步的方法(难)

答:synchronized{}

5.写出java异常处理的5个关键字(中)

答:

Try , catch, finally, throw, throws

6.描述break和continue控制循环的流程不同之处(中)

答:break 退出牡循环体,continue指退出当前这次循环,继续进入下一次循环.

7.下面语句是否正确(难)

Public class hi{

Public int addOne(final int x) {

return ++x;

}

}

这样写对嘛?

不对,final意味着不可以修改.

1.接口和抽象类有什么区别?(中)

接口是公开的,不能包含私有的方法或变量,而抽象类是可以有私有方法或私有变量的,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,

接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,

接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

2.String s = new String("xyz");创建了几个String Object?(中)

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

3.代码改错(难)

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

short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)

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

short s1 = 1; s1 += 1;(可以正确编译)

4.是否可以继承String类?(难)

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

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

会执行,在return前执行。

6. 常见的runtime exception有哪些?。(易)

ArithmeticException,

ArrayStoreException,

BufferOverflowException,

BufferUnderflowException,

CannotRedoException, CannotUndoException,

ClassCastException,

CMMException,

ConcurrentModificationException,

DOMException,

EmptyStackException, IllegalArgumentException,

IllegalMonitorStateException,

IllegalPathStateException,

IllegalStateException,

ImagingOpException, IndexOutOfBoundsException,

MissingResourceException,

NegativeArraySizeException,

NoSuchElementException, NullPointerException,

ProfileDataException,

ProviderException,

RasterFormatException,

SecurityException,

SystemException, UndeclaredThrowableException,

UnmodifiableSetException,

UnsupportedOperationException

NullPointException

7.HashMap与HashTable的区别。(中)

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

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

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

8.代码推断?(中)

Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math.round(11.5)==12

Math.round(-11.5)==-11

round方法返回与参数最接近的长整数.

9.GC是什么? 为什么要有GC? (难)

GC是垃圾收集的意思(Gabage Collection)

Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

10.数组有没有length()这个方法? String有没有length()这个方法?(易)

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

11.构造器Constructor是否可被(覆盖)override? (易)

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

12.Java有没有goto?(易)

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

13.启动一个线程是用run()还是start()?(中)

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

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

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

不对,有相同的hash code。

15.&和&&的区别。(中)

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

16.final, finally, finalize的区别。[中]

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

17.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? (中) switch(expr1)中,expr1是一个整数表达式。应该是int、short、char byte。

long,string 都不能作用于swtich。

31. 编程题: 写一个Singleton出来。[难]

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

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

public class Singleton {

private Singleton(){}

private static Singleton instance = new Singleton();

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; }

}

String tempStr = "";

try {

tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");

tempStr = tempStr.trim();

}

catch (Exception e) {

System.err.println(e.getMessage());

}

return tempStr;

}

1、String与StringBuffer的区别(中)

答:String一但声明,在内存中是不可改变的,而StringBuffer是可变的字符序列。

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

答:可以,就为采用Unicode编码.

3、Float型float f=3.4是否正确?(易)

答:不正确,应为:float f = 3.4f;

4、下面语句执行后的结果是什么?(难)

答案:false; true

String a="teststringA";

StringBuffer b =new StringBuffer("teststring A");

String c="teststringA";

System.out.println (a.equals(b.toString()));

5、System.out.println (a==c);class.forname的作用?为什么要用?

6、说明抽象类与接口的相同点和不同点(中)

答:

1.是否可以被多继承

2.是否可以包含方法体

3. 是否可以包含私有成员

4.用途不同

7、JSP中动态INCLUDE与静态INCLUDE的区别?(难)

答:动态包含可以传递参数,而静态则不可以。

8、JSP有哪些内置对象,作用分别是什么?(中)

答:

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息

response表示HttpServletResponse对象,并提供了几个用于设置浏览器的响应的方法

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间

session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet 环境的信息

config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。page表示从该页面产生的一个servlet实例

(一)Java部分:

1.以下程序代码将输出什么? (难)

答案:3 null

public class Test {

static int a = 3;

static String b = null;

public void reset(){

a =4;

b = "abc";

}

public static void main(String[] args) {

System.out.println(a + " " + b);

}

}

2.以下程序代码输出的变量i的值为多少?(难)

答案:199

public class Test {

public static void main(String[] args) { int i = 99;

add(i);

System.out.println(i + 100);

}

public static void add(int i){

i += 100;

}

}

3. 以下程序代码中哪行代码将产生错误?(难)

class Parent {

private String name;

public Parent(){

}

}

public class Child extends Parent{

private String dev;

public Child(){

}

public String getValue(){

}

public static void main(String[] args) { Parent p = new Parent();

}

}

4.以下程序代码的输出结果为?(难)

答案:mqv

public class Test {

public static void test(){

try{

generateException();

System.out.print("e");

}catch(NumberFormatException ex){

System.out.print("j");

}finally{

System.out.print("m");

}

}

public static void generateException(){

throw new ArrayIndexOutOfBoundsException();

System.out.print("h"); //语法错误

}

public static void main(String[] args) {

try{

test();

}catch(Exception ex){

System.out.print("q");

}finally{

System.out.print("v");

}

}

}

(二)问答题:

1.MVC的各个部分通常由哪些技术来实现?如果熟悉Struts框架技术,请描述在Struts框

架中的MVC如何实现。(中)

答:

M: Module(模型层),一般由JavaBean实现

V: View(视图层),一般由JSP页面实现

C:Ctroller(控制器),一般由Servlet实现.

Struts是实现了MVC的控制器框架,其中,它对Module没有做特殊的限制,主要是在控

制器上做了工作,其核心控制器是ActionServlet首先接受客户端请求,然后会根据配置文件

交给相应的局部控制器来处理.该框架的View层主要是JSP和Tags构成.

2.写出Servlet 的生命周期(中)

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服

务器决定将实例销毁的时候调用其destroy方法。

3.forward 和redirect的区别(易)

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读

取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿

来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

4.JNDI是什么?(难)

JNDI全称 Java Naming and Directory Interface

JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows 注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。

5.错误404,500分别表示什么?(中)

404,没有找到该页(没有找到资源)。

500,内部错误。

1.对mvc的理解?(易)

MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。

* 控制器- 程序员编写程序应有的功能(实现算法等等)

* 视图- 界面设计人员进行图形界面设计

* 模型- 数据库专家进行数据管理和数据库设计

由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,软件的可扩展性和可维护性大大增加。开发人员可以通过自己的专长进行分组开发。

在Java应用程序中,视图一般由jsp或html充当,控制器由Servlet或Struts 充当,模型层由JavaBean或EJB充当。

2.数据库联接的几种方式?(中)

JA V A连接数据库的方式有多种:

根据所需要的不同数据库驱动分,分为四种:

1:1类驱动。这就是JDBC-ODBC桥的方式。但这种方式不适合程序的重用与维护,不推荐使用。需要数据库的ODBC驱动。

2:2类驱动。这就是JDBC+厂商API的形式。厂商API一般使用C编写,所以,这种方式也不长使用。

3:3类驱动。这就是JDBC+厂商Database Connection Server+DataBase的形式。这种方法就是在JA V A 与DATABASE之间价起了一台专门用与数据库连接的服务器(一般由数据库厂商提供)。他的好处在于能优化连接。

4:4类驱动。这就是纯JDBC+DATABASE的连接方式。也是推荐的连接方式。这使得APPLICATION与数据库分开,开发者只需关心内部逻辑的实现而不需注重数据库连接的具体实现。在这其中有两种连接的方式:

硬编码方式,就是在程序中硬性编入数据库连接的所须参数。

JNDI DataSource方式。就是在程序运行的外布环境中又称(Context)设置一个datasource数据源,有一个jndi 名称,程序只须查找此名称就可得到一个数据库连接的对象。

3.抽象类和接口的区别?(中)

1.abstract class 在Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。

3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是friendly 型,其值可以在子类中重新定义,也可以重新赋值。

7.接口中的方法默认都是public,abstract 类型的。

4.String s = new String(“abc”);是几个对象?(难)

如果在此语句之前没有用到”abc”,该语句会创建两个对象,"xyz"就是创造了一个String对象,然后调用的String类中的String(String)的构造方法创建的另外一个对象,"xyz"在全局数据区,s指向的对象在堆中。

如果语句如下:

String s1 = new String("abc"); //创建二个对象

String s2 = new String("abc"); //创建一个对象,并且以后每执行一次创建一个对象

5.Sevlet的生命周期?(易)

Servlet 是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:

Servlet容器完成加载Servlet类和实例化一个Servlet对象

init()方法完成初始化工作,该方法由Servlet容器调用完成

service()方法处理客户端请求,并返回响应结果

destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源6. 简述TCP的3次握手建立连接(难)

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自

己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV 状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据

7. 数据库左连接和右连接的区别?(易)

左连接就是保留左边表的相关字段,如果右边表相关字段有不匹配的,以null 填充之。

右连接就是保留右边表的相关字段,如果左边表相关字段有不匹配的,以null 填充之

8. 简述垃圾回收?(中)

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

9. 用任意语言写出一个堆栈的代码(中)

使用java.util.Stack可以直接创建堆栈对象,Stack 类描述了一个对象的后进先出(LIFO)堆栈,pop()方法删除栈顶的对象并把它作为该函数的值返回,push(Object)把一个对象压入栈顶。

用LinkedList也可以模拟堆栈实现:

public class Stack {

private LinkedList list = new LinkedList();

public void add(Object obj){

list.addLast(obj);

}

public Object get(){

return list.removeLast();

}

public static void main(String[] args){

Stack stack = new Stack();

stack.add("1");

stack.add("2");

System.out.println(stack.get());

}

}

10.用递归求出斐波那契数列的第30位数?(中)

public static long fib(int n) {

if (n == 1 || n==2) return 1;

else return fib(n-1) + fib(n-2);

}

调用fib(30)即可得到结果

11.写出一个函数实现将两个有序数组合并位一个有序数组(中)

void MergeArray(int [] pArray1, int nLen1, int [] pArray2, int nLen2, int [] pArray)

{

int i, j, n;

i = j = n = 0;

while (i < nLen1 && j < nLen2) // 循环一直进行到拷贝完某一个数组的元素为止

{

if (pArray1[i] < pArray2[j]) // 拷贝array1的元素

{

pArray[n++] = pArray1[i++];

}

else if (pArray1[i] > pArray2[j]) // 拷贝array2的元素

{

pArray[n++] = pArray2[j++];

}

相关文档