您好,欢迎访问三七文档
JAVA基础知识1.面向对象的特征是?面向对象的特征是:抽象、封装、多态、继承。2.Int和Integer的区别是什么?Integer是对象,具有属性、方法;与其同类是Long、Short、Character、Double、Float、Byte、Boolean。Int是基本数据类,不是对象,占有内存空间,与其同类有:long、short、char、double、float、byte、boolean。3.String是基本数据类型吗?String不是基本数据类型,是一个final类,它不可被继承,不可被修改,为提高工作效率应使用StringBuffer。4.String和StrigBuffer的区别?String:字符串的长度不可变,当多个字符串联合时,先要转换成StringBuffer进行联合,它的速度慢。StringBuffer:字符串的长度是可变的,不需转换,它的速度快。5.ArrayList、Vector和LinkedList之间的区别?ArrayList和Vector是以数组方式存储数据,增加,删除数据慢,查询、修改数据快;ArrayList是非线程安全的,Vector是线程安全的(synchronized),因此ArrayList的速度要比Vector的快;LinkedList是以链表方式存储数据的,增加、删除数据快,查询、修改数据慢。6.HashMap和HashTable的区别是什么?HashMap和HashTable都实现了Map接口,HashMap是线程不安全的,HashTable是线程安全,HashMap允许空键值,HashTable不允许,HashTable是同步的(synchronized),HashMap不是,其需要实现synchronized必须为之提供外同步。7.请说出Servlet的生命周期?并说出Servlet与CGI的区别。服务器实例化Servlet后,容器将运行其init()方法,请求到达时运行其service()方法,service()方法会自动运行与其相应的do方法(doGet方法和doPost方法),服务器决定将实例销毁时会调用destory()方法。与CGI的区别是:Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且实例一般不会销毁,而CGI对每个请求都产生新的的进程,服务完成后就销毁,所以其效率低于Servlet。8.运行时异常与一般异常的区别?运行时异常:是JVM抛出的错误,不需要捕捉;一般异常:是设计和实现时发生的错误,如用throws声明了,调用它的代码时必须处理,如程序正常运行时是不会发生的。9.&和&&的区别?&是位运算符,表示按位与;&&是逻辑运算符,表示逻辑与(and)。10.Final、finally和finalize的区别?Final:用来声明属性、方法和类,分别表示属性不可变,方法不可被覆盖,类不可被继承;finally:是异常处理语句结构的一部分,表示始终执行;finalize:是Object类一个方法,垃圾回收时会被调用。11.Sleep方法和Wait方法的区别?Sleep()方法:是线程类(Thread)的方法,指定等待时间,到时后自动醒来;不会释放对象锁;Wait()方法:是Object类的方法,调用此方法后进入等待状态,不清楚时间,需要由另一个线程来启动,其会释放对象锁。sleep(100L)是占用cpu,线程休眠100毫秒,其他进程不能再占用cpu资源,wait(100L)是进入等待池中等待,交出cpu等系统资源供其他进程使用,在这100毫秒中,该线程可以被其他线程notify,但不同的是其他在等待池中的线程不被notify不会出来,但这个线程在等待100毫秒后会自动进入就绪队列等待系统分配资源,换句话说,sleep(100)在100毫秒后肯定会运行,但wait在100毫秒后还有等待os调用分配资源,所以wait100的停止运行时间是不确定的,但至少是100毫秒。12.Collection和Collections的区别?Collection是集合类的上级接口,其下由List、Set;Collections是集合类一个帮助类,它提供了一些静态方法来实现搜索,排序和线程安全等操作。13.Override和OverLoad的区别?OverLoad的方法是否可以改变返回值的类型?Override:是方法重写,子类覆盖父类的方法,将子类传与父类的引用,调用的还是子类的方法,是类与类之间多态的表现;OverLoad:是方法重载,一个类中有多个同名的方法,但参数类型与参数个数不同,是一个类中多态的表现;OverLoad的方法是可以改变返回值的类型的。14.Error和Exception的区别?Error:修复不是不可能,但很困难的一种问题,是编码不能解决的,如内存溢出;Exception:是设计和实现时出现的问题,程序正常运行是不可能出现的。15.同步和异步的区别,什么情况下使用,请举例说明。如果数据将在线程间共享,例如正在写的数据可能被另一个线程读到,或者正在读的数据已经被另一个线程写过,那么这些数据就是共享数据,必须使用同步存取;当应用程序在对象调用了一个需要花费很长时间来执行的方法,但程序不希望等待方法的返回,就应该使用异步编程,很多情况下采用异步编程往往效率会更高。16.抽象类(abstract)与接口(interface)的区别?接口可以多重实现,抽象类只能单一继承,接口只能声明方法,抽象类可以有声明也可以有实现,接口的属性默认为publidstaticfinal,抽象类的默认为friendly;功能需要积累是使用抽象类,不需要积累使用接口。17.堆(heep)和栈(stack)的区别?栈:是一种线形集合,元素的增加与删除操作在同一段内完成,其原则是后进先出;堆:是栈的组成部分。18.Forward与redirct的区别?Forward:是服务器请求资源,服务器直接访问目标地址的URL,把URL响应的内容读取过来,然后把这些内容发送给浏览器,浏览器不知道服务器发送的内容来至哪些,所以地址栏中的地址还是原来的地址;Redirect:是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求的地址,浏览器会根据请求的所有参数重新去请求,因此session、request参数中的值都可以获取。19.静态的内部类(staticNestedClass)与内部类(InnerClass)的区别?静态的内部类可以不依赖外部类的实例被实例化;内部类需要在外部类实例化后才能实例化。20.Jsp的静态include与动态include的区别?动态的inclede是用jsp:include动作实现jsp:includepage=”index.jsp”flush=”true”它总会检查所含文件的变化,适合于包含动态页面,并且可以带参数;静态的include是用include的伪码实现%@includefile=”index.html”%它不会检查所含文件的变化,适合于包含静态页面。21.GC是什么?为什么要有GC?GC是垃圾收集的意思,(GabageCollection);内存处理是编程人员容易出现问题的地方,忘记或错误的内存回收,会导致程序或系统的不稳定甚至崩溃,Java提供GC功能自动检测对象是否超过作用域从而达到自动内存回收的目的;Java语言没有提供释放已分配内存的显示操作方法。22.Shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?Shorts1=1;s1=s1+1是错误的,因为s1+1的结果是整型,需要类型转换,shorts1=1;s1+=1是正确的。23.Mathround(11.5)等于多少?round(-11.5)等于多少?Mathround(11.5)等于12;round(-11.5)等于-11。24.Strings=newString(”xyz”)创建了几个StringObject?创建了两个StringObject,一个是”xyz”,一个是s对”xyz”的引用。25.运行一个线程是用run()方法还是用strat()方法?启动一个线程是调用strat()方法,使线程所代表的虚拟处理处于可运行状态,这意味着它可以由JVM调度并执行,但并不意味着线程就会立即运行。Run()方法可以产生必须退出的标志来停止一个线程。通过调用Thread类的start()方法来启动一个线程,这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止,而CPU再运行其它线程,26.接口是否可以继承接口?抽象类是否实现(implement)接口?抽象类是否可以继承实体类(ConcrateClass)?接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。27.List、Set、Map是否继承Collection接口?List和Set是继承Collection接口,Map不是。28.说出数据连接池的工作机制是什么?J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数量的池连接,客户端程序需要连接时,池驱动程序会返回一个未使用的连接并标记为忙,如果当前没有空闲连接时,池驱动程序会新建一定数量的连接,新建连接的数量根据配置的参数决定,使用完成后,池驱动程序会将此连接标记为空闲,其它的调用就可以使用这个连接。29.什么是类的反射?通过类的说明,可以得到类的父类,实现的接口,内部类,构造函数,方法和属性,并可以根据构造器实例创建一个对象,唤起方法,取属性,修改属性值。30.Struts的请求过程?URL→ActionServlet(Process)→RequestProcess(process)→实例form→填充form值→进行验证→实例action→调用execute()→ActionMapping→ActionForward31.如何得到一个方法并唤醒?Classcla=Class.class;Constructorcons=cla.getConstructor(newClass[]{String.class});Objectobj=cons.newInstance(newObject[]{“aaa”});Mothedmothed=cls.getMothed(“方法名”,newClass(){String.class,Integer.class});Mothed.invoke(obj,newObject[]{“aaa”,newInteger(1)});32.得到类(Class)三个步骤?对象.getClass();类.class或Integer.type(int)、Integer.class(java.lang.Integer);Class.forName()。33.四种会话的跟踪技术?Url重写、hidden(隐藏域)、session、cookie34.抽象(abstract)方法(mothed)是否可同时是static,是否可同时是native,是否synchronized?都不可以。同步的方法必须持有一个锁对象,它的默认的锁对象是this它自身对象,而它自身又是抽象类不能被实例化的,相矛盾.所以抽象方法中不能synchronized.4、native本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是java与其它语言通讯的一种机制。native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢!35.数组是否有l
本文标题:java面试题
链接地址:https://www.777doc.com/doc-2879163 .html