掌握葵花点穴手,面试无忧
JSP和javascript的区别:
Jsp是服务器端技术,在服务器端处理数据显示在客户端,在后台运行。
js是客户端脚本语言,用于页面交互,在前台浏览器上运行。
JSP,ASP,PHP的共同点:
都是动态网页(网页内容是动态变化的)技术,都是处理服务器端数据显示在客户端。
JAVA和C的区别:
JAVA是面向对象的,C是面向过程的,JAVA有垃圾回收机制不用程序员自己释放空间,C需要手动释放内存。
C和C++有指针有多继承,不太安全,Java中没有指针,没有多继承,比较安全。
谈谈final, finally, finalize的区别:
final:是一个关键字
被final修饰的类不能被继承。
被final修饰的方法不能被重写。
被final修饰的变量必须在创建时指定初始值,之后不能被修改,相当于一个常量。
finally:在异常处理时一定会执行 finally 块中的操作,一般用于释放资源。
finalize:方法名。finalize()方法在Object中定义,所有的类都具备这个方法,在GC即将在内存中释放对象前执行,用于关闭流等清理工作。
String 和StringBuffer的区别
他们都可以储存和操作字符串。String类是不可变类,StringBuffer类是可变类。任何对String的改变都将生成一个新的String实例,内存中产生大量无用对象,影响性能。而StringBuffer操作的始终是同一个实例。字符串动态改变时,使用StringBuffer性能更高。
StringBuffer和StringBuilder的区别
两者都是可变类,但StringBuffer是线程安全的,StringBuilder是非线程安全的。在单线程处理时建议使用StringBuilder,效率更高。
运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,分为运行时异常和非运行时异常,运行时异常表示虚拟机的通常操作中可能遇到的异常。
Java编译器要求方法必须抛出可能发生的非运行时异常,不要求抛出运行时异常。
HashMap和Hashtable的联系和区别:
联系:都实现了Map接口,都是键值对的方式,且键必须唯一。
区别: HashMap是Hashtable的一个轻量级实现。
HashMap :非线程安全的,不同步,效率高。允许一个null键和多个null值。
Hashtable :线程安全的,同步,效率低。不允许null 键值。
Collection 和 Collections的区别:
Collections是集合的工具类,在java.util包下,包含各种集合操作的静态方法。
Collection是集合类的父接口,也在java.util包下。
GC是什么? 为什么要有GC? :
GC是垃圾收集器,Garbage Collection,由C++发展而来,C++中变量必须手动释放,容易造成内存泄漏。Java对其做了改进,不用手动控制,GC会自动处理。程序员可以调用System.gc()方法建议进行垃圾回收,但不能保证回收也不能保证立即回收。
finalize()与System.gc()的区别?
gc 只能清除在堆上分配的内存(纯java语言的所有对象都在堆上使用new分配内存)。
finalize()回收其他内存。当使用JNI技术时,可能会在栈上分配内存,例如java调用c程序。
sleep() 和 wait() 有什么区别:
sleep是线程类(Thread)的方法,让线程暂停执行指定时间,调用sleep不会释放对象锁,把执行机会给其他线程,到时后会自动恢复。
wait是Object类的方法,使本线程放弃对象锁,停止执行,直到发出notify方法唤醒后才会重新执行。
Overload重载和Override重写的区别。Overloaded的方法是否可以改变返回值的类型:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,如果在子类中定义某方法与其父类有相同的名称和参数,则父类中的方法被重写。子类的对象使用这个方法时,将调用子类中的方法,。
重载Overloading是一个类中多态性的一种表现。一个类中方法名相同,参数个数或参数类型不同,则称为方法的重载,函数重载返回值可以不同。
写出几个最常见的运行时异常runtime exception:
算术异常:ArithmeticException,如除以0.
类转换异常:ClassCastException
数组角标越界异常IndexOutOfBoundsException,如角标为-1
空指针异常 NullPointerException。
error和exception有什么区别:
ERROR:很难恢复,不用处理的错误。Error类一般与虚拟机相关,如系统崩溃,虚拟机错误,内存不足等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行。
abstract class抽象类和interface接口有什么区别:
只有声明,没有方法体的方法叫做抽象方法。含有抽象方法的类叫做抽象类,体现事物的某些基本功能,是对事物的抽象,is a关系。抽象类中可以有抽象方法和非抽象方法。抽象类需要被继承extends,只能单继承。抽象类不是具体的,因此不能创建实例。不能有抽象构造函数或抽象静态方法。
接口中所有方法都是抽象的,是对动作的抽象,like a 关系。接口需要被实现implements,可以多实现。接口中只有全局常量和抽象方法。接口中的常量必须为public static final,方法类型为 public abstract.接口与接口之间是继承关系,可以多继承。
说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,查询快、增删数据慢。Vector线程安全,ArrayList非线程安全,所以ArrayList性能更强。
LinkedList使用双向链表实现存储,查询慢,增删数据快。
抽象类是否可继承实体类(concrete class):
可以,但前提是父类可继承,父类构造函数可以访问到。
构造器Constructor是否可被override:
因为构造函数不能被继承,因此不能被重写,但可以被重载。每一个类必须有自己的构造函数,负责自身初始化,子类不会覆盖父类的构造函数,默认在子类构造函数第一行调用父类空参的构造函数super()。
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后:
会执行,在return前执行。
根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。若catch到异常,则在throw Exception前先执行finally块的内容。
事务是什么:
事务是数据库操作的一个执行单元,必须具备四个属性,称为 ACID(原子性、一致性、隔离性和持久性)
说出几个最终类:
String,Integer,Math。
同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
MVC框架的各个部分都有那些技术来实现?如何实现:
Model-View-Controller模型-视图-控制器
Model[业务逻辑层]——表示业务逻辑和业务数据,如javabean
View[表现层]——显示用户界面,如jsp页面
Controller[数据持久层]——处理数据,如servlet,struts2的action
java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?
有两种实现方法,分别是继承Thread类与实现Runnable接口,用synchronized关键字修饰同步方法
java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类:
字节流,字符流。
字节流继承于InputStream \ OutputStream,
字符流继承于InputStreamReader \ OutputStreamWriter。
java中会存在内存泄漏吗,请简单描述:
会。如:int i,j;return i+j //i,j足够大时,超出int最大值,会内存溢出。
java中实现多态的机制是什么:
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
垃圾回收器的基本原理是什么?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。
switch是否能作用在byte上,是否能作用在long上,是否能作用在String上:
switch可以作用在byte,String上,不能作用于long上。
编程题: 写一个Singleton出来:答案略
作用域public,private,protected,以及不写时的区别:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
ArrayList和Vector的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
jsp有哪些内置对象?作用分别是什么:
答:JSP共有9个内置对象:
request ——客户端端请求,此请求会包含来自GET/POST请求的参数
response ——网页传回用户端的回应
page ——JSP网页本身
session ——与请求有关的会话期
application ——servlet 正在执行的内容
pageContext ——网页的属性是在这里管理
out ——用来传送回应的输出
config ——servlet的构架部件
exception ——针对错误网页,未捕捉的例外。
jsp有哪些动作?作用分别是什么:
答:JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
说一说Servlet的生命周期:
答:servlet生命周期包括加载和实例化、初始化、处理请求以及服务结束,由javax.servlet.Servlet接口的init,service和destroy方法体现。
① Servlet容器加载servlet,完成servlet的实例化。
② 容器调用servlet实例的init方法进行初始化。
③ 请求到达时,调用service方法,执行doGet或doPost方法。
④ 调用destroy方法销毁实例。
JAVA SERVLET API中forward() 与redirect()的区别:
答:forward进行一次请求转发,属于服务器端跳转,在客户端浏览器地址栏中不会显示出转向后的地址。
sendRedirect重定向,重新发送一次请求,是客户端跳转。浏览器的地址栏中可以看到跳转后的链接地址。
xml有哪些解析技术?区别是什么:
答:有DOM,SAX,STAX等
DOM:document Object model文档对象模型。结构为DOM树,解析前之前把整个文档装入内存,适合处理小型xml文件。适合对XML进行随机访问。可以对任意节点进行增删改查。W3C标准。
SAX:事件驱动。顺序读取XML文件,不需要一次全部装载整个文件。当标签开头与标签结束时触发事件,读取XML文件,可以处理大型xml文件。不能对标记进行增删改。是民间的,不是W3C标准。
什么是java序列化,如何实现java序列化:
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。