1. 面向对象的特征具体描述
1).抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过
程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待,
尽管这个操作实际上可能由一系列更低级的操作来完成。数据抽象定义了数据类型和施加于该类型对象上
的操作,并限定了对象的值只能通过使用这些操作修改和观察。
2).继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象
的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生
类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可
以修改或增加新的方法使之更适合特殊的需要。
3).封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,
即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4). 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性
语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
2. 说出Servlet的生命周期并说出Servlet和CGI的区别。
cgi是一个用于定Web服务器与外部程序之间通信方式的标准,使得外部程序能生产HTML,图像或者其他内容
而服务器处理的方式与那些非外部程序生产的HTML,图像或者其他内容的处理方式是相同的。
使用CGI的原因是在于它是一个定义良好并被广泛支持的标准,没有CGI就不可能实现动态的Web页面
Servlet的的生命周期,以及Servlet与CGI的区别:
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动
派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且
其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
3. 说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,
它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入
数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使
用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前
后项即可,所以插入速度较快。
4. EJB是基于哪些技术实现的并说出SessionBean和EntityBean的区别StatefulBean和StatelessBean的区别。
5. HashMap和Hashtable的区别。
1)、HashMap中的值和键都可以为null,HashTable中的值和键都不可以为null。
2)、HashMap不是同步方法,HashTable是同步方法。
3)、HashMap默认大小为16,而且一定是以2的指数增加,HashTable默认大小是11,以old*2+1增加。
6. final, finally, finalize的区别。
finalize()方法是在GC清理它所从属的对象时被调用的,如果执行它的过程中抛出了无法捕
获的异常(uncaught exception),GC将终止对改对象的清理,并且该异常会被忽略;直到
下一次GC开始清理这个对象时,它的finalize()会被再次调用。
7. sleep() 和 wait() 有什么区别?
sleep和wait都是使线程暂时停止执行的方法,但它们有很大的不同,sleep是线程类Thread 的方法,
它是使当前线程暂时睡眠,可以放在任何位置。而wait是Object类的方法,它是使当前线程暂时放弃
对象的使用权进行等待,必须放在同步方法或同步块里。Sleep使用的时候,线程并不会放弃对象的使
用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是
无法访问的。而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。
线程执行wait方法时,需要另一个线程调用notify进行唤醒。而sleep只是暂时休眠一定时间,时间到了
之后,自动恢复运行,不需另外的线程唤醒。
8. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
overload一般翻译为重载,表示多个函数共用同一个函数名,为了保证调用这些同名函数时能正确区分究竟
应该调用的是其中的哪一个,重载的各个函数的参数表(不考虑形参名)必须彼此不同,通常简略地说成“不
同参数表”。它对返回值的类型没有任何要求,所以你可以随意为每一个重载的函数设置返回类型,相同也行,
不同也行。
override一般翻译为覆盖,表示子类对从父类继承来的虚函数重新定义,它要求参数表必须跟父类中被覆盖的那
个函数的参数表完全相同,返回值类型原则上也要求相同,但如果返回类型是父类的指针或者父类的引用,覆盖时
返回类型允许是子类的指针或者子类的引用
9. 同步和异步有何异同在什么情况下分别使用他们举例说明。
10. abstract class和interface有什么区别?
1).抽象类可以有构造方法,接口中不能有构造方法。
2).抽象类中可以有普通成员变量,接口中没有普通成员变量
3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4). 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),
但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5). 抽象类中可以包含静态方法,接口中不能包含静态方法
6). 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的
变量只能是public static final类型,并且默认即为public static final类型。
7). 一个类可以实现多个接口,但只能继承一个抽象类。
11. forward 和redirect的区别
B.Forward能够存储request Scope的Attribute而Redirect却不行。
C.Forward的同时URL并不会变。
D.Forward需要在Servlet中需要通过一个Dispatcher来实现。
E.Redirect能够防止某些情况下客户端Refresh造成的一些未知后果(例如连续删除)
12. EJB与JAVA BEAN的区别
首先,EJB是指运行在EJB容器中的JavaBean。Tomcat是Web容器的参考实现。一个完整的JavaEE服务器应该包括
Web容器和EJB容器。
其次,Web容器中无法运行EJB,同时所有的JavaBean都是在服务器端运行的。如果有在客户端的话,就变成C/S结构了。
目前来说除非需要分布式处理,不然基本上不需要考虑EJB。Spring能帮你处理好除分布计算之外的一切。