您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Java综合测试题答案
CBCACCADDDAB1.String、StringBuffer以及StringBuilder的区别简要的说,String类型和StringBuffer类型的主要性能区别其实在于String是不可变的对象,因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从JDK5.0开始,为该类增添了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。但是如果将StringBuilder的实例用于多个线程是不安全的。需要这样的同步,则建议使用StringBuffer2.说说ArrayList和LinkedList、HashMap和Hashtable的区别ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦LinkedList采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引但是缺点就是查找非常麻烦要丛第一个索引开始Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现。也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。z3.如何创建并启动一个新线程?线程的状态有哪些?说一说他们之间是如何转化的?1)如何创建并启动一个新线程?java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了。一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个新线程。Thread类是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法:Threadt=newThread();t.start();start()方法是一个native方法,它将启动一个新线程,并执行run()方法。Thread类默认的run()方法什么也不做就退出了。注意:直接调用run()方法并不会启动一个新线程,它和调用一个普通的java方法没有什么区别。因此,有两个方法可以实现自己的线程:方法1:自己的类extendThread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:publicclassMyThreadextendsThread{publicrun(){System.out.println(MyThread.run());}}在合适的地方启动线程:newMyThread().start();方法2:如果自己的类已经extends另一个类,就无法直接extendsThread,此时,必须实现一个Runnable接口:publicclassMyThreadextendsOtherClassimplementsRunnable{publicrun(){System.out.println(MyThread.run());}}为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:MyThreadmyt=newMyThread();Threadt=newThread(myt);t.start();2)线程的状态有哪些?说一说他们之间是如何转化的?初始态:一个线程调用了new方法之后,并在调用start方法之前的所处状态。就绪:一旦线程调用了start方法,线程就转到Runnable状态,阻塞/NonRunnable:线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。停止/退出:线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法4.什么情况下会出现NullPointException,此异常需要显式try-catch吗?为什么?再举几个同一性质的常见的异常。Hibernate中的save等方法以及Spring的Templete模板的大部分API,请问这些方法抛异常吗?我们是否需要try-catch,说说这样设计的好处。1)一个东西是null,就是说只有其名,没有实值内容,也没分配内存,当你要去取他的长度,对他进行操作当然就会NullPointException,NullPointerException这个东西换一个角度来看,没准是好处也不一定。可以说,NullPointerException本身也是JAVA安全机制的一部分。有UNIX写C和C++的经验的可能都知道,空指针会导致什么问题:经常会导致程序的崩溃。而JAVA在这点进行了改善,JAVA为了保证程序的强壮,总是会对对象的引用进行检查。所以不再出险C/C++中的空指针错误,而仅仅是一个运行级别的异常-“NullPointerException”。从这点上说,算是JAVA的一个好处吧。2)NullPointException不需要我们显式try-catch,因为它属于RunTimeException,类似的还有ArithmeticException,IndexOutOfBoundsException等;3)Hibernate、Spring都会抛出异常,但是基本都被封装成了RunTimeException,即我们可以不显式地去处理这些异常,这样设计我们就不需要关心底层到底是怎么实现的,我们要处理那些异常,我们只要知道调用就可以了。5.谈谈你对Servlet的认识,请尽量描述的详细一些。servlet是一中服务器端的编程语言,是j2ee中比较关键的组成部分。servlet技术的推出,扩展了java语言在服务器端开发的功能,巩固了Java语言在服务器端开发中的地位,而且现在使用非常广泛的jsp技术也是居于servlet的原理,jsp+javabean+servlet成为实现MVC模式的一中有效选择。servlet在本质上就是java类,编写servlet需要遵循java的基本语法,但是与一般java类所不同的是,servlet是只能运行在服务器端的Java类,而且必须遵循特殊的规范,在运行的过程中有自己的生命周期,这些特性都是servlet所都有的。另外,servlet是和http紧密联系的,所以使用servlet几乎可以处理http各个方面的内容,这也正是servlet受到广大开发人员青睐的最大原因。工作原理:servlet需要在特定的容器中才能运行,在这里所说的容器,即servlet运行时所需要的运行环境。一般情况下,市场上常见的javawebserver都可以支持servlet,如Tomcat、Resin、weblogic、WebSphere等,在本书中采用Tomcat作为Servlet的容器,由Tomcat为Servlet提供基本的运行环境。Servlet容器环境在HTTP通信和Web服务器平台之间实现了一个抽象层。Servlet容器负责白请求传递给Servlet,并把结果返回给客户。容器环境也提供了配置Servlet应用的简单方法,并且也提供用XML文件配置Servlet的方法。在使用Servlet的过程中,并发访问的问题由Servlet容器处理,当多个用户请求同一个Servlet的时候,Servlet容器负责为每一个用户启动一个线程,这些线程的运行和销毁由Servlet容器负责,而在传统的CGI程序中,是为每一个用户启动一个进程,因此Servlet的运行效率就要比CGI高出很多。6.写出一个单例模式的例子。说说单例的好处单例模式也是一种比较常见的设计模式,它到底能带给我们什么好处呢?其实无非是三个方面的作用:1、控制资源的使用,通过线程同步来控制资源的并发访问;2、控制实例产生的数量,达到节约资源的目的。3、作为通信媒介使用,也就是数据共享,它可以在不建立直接关联的条件下,让多个不相关的两个线程或者进程之间实现通信。单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种7.程序设计:写出冒泡排序的算法。publicclassBubblesort{int[]bubble(inta[]){//函数inttemp;intsize=a.length;for(inti=size-1;i=1;i--){for(intj=0;ji;j++){if(a[j]a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}returna;}publicstaticvoidmain(Stringargs[]){intarray[]={55,44,22,14,5};for(inti=0;iarray.length;i++){System.out.print(array[i]+,);}System.out.println();Bubblesortb=newBubblesort();int[]result=b.bubble(array);//调用函数for(inti=0;iresult.length;i++){System.out.print(result[i]+,);}}}8.写出jsp中的九大内置对象输入输出对象:request、response、out;作用域通信对象:session、application、pageContext;servlet对象:page、config;异常对象:exception9.简述你对Statement,PreparedStatement,CallableStatement的理解Statement(接口)PreparedStatement(接口)CallableStatement(接口)以上三者为继承关系。1).概念:Statement:(用于执行不带参数的简单SQL语句)每次执行sql语句,数据库都要执行sql语句的编译,最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement.PreparedStatement:(用于执行带或不带IN参数的预编译SQL语句)执行的SQL语句中是可以带参数的,并支持批量执行SQL。由于采用Cache机制,则预先编译的语句,就会放在Cache中,下次执行相同SQL语句时,则可以直接从Cache中取出来。CallableStatement:(用于执
本文标题:Java综合测试题答案
链接地址:https://www.777doc.com/doc-2878945 .html