JavaJ2ee笔试总结java算法.docx
- 文档编号:29634111
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:15
- 大小:24.77KB
JavaJ2ee笔试总结java算法.docx
《JavaJ2ee笔试总结java算法.docx》由会员分享,可在线阅读,更多相关《JavaJ2ee笔试总结java算法.docx(15页珍藏版)》请在冰豆网上搜索。
JavaJ2ee笔试总结java算法
Java部分
1.求两个数的最大公约数
解答:
欧几理德原理:
辗转相除法
publicstaticintzdgys(inta,intb){
intx=a%b;
if(x==0)returnb;
elsereturnzdgys(b,x);
}
2.关于java垃圾回收器的认识
解答:
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。
通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。
通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。
当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
可以。
程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
3.请问如何设计一个类,使其只能被初始化为一个实例。
解答:
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
第一种形式:
定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
附件:
packageparent.career.blest;
classSingleton{
privateSingleton(){}//在外部用new关键字会报错,只供内部使用
//注意这是private只供内部调用
privatestaticSingletoninstance=newSingleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
publicstaticSingletongetInstance(){
returninstance;
}
publicvoidsay(Stringstr){
System.out.println(str);
}
}
classcommonClass{
publiccommonClass(){
System.out.println("这是一个普通类");
}
}
publicclassmySingleton{
publicstaticvoidmain(Stringargs[])
{
Singletonsl=Singleton.getInstance();
Singletonsl2=Singleton.getInstance();
sl.say("hello,world!
");
sl2.say("hello,worldagain!
");
System.out.println(sl==sl2);//输出true,说明sl,sl2指向同一个实例
commonClasscC=newcommonClass();
commonClasscC2=newcommonClass();
System.out.println(cC==cC2);//输出false,说明cC,cC2分别指向不同的实例
}
}
4.有一个1001个元素的数组a[n],每个元素都在1到1000这些整数中取值,其中有一个数值重复了,现在要设计一个算法找出这个数字,且每个元素只能被访问一次。
不能用辅助的存储容器。
解答:
Thisnumber=(a[0]+a[1]+a[3]+……a[1000])-(1+2+3+……+1000)
servlet生命周期以及servlet基本构架
解答:
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。
这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
Servlet的基本架构:
publicclassServletNameextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,IOException{
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throws
ServletException,IOException{
}
}
5.死锁的四个必要条件
解答:
>互斥条件:
某段时间内某资源只能由一个进程使用。
>请求和保持:
进程因请求资源而阻塞时,对已分配给它的资源保持不放。
>不剥夺条件:
资源在未使用完前,不能被剥夺,由使用进程释放。
>环路条件:
发生死锁时,有向图必构成一环路。
7.EJB是基于哪些技术实现的?
并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
解答:
EJB包括SessionBean、EntityBean、MessageDrivenBean,基于JNDI、RMI、JAT等技术实现。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。
EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
SessionBean还可以再细分为StatefulSessionBean与StatelessSessionBean,这两种的SessionBean都可以将系统逻辑放在method之中执行,不同的是StatefulSessionBean可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的StatefulSessionBean的实体。
StatelessSessionBean虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫StatelessSessionBean的时候,EJBContainer并不会找寻特定的StatelessSessionBean的实体来执行这个method。
换言之,很可能数个使用者在执行某个StatelessSessionBean的methods时,会是同一个Bean的Instance在执行。
从内存方面来看,StatefulSessionBean与StatelessSessionBean比较,StatefulSessionBean会消耗J2EEServer较多的内存,然而StatefulSessionBean的优势却在于他可以维持使用者的状态。
8.sleep()和wait()有什么区别?
解答:
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。
调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
9.forward和redirect的区别
解答:
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
10.冒泡排序算法
解答:
packageparent.career.blest;
/**
*冒泡排序算法演示:
从小到大排列数组元素
*原理:
第一个元素和后面的一个元素比较,比较结果再和后面一个元素比较,依次类推
*接着,第二个和后面元素比较,依次类推
*/
publicclassMaopao{
publicstaticint[]mppx(int[]array){
for(inti=0;i for(intj=i;j inttemp; if(array[i]>array[j]){ temp=array[i]; array[i]=array[j]; array[j]=temp; } } } returnarray; } publicstaticvoidmain(Stringargs[]){ //测试 int[]ar={12,23,1,23,45,11,42,9,45,2,16,77,86,56,43}; ar=mppx(ar); for(inti=0;i System.out.print(ar[i]+""); } } } 11.从键盘接收一个整数,并用递归求其阶乘。 解答: packageparent.career.blest; importjava.io.*; /** *用递归求阶乘算法 *从键盘接收一个整数,然后求其阶乘 */ publicclassDG_JC{ publicstaticintDG(intn){ if(n==1)return1; elsereturnn*DG(n-1); } publicstaticvoidmain(Stringargs[]){ intn=0; System.out.print("请输入一个整数: "); try{ BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in)); n=Integer.parseInt(br.readLine()); br.close(); }catch(IOExceptione){ e.printStackTrace(); } System.out.println("阶乘"+n+"! ="+DG(n)); } } 12.什么时候使用assert? 解答: 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。 如果表达式计算为false,那么系统会报告一个Assertionerror。 它用于调试目的: assert(a>0);//throwsanAssertionerrorifa<=0 断言可以有两种形式: assertExpression1; assertExpression1: Expression2; Expression1应该总是产生一个布尔值。 Expression2可以是得出一个值的任意表达式。 这个值用于生成显示更多调试信息的String消息。 断言在默认情况下是禁用的。 要在编译时启用断言,需要使用source1.4标记: javac-source1.4Test.java 要在运行时启用断言,可使用-enableassertions或者-ea标记。 要在运行时选择禁用断言,可使用-da或者-disableassertions标记。 要系统类中启用断言,可使用-esa或者-dsa标记。 还可以在包的基础上启用或者禁用断言。 13.谈谈final,finally,finalize的区别。 解答: final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。 因此一个类不能既被声明为abstract的,又被声明为final的。 将变量或方法声明为final,可以保证它们在使用中不被改变。 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。 被声明为final的方法也同样只能使用,不能重载。 finally—再异常处理时提供finally块来执行任何清除操作。 如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。 finalize—方法名。 Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。 它是在Object类中定义的,因此所有的类都继承了它。 子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。 finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 14.Collection和Collections的区别。 解答: Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 Collection是个java.util下的接口,它是各种集合结构的父接口。 15.说出ArrayList,Vector,LinkedList的存储性能和特性 解答: ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 16.ArrayList和Vector的区别,HashMap和Hashtable的区别 解答: 就ArrayList与Vector主要从二方面来说: 一.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的 二.数据增长: 当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半 就HashMap与HashTable主要从三方面来说: 一.历史原因: Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现 二.同步性: Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 三.值: 只有HashMap可以让你将空值作为一个表的条目的key或value 17.不用字符串处理函数,怎么实现以单词为单位的逆序 例如: 从控制台输入helloword** 输出: **wordhello 解答: public classhello{ publicstaticvoidmain(String[]args)throwsIOException{ for(inti=args.length-1;i>=0;i--){ System.out.print(args[i]+""); } }//执行时,跟数组元素,如: javahelloweiguiping(现在args[]={wei,gui,ping}) 18.构造一个类来描述屏幕上的一个点,该类的构成包括点的x和y两个坐标,以及一些对点进行的操作,包括: 取得点的坐标值,对点的坐标进行赋值,编写应用程序生成该类的对象并对其进行操作。 解答: ClassPoint{ Privatefloatx; Privatefloaty; PublicPoint(){ This.x=0; This.y=0; } PublicPoint(floatx,floaty){ This.x=x; This.y=y; } Publicvoidmove(floatm,floatn){ //将点移动向x方向移动m,向y方向移动n This.x+=m; This.y+=n; } Publicvoidshow(){ //显示坐标位置 System.out.println(“坐标为(”+this.getX()+”,”+this.getY()+”)”); } //getter/setter方法 PublicvoidsetX(floatx){ This.x=x; } PublicfloatgetX(){ Returnthis.x; } PublicvoidsetY(floaty){ This.y=y; } PublicfloatgetY(){ Returnthis.y; } } 19.写出下列算法的时间复杂度。 (1)冒泡排序O(n*n) (2)选择排序O(n*n) (3)插入排序O(n*n) (4)快速排序O(n*logn) (5)堆排序O(n*logn) (6)归并排序O(n*logn) 20.EJB与JAVABEAN的区别以及EJB的基本架构? 答: JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。 但通常情况下,由于JavaBean是被容器所创建(如Tomcat)的,所以JavaBean应具有一个无参的构造器,另外,通常JavaBean还要实现Serializable接口用于实现Bean的持久性。 JavaBean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。 EnterpriseJavaBean相当于DCOM,即分布式组件。 它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。 但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。 EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。 客户通过容器来访问真正的EJB组件。 EJB的基本架构 答: 一个EJB包括三个部分: RemoteInterface接口的代码 packageBeans; importjavax.ejb.EJBObject; importjava.rmi.RemoteException; publicinterfaceAddextendsEJBObject { //somemethoddeclare } HomeInterface接口的代码 packageBeans; importjava.rmi.RemoteException; importjaax.ejb.CreateException; importjavax.ejb.EJBHome; publicinterfaceAddHomeextendsEJBHome { //somemethoddeclare } EJB类的代码 packageBeans; importjava.rmi.RemoteException; importjavax.ejb.SessionBean; importjavx.ejb.SessionContext; publicclassAddBeanImplementsSessionBean { //somemethoddeclare } 21.Java中的Reflection作什么用? 解答: 自省是软件分析自己的能力。 这个功能由Class类中的java.lang.reflect包和元素所提供。 自省是一个重要的功能,当我们使用被称为JavaBeans的组件时将用到它。 它允许你在运行时而不是在编译时分析一个软件组件并且动态的描述它的功能。 例如,通过使用自省,你能决定一个类支持哪些方法、构造函数和成员属性。 22.Java中的序列化(serialization)? 解答: 序列化(serialization)是把一个对象的状态写入一个字节流的过程。 当你想要把你的程序状态存在一个固定的存储区域例如文件时,它是很管用的。 稍后,你就可以运用序列化过程存储这些对象。 Serializable接口: 只有一个实现Serializable接口的对象可以被序列化工具存储和恢复。 Serializable接口没有定义任何成员没,它只用来表示一个类可以被序列化。 如果一个类可以序列化,它的所有子类都可以序列化。 声明成transient的变量不被序列化工具存储。 同样,static变量也不被存储。 23.客服端调用EJB对象的几个基本步骤 解答: 设置JNDI服务工厂以及JNDI服务地址系统属性,查找Home接口,从Home接口调用Create方法创建Remote接口,通过Remote接口调用其业务方法。 24.请对以下在J2EE中常用的名词进行解释(或简单描述) web容器: 给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接**互,不必关注其它系统问题。 主要有WEB服务器来实现。 例如: TOMCAT,WEBLOGIC,WEBSPHERE等。 该容器提供的接口严格遵守J2EE规范中的WEBAPPLICATION标准。 我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 EJB容器: Enterprisejavabean容器。 更具有行业领域特色。 他提供给运行在其中的组件EJB各种管理功能。 只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。 并且可以通过现成的接口来获得系统级别的服务。 例如邮件服务、事务管理。 JNDI: (JavaNaming&DirectoryInterface)JAVA命名目录服务。 主要提供的功能是: 提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。 JMS: (JavaMessageService)JAVA消息服务。 主要实现各个应用程序之间的通讯。 包括点对点和广播。 JTA: (JavaTransactionAPI)JAVA事务服务。 提供各种分布式事
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaJ2ee 笔试 总结 java 算法