一。Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或完成其他接口,在swing编程中常用此方式。
二。什么时候用assert。
1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。
使用方法 assert <boolean表达式>,表示如果表达式为真(true),则下面的语句执行,否则抛出AssertionError。
另外的使用方式assert < boolean表达式>:<other表达式>,表示如果表达式为真,后面的表达式忽略,否则后面表达式的值用于AssertionError的构建参数。
注意编译时要增加-source 1.4 参数,否则报错。]运行时要增加 –ea参数,否则assert行被忽略
三。Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
0
四。abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
五。当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
六。try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
七。两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
八。当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。---------------------------125
九。编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
一。用你的语言表达对下列概念的理解:
什么是对象?什么是类?对象是靠什么进行交互的?什么是接口?
类之间有哪些种关系?并举例说明?
你认为面向对象程序设计语言最显著的特征是哪三个?
请解释什么是对象的封装?封装的好处有哪些?
请解释什么是对象的继承?试举几个继承的好处?简单介绍你在以前工作中使用继承的一个案例。画出〔本科生、教授、研究生、学生、人、自学者〕之间的继承关系。
请解释什么是对象的多态性?并举例说明多态性?你在以前工作中使用过吗?简单介绍是如何使用的?
这是常见的面试题,强调的是用你自己的语言来描述,不是千篇一律的标准答案。强调的是你对面向对象的基本概念的理解。
建议你通过一个例子来讲解类与对象的概念。例如:(你自己和人类之间的关系)
你自己是具体的,人类是抽象的。对象靠方法调用(消息传递)进行交互。
接口,只定义了抽象的方法。需要在实现类中实现接口中抽象的方法。
Is和Has关系。
Is 就是继承关系
Has就是聚合,依赖关系。
二。请用Java语言编写一段程序代码,实现如下功能:
从命令行接收字符串作为参数,并排序输出这些字符串。例如:接收顺序是b c a,则输出顺序是a b c,按照ASCII顺序来排序。
解答:
思路:把接受到的字符串转化成字符数组,然后可以调用java.util.Arrays中已经有的排序方法进行排序,输出结果。
一。JAVA SERVLET API中forward() 与sendRedirect()的区别?
forward()方法可以使用原来的对象,而且速度较快。地址栏不变化。只能在本机内的页面间跳转。
redirect()方法不可以使用原来的对象,而且速度较慢。地址栏变化。可以跳转到任何页面和机器。
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
二。STRUTS的应用(如STRUTS架构)
Struts框架的处理流程清楚的体现了MVC系统的特点, Struts Controller ActionServlet处理客户请求,利用配置的ActionMapping对象把请求映射到Action处理器对象进行处理。Action处理对象访问ActionForm中的数据,处理和响应客户请求,它还调用后台的Bean组件,这些组件封装了具体的业务逻辑。Action处理器对象根据处理结果通知Controller,Controller进行下一步的处理。
Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:
1.包含一个controller servlet,能将用户的请求发送到相应的Action对象。
2.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。
3.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。
三。MVC的各个部分都有那些技术来实现?如何实现?
MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
四。jsp有哪些内置对象?作用分别是什么?
JSP共有以下9种基本内置组件
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
五。jsp有哪些动作?作用分别是什么?
JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
六。JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现<jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>
七。说一说Servlet的生命周期?
servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
八。你使用的servlet和jsp的版本?
Servlet的基本架构
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}
一。J2EE是什么?
J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
二。EJB的种类
Session Bean , Entity Bean, Message-Driven Bean
三。ORACLE的分页解决方法。
Oracle有几种索引?分别是什么?
三种,B_Tree 索引, 位图索引,函数索引。最常使用的是B_tree索引。
在一个企业级的项目开发设计过程中,在数据库操作部分,围绕产品数据库移植出现分歧:
1) A认为,考虑性能及开发人员角色分工,应充分利用目前使用的Oracle数据库提供的功能,大量使用oracle提供的一些特性,如嵌套表、存储过程,触发器,job等。
2) B认为,由于后期需要提供面向SQLServer的版本,最好不要使用Oracle专有的一些数据库特性,而应尽量使用通用的SQL语句操作,象存储过程,触发器、嵌套表等oracle特有的,或与其它数据库不相同的东西,是不能使用的。
高流量情况下的网站新闻发布(内容管理)系统设计
高流量下的应用系统,通常并发量都非常大,以云港新闻为例,马加爵事件期间,news服务器并发经常维持在2000个并发以上(apache进程)。因此,系统设计应尽量减少对数据库的检索请求,特别是开销巨大的全表扫描操作。
在系统设计时,采用“生成静态页面”技术,完成信息发布后,将每条新闻,读入美工设计的模板生成一个html文件,这样一来,用户访问这条新闻,就直接读取服务器上的这个文件,而不再去进行数据库检索。同时,为避免单一目录下文件过多造成文件系统的负担,文件的存放,按“<年>/月/日/<文件名>.html”的格式存放。
四。EJB与JAVA BEAN的区别?
EJB与JAVA BEAN是SUN的不同组件规范,EJB是在容器中运行的,分步式的,而JAVA BEAN主要是一种可利用的组件,主要在客户端UI表现上。
JAVABEAN是一种普通的组件,EJB是一种分布式的组件;
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
五。EJB的基本架构
答:一个EJB包括三个部分:
Remote Interface 接口的代码
package Beans;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Add extends EJBObject
{
//some method declare
}
Home Interface 接口的代码
package Beans;
import java.rmi.RemoteException;
import jaax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface AddHome extends EJBHome
{
//some method declare
}
EJB类的代码
package Beans;
import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javx.ejb.SessionContext;
public class AddBean Implements SessionBean
{
//some method declare
}
(1) Main method calling a non-static method. (illegal)
在main(String[] args)方法内调用一个非静态方法。(非法)
(2) Methods with the same name as the constructor(s). (这种题常有)
与Constructor(s)有相同名字的方法。 Constructor不是关键字
另:
class A{
A(){ //是构造函数 }
void A(){ //不是构造函数,只是个普通函数(方法) }
}
(3) Local inner classes trying to access non-final vars. (illegal)
内部类尝试访问非final变量(非法)
(4) instanceOf is not same as instanceof.
instanceOf 不是 instanceof。
(5) Private constructors. (legal)
私有 的Constructor。 (合法)
(6) System.exit() in try-catch-finally blocks. (finally 不会执行)
System.exit()在try-catch-final块中的退出语句。 (finally不会执行)
另:有return语句的时候finally在return前执行
(7) main() can be declared final. (OK)
main()方法 可以声明为 final.
(8) -0.0 == 0.0 is true.
(9) A class without abstract methods can still be declared abstract
没有 抽象方法的类,仍然可以定义为抽象类。
(10) Map does not implement Collection.
Map 并不实现 Collection.
(11) Dictionary is a class, not an interface.
Dictionary 是一个类,不是接口。
(12) Collection is an Interface where as Collections is a helper class. (这题我倒没见过,但还真容易看混)
Collection是一个接口,但 Collections却是一个辅助类。
(13) Class declarations can come in any order.
(也就是说: class Child extends Parents{}
class Parents{}
这种顺序是可以的.)
可以以任何顺序申明类。
(14) Strings are initialized to null, not empty string.
String 是被初始化为 null,不是空字符。
(15) "continue" must be in a loop(for, do, while). It cannot appear in case constructs.
“continue”已经要在一个循环里(如for,do,while),它不能在case语句中出现。
(16) A constructor can throw any exception.
一个Constructor可以抛出任何异常。
(17) All comparisons involving NaN and a non-Nan would always result false. (对大多数朋友来说这可是个盲点噢)
所有关于 NaN(Not a Number) 和 non-NaN 的比较,都返回false.
这条很重要。
(18) integer (and long ) operations / and % can throw ArithmeticException while float / and % will never, even in case of division by zero.
integer和long 操作 /和% 的话, 会抛出ArithmeticException,
但是 float形不会,即使是除以0。
(19) == gives compiler error if the operands are cast-incompatible.
==会产生编译错误,如果两边 不兼容的话。
(20) You can never cast objects of sibling classes( sharing the same parent ), even with an explicit cast.
你永远不可能 转化具有同一个超类的类的对象,即使是刻意转化。(请提意见)
例:
class A
class sonA extends A
class daughterA extens A
对这种情况:
sonA 和 daughterA 之间不能相互转化。
即:sonA son = (sonA) daughterA();是非法的。
而:sonA son = (sonA) A();是合法的。
A father = (A) sonA()和A father =sonA()也是合法的
(21) .equals returns false if the object types are different.It does not raise a compiler error.
equals() 返回 false 如果对象类型不同,但不产生 编译错误。
(22) File class has NO methods to deal with the contents of the file.(also the existing directory)
File类没有 任何 处理文件内容的方法。(当然,存在的目录也一样)
(23) InputStream and OutputStream are abstract classes, while DataInput and DataOutput are interfaces.
InputStream 和 OutputStream 是 抽象类,
但是 DataInput 和 DataOutput是 接口。
(24)if 和while后面的表达式结果只能是逻辑型的
如if(1),while(0)都是非法的