java面试题

范文1:JAVA试题【以文搜文】

JAVA面试题

姓名:__________ 面试时间:30 - 60分钟

1.Struts中DispatchAction和Action类有什么不同?

2.请说明logic:iterate标签中属性indexId与offset的作用.

3.Hibernate映射文件中的<set>元素有一个cascade属性,请说明此属性的作用,以及分别有哪几种配置方式。

4.Hibernate中的update()和saveOrUpdate()的区别.

5. Spring如何获取Bean?

6. Spring的声明式事务中PROPAGATION_REQUIRED、PROPAGATION_NESTED是分别以什么方式处理事务?

7、请说明BS程序与CS程序的联系与区别。

8、假定oracle数据库表BDBJ_ALERT中有一个date类型的字段ALERT_TIME,请写一段SQL脚本获取数据集,要求如下:

? 只输出报警日期字段(类似于’1980-09-09’的日期格式)。

? 按照报警日期倒序。

? 只获取前100条数据。

9、JSP页面中已经存在一个获取并展示最新消息的方法getMsg()。如何使用getMsg()方法通过JS实现每隔1分钟就刷新JSP页面中的消息数据.

10、如何让一个servlet在web应用启动的时候执行一些初始化操作。

范文2:java试题【以文搜文】

jsp内置对象   定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量   JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):   1.request对象   客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。      2.response对象   response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。      3.session对象   session对象指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.      4.out对象   out对象是JspWriter类的实例,是向客户端输出内容常用的对象      5.page对象     6.application对象      application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。      7.exception对象   exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象      8.pageContext对象   pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。     9.config对象   config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象) 2、 如下的静态页面在提交前页面中的文本框必须有值且复选框必须被选中,请补充完成checkSubmit()脚本函数 <html> <body> <form action =”” name=”Form”> <table> <tr> <td> <input type=”text” name =”test” value> </td> <td> <input type=”checkbox” name =”cd” > </td> <td> <input type=”button” value =”提交” onclick=”javascript”:chcekSubmit():”> </td> </tr> </tab

le> </form> </body> </html> Function checkSubmit() { Var obj1=document.all.test; Var obj2=document.all.cd; if(this.checked) { thi s.form.txt.value=this.value; }Else { this.form.txt.value=””'; } Form.submit(); } ArrayList 一般适合存储,查找效率高,但不适合删除.修改 LinkedList 适合于删除,效率高 Vecoter 线程同步 线程安全好 HashMap 查找效率特高 4、请在如下函数体中补充完成代码,实现根据输入字符串返回该字符串的倒序形式。如输入“ABC”返回“CBA”。 Public String getReverseString(String str){ public static String toReverseCap(String str) { Scanner scanner = new Scanner(System.in); StringBuffer buffer = new StringBuffer(str); return buffer.reverse().toString(); } } javascript 里面的对象和对象的函数使用 String 对象 indexOf() 函数 -- 返回substring在string中的位置 charAt() 函数 -- 返回指定位置(n)的字符 html元素以及相应控制效果 <p> This is a paragraph </p> <a href="default.htm" > This is a link </a> <br /> 抽象类与接口区别 1.抽象类中可以有非抽象方法即可以有实现了的方法(包括构造函数),接口方法都是抽象方法。 2.抽象类能够实现接口,但接口不能继承抽象类(接口不能继承任何一个类只能继承接口) Struts2工作流程   当一个增删改查的请求到达容器时(add.do / delete.do / update.do / select.do) 这个请求会先进到web.xml这个配置文件中 struts2的前置拦截器dispacherservlet会拦截下这个.do结尾的请求然后找到struts2的主配置文件 struts2.xml 这个主配置文件用于前置控制器拦截请求后的分发 也就是把上述4个请求分别对应上不同的action 相应的请求进入到这个action中找到execute()这个方法 进行相关的数据处理需要调用DAOService execute()处理完数据后要返回一个String字符串 根据这个string字符串 再去struts2.xml中找到对应的jsp页面进行展示

范文3:JAVA试题【以文搜文】

    1.开发中都用到了那些设计模式?用在什么场合?

    每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

    2. 说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法

    Session Facade Pattern:使用SessionBean访问EntityBean

    Message Facade Pattern:实现异步调用

    EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问

    Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性

    Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性

    Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性

    EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。

    3. j2ee常用的设计模式?说明工厂模式。

    Java中的23种设计模式:

    Factory(工厂模式),   Builder(建造模式), Factory Method(工厂方法模式),

    Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),

    Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),

    Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),

    Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),

    Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),

    Observer(观察者模式), State(状态模式), Strategy(策略模式),

    Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

    工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

    4. 概述MVC体系结构。

    答:MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式。

    在MVC体系中,模型通常被称为"业务逻辑",是真正完成任务的代码,视图就是使用界面,反映数据的变化。控制器控制着模型和视图之间的交互过程,它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型

    在MVC中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。

    5. 写一段Jdbc连Oracle的程序,并实现数据查询.

    package hello.ant;

    import java.sql.*;

    public class jdbc {

    String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

    String theUser="admin";

    String thePw="manager";

    Connection c=null;

    Statement conn;

    ResultSet rs=null;

    public jdbc() {

    try{

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

    c = DriverManager.getConnection(dbUrl,theUser,thePw);

    conn=c.createStatement();

    }catch(Exception e){

    e.printStackTrace();

    }

    }

    public boolean executeUpdate(String sql) {

    try {

    conn.executeUpdate(sql);

    return true;

    } catch (SQLException e) {

    e.printStackTrace();

    return false;

    }

    }

    public ResultSet executeQuery(String sql) {

    rs=null;

    try {

    rs=conn.executeQuery(sql);

    } catch (SQLException e) {

    e.printStackTrace();

    }

    return rs;

    }

    public void close() {

    try {

    conn.close();

    c.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public static void main(String[] args) {

    ResultSet rs;

    jdbc conn = new jdbc();

    rs=conn.executeQuery("select * from test");

    try {

    while (rs.next()) {

    System.out.println(rs.getString("id"));

    System.out.println(rs.getString("name"));

    }

    }catch(Exception e) {

    e.printStackTrace();

    }

    }

    }

    6. EJB与JAVA BEAN的区别?

    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组件

    7. 你在项目中用到了xml技术的哪些方面?如何实现的?

    用到了数据存贮,信息配置两方面。在做数据交换平台时,将不同数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

    8. Class.forName的作用?为什么要用?

    调用该访问返回一个以字符串指定类名的类的对象。

    9. Servlet执行时一般实现哪几个方法?

    public void init(ServletConfig config)

    public ServletConfig getServletConfig()

    public String getServletInfo()

    public void service(ServletRequest request,ServletResponse response)

    public void destroy()

    10. Request对象的主要方法

    setAttribute(String name,Object):设置名字为name的request的参数值

    getAttribute(String name):返回由name指定的属性值

    getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

    getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

    getCharacterEncoding():返回请求中的字符编码方式

    getContentLength():返回请求的Body的长度

    getHeader(String name):获得HTTP协议定义的文件头信息

    getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

    getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

    getInputStream():返回请求的输入流,用于获得请求中的数据

    getMethod():获得客户端向服务器端传送数据的方法

    getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

    getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

    getParameterValues(String name):获得有name指定的参数的所有值

    getProtocol():获取客户端向服务器端传送数据所依据的协议名称

    getQueryString():获得查询字符串

    getRequestURI():获取发出请求字符串的客户端地址

    getRemoteAddr():获取客户端的IP地址

    getRemoteHost():获取客户端的名字

    getSession([Boolean create]):返回和请求相关Session

    getServerName():获取服务器的名字

    getServletPath():获取客户端所请求的脚本文件的路径

    getServerPort():获取服务器的端口号

    removeAttribute(String name):删除请求中的一个属性

    11. 四种会话跟踪技术

    会话作用域ServletsJSP 页面描述

    page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面

    request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)

    session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求

    application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

    12. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

    JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和 JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML 可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

    13. servlet的生命周期

    web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

    14. 什么情况下调用doGet()和doPost()?

    Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

    15. 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 {

    }

    }

    16. JAVA SERVLET API中forward() 与redirect()的区别?

    前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

    17. JSP的内置对象及方法。

    request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

    response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

    out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

    pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

    session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

    applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息

    config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

    page表示从该页面产生的一个servlet实例

    18. 两种跳转方式分别是什么?有什么区别?

    有两种,分别为:

    

    

    前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。

    19. JSP中动态INCLUDE与静态INCLUDE的区别?

    动态INCLUDE用jsp:include动作实现。它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

    静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面:<%@ include file="included.htm" %>

    20. jsp有哪些动作?作用分别是什么?

    JSP共有以下6种基本动作:

    jsp:include:在页面被请求的时候引入一个文件。

    jsp:useBean:寻找或者实例化一个JavaBean。

    jsp:setProperty:设置JavaBean的属性。

    jsp:getProperty:输出某个JavaBean的属性。

    jsp:forward:把请求转到一个新的页面。

    jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

    21. jsp有哪些内置对象?作用分别是什么?

    JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

    request 用户端请求,此请求会包含来自GET/POST请求的参数

    response 网页传回用户端的回应

    pageContext 网页的属性是在这里管理

    session 与请求有关的会话期

    application servlet正在执行的内容

    out 用来传送回应的输出

    config servlet的构架部件

    page JSP网页本身

    exception 针对错误网页,未捕捉的例外

    22. 启动一个线程是用run()还是start()?

    启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

    23. 说出一些常用的类,包,接口,请各举5个

    常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer

    常用的包:java.lang java.awt java.io java.util java.sql

    常用的接口:Remote List Map Runnable Serializable ActionListener

    24. List、Map、Set三个接口,存取元素时,各有什么特点?

    List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值。

    25. 什么是java序列化,如何实现java序列化?

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

    序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

    26. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收

    对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

    27. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

    字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

    28. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

    ava通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是 Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

    用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。

    throw语句用来明确地抛出一个"异常"。

    throws用来标明一个成员函数可能抛出的各种"异常"。

    Finally为确保一段代码不管发生什么"异常"都被执行一段代码。

    可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。

    29. 排序都有哪几种方法?请列举

    排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序)

    30. 你所知道的集合类都有哪些?主要方法?

    最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。

    31. heap和stack有什么区别

    栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素

    32. HashMap和Hashtable的区别

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

    HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。

    Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

    最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

    Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异

    33. 说出ArrayList,Vector, LinkedList的存储性能和特性

    ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较 ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

    34. 运行时异常与一般异常有何异同

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

    35. int 和 Integer 有什么区别

    Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。

    Int是java的原始数据类型,Integer是java为int提供的wapper。Java为每个原始类型提供了封装类。

    原始类型封装类:

    boolean : Boolean

    char : Character

    byte : Byte

    short : Short

    int : Integer

    long : Long

    float : Float

    double : Double

    引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关

    36. String是最基本的数据类型吗

    不是,基本数据类型包括byte、int、char、long、float、double、boolean和short。

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

    37. 面向对象的特征有哪些方面

    主要有以下四方面:

    1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

    2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

    3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

    4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

    38. 谈谈final, finally, finalize的区别

    final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

    finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)

    finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

    39. 抽象类与接口?

    抽象类与接口都用于抽象,但是抽象类(JAVA中)可以有自己的部分实现,而接口则完全是一个标识(同时有多实现的功能)。

    JAVA类实现序例化的方法是实现java.io.Serializable接口

    Collection框架中实现比较要实现Comparable 接口和 Comparator 接口

    40. GC是什么? 为什么要有GC

    GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法

    41. char型变量中能不能存贮一个中文汉字?为什么?

    是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的

    42. ArrayList和Vector的区别,HashMap和Hashtable的区别

    就ArrayList与Vector主要从二方面来说:

    1、同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

    2、数据增长:当需要增长时,Vector默认增长为原来一倍,而ArrayList却是原来的一半

    就HashMap与HashTable主要从三方面来说:

    1、历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

    2、同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

    3、值:只有HashMap可以让你将空值作为一个表的条目的key或value

    43. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

    是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的

    44. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对

    不对,有相同的hash code

    45. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后

    会执行,在return前执行

    46. 是否可以继承String类

    String类是final类故不可以继承

    47. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)

    接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数

    48. abstract class和interface有什么区别

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法

    接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口

    49. List, Set, Map是否继承自Collection接口

    List,Set是,Map不是

    50. String s = new String("xyz");创建了几个String Object

    "xyz"本身作为字符常量,在汇编语言中应该作为常量放在数据段,Java有一个类似数据段的constant pool保存这个常量,在classloader加载这个类的时候就把"xyz"和这个类的其他一些信息放在constant pool new String("xyz")根据常量"xyz"在heap上创建String对象所以,一共两个对象

    51. 前几天面试的时候遇到了一个很好的sql语句题.虽然不是很难,但如果没实际做过项目,做起来还是有点难度的.特与大家分享..

    题目大概意思是:有下面这样一个方法,在此方法在被调用,在没有数据更新时没有进行判断.请修改... public boolean xx()

    {

    String sql;

    sql = "update user set name=?";

    try{

    PreparedStatement ps = cn.prepareStatement(sql);

    ps.setString(1,xxx);

    ps.executeUpdate();

    }catch(Exception e){

    return false;

    }

    return true;

    }

    参考答案

    int n=ps.executeUpdate();

    if(n==0){

    return false;

    }

    52. 什么情况下调用doGet()和doPost()?

    答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

    53 orward和redirect的区别

    forward: an internal transfer in servlet

    redirect: 重定向,有2次request,第2次request将丢失第一次的attributs/parameters等

    54. J2EE是技术还是平台还是框架?

    J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。

    J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。

    55.作用域public,private,protected,以及不写时的区别

    答:区别如下:

    作用域 当前类 同一package 子孙类 其他package

    public √ √ √ √

    protected √ √ √ ×

    friendly √ √ × ×

    private √ × × ×

    不写时默认为friendly

    56、&和&&的区别

    答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

    57、Collection 和 Collections的区别

    答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

    58.Math.round(11.5)等於多少? Math.round(-11.5)等於多少

    答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor

    59、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)

    答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数

    60、float型float f=3.4是否正确?

    答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4; float f = 3.4f;

    61、运行时异常与一般异常有何异同

    答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

    61、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

    答:可以。必须只有一个类名与文件名相同。

    62、在JAVA中,如何跳出当前的多重嵌套循环?

    答:用break; return 方法。

    63、说出一些常用的类,包,接口,请各举5个

    答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer

    常用的包:java.lang java.awt java.io java.util java.sql

    常用的接口:Remote List Map Runnable Serializable ActionListener

    64、sleep() 和 wait() 有什么区别?

    答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

    65、C/S 与 B/S 区别:

    答:有如下八个方面的不同:

    1.硬件环境不同:

    C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.

    B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行

    2.对安全要求不同

    C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.

    B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。

    3.对程序架构不同

    C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.

    B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.

    3.对程序架构不同

    C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.

    B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.

    4.软件重用不同

    C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.

    B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子

    5.系统维护不同

    C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统

    B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.

    6.处理问题不同

    C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统

    B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.

    7.用户接口不同

    C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高

    B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.

    8.信息流不同

    C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低

    B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心

范文4:Java试题(总)【以文搜文】

一.选择题

1.以下属于面向对象的特征的是(C,D)。(两项)

A) 重载

B) 重写

C) 封装

D) 继承

2.以下代码运行输出是(C)

publicclass Person {

private String name = "Person"; int age = 0;

}

publicclass Child extends Person {

} public String grade; publicstaticvoid main(String[] args) { } Person p = newChild(); System.out.println(p.name);

A) 输出:Person

B) 没有输出

C) 编译出错

D) 运行出错

3.在使用super 和this关键字时,以下描述正确的是(A)

A) 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过

B) super()和this()不一定要放在构造方法内第一行

C) this()和super()可以同时出现在一个构造函数中

D) this()和super()可以在static环境中使用,包括static方法和static语句块 //注意:super不能用于static环境下

4.以下对封装的描述正确的是(D)

A) 只能对一个类中的方法进行封装,不能对属性进行封装

B) 如果子类继承了父类,对于父类中进行封装的方法,子类仍然可以直接调用

C) 封装的意义不大,因此在编码时尽量不要使用

D) 封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性

5.以下对继承的描述错误的是(A)

A) Java中的继承允许一个子类继承多个父类

B) 父类更具有通用性,子类更具体

C) Java中的继承存在着传递性

D) 当实例化子类时会递归调用父类中的构造方法

class Person {

String name = "Person";

} intage = 0; public Person(){ } System.out.println("Person");

class Stu extends Person{

}

publicclass A extends Stu{

}

执行结果:

Person

Stu publicstaticvoid main(String args[]){ } new A(); public Stu(){ } System.out.println("stu");

6.以下程序的运行结果是(D)

class Person {

}

publicclass Teacher extends Person {

} private String name = "tom"; public Teacher() { } publicstaticvoid main(String[] args) { } Teacher teacher = newTeacher(); System.out.println(this.name); System.out.println("this is a teacher"); super(); public Person() { } System.out.println("this is a Person");

A) this is a Person

this is a teacher

tom

B) this is a teacher

this is a Person

tom

C) 运行出错

D) 编译有两处错误

7.以下说法错误的是(D)

A) super.方法()可以调用父类的所有非私有方法

B) super()可以调用父类的所有非私有构造函数

C) super.属性可以调用父类的所有非私有属性

D) this和super关键字可以出现在同一个构造函数中

8.以下关于final关键字说法错误的是(A)

A) final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性

B) final修饰的类肯定不能被继承

C) final修饰的方法不能被覆写

D) final修饰的变量不允许被再次赋值

说明:接口只能用public和abstract修饰,

9.访问修饰符作用范围由大到小是(D)

A) private-default-protected-public

B) public-default-protected-private

C) private-protected-default-public

D) public-protected-default-private

10.以下(D)不是Object类的方法

A) clone()

B) finalize()

C) toString()

D) hasNext()

11.多态的表现形式有(A)

A) 重写

B) 抽象

C) 继承

D) 封装

12.以下对重载描述错误的是(B)

A) 方法重载只能发生在一个类的内部

B) 构造方法不能重载

C) 重载要求方法名相同,参数列表不同

D) 方法的返回值类型不是区分方法重载的条件

13.以下(BD)添加到ComputerBook中不会出错 class Book {

}

publicclassComputerBookextends Book { } protectedintgetPrice() { } return 30;

A) protected float getPrice(){...}

B) protectedintgetPrice(int page){...}

C) intgetPrice(){...}

D) publicintgetPrice(){...}

14.以下对抽象类的描述正确的是(C)

A) 抽象类没有构造方法

B) 抽象类必须提供抽象方法

C) 有抽象方法的类一定是抽象类

D) 抽象类可以通过new关键字直接实例化

15.以下对接口描述错误的有(D)

A) 接口没有提供构造方法

B) 接口中的方法默认使用public、abstract修饰

C) 接口中的属性默认使用public、static、final修饰

D) 接口不允许多继承

16.以下代码,描述正确的有(A)

interfaceIDemo {

}

abstractclass Person implementsIDemo { 4

} publicvoid print() { } publicstaticfinal String name; 1 void print(); 2 publicvoidgetInfo(); 3

A) 第1行错误,没有给变量赋值

B) 第2行错误,方法没有修饰符

C) 第4行错误,没有实现接口的全部方法

D) 第3行错误,没有方法的实现

17.接口和抽象类描述正确的有(B,C)(两项)

A) 抽象类没有构造函数

B) 接口没有构造函数

C) 抽象类不允许多继承

D) 接口中的方法可以有方法体

18.以下描述错误的有(C)

A) abstract 可以修饰类、接口、方法

B) abstract修饰的类主要用于被继承

C) abstract 可以修饰变量

D) abstract修饰的类,其子类也可以是abstract修饰的

19.以下描述正确的有(B)

A) 方法的重写应用在一个类的内部

B) 方法的重载与返回值类型无关

C) 构造方法不能重载

D) 构造方法可以重写

20.以下程序运行结果是(A)

publicclass Test extends Father {

}

class Father {

} private String name = "father"; public String getName() { } returnname; private String name = "test"; publicstaticvoid main(String[] args) { } Test test = newTest(); System.out.println(test.getName());

A) father

B) test

C) 编译出错

D) 运行出错,无输出

21.以下程序运行结果是(B)

publicclass Test extends Father {

}

class Father {

private String name = "father"; private String name = "test"; public String getName() { } publicstaticvoid main(String[] args) { } Test test = newTest(); System.out.println(test.getName()); returnname;

} public String getName() { } returnname;

A) father

B) test

C) 编译出错

D) 运行出错,无输出

22.以下对异常的描述不正确的有(C)

A) 异常分为Error和Exception

B) Throwable是所有异常类的父类

C) Exception是所有异常类父类

D) Exception包括RuntimeException和RuntimeException之外的异常

23.在try-catch-finally语句块中,以下可以单独与finally一起使用的是(B)

A) catch

B) try

C) throws

D) throw

24.下面代码运行结果是(B)

publicclass Demo {

} publicint add(int a, int b) { } publicstaticvoid main(String[] args) { Demo demo = newDemo(); System.out.print("和是:" + demo.add(9, 34)); } try { return a + b; } catch (Exception e) { System.out.print("catch语句块"); } finally { System.out.print("finally语句块"); } return 0;

A)编译异常

B) finally语句块和是:43

C) 和是:43 finally语句块

D) catch语句块和是:43

25.以下描述不正确的有(D)

A) try块不可以省略

B)可以使用多重catch块

C) finally块可以省略

D) catch块和finally块可以同时省略

26.以下程序运行结果是(D)

publicclass Test {

} publicstaticvoid main(String[] args) { Test demo = newTest(); System.out.println("商是:" + demo.div(9, 0)); } publicint div(int a, int b) { } try { } return 0; return a / b; System.out.println("Exception"); System.out.println("ArithmeticException"); System.out.println("ArithmeticException"); System.out.println("finally"); } catch (Exception e) { } catch (NullPointerException e) { } catch (ArithmeticException e) { } finally {

A) Exception finally 商是:0

B) ArithmeticException finally 商是:0

C) finally商是:0

D) 编译报错

27. 以下对TCP和UDP描述正确的是(D)

A) TCP不能提供数据的可靠性

B) UDP能够保证数据库的可靠性

C) TCP数据传输效率高于UDP

D) UDP数据传输效率高于TCP

28. 在Java中,下面对于构造函数的描述正确的是(D)。

A) 类必须显示定义构造函数

B) 构造函数的返回类型是void

C) 构造函数和类有相同的名称,并且不能带任何参数

D) 一个类可以定义多个构造函数

29. 根据下面的代码,

String s = null;

会抛出NullPointerException异常的有(A,C)。[两项]

A)if ((s != null) & (.length() > 0))

B)if ((s != null) && (s.length() > 0))

C)if ((s == null) | (.length() == 0))

D) if ((s == null) || (s.length() == 0))

30.在Java中,关于HashMap类的描述,以下错误的是( B )。

A) HashMap使用键/值得形式保存数据

B) HashMap能够保证其中元素的顺序

C) HashMap允许将null用作键

D) HashMap允许将null用作值

31. 下列选项中关于java中super关键字的说法错误的是( B )

A) super关键字是在子类对象内部指代其父类对象的引用

B) super关键字不仅可以指代子类的直接父类,还可以指代父类的父类

C) 子类可以通过super关键字调用父类的方法

D) 子类可以通过super关键字调用父类的属性

32. 在Java中,以下代码( A )正确地创建了一个InputStreamReader对象。

A) InuptStreamReader(new FileInputStream(“1.dat”));

B) InuptStreamReader(new FileReader(“1.dat”));

C) InuptStreamReader(new BufferReader(“1.dat”));

D) InuptStreamReader (“1.dat”);

33. 在Java中,( D )类提供定位本地文件系统,对文件或目录及其属性进行基本操作。

A) FileInputStream

B) FileReader

C) FileWriter

D) File

34. Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是(C)

A) ArrayList和LinkedList均实现了List接口

B) ArrayList的访问速度比LinkedList快

C)添加和删除元素时,ArrayList的表现更佳

D) HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值

35.在Java中,JDBCAPI定义了一组用于与数据库进行通信的接口和类,它们包括在(B)包中。

A) java.lang

B) java.sql

C) java.util

D) java.math

36. Java中,以下( B )接口以键_值对的方式存储对象。

A) java.util.Collection

B) java.util.Map

C) java.util.List

D) java.util.Set

37. 以下关于对象序列化描述正确的是( C,D )[两项]

A) 使用FileOutputStream可以将对象进行传输

B) 使用PrintWriter可以将对象进行传输

C) 使用ObjectOutputStream类完成对象存储,使用ObjectInputStream类完成对象读取

D) 对象序列化的所属类需要实现Serializable接口

38.在Java中,( A )类可用于创建链表数据结构的对象。

A) LinkedList

B) ArrayList

C) Collection

D) HashMap

39. 使用JDBC事务的步骤是(C,A,B,D)(多选)

A) 取消Connection的事务自动提交方式

B) 发生异常回滚事务

C) 获取Connection对象

D) 操作完毕提交事务

40. 要删除book表中书籍(bookName)是”java”的记录,以下代码正确的是(A) String sql=”delete from book where bookName=?”;

PreparedStatementpst=con.preparedStatement(sql);

______________________________

pst.execute();

A) pst.setString(1,”java”);

B) pst.setString(0,”java”);

C) pst.setInt(0,”java”);

D) 以上选项都不正确

41. 以下可以正确获取结果集的有(AD)(多选)

A) Statement sta=con.createStatement();

ResultSetrst=sta.executeQuery(“select * from book”);

B) Statement sta=con.createStatement(“select * from book”);

ResultSetrst=sta.executeQuery();

C) PreparedStatementpst=con.preparedStatement();

ResultSetrst=pst.executeQuery(“select * from book”);

D) PreparedStatementpst=con.preparedStatement(“select * from book”); ResultSetrst=pst.executeQuery();

42. 以下负责建立与数据库连接的是(D)

A) Statement

B) PreparedStatement

C) ResultSet

D) DriverManager

43. 使用JDBC连接数据库的顺序是(B,A,D,C,E)(多选)

A) 加载驱动

B) 导入驱动包

C) 发送并处理SQL语句

D) 建立于数据库的连接

E)关闭连接

1.Java语言是一种面向对象程序设计语言。( 对 )

2.在Java有布尔类型,该类型只能有两个值:1和0。( 错 )

3.Java中一个类可以同时继承多个其他类,但只能实现一个接口。( 错 )

4.在Java中字符串的长度和字符串中字符的个数是相等的。( 对 )

5.程序中的异常是错误的一种,通过调试程序可以解决异常。( 错 )

6.使用Java语言既可以读写二进制文件,又可以读写文本文件。( 对 )

7.线程就是程序,只不过是代码较少。( 错 )

二、填空题

1、面向对象程序设计所具有的基本特征是: _封装性___,_继承性__,_多态性

2、数组x定义如下

int x[ ][ ]=new int[3][2]

则 x.length 的值为____3________,

x[0].length 的值为_____2_______。

3、Java中实现多线程一般使用两种方法,一是___继承Thread类_________,二是_____实现Runnable方法__________

4、Java的图形用户界面设计中,有很多布局管理器用来摆放组件的位置,一般用到的布局管理器有(列出四种即可)__FlowLayout_____,___GridLayout_____,__BorderLayout_____,___CardLayout_______

5.字符串分为两大类,一类是字符串常量,使用(String)类的对象表示;另一类是字符串变量,使用()类的对象表示。

6.定义字符串:String s = "abcd";,则s.charAt(0)的值是(‘a’),s.subString(0,3)的值是(“abc”)。

7.类的访问控制符有()和()两种,()类具有跨包访问性而()类不能被跨包访问。

8.使用()方法加载和注册驱动程序后,由()类负责管理并跟踪JDBC驱动程序,在数据库和相应驱动程序之间建立连接。

9.()语句只中断所在层循环中的当次循环,()语句只中断某一层的循环。

四、阅读程序,回答问题

1.

public class Demo {

public static void main(String args[]) {

int a[] = { 5, 9, 6, 8, 7 };

fun(a);

print(a);

}

private static void print(int[] a) {

for (int i = 0; i <a.length; i++)

System.out.print(a[i] + " ");

System.out.println();

}

private static void fun(int... arg) {

int i, j;

for (i = 0; i <arg.length - 1; i++) {

int k = i;

for (j = i; j <arg.length; j++)

if (arg[j] <arg[k])

k = j;

int temp = arg[i];

arg[i] = arg[k];

arg[k] = temp;

}

}

}

①Demo类中fun方法和print方法的功能分别是什么? ②该程序的执行结果是什么?

2.

class Person {

String name = "Person";

int age = 0;

public Person(){

System.out.println("Person");

}

}

class Stu extends Person{

public Stu(){

System.out.println("stu");

}

}

publicclass A extends Stu{

public static void main(String args[]){

new A();

}

}

①请描述子类对象实例化时会涉及哪些类的构造方法被调用?调用顺序是什么?

②该程序的执行结果是什么?

3.

1: public class A {

2: public static void main(String args[]) {

3: MyInterface obj2=new B("B");

4: obj2.show();

5: }

6: }

7:

8: interface MyInterface {

9: double G=88;

10: void show();

11: }

12:

13: class B implements MyInterface {

14:

15: String str;

16: public B(String s) {

17: str=s;

18: }

19: public void show() {

20: System.out.println(str+": G="+G);

21: }

22: }

①程序第8~11行定义的MyInterface是类还是接口?show()方法完整写法是什么?

②程序第4行输出的结果是什么?B: G=88.0

4.

1: public class A {

2: public static void main(String args[]) {

3: try{

4: int x[]={1,2,3};

5: int k=Integer.parseInt(args[0]);

6: System.out.println(x[k]);

7: System.out.println("try结束!");

8: }

9: catch(ArrayIndexOutOfBoundsException e){

10: System.out.println("执行catch");

11: }

12: finally{

13: System.out.println("执行finally");

14: }

15: System.out.println("程序结束!");

16: }

17: }

①若在命令行编译该程序后,键入下面的内容运行该程序:

java A 1

则程序输出的结果如何?

②若在命令行编译该程序后,键入下面的内容运行该程序:

java A 3

则程序输出的结果如何?

下列程序实现从当前目录的date.ser文件中读取文件内容并显示出来.请将程序补充完整 import java.io.*;

importjava.util.Date;

publicclassUnSerializeDate {

UnSerializeDate() {

Date d = null;

try {

} FileInputStreamf = new"date.ser"); ObjectInputStreams = newObjectInputStream(); d = (Date) s.readObject(); f.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("Unserialized Date object from date.set"); System.out.println("Date:" + d); } publicstaticvoid main(String args[]) { newUnSerializeDate(); }

问答题

1、简述你所知道的JAVA修饰符及各自的使用机制?(public、abstract、final、synchronized、super…)

public :允许所有客户访问

protected:只能在本包内被该类的子类所使用

private:只允许在本类内使用

abstract:没有提供实现,需要子类提供

static:与整个类相关,与单个对象无关

final:你只能定义一个实体一次,以后不能改变它或继承它。一个final修饰的类不能被子类化,一个final

修饰的方法不能被重写,一个final修饰的变量不能改变其初始值

synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。 super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。

2. String、StringBuffer与StringBuilder之间区别?别简述各自的执行效率?

区别:String 类型和StringBuffer类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的,

执行速度:三者在执行速度方面的比较:StringBuilder>StringBuffer> String

使用场景:1.如果要操作少量的数据用 = String

2.单线程操作字符串缓冲区下操作大量数据 = StringBuilder

3.多线程操作字符串缓冲区下操作大量数据 = StringBuffer

2、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗?

静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。实例变量属于该类的对象,必须产生该类对象,才能调用实例变量

静态方法及变量属于整个类,数据将会被存储在公共区域,非静态方法及变量属于对象

静态方法中无法调用实例变量,而实例方法却可以调用静态变量

2、继承和接口是什么?以及他们的区别?

1 接口定义一个类需要实现的方法属性索引事件和可能的参数返回值类型,具体的实现交由相应的类或结构,从而实现多态;而继承用于在一个现有父类基础上的功能扩展,把几个类中相同的成员提取出来放在一个父类中,在子类中添加独特的方法即继承扩展

2 接口能够实现多接口继承,而继承只能实现单继承

3 继承能够获得父类方法的实现,而接口只能获得方法的定义,所以必须获得所有的方法

4 在继承中为父类添加方法不影响子类的继承,但在接口中为父类添加一个方法定义必须在子类中添加此方法的实现

3、HashMap和Hashtable的区别?

1,Hashtable是基于陈旧的Dictionary类的,HashMap是Map接口的一个实现。

2,Hashtable的方法是同步的,而HashMap的方法不是

3,只有HashMap可以让你将空值作为一个表的条目的key或value

4、抽象类(abstract class)和接口(interface)有什么区别?

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口

5、重载(Overload)和重写(Override)的区别。Overloaded的方法是否可以改变返回值

的类型?

Overload是重载,是有相同的方法名,但参数类型或个数彼此不同

Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的改方法。

6、你所知道的集合类都有哪几类?主要区别有哪些并简单描述?

集合类型主要有3种:set(集)、list(列表)和map(映射)

集 Set

它的对象不按特定方式排序,只是简单的把对象加入集合中

对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。

列表 List

List接口与其实现类是容量可变的列表,可以按照索引访问集合中的元素,是有序的集合

列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。常用的有ArrayList vector

映射 Map

映射中每个项都是成对的,Map是把键对象和值对象进行关联的容器。

映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,关键字应该是唯一的,常用的有HashMap,HashTable

7、线程和进程的区别?实现多线程的方式有哪几种?如何实现多线程同步?

区别:

线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享;而线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程范围内共享数据。也就是说进程有自己独立的存储空间,而线程是和它所属的进程内的其他线程共享一个存储空间。

实现多线程的方法:

1、 继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。

2、 实现java.lang.Runnable接口,实现它的run()方法,并将线程的执行主体放入其中。

如何实现线程同步:

给一个方法增加synchronized修饰符之后就可以使它成为同步方法,这个方法可以是静态方法和非静态方法,但是不能是抽象类的抽象方法,也不能是接口中的接口方法

8、中的异常处理机制的简单和应用。

当Java程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是Java类库内置的语义。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类

9、线程同步的方法(类里有哪些方法来支持线程同步)。

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是静态方法,调用此方法要捕捉InterruptedException异常。 notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切地唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

10、 Error与Exception有什么区别

Error表示系统级的错误和程序不必处理的异常,

Exception表示需要捕捉或者需要程序进行处理的异常。

11.谈谈final, finally, finalize的区别。

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally—异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的

编程题

1、编写一个完整的Java Application 程序。包含接口ShapeArea,类Circle、Rectangle、Test,具体要求如下:

⑴接口ShapeArea:

接口方法

double getArea():求一个形状的面积

double getPerimeter ():求一个形状的周长

⑵类Rectangle:

实现ShapeArea接口,并有以下属性和方法:

属性

width: double型,表示长方形的宽度

height:double型,表示长方形的长度

方法

Rectangle(double w, double h):构造函数t

oString():输出矩形的描述信息,

如“width=1.0,height=2.0,perimeter=6.0,area=2.0”

⑶Test类作为主类要完成测试功能

①生成Rectangle对象

② 调用对象的toString方法,输出对象的描述信息

范文5:Java试题【以文搜文】

    第1 页共59 页面试题集面试题集共分为以下十部分:一、Core Java: 1 — 95 题1 — 24 页基础及语法: 1 — 61 题1 — 13 页异常: 62 — 69 题13 — 15 页集合: 70 — 80 题15 — 18 页线程: 81 — 90 题18 — 21 页IO & Socket: 91 — 95 题21 — 24 页二、OOAD & UML: 96 — 101 题24 — 25 页三、XML: 102 — 105 题26 — 29 页四、SQL: 106 — 109 题29 — 31 页五、JDBC & Hibernate: 110 — 121 题31 — 35 页六、Web: 122 — 161 题35 — 44 页七、EJB & Spring: 162 — 179 题44 — 47 页八、数据结构& 算法& 计算机基础: 180 — 187 题47 — 51 页九、C++: 188 — 201 题51 — 55 页十、Weblogic 及其它(附加部分) 1 —— 13 题55 — 57 页一、CoreJava 部分:(共95 题:基础91 道,中等难度4 道)基础及语法部分:(共61 题:基础60 道、中等难度1 道)1、面向对象的特征有哪些方面? 【基础】答:面向对象的特征主要有以下几个方面:1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3)封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4)多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。2、作用域public,private,protected,以及不写时的区别?【基础】答:区别如下:作用域当前类同包子孙类其他public √ √ √ √第2 页共59 页protected √ √ √ ×default √ √ × ×private √ × × ×不写时默认为default。3、String 是最基本的数据类型吗? 【基础】答:不是。4、float 型float f=3.4是否正确? 【基础】答:不正确;精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 。5、语句float f=1.3;编译能否通过?【基础】答:不能;应该用强制类型转换,如下所示:float f=(float)1.3; 。6、short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 += 1;有什么错? 【基础】答:short s1 = 1; s1 = s1 + 1;s1+1运算结果是int 型,需要强制转换类型;short s1 = 1; s1 += 1;可以正确编译,自动类型提升。7、Java 有没有goto? 【基础】答:goto 是java 中的保留字,现在没有在java 中使用。8、int 和Integer 有什么区别? 【基础】答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型);int 是java 的原始数据类型,Integer 是java 为int 提供的封装类。Java 为每个原始类型提供了封装类:原始类型: boolean,char,byte,short,int,long,float,double封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。9、&和&&的区别?【基础】答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。10、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别?【基础】答:区别主要有两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型b.逻辑操作不会产生短路。11、heap 和stack 有什么区别?【基础】答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成,栈按照后进先出的方式进行处理;堆是栈的一个组成元素。第3 页共59 页12、Math.round(11.5) 等于多少? Math.round(-11.5)等于多少? 【基础】答:Math.round(11.5)==12 Math.round(-11.5)==-11 round 方法返回与参数最接近的长整数,参数加1/2 后求其floor。13、swtich 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上? 【基础】答:switch(expr1)中,expr1 是一个整数表达式。因此传递给switch 和case语句的参数应该是int、short、char 或者byte。long,string 都不能作用于swtich。14、编程题: 用最有效率的方法算出2 乘以8 等於几? 【基础】答: 2 << 3。15、有没有length()这个方法? String 有没有length()这个方法?【基础】答:数组没有length()这个方法,有length 的属性。String 有length()这个方法。16、在JAVA 中,如何跳出当前的多重嵌套循环?【基础】答:在最外层循环前加label 标识,然后用break:label 方法即可跳出多重循环。17、构造器Constructor 是否可被override? 【基础】答:构造器Constructor 不能被继承,因此不能重写Overriding,但可以被重载Overloading。18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 【基础】答:不对,有相同的hash code。19、是否可以继承String 类? 【基础】答:String 类是final 类,故不可以继承。20、以下二条语句返回值为true 的有:A:“beijing”==“beijing”;B:“beijing”.equalsIgnoreCase(new String(“beijing”));【基础】答:A 和B 。21、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 【基础】答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?【基础】答:public String translate(String str){第4 页共59 页String tempStr = "";try{tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");tempStr = tempStr.trim();}catch (Exception e){System.err.println(e.getMessage());}return tempStr;}23、String 和StringBuffer 的区别? 【基础】答:JAVA 平台提供了两个类:String 和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer 类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers 来动态构造字符数据。24、String, StringBuffer StringBuilder 的区别。【基础】答:String 的长度是不可变的;StringBuffer 的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer 的toString()方法;线程安全;StringBuilder 是从JDK 5 开始,为StringBuffer 该类补充了一个单个线程使用的等价类;通常应该优先使用StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。25、Overload 和Override 的区别。Overloaded 的方法是否可以改变返回值的类型? 【基础】答:方法的重写Overriding 和重载Overloading 是Java 多态性的不同表现。重写Overriding 是父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。26、定义类A 和类B 如下:【基础】class A {int a=1;double d=2.0;void show(){System.out.println("Class A: a="+a +"\td="+d);}}class B extends A{第5 页共59 页float a=3.0f;String d="Java program.";void show(){super.show( );System.out.println("Class B: a="+a +"\td="+d);}}(1) 若在应用程序的main 方法中有以下语句:A a=new A();a.show();则输出的结果如何?(2) 若在应用程序的main 方法中定义类B 的对象b:A b=new B();b.show();则输出的结果如何?答:输出结果为:1)Class A: a=1 d=2.0 ;2)Class A: a=1 d=2.0Class B: a=3.0 d=Java program。27、描述一下JVM 加载class 文件的原理机制? 【基础】答:JVM 中类的装载是由ClassLoader 和它的子类来实现的,Java ClassLoader是一个重要的Java 运行时系统组件。它负责在运行时查找和装入类文件的类。28、char 型变量中能不能存贮一个中文汉字?为什么? 【基础】答:能够定义成为一个中文的,因为java 中以unicode 编码,一个char 占16个字节,所以放一个中文是没问题的。29、abstract class 和interface 有什么区别? 【基础】答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是publicstatic final 的。一个类可以实现多个接口,当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。第6 页共59 页30、Static Nested Class 和Inner Class 的不同?【基础】答:Static Nested Class 是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。31、java 中会存在内存泄漏吗,请简单描述。【基础】答:会;存在无用但可达的对象,这些对象不能被GC 回收,导致耗费内存资源。32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 【基础】答:都不能。33、静态变量和实例变量的区别?【基础】答:静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依存于某一实例,只能通过对象才能访问到它。34、是否可以从一个static 方法内部发出对非static 方法的调用?【基础】答:不可以,如果其中包含对象的method(),不能保证对象初始化。35、写clone()方法时,通常都有一行代码,是什么?【基础】答:Clone 有缺省行为:super.clone(),他负责产生正确大小的空间,并逐位复制。36、GC 是什么? 为什么要有GC? 【基础】答:GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() 。37、垃圾回收的优点和原理。并考虑2 种回收机制。【基础】答:Java 语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java 程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。38、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?【基础】答:对于GC 来说,当程序员创建对象时,GC 就开始监控这个对象的地址、大小以及使用情况。通常,GC 采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC 确定一第7 页共59 页些对象为"不可达"时,GC 就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC 运行,但是Java 语言规范并不保证GC 一定会执行。39、String s=new String(“xyz”);创建了几个String Object? 【基础】答:两个对象,一个是"xyx",一个是指向"xyx"的引用对象s。40、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 【基础】答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。41、Java 的接口和C++的虚类的相同和不同处。【基础】答:由于Java 不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static,所有方法默认情况下是public.一个类可以实现多个接口。42、一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?【基础】答:可以;必须只有一个类名与文件名相同。43、说出一些常用的类,包,接口,请各举5 个。【基础】答:常用的类:BufferedReader BufferedWriter FileReader FileWirterString Integer;常用的包:java.lang java.awt java.io java.util java.sql;常用的接口:Remote List Map Document NodeList44、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类?是否可以implements(实现)interface(接口)? 【基础】答:可以继承其他类或实现其他接口,在swing 编程中常用此方式。45、内部类可以引用他包含类的成员吗?有没有什么限制?【基础】答:一个内部类对象可以访问创建它的外部类对象的内容。46、java 中实现多态的机制是什么?【基础】答:方法的覆盖Overriding 和重载Overloading 是java 多态性的不同表现;覆盖Overriding 是父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。47、在java 中一个类被声明为final 类型,表示了什么意思?【基础】答:表示该类不能被继承,是顶级类。48、下面哪些类可以被继承? 【基础】1)java.lang.Thread (T)第8 页共59 页2)java.lang.Number (T)3)java.lang.Double (F)4)java.lang.Math (F)5)java.lang.Void (F)6)java.lang.Class (F)7)java.lang.ClassLoader (T)答:1、2、7 可以被继承。49、指出下面程序的运行结果: 【基础】class A{static{System.out.print("1");}public A(){System.out.print("2");}}class B extends A{static{System.out.print("a");}public B(){System.out.print("b");}}public class Hello{public static void main(String[] ars){A ab = new B(); //执行到此处,结果: 1a2bab = new B(); //执行到此处,结果: 1a2b2b}}答:输出结果为1a2b2b;类的static 代码段,可以看作是类首次加载(虚拟机加载)执行的代码,而对于类加载,首先要执行其基类的构造,再执行其本身的构造。50、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?【基础】父类:package test;public class FatherClass {public FatherClass() {System.out.println("FatherClass Create");}}子类:package test;第9 页共59 页import test.FatherClass;public class ChildClass extends FatherClass {public ChildClass() {System.out.println("ChildClass Create");}public static void main(String[] args) {FatherClass fc = new FatherClass();ChildClass cc = new ChildClass();}}答:输出结果为:FatherClass CreateFatherClass CreateChildClass Create51、内部类的实现方式? 【基础】答:示例代码如下:package test;public class OuterClass {private class InterClass {public InterClass() {System.out.println("InterClass Create");}}public OuterClass() {InterClass ic = new InterClass();System.out.println("OuterClass Create");}public static void main(String[] args) {OuterClass oc = new OuterClass();}}输出结果为:InterClass CreateOuterClass Create52、关于内部类: 【基础】public class OuterClass {private double d1 = 1.0;//insert code here}You need to insert an inner class declaration at line 3,Which twoinner class declarations are valid?(Choose two.)A. class InnerOne{第10 页共59 页public static double methoda() {return d1;}}B. public class InnerOne{static double methoda() {return d1;}}C. private class InnerOne{double methoda() {return d1;}}D. static class InnerOne{protected double methoda() {return d1;}}E. abstract class InnerOne{public abstract double methoda();}答:答案为C、E;说明如下:1)静态内部类可以有静态成员,而非静态内部类则不能有静态成员;故A、B错;2)静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;故D 错;3)非静态内部类的非静态成员可以访问外部类的非静态变量;故C 正确。53、数据类型之间的转换:1)如何将数值型字符转换为数字?2)如何将数字转换为字符?3)如何取小数点前两位并四舍五入? 【基础】答:1)调用数值类型相应包装类中的方法parse***(String)或valueOf(String)即可返回相应基本类型或包装类型数值;2)将数字与空字符串相加即可获得其所对应的字符串;另外对于基本类型数字还可调用String 类中的valueOf(…)方法返回相应字符串,而对于包装类型数字则可调用其toString()方法获得相应字符串;3)可用该数字构造一java.math.BigDecimal 对象,再利用其round()方法进行四舍五入到保留小数点后两位,再将其转换为字符串截取最后两位。54、字符串操作:如何实现字符串的反转及替换?【基础】答:可用字符串构造一StringBuffer 对象,然后调用StringBuffer 中的reverse方法即可实现字符串的反转,调用replace 方法即可实现字符串的替换。55、编码转换:怎样将GB2312 编码的字符串转换为ISO-8859-1 编码的字符串?【基础】答:示例代码如下:String s1 = "你好";String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");56、写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔。【基础】第11 页共59 页答:函数代码如下:public String[] split(String str, int chars){int n = (str.length()+ chars - 1)/chars;String ret[] = new String[n];for(int i=0; i 0); // throws an Assertionerror if a <= 0断言可以有两种形式:assert Expression1 ;assert Expression1 : Expression2 ;Expression1 应该总是产生一个布尔值。Expression2 可以是得出一个值的任意表达式;这个值用于生成显示更多调试信息的String 消息。断言在默认情况下是禁用的,要在编译时启用断言,需使用source 1.4 标记:javac -source 1.4 Test.java要在运行时启用断言,可使用-enableassertions 或者-ea 标记。要在运行时选择禁用断言,可使用-da 或者-disableassertions 标记。要在系统类中启用断言,可使用-esa 或者-dsa 标记。还可以在包的基础上启用或者禁用断言。可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。异常部分:(共8 题:基础8 道)62、Java 中的异常处理机制的简单原理和应用?【基础】答:当JAVA 程序违反了JAVA 的语义规则时,JAVA 虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2 种情况。一种是JAVA 类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null 的对象时会引发NullPointerException。另一种情况就是JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw 关键字引发异常。所有的异常都是java.lang.Thowable 的子类。63、error 和exception 有什么区别? 【基础】答:error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。64、try {}里有一个return 语句,那么紧跟在这个try 后的finally {}里的code会不会被执行,什么时候被执行,在return 前还是后? 【基础】答:会执行,在return 前执行。65、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try 块中可以抛出异常吗?【基础】答:Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并第14 页共59 页提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable 类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java 的异常处理是通过5 个关键词来实现的:try、catch、throw、throws 和finally。一般情况下是用try 来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理;try 用来指定一块预防所有“异常”的程序;catch 子句紧跟在try 块后面,用来指定你想要捕捉的“异常”的类型;throw 语句用来明确地抛出一个“异常”;throws 用来标明一个成员函数可能抛出的各种“异常”;Finally 为确保一段代码不管发生什么“异常”都被执行一段代码;可以在一个成员函数调用的外面写一个try 语句,在这个成员函数内部写另一个try 语句保护其他代码。每当遇到一个try 语句,“异常”的框架就放到堆栈上面,直到所有的try 语句都完成。如果下一级的try 语句没有对某种“异常”进行处理,堆栈就会展开,直到遇到有处理这种“异常”的try 语句。66、运行时异常与一般异常有何异同?【基础】答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。67、给我一个你最常见到的runtime exception?【基础】答:ArithmeticException, ArrayStoreException, BufferOverflowException,BufferUnderflowException, CannotRedoException, CannotUndoException,ClassCastException, CMMException, ConcurrentModificationException,DOMException, EmptyStackException, IllegalArgumentException,IllegalMonitorStateException, IllegalPathStateException,IllegalStateException, ImagingOpException, IndexOutOfBoundsException,MissingResourceException, NegativeArraySizeException,NoSuchElementException, NullPointerException, ProfileDataException,ProviderException, RasterFormatException, SecurityException,SystemException, UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException68、final, finally, finalize 的区别? 【基础】答:final:修饰符(关键字);如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为abstract的,又被声明为final 的;将变量或方法声明为final,可以保证它们在使用中不被改变;被声明为final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为final 的方法也同样只能使用,不能重载。finally:再异常处理时提供finally 块来执行任何清除操作;如果抛出一个异常,那么相匹配的catch 子句就会执行,然后控制就会进入finally 块(如果有的话)。第15 页共59 页finalize:方法名;Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object 类中定义的,因此所有的类都继承了它。子类覆盖finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。69、类Example A 继承Exception,类ExampleB 继承Example A;【基础】有如下代码片断:try{throw new ExampleB(“b”);}catch(ExampleA e){System.out.printfln(“ExampleA”);}catch(Exception e){System.out.printfln(“Exception”);}输出的内容应该是:A:ExampleA B:Exception C:b D:无答:输出为A。集合部分:(共11 题:基础11 道)70、介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)【基础】答:Collection FrameWork 如下:Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection 是最基本的集合接口,一个Collection 代表一组Object,即Collection 的元素(Elements); Map 提供key 到value 的映射。71、List,Set,Map 是否继承自Collection 接口?【基础】答:List,Set 是;Map 不是。72、你所知道的集合类都有哪些?主要方法?【基础】答:最常用的集合类是List 和Map。List 的具体实现包括ArrayList 和Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List 适用于按数值索引访问元素的情形。Map 提供了一个更通用的第16 页共59 页元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。73、说出ArrayList,Vector, LinkedList 的存储性能和特性?【基础】答:ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。74、Collection 和Collections 的区别?【基础】答:Collection 是java.util 下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List;Collections 是个java.util 下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。75、HashMap 和Hashtable 的区别? 【基础】答:二者都实现了Map 接口,是将惟一键映射到特定的值上;主要区别在于:1)HashMap 没有排序,允许一个null 键和多个null 值,而Hashtable 不允许;2)HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey,因为contains 方法容易让人引起误解;3)Hashtable 继承自Dictionary 类,HashMap 是Java1.2 引进的Map 接口的实现;4)Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable 和HashMap 采用的hash/rehash 算法大致一样,所以性能不会有很大的差异。76、Arraylist 与Vector 区别?【基础】答:就ArrayList 与Vector 主要从二方面来说:1)同步性:Vector 是线程安全的(同步),而ArrayList 是线程序不安全的;2)数据增长:当需要增长时,Vector 默认增长一倍,而ArrayList 却是一半。77、List、Map、Set 三个接口,存取元素时,各有什么特点?【基础】答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value 值,value 可多值。78、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 【基础】答:Set 里的元素是不能重复的,用equals ()方法来区分重复与否。覆盖equals()方法用来判断对象的内容是否相同,而”==”判断地址是否相等,用来决定引用值是否指向同一对象。79、用程序给出随便大小的10 个数,序号为1-10,按从小到大顺序输出,并输出相应的序号。【基础】第17 页共59 页答:代码如下:package test;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.Random;public class RandomSort {public static void printRandomBySort() {Random random = new Random(); // 创建随机数生成器List list = new ArrayList();// 生成10 个随机数,并放在集合list 中for (int i = 0; i < 10; i++) {list.add(random.nextInt(1000));}Collections.sort(list); // 对集合中的元素进行排序Iterator it = list.iterator();int count = 0;while (it.hasNext()) { // 顺序输出排序后集合中的元素System.out.println(++count + ": " + it.next());}}public static void main(String[] args) {printRandomBySort();}}80、用JAVA 实现一种排序,JAVA 类实现序列化的方法? 在COLLECTION 框架中,实现比较要实现什么样的接口?【基础】答:用插入法进行排序代码如下:package test;import java.util.*;class InsertSort {ArrayList al;public InsertSort(int num,int mod) {al = new ArrayList(num);Random rand = new Random();System.out.println("The ArrayList Sort Before:");for (int i=0;i王小明信息学院6258113男,1955 年生,博士,95 年调入海南大学事件回调类SAXHandler.java :import java.io.*;import java.util.Hashtable;import org.xml.sax.*;第28 页共59 页public class SAXHandler extends HandlerBase{private Hashtable table = new Hashtable();private String currentElement = null;private String currentValue = null;public void setTable(Hashtable table){this.table = table;}public Hashtable getTable(){return table;}public void startElement(String tag, AttributeList attrs)throws SAXException{currentElement = tag;}public void characters(char[] ch, int start, int length)throws SAXException{currentValue = new String(ch, start, length);}public void endElement(String name) throws SAXException{if (currentElement.equals(name))table.put(currentElement, currentValue);}}JSP 内容显示源码,SaxXml.jsp:剖析XML 文件people.xml<%@ page errorPage="ErrPage.jsp"contentType="text/html;charset=GB2312" %><%@ page import="java.io.*" %><%@ page import="java.util.Hashtable" %><%@ page import="org.w3c.dom.*" %><%@ page import="org.xml.sax.*" %><%@ page import="javax.xml.parsers.SAXParserFactory" %><%@ page import="javax.xml.parsers.SAXParser" %><%@ page import="SAXHandler" %><%File file = new File("c:\people.xml");FileReader reader = new FileReader(file);Parser parser;SAXParserFactory spf = SAXParserFactory.newInstance();SAXParser sp = spf.newSAXParser();第29 页共59 页SAXHandler handler = new SAXHandler();sp.parse(new InputSource(reader), handler);Hashtable hashTable = handler.getTable();out.println("

");out.println("" + "");out.println("" + "");out.println("" + "");out.println("" + "");out.println("
" +"教师信息表
姓名" +(String)hashTable.get(new String("name")) +"
学院" +(String)hashTable.get(new String("college"))+"
电话" +(String)hashTable.get(new String("telephone"))+ "
备注" +(String)hashTable.get(new String("notes"))+ "
");%>四、数据库及SQL 部分:(共4 题:基础3 道,中等难度1 道)106、有3 个表(15 分钟):【基础】Student 学生表(学号,姓名,性别,年龄,组织部门)Course 课程表(编号,课程名称)Sc 选课表(学号,课程编号,成绩)表结构如下:第30 页共59 页1)写一个SQL 语句,查询选修了’计算机原理’的学生学号和姓名(3 分钟)2)写一个SQL 语句,查询’周星驰’同学选修了的课程名字(3 分钟)3)写一个SQL 语句,查询选修了5 门课程的学生学号和姓名(9 分钟)答:1)SQL 语句如下:select stu.sno, stu.sname from Student stuwhere (select count(*) from sc where sno=stu.sno and cno =(select cno from Course where cname='计算机原理')) != 0;2)SQL 语句如下:select cname from Coursewhere cno in ( select cno from sc where sno =(select sno from Student where sname='周星驰'));3)SQL 语句如下:select stu.sno, stu.sname from student stuwhere (select count(*) from sc where sno=stu.sno) = 5;107、有三张表,学生表S,课程C,学生课程表SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过SC 表关联。【基础】1)写出建表语句;2)写出SQL 语句,查询选修了所有选修课程的学生;3)写出SQL 语句,查询选修了至少5 门以上的课程的学生。答:1)建表语句如下(mysql 数据库):create table s(id integer primary key, name varchar(20));create table c(id integer primary key, name varchar(20));create table sc(sid integer references s(id),cid integer references c(id),primary key(sid,cid));2)SQL 语句如下:select stu.id, stu.name from s stuwhere (select count(*) from sc where sid=stu.id)= (select count(*) from c);3)SQL 语句如下:select stu.id, stu.name from s stuwhere (select count(*) from sc where sid=stu.id)>=5;108、数据库表(Test)结构如下:【基础】ID NAME AGE MANAGER(所属主管人ID)106 A 30 104109 B 19 104104 C 20 111107 D 35 109112 E 25 120119 F 45 NULL第31 页共59 页要求:列出所有年龄比所属主管年龄大的人的ID 和名字?答:SQL 语句如下:select employee.name from test employeewhere employee.age > (select manager.age from test managerwhere manager.id=employee.manager);109、有如下两张表:【中等难度】表city: 表state:CityNo CityName StateNoBJ 北京(Null)SH 上海(Null)GZ 广州GDDL 大连LN第32 页共59 页欲得到如下结果: CityNo City Name State No State Name BJ北京(Null) (Null) DL大连LN 辽宁GZ广州GD 广东SH上海(Null) (Null) 写相应的SQL 语句。答:SQL 语句为:SELECT C.CITYNO, C.CITYNAME, C.STATENO, S.STATENAMEFROM CITY C, STATE SWHERE C.STATENO=S.STATENO(+)ORDER BY(C.CITYNO);五、JDBC 及Hibernate:(共12 题:基础10 道,中等难度2 道)110、数据库,比如100 用户同时来访,要采取什么技术解决?【基础】答:可采用连接池。111、什么是ORM?【基础】答:对象关系映射(Object—Relational Mapping,简称ORM)是一种为了解决面向对象与面向关系数据库存在的互不匹配的现象的技术;简单的说,ORM 是通过使用描述对象和数据库之间映射的元数据,将java 程序中的对象自动持久化到关系数据库中;本质上就是将数据从一种形式转换到另外一种形式。112、Hibernate 有哪5 个核心接口?【基础】答:Configuration 接口:配置Hibernate,根据其启动hibernate,创建SessionFactory 对象;SessionFactory 接口:初始化Hibernate,充当数据存储源的代理,创建session 对象,sessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存;Session 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存;Transaction 接口:管理事务;Query 和Criteria 接口:执行数据库的查询。113、关于hibernate: 【基础】1)在hibernate 中,在配置文件呈标题一对多,多对多的标签是什么;2)Hibernate 的二级缓存是什么;3)Hibernate 是如何处理事务的;答:1)一对多的标签为 ;多对多的标签为;2)sessionFactory 的缓存为hibernate 的二级缓存;3)Hibernate 的事务实际上是底层的JDBC Transaction 的封装或者是JTATransaction 的封装;默认情况下使用JDBCTransaction。StateNoStateNameGD 广东LN 辽宁SD 山东NMG 内蒙古第33 页共59 页114、Hibernate 的应用(Hibernate 的结构)?【基础】答://首先获得SessionFactory 的对象SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();//然后获得session 的对象Session session = sessionFactory.openSession();//其次获得Transaction 的对象Transaction tx = session.beginTransaction();//执行相关的数据库操作:增,删,改,查session.save(user); //增加, user 是User 类的对象session.delete(user); //删除session.update(user); //更新Query query = session.createQuery(“from User”); //查询List list = query.list();//提交事务tx.commit();//如果有异常,我们还要作事务的回滚,恢复到操作之前tx.rollback();//最后还要关闭session,释放资源session.close();115、什么是重量级?什么是轻量级?【基础】答:轻量级是指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经常创建和销毁session 的对象;重量级意味不能随意的创建和销毁它的实例,会占用很多的资源。116、数据库的连接字符串?【基础】答:MS SQL Server//第二种连接方式Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance();conn = DriverManager.getConnection(“jdbc:Microsoft:sqlserver://localhost:1433;DatabaseName=pubs”,”sa”,””);//OracleClass.forName(“oracle.jdbc.driver.OracleDriver”).newInstance();conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:sid”, uid, pwd);//MysqlClass.forName(“org.git.mm.mysql.Driver”).newInstance();conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/pubs”,”root”,””);处理中文的问题:jdbc:mysql://localhost:3306/pubs?useUnicode=true&characterEncoding=GB2312第34 页共59 页117、事务处理?【基础】答:Connection 类中提供了3 个事务处理方法:setAutoCommit(Boolean autoCommit):设置是否自动提交事务,默认为自动提交事务,即为true,通过设置false 禁止自动提交事务;commit():提交事务;rollback():回滚事务。118、Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?【基础】答:Java 中访问数据库的步骤如下:1)注册驱动;2)建立连接;3)创建Statement;4)执行sql 语句;5)处理结果集(若sql 语句为查询语句);6)关闭连接。PreparedStatement 被创建时即指定了SQL 语句,通常用于执行多次结构相同的SQL 语句。119、用你熟悉的语言写一个连接ORACLE 数据库的程序,能够完成修改和查询工作。【基础】答:JDBC 示例程序如下:public void testJdbc(){Connection con = null;PreparedStatement ps = null;ResultSet rs = null;try{//step1:注册驱动;Class.forName("oracle.jdbc.driver.OracleDriver");//step 2:获取数据库连接;con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.0.39:1521:TARENADB","sd0605","sd0605");/************************查询************************///step 3:创建Statement;String sql = "SELECT id, fname, lname, age, FROMPerson_Tbl";ps = con.prepareStatement(sql);//step 4 :执行查询语句,获取结果集;rs = ps.executeQuery();//step 5:处理结果集—输出结果集中保存的查询结果;while (rs.next()){System.out.print("id = " + rs.getLong("id"));System.out.print(" , fname = " +第35 页共59 页rs.getString("fname"));System.out.print(" , lname = " +rs.getString("lname"));System.out.print(" , age = " + rs.getInt("age"));}/************************JDBC 修改*********************/sql = "UPDATE Person_Tbl SET age=23 WHERE id = ?";ps = con.prepareStatement(sql);ps.setLong(1, 88);int rows = ps.executeUpdate();System.out.println(rows + " rows affected.");} catch (Exception e){e.printStackTrace();} finally{try{con.close(); //关闭数据库连接,以释放资源。} catch (Exception e1) {}}}120、JDBC,Hibernate 分页怎样实现?【中等难度】答:方法分别为:1) Hibernate 的分页:Query query = session.createQuery("from Student");query.setFirstResult(firstResult);//设置每页开始的记录号query.setMaxResults(resultNumber);//设置每页显示的记录数Collection students = query.list();2) JDBC 的分页:根据不同的数据库采用不同的sql 分页语句例如: Oracle 中的sql 语句为: "SELECT * FROM (SELECT a.*, rownum r FROMTB_STUDENT) WHERE r between 2 and 10" 查询从记录号2 到记录号10 之间的所有记录121、在ORACLE 大数据量下的分页解决方法。一般用截取ID 方法,还有是三层嵌套方法。【中等难度】答:一种分页方法<%int i=1;int numPages=14;String pages = request.getParameter("page") ;int currentPage = 1;currentPage = (pages==null)?(1):{Integer.parseInt(pages)}sql = "select count(*) from tables";ResultSet rs = DBLink.executeQuery(sql) ;第36 页共59 页while(rs.next()) i = rs.getInt(1) ;int intPageCount=1;intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);int nextPage ;int upPage;nextPage = currentPage+1;if (nextPage>=intPageCount) nextPage=intPageCount;upPage = currentPage-1;if (upPage<=1) upPage=1;rs.close();sql="select * from tables";rs=DBLink.executeQuery(sql);i=0;while((i//输出内容//输出翻页连接合计:<%=currentPage%>/<%=intPageCount%>页第一页上一页<%for(int j=1;j<=intPageCount;j++){if(currentPage!=j){%>[<%=j%>]<%}else{out.println(j);}}%>下一页最后页六、Web 部分:(共题:基础40 道,基础37 道,中等难度3 道)122、说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? 【基础】答:Web 容器加载Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其init 方法进行Servlet 的初始化,请求到达时运行其service 方法,service方法自动派遣运行与请求对应的doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy 方法。与cgi 的区别在于servlet 处于服务器进程中,它通过多线程方式运行其service 方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。第37 页共59 页123、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 {}}124、forward 和redirect 的区别? 【基础】答:forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。125、JSP 中动态INCLUDE 与静态INCLUDE 的区别?【基础】答:动态INCLUDE 用jsp:include 动作实现它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数;静态INCLUDE 用include 伪码实现,它不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>126、说出数据连接池的工作机制是什么? 【基础】答:J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。127、JSP 的内置对象及方法?【基础】答:request 表示HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header 和session 数据的有用的方法。response 表示HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)。out 对象是javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext 表示一个javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的名字空间、servlet 相关的对象的API,并且包装了通用的第38 页共59 页servlet 相关功能的方法。session 表示一个请求的javax.servlet.http.HttpSession 对象。Session可以存贮用户的状态信息。application 表示一个javax.servle.ServletContext 对象。这有助于查找有关servlet 引擎和servlet 环境的信息。config 表示一个javax.servlet.ServletConfig 对象。该对象用于存取servlet 实例的初始化参数。page 表示从该页面产生的一个servlet 实例。128、JSP 的常用指令?【基础】答:<%@page language=”java” contenType=”text/html;charset=gb2312”session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true”info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>isErrorPage:是否能使用Exception 对象;isELIgnored:是否忽略EL 表达式;<%@include file=”filename”%><%@taglib prefix=”c”uri=”http://……”%>129、jsp 有哪些动作?作用分别是什么? 【基础】答:JSP 共有以下6 种基本动作:jsp:include:在页面被请求的时候引入一个文件;jsp:useBean:寻找或者实例化一个JavaBean。;jsp:setProperty:设置JavaBean 的属性。;jsp:getProperty:输出某个JavaBean 的属性;jsp:forward:把请求转到一个新的页面;jsp:plugin:根据浏览器类型为Java 插件生成OBJECT 或EMBED 标记。130、jsp 有哪些内置对象?作用分别是什么? 【基础】答:JSP 共有以下9 种基本内置组件(可与ASP 的6 种内部组件相对应):request:用户端请求,此请求会包含来自GET/POST 请求的参数;response:网页传回用户端的回应;pageContext:网页的属性是在这里管理;session:与请求有关的会话期;application:servlet 正在执行的内容;out:用来传送回应的输出;config:servlet 的构架部件;page:JSP 网页本身;exception:针对错误网页,未捕捉的例外。131、get 和post 的区别?【基础】答:Form 中的get 和post 方法,在数据传输过程中分别对应了HTTP 协议中的GET 和POST 方法。二者主要区别如下:1)Get 是用来从服务器上获得数据,而Post 是用来向服务器上传递数据;2)Get 将表单中数据按照variable=value 的形式,添加到action 所指向的URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将第39 页共59 页表单中的数据放在form 的数据体中,按照变量和值相对应的方式,传递到action所指向URL;3)Get 是不安全的,因为在传输过程,数据被放在请求的URL 中;Post 的所有操作对用户来说都是不可见的;4)Get 传输的数据量小,这主要是因为受URL 长度限制;而Post 可以传输大量的数据,所以在上传文件只能使用Post;5)Get 限制Form 表单的数据集必须为ASCII 字符,而Post 支持整个ISO10646字符集;6)Get 是Form 的默认方法。132、什么情况下调用doGet()和doPost()?【基础】答:Jsp 页面中的form 标签里的method 属性为get 时调用doGet(),为post时调用doPost()。133、如何从form 表单中得取checkbox 的值;【基础】答:可在页面把checkbox 的name 属性取同一个,value 属性取每个条目的id,后台用getParamter(“name”)能取到checkbox 的一组值。134、页面中有一个命名为bank No 的下拉列表,写脚本获取当前选项的索引值。【基础】答:用java 或javaScript 的处理方式分别如下:Java: request.getParameter(“bank No”);javaScript:var selectItems = document.getElementsByName(“bank No”);selectItems[0].value;135、javascript 常用的方面;【基础】答:常用于数据输入校验和页面特殊效果等。136、常用的web 容器和开发工具;【基础】答:最常用的容器包括:tomcat、weblogic;开发工具有:eclipse,jbuilder。137、请画出Servlet 2.2 以上Web Application 的基本目录结构(2 分钟)【基础】答:目录结构如下图所示:webapps|Applocation|__________________| |JSP 页面WEB-INF|___________________第40 页共59 页| | |classes lib web.xml138、JSP 和Servlet 有哪些相同点和不同点,他们之间的联系是什么?【基础】答:JSP 是Servlet 技术的扩展,本质上是Servlet 的简易方式,更强调应用的外表表达。JSP 编译后是"类servlet"。Servlet 和JSP 最主要的不同点在于,Servlet 的应用逻辑是在Java 文件中,并且完全从表示层中的HTML 里分离开来。而JSP 的情况是Java 和HTML 可以组合成一个扩展名为.jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑。139、jsp 的四种范围?【基础】答:a.page 是代表与一个页面相关的对象和属性。一个页面由一个编译好的Java servlet 类(可以带有任何的include 指令,但是没有include 动作)表示。这既包括servlet 又包括被编译成servlet 的JSP 页面b.request 是代表与Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web 组件(由于forward 指令和include 动作的关系)c.session 是代表与用于某个Web 客户机的一个用户体验相关的对象和属性。一个Web 会话可以也经常会跨越多个客户机请求d.application 是代表与整个Web 应用程序相关的对象和属性。这实质上是跨越整个Web 应用程序,包括多个页面、请求和会话的一个全局作用域。140、Request 对象的主要方法? 【基础】答:setAttribute(String name,Object):设置名字为name 的属性值getAttribute(String name):返回由name 指定的属性值getAttributeNames():返回request 对象所有属性的名字集合(枚举)getCookies():返回客户端的所有Cookie 对象,结果是一个Cookie 数组getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body 的长度getHeader(String name):获得HTTP 协议定义的文件头信息getHeaders(String name):返回指定名的request Header 的所有值(枚举)getHeaderNames():返回所有request Header 的名字(枚举)getInputStream():返回请求的输入流,用于获得请求中的数据getMethod():获得客户端向服务器端传送数据的方法getParameter(String name):获得客户端请求中传送的name 指定的参数值getParameterNames():获得客户端传送给服务器端的所有参数的名字(枚举)getParameterValues(String name):获得有name 指定的参数的所有值getProtocol():获取客户端向服务器端传送数据所依据的协议名称getQueryString():获得查询字符串getRequestURI():获取发出请求字符串的客户端地址getRemoteAddr():获取客户端的IP 地址getRemoteHost():获取客户端的名字getSession([Boolean create]):返回和请求相关SessiongetServerName():获取服务器的名字第41 页共59 页getServletPath():获取客户端所请求的脚本文件的路径getServerPort():获取服务器的端口号removeAttribute(String name):删除请求中的一个属性141、如何实现servlet 的单线程模式?【基础】答:<%@page isThreadSafe=”false”%>142、页面间对象传递的方法。【基础】答:request,session,application,cookie 等。143、详细描述MVC。【基础】答:基于Java 的Web 应用系统采用MVC 架构模式,即model(模型)、view(视图)、control(控制)分离设计;这是目前WEB 应用服务系统的主流设计方向。Model:即处理业务逻辑的模块,每一种处理一个模块;View:负责页面显示,显示MODEL 处理结果给用户,主要实现数据到页面转换过程;Control:负责每个请求的分发,把FORM 数据传递给MODEL 处理,把处理结果的数据传递给VIEW 显示。144、MVC 的各个部分都有那些技术来实现?如何实现? 【基础】答:MVC 是Model-View-Controller 的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB 组件实现), "View" 是应用的表示面(由JSP 页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。145、应用服务器有那些?【基础】答:BEA WebLogic Server, IBM WebSphere Application Server, Oracle9iApplication Server, JBoss, Tomcat。146、Servlet 执行时一般实现哪几个方法?【基础】答:public void init(ServletConfig config)public ServletConfig getServletConfig()public String getServletInfo()public void service(ServletRequest request,ServletResponseresponse)public void destroy()147、struts 的入口类?【基础】答:是ActionServlet,所有的struts 请求都经由该类转发处理。148、STRUTS 的应用(如STRUTS 架构)?【基础】答:Struts 是采用Java Servlet/JavaServer Pages 技术开发Web 应用程序的开放源码的framework。采用Struts 能开发出基于MVC(Model-View-Controller)设计模式的应用构架。Struts 有如下的主要功能:第42 页共59 页1)包含一个controller servlet,能将用户的请求发送到相应的Action 对象;2)JSP 自由tag 库,并且在controller servlet 中提供关联支持,帮助开发人员创建交互式表单应用;3)提供了一系列实用对象:XML 处理、通过Java reflection APIs 自动处理JavaBeans 属性、国际化的提示和消息。149、几种会话跟踪技术?【基础】答:cookie、URL 重写、设置表单隐藏域。150、BS 与CS 的联系与区别?【基础】答:C/S 是Client/Server 的缩写,是客户机与服务器结构的应用程序,服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix 或SQL Server。客户端需要安装专用的客户端软件。B/S是Brower/Server 的缩写,是浏览器和服务器结构的应用程序,即Web 应用程序,客户机上只要安装一个浏览器(Browser),如Netscape Navigator 或InternetExplorer,服务器安装Oracle、Sybase、Informix 或SQL Server 等数据库。在这种结构下,用户界面完全通过WWW 浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。C/S 与B/S 区别:1)硬件环境不同:C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务;B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S 更强的适应范围, 一般只要有操作系统和浏览器就行;2)对安全要求不同:C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S 发布部分可公开信息;B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户;3)对程序架构不同:C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑;B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上.比C/S 有更高的要求B/S 结构的程序架构是发展的趋势, 从MS 的.Net 系列的BizTalk 2000 Exchange 2000 等, 全面支持网络的构件搭建的系统. SUN 和IBM 推的JavaBean 构件技术等,使B/S 更加成熟;4)软件重用不同:C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S 要求下的构件的重用性好;B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子;5)系统维护不同:第43 页共59 页C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统;B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级;6)处理问题不同:C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统;B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S 无法作到的. 与操作系统平台关系最小;7)用户接口不同:C/S 多是建立的Window 平台上,表现方法有限,对程序员普遍要求较高;B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本;8)信息流不同:C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低;B/S 信息流向可变化, B-B B-C B-G 等信息、流向的变化, 更像交易中心。151、过滤器有哪些作用?【基础】答:可以验证客户是否来自可信的网络,可以对客户提交的数据进行重新编码,可以从系统里获得配置的信息,可以过滤掉客户的某些不应该出现的词汇,可以验证用户是否登录,可以验证客户的浏览器是否支持当前的应用,可以记录系统的日志等等。152、过滤器的用法?(对客户端的请求统一编码和对客户端进行认证)【基础】答:首先要实现(implements)Filter 接口,同时覆盖Filter 接口的三个方法:init(FilterConfig config) //用于获得FilterConfig 对象;doFilter(ServletRequest request, ServletResponse response,FilterChain chain) //进行过滤处理一些业务;destroy() //销毁Filter。153、简述HttpSession 的作用、使用方法,可用代码说明。(3 分钟)【基础】答:HttpSession 中可以跟踪并储存用户信息,把值设置到属性中,有2 个方法:setAttribute(),getAttrribute();例如:在一个方法中用session.setAttribute(“student”,student);在session 中设置一个属性名为student,值为一个名为student 的对象。而后可在同一session 范围内用getAttribute(“student”)取出该属性,得到student对象。154、介绍在JSP 中如何使用JavaBeans?【基础】答:在JSP 中使用JavaBean 常用的动作有:1):用来创建和查找bean 对象;2):用来设置bean 的属性,即调用其setXxx()方法;3):用来获得bean 的属性,即调用其getXxx()方法。第44 页共59 页155、JSP 和Servlet 中的请求转发分别如何实现?【基础】答:JSP 中的请求转发可利用forward 动作实现:;Serlvet 中实现请求转发的方式为:getServletContext().getRequestDispatcher(path).forward(req,res)。156、Web.Xml 的作用?【基础】答:用于配置web 应用的信息;如listener、filter 及servlet 的配置信息等。157、写出熟悉的JSTL 标签。【基础】答:。158、说出struts 中的标签。【基础】答: 159、JSP 标签的作用?如何定义?【中等难度】答:作用:分离jsp 页面的内容和逻辑;业务逻辑开发者可以创建自定义标签;封装业务逻辑;可重用并且易维护;易于手工修改、易于工具维护;提供简洁的语法;定义:写标签处理器;写tld 文件;讲标签处理器和tld 文件放到同一个包里面;把jsp 页面和标签库配置部署在一起。160、写一个自定义标签;【中等难度】答:代码如下:import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;public class TimeTag extends SimpleTagSupport{private boolean isServer = true;public void setServer(boolean isServer){this.isServer = isServer;}第45 页共59 页public void doTag() throws JspException, IOException{JspWriter out = getJspContext().getOut();if(isServer) {out.println(new java.util.Date());}else{out.println("");}}}161、javascript 的优缺点和内置对象;【中等难度】答:1)优点:简单易用,与Java 有类似的语法,可以使用任何文本编辑工具编写,只需要浏览器就可执行程序,并且事先不用编译,逐行执行,无需进行严格的变量声明,而且内置大量现成对象,编写少量程序可以完成目标;2)缺点:不适合开发大型应用程序;3)Javascript 有11 种内置对象:Array、String、Date、Math、Boolean、Number、Function、Global、Error、RegExp、Object。七、EJB 及Spring 部分:(共18 题:基础4 道,中等难度13 道,较难1 道)162、EJB 与JAVA BEAN 的区别?【基础】答: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 组件。163、EJB 的几种类型?【基础】答:会话( Session)Bean、实体( Entity)Bean、消息驱动的( Message Driven)Bean;会话Bean 又可分为有状态(Stateful)和无状态(Stateless)两种;实体Bean可分为Bean 管理的持续性(BMP)和容器管理的持续性(CMP)两种。164、remote 接口和home 接口主要作用?【基础】答:remote 接口定义了业务方法,用于EJB 客户端调用业务方法;home 接口是EJB 工厂用于创建和移除查找EJB 实例。第46 页共59 页165、客服端口调用EJB 对象的几个基本步骤?【基础】答:设置JNDI 服务工厂以及JNDI 服务地址系统属性,查找Home 接口,从Home接口调用Create 方法创建Remote 接口,通过Remote 接口调用其业务方法。166、EJB 的角色和三个对象?【中等难度】答:一个完整的基于EJB 的分布式计算结构由六个角色组成,这六个角色可以由不同的开发商提供,每个角色所作的工作必须遵循Sun 公司提供的EJB 规范,以保证彼此之间的兼容性。这六个角色分别是EJB 组件开发者(Enterprise BeanProvider) 、应用组合者(Application Assembler)、部署者(Deployer) 、EJB 服务器提供者(EJB Server Provider)、EJB 容器提供者(EJB ContainerProvider)、系统管理员(System Administrator),这里面,EJB 容器是EJB之所以能够运行的核心。EJB 容器管理着EJB 的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作;三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean 类。167、EJB 是基于哪些技术实现的?并说出SessionBean 和EntityBean 的区别,StatefulBean 和StatelessBean 的区别。【中等难度】答:EJB 包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JTA 等技术实现。SessionBean 在J2EE 应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB 组件。EntityBean 被用来代表应用系统中用到的数据。对于客户机,SessionBean 是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。对于客户机,EntityBean 是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。Session Bean 还可以再细分为Stateful Session Bean 与StatelessSession Bean ,这两种的Session Bean 都可以将系统逻辑放在method 之中执行,不同的是Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的Stateful Session Bean 的实体。StatelessSession Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫Stateless Session Bean 的时候,EJB Container 并不会找寻特定的Stateless Session Bean 的实体来执行这个method。换言之,很可能数个使用者在执行某个Stateless Session Bean 的methods 时,会是同一个Bean 的Instance 在执行。从内存方面来看, Stateful Session Bean 与Stateless Session Bean 比较, Stateful Session Bean 会消耗J2EE Server较多的内存,然而Stateful Session Bean 的优势却在于他可以维持使用者的状态。168、bean 实例的生命周期?【中等难度】答:对于Stateless Session Bean、Entity Bean、Message Driven Bean 一般存在缓冲池管理,而对于Entity Bean 和Statefull Session Bean 存在Cache管理,通常包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove 等过程,对于存在缓冲池管理的Bean,在create 之后实例并不第47 页共59 页从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache 管理的Bean 则通过激活和去激活机制保持Bean 的状态并限制内存中实例数量。169、EJB 的激活机制?【中等难度】答:以Stateful Session Bean 为例:其Cache 大小决定了内存中可以同时存在的Bean 实例的数量,根据MRU 或NRU 算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB 实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean 实例则从其去激活Bean 存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive 和ejbPassivate 方法。170、EJB 包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?【中等难度】答:SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean 的实例时,EJB 容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean 实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean 实例。EntityBean:EntityBeans 能存活相对较长的时间,并且状态是持续的。只要数据库中的数据存在,Entity beans 就一直存活。而不是按照应用程序或者服务进程来说的。即使EJB容器崩溃了,Entity beans 也是存活的。Entity Beans 生命周期能够被容器或者Beans 自己管理。EJB 通过以下技术管理事务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems 的Transaction Service(JTS)、JavaTransaction API(JTA),开发组(X/Open)的XA 接口。171、EJB 的事务是如何实现的?何时进行回滚;【中等难度】答:是通过使用容器或Bean 自身管理事务的;当产生一个系统异常时容器就自动回滚事务。172、EJB 容器提供的服务?【中等难度】答:主要提供生命周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。173、EJB 需直接实现它的业务接口或Home 接口吗?请简述理由。【中等难度】答:远程接口和Home 接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。174、请对以下在J2EE 中常用的名词进行解释(或简单描述) 【中等难度】答:web 容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET 直接跟容器中的环境变量接口交互,不必关注其它系统问题。主要由WEB 服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE 等。该容器提供的接口严格遵守J2EE 规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE 中的WEB 容器;EJB 容器:Enterprise java bean 容器。更具有行业领域特色。他提供给第48 页共59 页运行在其中的组件EJB 各种管理功能。只要满足J2EE 规范的EJB 放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理;JNDI:(Java Naming & Directory Interface)JAVA 命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能;JMS:(Java Message Service)JAVA 消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播;JTA:( Java Transaction API)JAVA 事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可;JAF:(Java Action FrameWork)JAVA 安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略;RMI/IIOP:(Remote Method Invocation /internet 对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI 是JAVA 特有的。175、J2EE 是什么?【中等难度】答:J2EE 是Sun 公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web 层和组件,Business 层和组件,企业信息系统(EIS)层。176、J2EE 是技术还是平台还是框架?【中等难度】答:J2EE 本身是一个标准,一个为企业分布式应用的开发提供的标准平台;J2EE 也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA 等技术。177、请写出spring 中I0C 的三种实现机制。【中等难度】答:三种机制为:通过setter 方法注入、通过构造方法注入和接口注入。178、写出你熟悉的开源框架以及各自的作用。【中等难度】答:框架:hibernate、spring、struts;Hibernate 主要用于数据持久化;Spring 的控制反转能起到解耦合的作用;Struts 主要用于流程控制。179、EJB 规范规定EJB 中禁止的操作有哪些?【较难】答:1)不能操作线程和线程API(线程API 指非线程对象的方法,如notify,wait等);2)不能操作awt;3)不能实现服务器功能;4)不能对静态属性存取;5)不能使用IO 操作直接存取文件系统;6)不能加载本地库;第49 页共59 页7)不能将this 作为变量和返回;8)不能循环调用。八、数据结构、算法及计算机基础部分:(共8 题:基础6 道,中等难度1 道,较难1 道)180、一个byte 几个单位?【基础】答:8bit。181、常用UNIX 命令(Linux 的常用命令)(至少10 个)【基础】答:ls pwd mkdir rm cp mv cd ps ftp telnet ping env more echo182、后序遍历下列二叉树,访问结点的顺序是?【基础】A/ \B C/ \ \D E F/ / \G N I/ \J K答:顺序为:DJGEBKNIFCA 。183、排序都有哪几种方法?请列举。用JAVA 实现一个快速排序。【基础】答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序);快速排序的伪代码://使用快速排序方法对a[ 0 :n- 1 ]排序从a[ 0 :n- 1 ]中选择一个元素作为middle,该元素为支点;把余下的元素分割为两段left 和right,使得left 中的元素都小于等于支点,而right 中的元素都大于等于支点;递归地使用快速排序方法对left 进行排序;递归地使用快速排序方法对right 进行排序;所得结果为left + middle + right。184、写一种常见排序。【基础】答:C++中冒泡排序:void swap( int& a, int& b ){int c=a; a = b; b = c;}void bubble( int* p, int len ){bool bSwapped;第50 页共59 页do {bSwapped = false;for( int i=1; ip[i] ){swap( p[i-1], p[i] );bSwapped = true;}}}while( bSwapped );}185、写一个一小段程序检查数字是否为质数;以上的程序你采用的哪种语言写的?采用该种语言的理由是什么?【基础】答:代码如下:#include bool prime( int n ){if(n<=0) exit(0);for( int i=2; i<=n; i++ )for( int j=2; j<=sqrt(i); j++)if((n%j==0) && (j!=n))return false;return true;}采用C++,因为其运行效率高。186、编程题:设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序;要求用java 实现。【中等难度】答:代码如下:package test;public class CountGame {private static boolean same(int[] p,int l,int n){for(int i=0;i playerNum*step){break;}for(int i=1;i playerNum)break;if(counter%step==0){System.out.print(i + " ");p[counter/step-1]=i;}counter+=1;}}System.out.println();}public static void main(String[] args) {play(10, 7);}}187、写一个方法1000 的阶乘。【较难】答:C++的代码实现如下:#include #include #include using namespace std;class longint {private:vector iv;public:longint(void) { iv.push_back(1); }longint& multiply(const int &);friend ostream& operator<<(ostream &, const longint &);};ostream& operator<<(ostream &os, const longint &v) {vector::const_reverse_iterator iv_iter = v.iv.rbegin();os << *iv_iter++;for ( ; iv_iter < v.iv.rend(); ++iv_iter) {os << setfill('0') << setw(4) << *iv_iter;}return os;第52 页共59 页}longint& longint::multiply(const int &rv) {vector::iterator iv_iter = iv.begin();int overflow = 0, product = 0;for ( ; iv_iter < iv.end(); ++iv_iter) {product = (*iv_iter) * rv;product += overflow;overflow = 0;if (product > 10000) {overflow = product / 10000;product -= overflow * 10000;}iv_iter = product;}if (0 != overflow) {iv.push_back(overflow);}return *this;}int main(int argc, char **argv) {longint result;int l = 0;if(argc==1){cout << "like: multiply 1000" << endl;exit(0);}sscanf(argv[1], "%d", &l);for (int i = 2; i <= l; ++i) {result.multiply(i);}cout << result << endl;return 0;}九、C++部分:(共14 题:基础10 道,中等1 道,较难3 道)188、以下三条输出语句分别输出什么?【基础】char str1[] = "abc";char str2[] = "abc";const char str3[] = "abc";const char str4[] = "abc";const char* str5 = "abc";const char* str6 = "abc";第53 页共59 页cout << boolalpha << (str1==str2) << endl; //输出什么?cout << boolalpha << (str3==str4) << endl; //输出什么?cout << boolalpha << (str5==str6) << endl; //输出什么?答:输出为:false、false、true。189、以下反向遍历array 数组的方法有什么错误?【基础】vector array;array.push_back(1);array.push_back(2);array.push_back(3);//反向遍历array 数组:for(vector::size_type i=array.size()-1; i>=0; --i){cout << array[i] << endl;}答:for 循环中的变量i 的类型不应定义为vector::size_type,因为该类型为无符号数值类型,故循环条件将恒成立,为死循环,应将其类型定义为有符号的int 类型。190、以下代码有什么问题?【基础】cout << (true ? 1 : "1") << endl;答:运算符中两个可选值的类型不同。191、以下代码有什么问题?【基础】typedef vector IntArray;IntArray array;array.push_back(1);array.push_back(2);array.push_back(2);array.push_back(3);//删除array 数组中所有的2for(IntArray::iterator itor=array.begin(); itor!=array.end();++itor){if(2==*itor) {array.erase(itor);}}答:for 循环中的if 语句后的array.erase(itor)语句,它将迭代器itor 所指向的元素删除后会自动下移一位,故应在其后加上语句:itor--;192、以下代码中的两个sizeof 用法有问题吗?【基础】void upperCase(char str[]){ //将str 中的小写字母转换成大写字母for(int i=0; i> temp;unsigned int const size2 = temp;char str2[size2];答:能;194、以下代码有什么问题?【基础】struct Test{Test(int){}Test(){}void fun(){}};void main(void){Test a(1);a.fun();Test b();b.fun();}答:main 函数的返回类型应为int;不能对b 调用fun()方法。195、以下代码中的输出语句输出0 吗?为什么?【基础】struct CLS{int m_i;CLS(int i):m_i(i){ }CLS(){ CLS(0);}};int main(){CLS obj;cout <#includeusing namespace std;int main(){ifstream fin("t.txt");if(!fin){cout<<"can't open file"<>buf;if(fin2.eof())break;count++;}cout<<"The number of the words is : "<(dest);const char* psrc = static_cast(src);第56 页共59 页if(pdest>psrc && pdest'9') ch += ('A'-'9'-1);char cl = c%0x10 + '0';if(cl>'9') cl += ('A'-'9'-1);cout << ch << cl << ' ';}int main(){char str[] = "I love 中国";for(size_t i=0; i

范文6:JAVA ------SSH 试题【以文搜文】

    1. BeanFactory的作用是什么? [中]BeanFactory是配置、创建、管理bean的容器,有时候也称为bean上下文。Bean与bean的依赖关系,也是由BeanFactory负责维护的。2. bean在spring的容器中两种基本行为是什么? [中]Singleton:单态Non-singleton或prototype:原型3. spring配置文件中的ref元素的作用是什么?它的两个基本属性是什么? [中]用于指定属性值为spring容器中的其它bean.两个基本属性是bean和local4. 什么是DWR?它有哪些功能? [中]DWR(Direct Web Remoting)是一个WEB远程调用框架.可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScriptDWR根据Java类来动态生成JavaScrip代码.支持Dom Trees,支持Spring,支持commons-logging5. Ajax的工作原理 ? [难]在会话的开始,浏览器加载Ajax引擎请求动作通过JavaScript调用Ajax引擎来代替.引擎负责绘制用户界面以及与服务器端通讯。Ajax引擎采用异步交互过程--不用等待服务器的通讯。6. XMLHttpRequest对象是什么,它有哪些常用方法? [难]一个 JavaScript 对象。是Ajax 的核心。该对象的方法和属性。open():建立到服务器的新请求。send():向服务器发送请求。abort():退出当前请求。readyState:提供当前 HTML 的就绪状态。responseText:服务器返回的请求响应文本。.7. XMLHttpRequest有哪些属性, 它的值分代表什么?[ 中]8. 什么是Ajax? [易]AJAX(Asynchronous JavaScript and XML),它不是一门新的语言或技术,而是多种技术的综合,包括:JavascriptXHTMLCSSDOMXMLXSTLXMLHttpRequest9. 同步与异步的区别? [ 难]普通B/S模式(同步)AJAX技术(异步)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事,而异步则是 请求通过事件触发->服务器处理->处理完毕同步是阻塞模式,异步是非阻塞模式。同步(发送方发出数据后,等接收方发回) 异步(发送方发出数据后,不等接收方发回响应)10. Struts+Hibernate+Spring开发模式中Hibernate扮演的角色 [中]答:Hibernate扮演的是数据持久层 它的作用是实现持久化对象和数据库表之间的映射,形成持久化对象和数据库表中数据的一个转换平台11. 什么是Hibernate 的抓取策略 [难]抓取策略是指当应用程序需要利用关联关系进行对象获取的时候。12. 何为容器 [中]容器就是符合某种规范的能够提供一系列服务的管理器。13. Spring实现了那几种模式 [中]答: 工厂模式 和 单例模式14 :Hibernate实体对象生命周期的三种状态 [难]答 Transient(瞬态) ,persistent(持久态)和Detached(游历态)15: HQL查询参数的处理方法 [中]答:直接将参数拼写为HQL语句通过参数名称来标识参数16. Hibernate实体之间的关联关系的三种形式 [中]答 一对一关联一对多关联多对多关联17. Hibernate具用的三种检索方式 [难]答:HQL检索方式QBC检索方式SQL检索方式18. spring 中的depends-on属性是什么 [中]Depends-on用于当前Bean初始化之前显示的强制一个或多个bean被初始化19. spring 中的BeanWrapper类是什么 [难]BeanWrapper类是一个对JavaBean进行各种操作的工具类BeanWrapper本身是一个接口BeanWrapperImpl实现了BeanWrapper20 . 元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值? [难]答:save-update21. Hibernate中session什么时候是游离态 [中]答:session.close();方法后22. Hibernate中映射文件 inverse属性和cascade属性的区别 [中]答:inverse属性只存在于集合标记的元素中集合元素包括,,,,Inverse属性的作用是是否将对集合对象的修改反射到数据库中 inverse=”false”时修改反射到数据库中 inverse=”true” 时修改不反射到数据库中Cascade属性的作用是描述关联对象进行操作时的级联特性,因此只有涉及到关系的元素才有cascade属性23. : Hibernate中Session对象的load()方法和get()方法的区别(请列举出两点)[难]答:①记录不存在时 get()方法会返回空(null),而load()方法将会抛出一个HibernateException异常 ② load()方法查询数据时会先找Hibernate的内部缓存和二级缓存中的现有数据,get()方法在内部缓存中没有打到相对应的数据时装直接执行SQL语句进行查询24. : Hibernate中HQL属于什么语言 [易]答:HQL是面向对象的查询语言,它可以查询以对象形式存在的数据。25. Hibernate简介以及主要功能 [中]答:Hibernate是采用ORM模式实现数据持久层的一个优秀的JAVA组件,它提供了强大,高效的将JAVA对象进行持久化操作的服务26. 简述Hibernate的优点 [难]答:开源和免费的License,我可以在需要的时候研究源代码,改写源代码,进行功能的定制。轻量级封装,避免引入过多复杂的问题,调试容易,也减轻程序员的负担。具有可扩展性,API开放,当本身功能不够用的时候,可以自己编码进行扩展。27. 怎样构建SessionFactory [难]答: Hibernate的SessionFactory接口提供Session类的实例,Session类用于完成对数据库的操作。由于SessionFactory实例是线程安全的(而Session实例不是线程安全的),所以每个操作都可以共用同一个SessionFactory来获取Session。Hibernate配置文件分为两种格式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件28. :从XML文件读取配置信息构建SessionFactory的具体步骤如下。 [难](1)创建一个Configuration对象,并通过该对象的configura()方法加载Hibernate配置文件,代码如下。Configuration config = new Configuration().configure();configura()方法:用于告诉Hibernate加载hibernate.cfg.xml文件。Configuration在实例化时默认加载classpath中的hibernate.cfg.xml,当然也可以加载名称不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通过以下代码实现。Configuration config = new Configuration().configure("wghhibernate.cfg.xml");(2)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下:SessionFactory sessionFactory = config.buildSessionFactory();构建SessionFactory要放在静态代码块中,因为它只在该类被加载时执行一次。29. 写出使用构造方法进行注入的关键代码 [难]30. 什么是IOC? [难]不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring 框架中是 IOC 容器) 负责将这些联系在一起。就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,控制权由应用代码中转到了外部容器,控制权的转移,就是所谓的反转。31. 编程题: 写一个Singleton出来。 [难]Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。public class Singleton {private Singleton(){}private static Singleton instance = new Singleton();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;   }}String tempStr = "";try {tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");tempStr = tempStr.trim();}catch (Exception e) {System.err.println(e.getMessage());}return tempStr;}32. J2EE是技术还是平台还是框架? [中]J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。33. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? [难]Public String translate (String str) {String tempStr = "";try {tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");tempStr = tempStr.trim();}catch (Exception e) {System.err.println(e.getMessage());}return tempStr;}34.如何使用静态工厂方法来创建Bean的实例 [易]相当于: StaticFactoryBean staticFactoryBean=StaticFactoryBean.静态方法名使用实例化的工厂方法来创建Bean的实例相当于: DynamicFactory dynamicFactory=new DynamicFactory();DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名35. 从Java属性文件读取配置信息构建SessionFactory的具体步骤如下: [难](1)创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件hibernate.properties,代码如下。Configuration config = new Configuration();(2)由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的addClass()方法实现,具体代码如下。config.addClass(BranchForm.class);addClass()方法用于加载实体类。(3)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。SessionFactory sessionFactory = config.buildSessionFactory();36. spring框架的7个模块是什么? [ 难]答: (1) spring AOP --面象切面编程(2)spring DAO --数据访问对象(3)spring ORM --对象关系影射(4)spring Contect -- 上下文配置,向Spring框架提供上下文信息(5)spring WEB - -WEB上下文模块(6)\spring WEB-MVC --实现了MVC(7)spring CORE –核心容器提供Spring框架基本功能37. 什么是AOP 请祥述 [中]答: 是面向切面编程AOP 把软件系统分为两个部分:核心关注点和横切关注点。所谓的核心关注点,是业务处理的主要流程,也就是说这个解决方案要做的事。所谓横切关注点,是与核心业务无关的部分,它把常发生在核心关注点的多处,而各处基本相似,如日志,事务,权限等 。38. Hinbernate和EJB的区别 [中]答:Hibernate可以用在任何JDBC使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。39. 一般情况下,关系数据模型与对象模型之间有哪些匹配关系 [难]答:表对应类记录对应表的对象表的字段对应类的属性40. 事务隔离级别是由谁实现的? [难]答:数据库系统‘41. 什么是IOC [难]答:IOC 是控制反转,实现了对象之间的依赖关系的转移成而使程序的菘耦合42. 在Spring中给属性有几种赋值方式 请祥叙 [难]答:有四种 分别是(1)普通属性赋值(2)集合属性赋值(3)Properties赋值(4)Map 属性赋值43. 在Spring说说Bean的alias元素和name属性有什么区别 [难]答: 元素name属性可以一次为定义多个别名例:元素一次只能定义一个别名例:注意: alias元素name属性是bean实例名44. Bean 的作用域用几种,请祥叙 [难]答: 用5种分别是:1. singleton IOC容器只会创建一个Bean的唯一的实例2. prototype IOC容器在每次请求该Bean的时候都创建一个新的实例3. request 在一次Http请求中 IOC容器会返回该Bean的同一个实例,而对于不同的用户请求,则会返回不同的实例4. session 在一次Http请求Session 中 IOC容器会返回该Bean的同一个实例,而对于不同的用户Session,则会返回不同的实例5. global session在一个全局Http请求Session 中45. 简述什么是ORM [中]答:ORM的全称是Object-Relational Mapping 翻译成中文就是“对象-关系映射”ORM组件的主要功能就是实现实体域对象的持久化并封装数据库访问的细节ORM本身并不是一个组件,它是具用某种功能的组件的总称,也可以说是一种框架结构46.:struts中的几个关键对象的作用(说说几个关键对象的作用) [中]struts中的几个关键对象:Action Global(设置语言靠它了) ModuleConfig(获取mapping),47.Action的作用 [中]Action的作用是接受用户的请求,通过调用业务方法实现业务处理的功能。48. 在通常情况下软件系统由表示层,业务层,持久层和数据库层组成,Struts属于哪一层? [难]Struts属于表示层组件,它的作用主要体现在以下几个方面:1) 输出用户界面和接收用户的输入,实现与用户的交互。2) 调用业务方法,完成业务处理,还要包括处理后的显示工作。48:Struts标签库由哪些组件组成? [难]标签库是组合在一起的一组JSP自定义标签。标签库由以下组件组成:1) 标签处理程序2) 标签库描述符(TLD)文件3) 应用程序部署描述符(web.xml)文件4) JSP页面中标签库的声明49. 用读出一个URL和一个名称, [难]用的话怎么组合起来。即要达到这样的效果">"> 会报出属性data无值的错误!(page=""中的data无值。)50:怎样才能配置<html:button>的资源文件? [难]在资源文件 ApplicationResourses.properties 中加入 label.login=login在jsp页面写:这样显示页面时,button上就会显示label.login的对应内容“login”51. 说说struts框架,的方法的工作原理或流程 [易]答: 对于采用Struts框架的web应用, 在web应用启动时会加载并初始化ActionServlet,ActionServlet从struts-config.xml中读取配置信息,把它们存放到各种配置对象中,例如把Action的映射信息存放在ActionMapping对象中。当ActionServlet接收到客户请求时,执行以下流程:1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效信息;2.如果ActionForm实例不存在,就创建一个ActionForm对象并在其中保存客户提交的表单内容;3.根据配置信息决定是否调用ActionForm的validate()方法;4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功;5.ActionServlet根据ActionMapping实例包含的映射信息将请求转发给Action(如果Action实例不存在,就先创建Action实例),然后调用Action的excute()方法;6.Action的excute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件;7.ActionForward对象指向的JSP组件生成动态网页,返回给客户。52: strust的Action是不是线程安全的? [难]答:线程安全就是你可以在多线程环境下使用它,而不需要你来对它进行特殊的处理。action都是继承至servlet的,由于servlet就是线程不安全的(指多个线程共享一个servlet对象,所以),所以不要再action中定义类变量和实例变量,否则其他线程改变了这些值,可本线程还在使用53 :MVC,分析一下struts是如何实现MVC的 [难]从MVC角度来看看struts的体系结构(Model 2)与工作原理:1)模型(Model)在Struts的体系结构中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由一组ActinForm Bean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。2)视图(View)视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。3)控制器(Controller)在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。54 :简述什么是Struts [中]Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。就是说可将两者一起使用,达到将两者自身的特点进行互补。55 :Struts有哪些主要功能:[难]1.包含一个controller servlet,能将用户的请求发送到相应的Action对象。2. JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。3. 提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。Struts项目的目标是为创建Java web应用提供一个开放源代码的framework。Struts framework的内核是基于例如Java Servlets, JavaBeans, ResourceBundles, 和 XML,以及各种 Jakarta Commons包的标准技术的灵活的控制层。Struts提供了它自身的控制器组件,并整合了其他技术,以提供模型和视图。对于模型,同大多数的第三方软件包一样,如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts能够和标准数据连接技术相结合,如JDBC和EJB。对于视图,Struts与JavaServer Pages协同工作,包含JSTL和JSF。56 :Stuts框架中控制器组件的类主要有哪些? [难]ActionServlet ,RequestProcessor, Action,ActionMapping,ActionForward41:Validator的组成与作用 [难]Validator框架主要包括以下几个部分:1) 实现各种验证规则的Java类2) 配置文件3) 资源文件4) JSP自定义标签Validator组件可以很好地解决用户输入数据的验证问题,但它并不是一个独立运行的组件,它可以被嵌入到目前大部分的Web应用开发框架中。Validator组件的验证方式有多种,既可以通过JavaScript脚本实现用户输入数据的页面验证,也可以实现在后台处理程序中的Java验证57. ActionForm的作用?[难]ActionForm属于一种数据传输对象,联系了前台页面与后台的Action方法,实现了前台与后台之间的数据转换和传递。它的作用主要体现在以下几个方面:1) 在显示页面的时候用于完成页面中各种控件的初始化工作。2) 在用户提交请求的时候,ActionForm又代表了用户所提交的数据,供Action以及后续的业务处理方法使用ActionForm还有另外一个作用就是对用户提交数据的合法性进行验证Java 基础就业题库1. 类和对象的区别? [易]类是对象的抽象,是模型概念,而对象是实实在在存在的事物,是现实中存在的实体2. Java类库中八个标准包分别是什么? [易]java.lang 提供常用的类、接口、一般异常、系统等编程语言的核心内容。java.util 包含日期、日历、向量、堆栈等实用工具。java.io 包含输入输出流类、文件类等与输入输出I/O有关的类。java.awt 包含窗口和屏幕元素类,事件处理接口等与图形用户界面有关的内容。java.applet 提供为编写applet小程序所需要的类。java.text 提供与文本有关的类。java.net 包含url类等与网络传输有关的东西。java.sql 提供与数据库应用相关的类和接口。3. 接口和抽象类有什么区别? [中]接口是公开的,不能包含私有的方法或变量,而抽象类是可以有私有方法或私有变量的,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。4. 说说java中的内存分配? [难]Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。但是在写程序的时候,可以人为的控制5. Character类有哪些常用方法? [难]charValue()返回字符对象对应的值。digit(char, int)以指定基数返回字符 ch 对应的数值。equals(Object)比较该对象和指定对象。forDigit(int, int)确定以指定基数指定的数对应的字符。getNumericValue(char)返回此字符对应的 Unicode 的非负整型值。getType(char)返回一个表示字符种类的值。hashCode()返回此字符对应的哈希码。isDefined(char)判定一个字符在 Unicode 中是否有定义。isDigit(char)判定指定字符是否为数字。isIdentifierIgnorable(char)判定指定字符在 Java 标识符中或 Unicode 标识符中是否应看作是一个可忽略字符。isISOControl(char)判定指定字符是否为 ISO 控制字符。isJavaIdentifierPart(char)判定指定字符是否为 Java 标识符中除首字符外的字符。isJavaIdentifierStart(char)判定指定字符是否可作为 Java 标识符的首字符。isJavaLetter(char)判定指定字符是否为 Java 字母,若是,它可作为 Java 语言中一个标识符的首字符。 不推荐使用该方法。isJavaLetterOrDigit(char)判定指定字符是否为 Java 字母或数字,若是,它可作为 Java 语言中的一个标识符除首字符外的字符。 不推荐使用该方法。isLetter(char)判定指定字符是否为字母。isLetterOrDigit(char)判定指定字符是否为字母或数字。isLowerCase(char)判定指定字符是否为小写字符。isSpace(char)判定指定字符是否为 ISO-LATIN-1 空格。 不推荐使用该方法。isSpaceChar(char)判定指定字符是否为 Unicode 空白字符。isTitleCase(char)判定指定字符是否为标题字符。isUnicodeIdentifierPart(char)判定指定字符是否为 Unicode 标识符中除首字符外的字符。isUnicodeIdentifierStart(char)判定指定字符是否可作为 Unicode 标识符首字符。isUpperCase(char)判定指定字符是否为大写字符。isWhitespace(char)据 Java 语言,判定指定字符是否为空格。toLowerCase(char)将给定字符映射为对应的小写字符,若没有对应的小写字符,返回此字符本身。toString()返回表示此字符值的串对象。toTitleCase(char)将字符参数转换为标题字符。toUpperCase(char)将字符参数转换为大写字符。5.Boolean类有哪些方法?booleanValue()返回 Boolean 对象对应的布尔值。equals(Object)当且仅当参数非空,且是包含与此对象相同的布尔值的布尔对象时,返回 true。getBoolean(String)当且仅当以参数命名的系统属性存在,且等于 "true" 时,返回为 true。hashCode()返回此布尔值对应的哈希码。toString()返回表示当前布尔值的一个串对象。valueOf(String)返回表示指定串的布尔值。6. String s = new String("xyz");创建了几个String Object? [中]两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。7. String与StringBuffer有什么区别? [难]从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;有什么错?short s1 = 1; s1 += 1;(可以正确编译)8. 是否可以继承String类? [难]String类是final类故不可以继承。9. throw与throws有什么区别? [中]throws是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。throws语句throws用来标明一个成员函数可能抛出的各种"异常"。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的"异常"的类型。如果"异常"的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这copy;在程序 的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。这就重新定义了成员函数的定义语法:type method-name(arg-list) throws exception-list { }下面是一段程序,它抛出了一个"异常", 但既没有捕捉它,也没有用throws来声明。这在编译时将不会通过。try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?会执行,在return前执行。10. 常见的runtime exception有哪些?。 [中]ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException, CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException, IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException, IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException, NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException, UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationExceptionNullPointException11. 介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? [难]答:Collection FrameWork如下:Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)Map提供key到value的映射12. ArrayList和Vector的区别,HashMap和Hashtable的区别 [难]答:就ArrayList与Vector主要从二方面来说.一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或value13. Math.round(11.5)等於多少? Math.round(-11.5)等於多少? [难]Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数.14. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [难]switch(expr1)中,expr1是一个整数表达式。应该是 int、 short、 char byte。long,string 都不能作用于swtich。15. GC是什么? 为什么要有GC? [难]GC是垃圾收集的意思(Gabage Collection)Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。16. 什么叫方法重载 [中]方法重载就是一个同名方法,有多种不同的签名说白了就是一个同名方法可以传入不同个数或类型的参数之间可以互相调用17. 数组有没有length()这个方法? String有没有length()这个方法? [中]数组没有length()这个方法,有length的属性。String有有length()这个方法18. 什么是抽象类抽象类 [中]仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造函数。抽象类可以同时有抽象方法和具体方法。一个抽象类不会有实例,这些构造函数不能被客户端调用来创建实例。一个抽象类的构造函数可以被其子类调用,从而使一个抽象类的所有子类都可以有一些共同的实现,而不同的子类可以在此基础上有其自己的实现。19. 抽象类的用途  [中]1) 具体类不是用来继承的。 Scott Meyers曾指出,只要有可能,不要丛具体类继承。2) 假设有2个具体类,类A和类B,类B是类A 的子类,那么一个最简单的修改方案是应当建立一个抽象类(或java接口)C,然后让类A和类B成为抽象类C的子类。3) 抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。4) 抽象类应当拥有尽可能少的数据。20 .java中接口有什么用? [难]java不允许多重继承,也就是说一个子类只能有一个父类,Son extends FatherA,FatherB 是错误的为了弥补这点不足,java允许实现多个接口,Son extends FatherA implements AnotherFatherA,AnotherFatherB是允许的接口中的方法没有实体,就这一点而言就相当于abstact class,如:interface ainter{void dosth(int i);}ainter是一个接口,它仅仅声明了一个方法dosth,而没有具体实现它class aclass implements ainter{public void dosth(int i) {//在这里你可以不作任何处理,但是必须实现方法体}}aclass实现了ainter这个接口,因此它必须实现ainter中的方法dosth21. 什么叫方法重载 [易]方法重载就是一个同名方法,有多种不同的签名说白了就是一个同名方法可以传入不同个数或类型的参数之间可以互相调用22. 垃圾回收机制的原理? [难]在JAVA中 ,JAVA VM 每隔一段时间就会查看每一块由NEW分配的内存空间,看指向它的有效引用是否存在,如果这个引用不存在,系统会自动将这块空间归入空闲内存区.这个过程被称为 垃圾收集.23.. 什么叫面向对象? [中]面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。24. 面向对象的涉及方法有哪些? [中]OOA-Object Oriented Analysis     面向对象的分析OOD-Object Oriented Design      面向对象的设计OOI-Object Oriented Implementation  面向对象的实现25. jvm工作原理 [难]运行jvm 字符码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验、和代码的执行。装入代码的工作由“类装载器class loader”完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机的所有类都在同一地址空间中,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内布局,java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码的非法访问。随后,被装入的代码由字节码校验器进行检查。校验器可以发现操作数栈益处、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。java字节码的执行有两种方式:1) 即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。26. .java中输入输出流有哪些相关的类? [难]Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:1.1 以字节为导向的stream以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:1) input stream:1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用2) StringBufferInputStream:把一个String对象作为InputStream3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作4) PipedInputStream:实现了pipe的概念,主要在线程中使用5) SequenceInputStream:把多个InputStream合并为一个InputStream2) Out stream1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中2) FileOutputStream:把信息存入文件中3) PipedOutputStream:实现了pipe的概念,主要在线程中使用4) SequenceOutputStream:把多个OutStream合并为一个OutStream1.2 以Unicode字符为导向的stream以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:1) Input Stream1) CharArrayReader:与ByteArrayInputStream对应2) StringReader:与StringBufferInputStream对应3) FileReader:与FileInputStream对应4) PipedReader:与PipedInputStream对应2) Out Stream1) CharArrayWrite:与ByteArrayOutputStream对应2) StringWrite:无与之对应的以字节为导向的stream3) FileWrite:与FileOutputStream对应4) PipedWrite:与PipedOutputStream对应以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。1.3 两种不现导向的stream之间的转换InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。2. stream添加属性2.1 “为stream添加属性”的作用运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。如果我们要往一个文件中写入数据,我们可以这样操作:FileOutStream fs = new FileOutStream(“test.txt”);然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和FilterOutStream的子类,为FileOutStream添加我们所需要的功能。2.2 FilterInputStream的各种类型2.2.1 用于封装以字节为导向的InputStream1) DataInputStream:从stream中读取基本类型(int、char等)数据。2) BufferedInputStream:使用缓冲区3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)4) PushbackInputStream:很少用到,一般用于编译器开发2.2.2 用于封装以字符为导向的InputStream1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream2) BufferedReader:与BufferedInputStream对应3) LineNumberReader:与LineNumberInputStream对应4) PushBackReader:与PushbackInputStream对应2.3 FilterOutStream的各种类型2.2.3 用于封装以字节为导向的OutputStream1) DataIOutStream:往stream中输出基本类型(int、char等)数据。2) BufferedOutStream:使用缓冲区3) PrintStream:产生格式化输出2.2.4 用于封装以字符为导向的OutputStream1) BufferedWrite:与对应2) PrintWrite:与对应3. RandomAccessFile1) 可通过RandomAccessFile对象完成对文件的读写操作2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写3) 可以直接跳到文件中指定的位置4. I/O应用的一个例子import java.io.*;public class TestIO{public static void main(String[] args)throws IOException{//1.以行为单位从一个文件读取数据BufferedReader in =new BufferedReader(new FileReader("F:\\nepalon\\TestIO.java"));String s, s2 = new String();while((s = in.readLine()) != null)s2 += s + "\n";in.close();//1b. 接收键盘的输入BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));System.out.println("Enter a line:");System.out.println(stdin.readLine());//2. 从一个String对象中读取数据StringReader in2 = new StringReader(s2);int c;while((c = in2.read()) != -1)System.out.println((char)c);in2.close();//3. 从内存取出格式化输入try{DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes()));while(true)System.out.println((char)in3.readByte());}catch(EOFException e){System.out.println("End of stream");}//4. 输出到文件try{BufferedReader in4 =new BufferedReader(new StringReader(s2));PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter("F:\\nepalon\\ TestIO.out")));int lineCount = 1;while((s = in4.readLine()) != null)out1.println(lineCount++ + ":" + s);out1.close();in4.close();}atch(EOFException ex){System.out.println("End of stream");}//5. 数据的存储和恢复try{DataOutputStream out2 =new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\nepalon\\ Data.txt")));out2.writeDouble(3.1415926);out2.writeChars("\nThas was pi:writeChars\n");out2.writeBytes("Thas was pi:writeByte\n");out2.close();DataInputStream in5 =new DataInputStream(new BufferedInputStream(new FileInputStream("F:\\nepalon\\ Data.txt")));BufferedReader in5br =new BufferedReader(new InputStreamReader(in5));System.out.println(in5.readDouble());System.out.println(in5br.readLine());System.out.println(in5br.readLine());}catch(EOFException e){System.out.println("End of stream");}27. 构造器Constructor是否可被(覆盖)override? [难]构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。28. JAVA反射机制作用是什么? [难]可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods1。29. web应用程序体系结构是怎样的? [难]一般分为表示层、业务层、数据存取层30. .GET和POST有什么区别? [难]GET是明码传递,POST是暗码传递31. HTTP协议的特点? [中]使用端口发送和接受消息 。端口是协议发送和接收数据的信道或机制 ,80是默认端口通过这种协议传递数据服务器不会保存连接信息,因此又称为连接信息。32. 如何通过RandomAccessFile操作文件 [难]RandomAccessFile rf =new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");for(int i=0; i<10; i++)rf.writeDouble(i*1.414);rf.close();rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");for(int i=0; i<10; i++)System.out.println("Value " + i + ":" + rf.readDouble());rf.close();rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");rf.seek(5*8);rf.writeDouble(47.0001);rf.close();rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");for(int i=0; i<10; i++)System.out.println("Value " + i + ":" + rf.readDouble());rf.close();}}32. 静态方法有什么好处? [难](1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)使用类的静态方法时,注意:a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。b) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:fun(){static int i=0;//非法。}(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:static{}33. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? [中]Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判断两个对象是否相等。34. JAVA中的静态方法有什么理解? [难]在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)使用类的静态方法时,注意:a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。b) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:fun(){static int i=0;//非法。}(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:static{}35. JSP中动态INCLUDE与静态INCLUDE的区别? [难]动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>36. Java有没有goto?java中的保留字,现在没有在java中使用。37. 启动一个线程是用run()还是start()? [难]启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。38. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [易]switch(expr1)中,expr1是一个整数表达式。应该是 int、 short、 char byte。long,string 都不能作用于swtich。39. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? [难]会执行,在return前执行。40. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?不对,有相同的hash code。 [易]\41. char型变量中能不能存贮一个中文汉字?为什么? [难]可以,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的42. Java中的线程有四种状态分别是是什么? [难]运行、就绪、挂起、结束。43. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? [难]字节流,字符流。字节流继承于InputStream \ OutputStream,字符流继承于InputStreamReader \ OutputStreamWriter。44. 静态变量和实例变量的区别? [中]static i = 10; //常量class A a; a.i =10;//可变45. 什么是java序列化,如何实现java序列化? [难]序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化46. 是否可以从一个static方法内部发出对非static方法的调用? [难]不可以,如果其中包含对象的method();不能保证对象初始化.47. 在JAVA中,如何跳出当前的多重嵌套循环? [难]用break; return 方法。48. 面向对象的特征有哪些方面 [中]1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。49. String是最基本的数据类型吗? [中]基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类50. int 和 Integer 有什么区别 [中]Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。51. 运行时异常与一般异常有何异同? [ 难]异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。52. &和&&的区别。 [ 中]&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。53. final, finally, finalize的区别。 [中]final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。Jsp/servlet面试题1. 四种会话跟踪技术是什么?(jsp) (中)答:cookie,url重写,session,隐藏表单域。2.不同客户端可不可以共享Session?不可以 (易)Jps和Servlet之间可不可以用session传值?可以3.简介cookie的有关知识 (中)浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape 开发出了cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C: \windows\cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。cookies给网站和用户带来的好处非常多:1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径2、Cookie能告诉在线广告商广告被点击的次数 ,从而可以更精确的投放广告3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务JSP是使用如下的语法格式来创建cookie的:Cookie cookie_name =new Cookie(""Parameter"",""Value"");例如:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);4.在浏览器的打开时再新打开一个浏览器还是同一个session吗? (中)对IE而言不是同一个SESSION5.描述Cookie和Session的作用,区别和各自的应用范围 (中)Cookie和Session都可以用来在多个页面之间共享数据,区别是Cookie保存在客户端,可以设置比较长的保存时间.而Session保存在服务器端,通常生存时间较短。如果客户端禁用了Cookie,Cookie将无法工作,而session不受这一影响。一般来说保密性高、保存时间短的信息适合用session来存放,而Cookie适合存放需要长期保存的非敏感数据。6.如何实现购物车添加新项,又不使购物车中原有项目被取消? (易)可以将购物车存放在session当中7.Cookie的过期时间如何设置? (易)使用setMaxAge(int exp)方法8.如果BROWSER已关闭了cookies,在JSP中我如何打开session? (中)如果Cookie被禁用,session将通过url重写的方式来传送,所以不会影响session的使用9.include指令和include动作的区别 (中)10. Jsp有哪些常用动作?作用分别是什么?(jsp) (中)答:JSP有6种常用基本动作 jsp:include:在页面被请求的时候引入一个文件。jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。jsp:forward:把请求转到一个新的页面。jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。11. "forward与redirect区别? (中)Forward是在服务器端进行分发,分发后地址栏无变化,用户看不到分发后的地址.而redirect是在客户端进行的页面重定向,地址栏上会显示重定向后的网页.forward的页面只能是在同一个web应用程序之内,而重定向可以定位到外部资源.forward后还是同一个request请求,而重定向后以前的request请求就不存在了.12.Jsp和Servlet中的请求转发分别如何实现? (易)Jsp中使用动作,servlet中使用RequestDistpatcher对象的forward方法"13.什么是web容器?(易)答:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。14.应用服务器有那些? (中)答:BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,JBoss,Tomcat。"15.请说出JSP的内置对象及方法 (中)答:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header, 和session数据的有用的方法。response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。page表示从该页面产生的一个servlet实例。16.使用JSP如何获得客户浏览器的信息? (易)request对象的getXXXX方法"17.B/S与C/S的联系与区别。 (中)答:C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专用的客户端软件。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如NetscapeNavigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQLServer等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过WebServer 同数据库进行数据交互。C/S 与 B/S 区别:1).硬件环境不同:C/S 一般建立在专用的网络上, 小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备.信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行2).对安全要求不同C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强.一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。3).对程序架构不同C/S 程序可以更加注重流程, 可以对权限多层次校验,对系统运行速度可以较少考虑.B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上.比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean构件技术等,使 B/S更加成熟.4).软件重用不同C/S 程序可以不可避免的整体性考虑,构件的

  • 打印.rar (98.7 KB)
  • 描述: SSH面试题
  • 下载次数: 4
评论
发表评论

(快捷键 Alt+S / Ctrl+Enter)

[java] view plain copyprint?JAVA ------SSH 面试题1. BeanFactory的作用是什么? [中]BeanFactory是配置、创建、管理bean的容器,有时候也称为bean上下文。Bean与bean的依赖关系,也是由BeanFactory负责维护的。2. bean在spring的容器中两种基本行为是什么? [中]Singleton:单态Non-singleton或prototype:原型3. spring配置文件中的ref元素的作用是什么?它的两个基本属性是什么? [中]用于指定属性值为spring容器中的其它bean.两个基本属性是bean和local4. 什么是DWR?它有哪些功能? [中]DWR(Direct Web Remoting)是一个WEB远程调用框架.可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScriptDWR根据Java类来动态生成JavaScrip代码.支持Dom Trees,支持Spring,支持commons-logging5. Ajax的工作原理 ? [难]在会话的开始,浏览器加载Ajax引擎请求动作通过JavaScript调用Ajax引擎来代替.引擎负责绘制用户界面以及与服务器端通讯。Ajax引擎采用异步交互过程--不用等待服务器的通讯。6. XMLHttpRequest对象是什么,它有哪些常用方法? [难]一个 JavaScript 对象。是Ajax 的核心。该对象的方法和属性。open():建立到服务器的新请求。send():向服务器发送请求。abort():退出当前请求。readyState:提供当前 HTML 的就绪状态。responseText:服务器返回的请求响应文本。.7. XMLHttpRequest有哪些属性, 它的值分代表什么?[ 中]8. 什么是Ajax? [易]AJAX(Asynchronous JavaScript and XML),它不是一门新的语言或技术,而是多种技术的综合,包括:JavascriptXHTMLCSSDOMXMLXSTLXMLHttpRequest9. 同步与异步的区别? [ 难]普通B/S模式(同步)AJAX技术(异步)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事,而异步则是 请求通过事件触发->服务器处理->处理完毕同步是阻塞模式,异步是非阻塞模式。同步(发送方发出数据后,等接收方发回) 异步(发送方发出数据后,不等接收方发回响应)10. Struts+Hibernate+Spring开发模式中Hibernate扮演的角色 [中]答:Hibernate扮演的是数据持久层 它的作用是实现持久化对象和数据库表之间的映射,形成持久化对象和数据库表中数据的一个转换平台11. 什么是Hibernate 的抓取策略 [难]抓取策略是指当应用程序需要利用关联关系进行对象获取的时候。12. 何为容器 [中]容器就是符合某种规范的能够提供一系列服务的管理器。13. Spring实现了那几种模式 [中]答: 工厂模式 和 单例模式14 :Hibernate实体对象生命周期的三种状态 [难]答 Transient(瞬态) ,persistent(持久态)和Detached(游历态)15: HQL查询参数的处理方法 [中]答:直接将参数拼写为HQL语句通过参数名称来标识参数16. Hibernate实体之间的关联关系的三种形式 [中]答 一对一关联一对多关联多对多关联17. Hibernate具用的三种检索方式 [难]答:HQL检索方式QBC检索方式SQL检索方式18. spring 中的depends-on属性是什么 [中]Depends-on用于当前Bean初始化之前显示的强制一个或多个bean被初始化19. spring 中的BeanWrapper类是什么 [难]BeanWrapper类是一个对JavaBean进行各种操作的工具类BeanWrapper本身是一个接口BeanWrapperImpl实现了BeanWrapper20 . 元素有一个cascade属性,如果希望Hibernate级联保存集合中的对象,casecade属性应该取什么值? [难]答:save-update21. Hibernate中session什么时候是游离态 [中]答:session.close();方法后22. Hibernate中映射文件 inverse属性和cascade属性的区别 [中]答:inverse属性只存在于集合标记的元素中集合元素包括,,,,Inverse属性的作用是是否将对集合对象的修改反射到数据库中 inverse=”false”时修改反射到数据库中 inverse=”true” 时修改不反射到数据库中Cascade属性的作用是描述关联对象进行操作时的级联特性,因此只有涉及到关系的元素才有cascade属性23. : Hibernate中Session对象的load()方法和get()方法的区别(请列举出两点)[难]答:①记录不存在时 get()方法会返回空(null),而load()方法将会抛出一个HibernateException异常 ② load()方法查询数据时会先找Hibernate的内部缓存和二级缓存中的现有数据,get()方法在内部缓存中没有打到相对应的数据时装直接执行SQL语句进行查询24. : Hibernate中HQL属于什么语言 [易]答:HQL是面向对象的查询语言,它可以查询以对象形式存在的数据。25. Hibernate简介以及主要功能 [中]答:Hibernate是采用ORM模式实现数据持久层的一个优秀的JAVA组件,它提供了强大,高效的将JAVA对象进行持久化操作的服务26. 简述Hibernate的优点 [难]答:开源和免费的License,我可以在需要的时候研究源代码,改写源代码,进行功能的定制。轻量级封装,避免引入过多复杂的问题,调试容易,也减轻程序员的负担。具有可扩展性,API开放,当本身功能不够用的时候,可以自己编码进行扩展。27. 怎样构建SessionFactory [难]答: Hibernate的SessionFactory接口提供Session类的实例,Session类用于完成对数据库的操作。由于SessionFactory实例是线程安全的(而Session实例不是线程安全的),所以每个操作都可以共用同一个SessionFactory来获取Session。Hibernate配置文件分为两种格式,一种是xml格式的配置文件,另一种是Java属性文件格式的配置文件28. :从XML文件读取配置信息构建SessionFactory的具体步骤如下。 [难](1)创建一个Configuration对象,并通过该对象的configura()方法加载Hibernate配置文件,代码如下。Configuration config = new Configuration().configure();configura()方法:用于告诉Hibernate加载hibernate.cfg.xml文件。Configuration在实例化时默认加载classpath中的hibernate.cfg.xml,当然也可以加载名称不是hibernate.cfg.xml的配置文件,例如wghhibernate.cfg.xml,可以通过以下代码实现。Configuration config = new Configuration().configure("wghhibernate.cfg.xml");(2)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下:SessionFactory sessionFactory = config.buildSessionFactory();构建SessionFactory要放在静态代码块中,因为它只在该类被加载时执行一次。29. 写出使用构造方法进行注入的关键代码 [难]30. 什么是IOC? [难]不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring 框架中是 IOC 容器) 负责将这些联系在一起。就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控,控制权由应用代码中转到了外部容器,控制权的转移,就是所谓的反转。31. 编程题: 写一个Singleton出来。 [难]Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。public class Singleton {private Singleton(){}private static Singleton instance = new Singleton();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;   }}String tempStr = "";try {tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");tempStr = tempStr.trim();}catch (Exception e) {System.err.println(e.getMessage());}return tempStr;}32. J2EE是技术还是平台还是框架? [中]J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。33. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? [难]Public String translate (String str) {String tempStr = "";try {tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");tempStr = tempStr.trim();}catch (Exception e) {System.err.println(e.getMessage());}return tempStr;}34.如何使用静态工厂方法来创建Bean的实例 [易]相当于: StaticFactoryBean staticFactoryBean=StaticFactoryBean.静态方法名使用实例化的工厂方法来创建Bean的实例相当于: DynamicFactory dynamicFactory=new DynamicFactory();DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名35. 从Java属性文件读取配置信息构建SessionFactory的具体步骤如下: [难](1)创建一个Configuration对象,此时Hibernate会默认加载classpath中的配置文件hibernate.properties,代码如下。Configuration config = new Configuration();(2)由于在配置文件中缺少相应的配置映射文件的信息,所以此处需要通过编码方式加载,这可以通过Configuration对象的addClass()方法实现,具体代码如下。config.addClass(BranchForm.class);addClass()方法用于加载实体类。(3)完成配置文件和映射文件的加载后,将得到一个包括所有Hibernate运行期参数的Configuration实例,通过Configuration实例的buildSessionFactory()方法可以构建一个惟一的SessionFactory,代码如下。SessionFactory sessionFactory = config.buildSessionFactory();36. spring框架的7个模块是什么? [ 难]答: (1) spring AOP --面象切面编程(2)spring DAO --数据访问对象(3)spring ORM --对象关系影射(4)spring Contect -- 上下文配置,向Spring框架提供上下文信息(5)spring WEB - -WEB上下文模块(6)\spring WEB-MVC --实现了MVC(7)spring CORE –核心容器提供Spring框架基本功能37. 什么是AOP 请祥述 [中]答: 是面向切面编程AOP 把软件系统分为两个部分:核心关注点和横切关注点。所谓的核心关注点,是业务处理的主要流程,也就是说这个解决方案要做的事。所谓横切关注点,是与核心业务无关的部分,它把常发生在核心关注点的多处,而各处基本相似,如日志,事务,权限等 。38. Hinbernate和EJB的区别 [中]答:Hibernate可以用在任何JDBC使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EB不是一个范畴的东西,也不存在非此即彼的关系。39. 一般情况下,关系数据模型与对象模型之间有哪些匹配关系 [难]答:表对应类记录对应表的对象表的字段对应类的属性40. 事务隔离级别是由谁实现的? [难]答:数据库系统‘41. 什么是IOC [难]答:IOC 是控制反转,实现了对象之间的依赖关系的转移成而使程序的菘耦合42. 在Spring中给属性有几种赋值方式 请祥叙 [难]答:有四种 分别是(1)普通属性赋值(2)集合属性赋值(3)Properties赋值(4)Map 属性赋值43. 在Spring说说Bean的alias元素和name属性有什么区别 [难]答: 元素name属性可以一次为定义多个别名例:元素一次只能定义一个别名例:注意: alias元素name属性是bean实例名44. Bean 的作用域用几种,请祥叙 [难]答: 用5种分别是:1. singleton IOC容器只会创建一个Bean的唯一的实例2. prototype IOC容器在每次请求该Bean的时候都创建一个新的实例3. request 在一次Http请求中 IOC容器会返回该Bean的同一个实例,而对于不同的用户请求,则会返回不同的实例4. session 在一次Http请求Session 中 IOC容器会返回该Bean的同一个实例,而对于不同的用户Session,则会返回不同的实例5. global session在一个全局Http请求Session 中45. 简述什么是ORM [中]答:ORM的全称是Object-Relational Mapping 翻译成中文就是“对象-关系映射”ORM组件的主要功能就是实现实体域对象的持久化并封装数据库访问的细节ORM本身并不是一个组件,它是具用某种功能的组件的总称,也可以说是一种框架结构46.:struts中的几个关键对象的作用(说说几个关键对象的作用) [中]struts中的几个关键对象:Action Global(设置语言靠它了) ModuleConfig(获取mapping),47.Action的作用 [中]Action的作用是接受用户的请求,通过调用业务方法实现业务处理的功能。48. 在通常情况下软件系统由表示层,业务层,持久层和数据库层组成,Struts属于哪一层? [难]Struts属于表示层组件,它的作用主要体现在以下几个方面:1) 输出用户界面和接收用户的输入,实现与用户的交互。2) 调用业务方法,完成业务处理,还要包括处理后的显示工作。48:Struts标签库由哪些组件组成? [难]标签库是组合在一起的一组JSP自定义标签。标签库由以下组件组成:1) 标签处理程序2) 标签库描述符(TLD)文件3) 应用程序部署描述符(web.xml)文件4) JSP页面中标签库的声明49. 用读出一个URL和一个名称, [难]用的话怎么组合起来。即要达到这样的效果">"> 会报出属性data无值的错误!(page=""中的data无值。)50:怎样才能配置<html:button>的资源文件? [难]在资源文件 ApplicationResourses.properties 中加入 label.login=login在jsp页面写:这样显示页面时,button上就会显示label.login的对应内容“login”51. 说说struts框架,的方法的工作原理或流程 [易]答: 对于采用Struts框架的web应用, 在web应用启动时会加载并初始化ActionServlet,ActionServlet从struts-config.xml中读取配置信息,把它们存放到各种配置对象中,例如把Action的映射信息存放在ActionMapping对象中。当ActionServlet接收到客户请求时,执行以下流程:1.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效信息;2.如果ActionForm实例不存在,就创建一个ActionForm对象并在其中保存客户提交的表单内容;3.根据配置信息决定是否调用ActionForm的validate()方法;4.如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功;5.ActionServlet根据ActionMapping实例包含的映射信息将请求转发给Action(如果Action实例不存在,就先创建Action实例),然后调用Action的excute()方法;6.Action的excute()方法返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件;7.ActionForward对象指向的JSP组件生成动态网页,返回给客户。52: strust的Action是不是线程安全的? [难]答:线程安全就是你可以在多线程环境下使用它,而不需要你来对它进行特殊的处理。action都是继承至servlet的,由于servlet就是线程不安全的(指多个线程共享一个servlet对象,所以),所以不要再action中定义类变量和实例变量,否则其他线程改变了这些值,可本线程还在使用53 :MVC,分析一下struts是如何实现MVC的 [难]从MVC角度来看看struts的体系结构(Model 2)与工作原理:1)模型(Model)在Struts的体系结构中,模型分为两个部分:系统的内部状态和可以改变状态的操作(事务逻辑)。内部状态通常由一组ActinForm Bean表示。根据设计或应用程序复杂度的不同,这些Bean可以是自包含的并具有持续的状态,或只在需要时才获得数据(从某个数据库)。大型应用程序通常在方法内部封装事务逻辑(操作),这些方法可以被拥有状态信息的bean调用。比如购物车bean,它拥有用户购买商品的信息,可能还有checkOut()方法用来检查用户的信用卡,并向仓库发定货信息。 小型程序中,操作可能会被内嵌在Action类,它是struts框架中控制器角色的一部分。当逻辑简单时这个方法很适合。 建议用户将事务逻辑(要做什么)与Action类所扮演的角色(决定做什么)分开。2)视图(View)视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。3)控制器(Controller)在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。54 :简述什么是Struts [中]Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。就是说可将两者一起使用,达到将两者自身的特点进行互补。55 :Struts有哪些主要功能:[难]1.包含一个controller servlet,能将用户的请求发送到相应的Action对象。2. JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。3. 提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。Struts项目的目标是为创建Java web应用提供一个开放源代码的framework。Struts framework的内核是基于例如Java Servlets, JavaBeans, ResourceBundles, 和 XML,以及各种 Jakarta Commons包的标准技术的灵活的控制层。Struts提供了它自身的控制器组件,并整合了其他技术,以提供模型和视图。对于模型,同大多数的第三方软件包一样,如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts能够和标准数据连接技术相结合,如JDBC和EJB。对于视图,Struts与JavaServer Pages协同工作,包含JSTL和JSF。56 :Stuts框架中控制器组件的类主要有哪些? [难]ActionServlet ,RequestProcessor, Action,ActionMapping,ActionForward41:Validator的组成与作用 [难]Validator框架主要包括以下几个部分:1) 实现各种验证规则的Java类2) 配置文件3) 资源文件4) JSP自定义标签Validator组件可以很好地解决用户输入数据的验证问题,但它并不是一个独立运行的组件,它可以被嵌入到目前大部分的Web应用开发框架中。Validator组件的验证方式有多种,既可以通过JavaScript脚本实现用户输入数据的页面验证,也可以实现在后台处理程序中的Java验证57. ActionForm的作用?[难]ActionForm属于一种数据传输对象,联系了前台页面与后台的Action方法,实现了前台与后台之间的数据转换和传递。它的作用主要体现在以下几个方面:1) 在显示页面的时候用于完成页面中各种控件的初始化工作。2) 在用户提交请求的时候,ActionForm又代表了用户所提交的数据,供Action以及后续的业务处理方法使用ActionForm还有另外一个作用就是对用户提交数据的合法性进行验证Java 基础就业题库1. 类和对象的区别? [易]类是对象的抽象,是模型概念,而对象是实实在在存在的事物,是现实中存在的实体2. Java类库中八个标准包分别是什么? [易]java.lang 提供常用的类、接口、一般异常、系统等编程语言的核心内容。java.util 包含日期、日历、向量、堆栈等实用工具。java.io 包含输入输出流类、文件类等与输入输出I/O有关的类。java.awt 包含窗口和屏幕元素类,事件处理接口等与图形用户界面有关的内容。java.applet 提供为编写applet小程序所需要的类。java.text 提供与文本有关的类。java.net 包含url类等与网络传输有关的东西。java.sql 提供与数据库应用相关的类和接口。3. 接口和抽象类有什么区别? [中]接口是公开的,不能包含私有的方法或变量,而抽象类是可以有私有方法或私有变量的,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。4. 说说java中的内存分配? [难]Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因。但是在写程序的时候,可以人为的控制5. Character类有哪些常用方法? [难]charValue()返回字符对象对应的值。digit(char, int)以指定基数返回字符 ch 对应的数值。equals(Object)比较该对象和指定对象。forDigit(int, int)确定以指定基数指定的数对应的字符。getNumericValue(char)返回此字符对应的 Unicode 的非负整型值。getType(char)返回一个表示字符种类的值。hashCode()返回此字符对应的哈希码。isDefined(char)判定一个字符在 Unicode 中是否有定义。isDigit(char)判定指定字符是否为数字。isIdentifierIgnorable(char)判定指定字符在 Java 标识符中或 Unicode 标识符中是否应看作是一个可忽略字符。isISOControl(char)判定指定字符是否为 ISO 控制字符。isJavaIdentifierPart(char)判定指定字符是否为 Java 标识符中除首字符外的字符。isJavaIdentifierStart(char)判定指定字符是否可作为 Java 标识符的首字符。isJavaLetter(char)判定指定字符是否为 Java 字母,若是,它可作为 Java 语言中一个标识符的首字符。 不推荐使用该方法。isJavaLetterOrDigit(char)判定指定字符是否为 Java 字母或数字,若是,它可作为 Java 语言中的一个标识符除首字符外的字符。 不推荐使用该方法。isLetter(char)判定指定字符是否为字母。isLetterOrDigit(char)判定指定字符是否为字母或数字。isLowerCase(char)判定指定字符是否为小写字符。isSpace(char)判定指定字符是否为 ISO-LATIN-1 空格。 不推荐使用该方法。isSpaceChar(char)判定指定字符是否为 Unicode 空白字符。isTitleCase(char)判定指定字符是否为标题字符。isUnicodeIdentifierPart(char)判定指定字符是否为 Unicode 标识符中除首字符外的字符。isUnicodeIdentifierStart(char)判定指定字符是否可作为 Unicode 标识符首字符。isUpperCase(char)判定指定字符是否为大写字符。isWhitespace(char)据 Java 语言,判定指定字符是否为空格。toLowerCase(char)将给定字符映射为对应的小写字符,若没有对应的小写字符,返回此字符本身。toString()返回表示此字符值的串对象。toTitleCase(char)将字符参数转换为标题字符。toUpperCase(char)将字符参数转换为大写字符。5.Boolean类有哪些方法?booleanValue()返回 Boolean 对象对应的布尔值。equals(Object)当且仅当参数非空,且是包含与此对象相同的布尔值的布尔对象时,返回 true。getBoolean(String)当且仅当以参数命名的系统属性存在,且等于 "true" 时,返回为 true。hashCode()返回此布尔值对应的哈希码。toString()返回表示当前布尔值的一个串对象。valueOf(String)返回表示指定串的布尔值。6. String s = new String("xyz");创建了几个String Object? [中]两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。7. String与StringBuffer有什么区别? [难]从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。short s1 = 1; s1 = s1 + 1;有什么错?short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;有什么错?short s1 = 1; s1 += 1;(可以正确编译)8. 是否可以继承String类? [难]String类是final类故不可以继承。9. throw与throws有什么区别? [中]throws是用来声明一个方法可能抛出的所有异常信息throw则是指抛出的一个具体的异常类型。通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。throws语句throws用来标明一个成员函数可能抛出的各种"异常"。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的"异常"的类型。如果"异常"的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这copy;在程序 的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。这就重新定义了成员函数的定义语法:type method-name(arg-list) throws exception-list { }下面是一段程序,它抛出了一个"异常", 但既没有捕捉它,也没有用throws来声明。这在编译时将不会通过。try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?会执行,在return前执行。10. 常见的runtime exception有哪些?。 [中]ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException, CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException, IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException, IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException, NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException, UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationExceptionNullPointException11. 介绍JAVA中的Collection FrameWork(包括如何写自己的数据结构)? [难]答:Collection FrameWork如下:Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)Map提供key到value的映射12. ArrayList和Vector的区别,HashMap和Hashtable的区别 [难]答:就ArrayList与Vector主要从二方面来说.一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的二.数据增长:当需要增长时,Vector 默认增长为原来一培,而ArrayList却是原来的一半就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或value13. Math.round(11.5)等於多少? Math.round(-11.5)等於多少? [难]Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数.14. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [难]switch(expr1)中,expr1是一个整数表达式。应该是 int、 short、 char byte。long,string 都不能作用于swtich。15. GC是什么? 为什么要有GC? [难]GC是垃圾收集的意思(Gabage Collection)Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。16. 什么叫方法重载 [中]方法重载就是一个同名方法,有多种不同的签名说白了就是一个同名方法可以传入不同个数或类型的参数之间可以互相调用17. 数组有没有length()这个方法? String有没有length()这个方法? [中]数组没有length()这个方法,有length的属性。String有有length()这个方法18. 什么是抽象类抽象类 [中]仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造函数。抽象类可以同时有抽象方法和具体方法。一个抽象类不会有实例,这些构造函数不能被客户端调用来创建实例。一个抽象类的构造函数可以被其子类调用,从而使一个抽象类的所有子类都可以有一些共同的实现,而不同的子类可以在此基础上有其自己的实现。19. 抽象类的用途  [中]1) 具体类不是用来继承的。 Scott Meyers曾指出,只要有可能,不要丛具体类继承。2) 假设有2个具体类,类A和类B,类B是类A 的子类,那么一个最简单的修改方案是应当建立一个抽象类(或java接口)C,然后让类A和类B成为抽象类C的子类。3) 抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。4) 抽象类应当拥有尽可能少的数据。20 .java中接口有什么用? [难]java不允许多重继承,也就是说一个子类只能有一个父类,Son extends FatherA,FatherB 是错误的为了弥补这点不足,java允许实现多个接口,Son extends FatherA implements AnotherFatherA,AnotherFatherB是允许的接口中的方法没有实体,就这一点而言就相当于abstact class,如:interface ainter{void dosth(int i);}ainter是一个接口,它仅仅声明了一个方法dosth,而没有具体实现它class aclass implements ainter{public void dosth(int i) {//在这里你可以不作任何处理,但是必须实现方法体}}aclass实现了ainter这个接口,因此它必须实现ainter中的方法dosth21. 什么叫方法重载 [易]方法重载就是一个同名方法,有多种不同的签名说白了就是一个同名方法可以传入不同个数或类型的参数之间可以互相调用22. 垃圾回收机制的原理? [难]在JAVA中 ,JAVA VM 每隔一段时间就会查看每一块由NEW分配的内存空间,看指向它的有效引用是否存在,如果这个引用不存在,系统会自动将这块空间归入空闲内存区.这个过程被称为 垃圾收集.23.. 什么叫面向对象? [中]面向对象是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。其应用领域不仅仅是软件,还有计算机体系结构和人工智能等。24. 面向对象的涉及方法有哪些? [中]OOA-Object Oriented Analysis     面向对象的分析OOD-Object Oriented Design      面向对象的设计OOI-Object Oriented Implementation  面向对象的实现25. jvm工作原理 [难]运行jvm 字符码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验、和代码的执行。装入代码的工作由“类装载器class loader”完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。在本台计算机的所有类都在同一地址空间中,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用与特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内布局,java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码的非法访问。随后,被装入的代码由字节码校验器进行检查。校验器可以发现操作数栈益处、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。java字节码的执行有两种方式:1) 即时编译方式:解释器先将字节编译成机器码,然后再执行该机器码。2)解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序的所有操作。26. .java中输入输出流有哪些相关的类? [难]Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:1.1 以字节为导向的stream以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:1) input stream:1) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用2) StringBufferInputStream:把一个String对象作为InputStream3) FileInputStream:把一个文件作为InputStream,实现对文件的读取操作4) PipedInputStream:实现了pipe的概念,主要在线程中使用5) SequenceInputStream:把多个InputStream合并为一个InputStream2) Out stream1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中2) FileOutputStream:把信息存入文件中3) PipedOutputStream:实现了pipe的概念,主要在线程中使用4) SequenceOutputStream:把多个OutStream合并为一个OutStream1.2 以Unicode字符为导向的stream以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。以Unicode字符为导向的stream包括下面几种类型:1) Input Stream1) CharArrayReader:与ByteArrayInputStream对应2) StringReader:与StringBufferInputStream对应3) FileReader:与FileInputStream对应4) PipedReader:与PipedInputStream对应2) Out Stream1) CharArrayWrite:与ByteArrayOutputStream对应2) StringWrite:无与之对应的以字节为导向的stream3) FileWrite:与FileOutputStream对应4) PipedWrite:与PipedOutputStream对应以字符为导向的stream基本上对有与之相对应的以字节为导向的stream。两个对应类实现的功能相同,字是在操作时的导向不同。如CharArrayReader:和ByteArrayInputStream的作用都是把内存中的一个缓冲区作为InputStream使用,所不同的是前者每次从内存中读取一个字节的信息,而后者每次从内存中读取一个字符。1.3 两种不现导向的stream之间的转换InputStreamReader和OutputStreamReader:把一个以字节为导向的stream转换成一个以字符为导向的stream。2. stream添加属性2.1 “为stream添加属性”的作用运用上面介绍的Java中操作IO的API,我们就可完成我们想完成的任何操作了。但通过FilterInputStream和FilterOutStream的子类,我们可以为stream添加属性。下面以一个例子来说明这种功能的作用。如果我们要往一个文件中写入数据,我们可以这样操作:FileOutStream fs = new FileOutStream(“test.txt”);然后就可以通过产生的fs对象调用write()函数来往test.txt文件中写入数据了。但是,如果我们想实现“先把要写入文件的数据先缓存到内存中,再把缓存中的数据写入文件中”的功能时,上面的API就没有一个能满足我们的需求了。但是通过FilterInputStream和FilterOutStream的子类,为FileOutStream添加我们所需要的功能。2.2 FilterInputStream的各种类型2.2.1 用于封装以字节为导向的InputStream1) DataInputStream:从stream中读取基本类型(int、char等)数据。2) BufferedInputStream:使用缓冲区3) LineNumberInputStream:会记录input stream内的行数,然后可以调用getLineNumber()和setLineNumber(int)4) PushbackInputStream:很少用到,一般用于编译器开发2.2.2 用于封装以字符为导向的InputStream1) 没有与DataInputStream对应的类。除非在要使用readLine()时改用BufferedReader,否则使用DataInputStream2) BufferedReader:与BufferedInputStream对应3) LineNumberReader:与LineNumberInputStream对应4) PushBackReader:与PushbackInputStream对应2.3 FilterOutStream的各种类型2.2.3 用于封装以字节为导向的OutputStream1) DataIOutStream:往stream中输出基本类型(int、char等)数据。2) BufferedOutStream:使用缓冲区3) PrintStream:产生格式化输出2.2.4 用于封装以字符为导向的OutputStream1) BufferedWrite:与对应2) PrintWrite:与对应3. RandomAccessFile1) 可通过RandomAccessFile对象完成对文件的读写操作2) 在产生一个对象时,可指明要打开的文件的性质:r,只读;w,只写;rw可读写3) 可以直接跳到文件中指定的位置4. I/O应用的一个例子import java.io.*;public class TestIO{public static void main(String[] args)throws IOException{//1.以行为单位从一个文件读取数据BufferedReader in =new BufferedReader(new FileReader("F:\\nepalon\\TestIO.java"));String s, s2 = new String();while((s = in.readLine()) != null)s2 += s + "\n";in.close();//1b. 接收键盘的输入BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));System.out.println("Enter a line:");System.out.println(stdin.readLine());//2. 从一个String对象中读取数据StringReader in2 = new StringReader(s2);int c;while((c = in2.read()) != -1)System.out.println((char)c);in2.close();//3. 从内存取出格式化输入try{DataInputStream in3 =new DataInputStream(new ByteArrayInputStream(s2.getBytes()));while(true)System.out.println((char)in3.readByte());}catch(EOFException e){System.out.println("End of stream");}//4. 输出到文件try{BufferedReader in4 =new BufferedReader(new StringReader(s2));PrintWriter out1 =new PrintWriter(new BufferedWriter(new FileWriter("F:\\nepalon\\ TestIO.out")));int lineCount = 1;while((s = in4.readLine()) != null)out1.println(lineCount++ + ":" + s);out1.close();in4.close();}atch(EOFException ex){System.out.println("End of stream");}//5. 数据的存储和恢复try{DataOutputStream out2 =new DataOutputStream(new BufferedOutputStream(new FileOutputStream("F:\\nepalon\\ Data.txt")));out2.writeDouble(3.1415926);out2.writeChars("\nThas was pi:writeChars\n");out2.writeBytes("Thas was pi:writeByte\n");out2.close();DataInputStream in5 =new DataInputStream(new BufferedInputStream(new FileInputStream("F:\\nepalon\\ Data.txt")));BufferedReader in5br =new BufferedReader(new InputStreamReader(in5));System.out.println(in5.readDouble());System.out.println(in5br.readLine());System.out.println(in5br.readLine());}catch(EOFException e){System.out.println("End of stream");}27. 构造器Constructor是否可被(覆盖)override? [难]构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。28. JAVA反射机制作用是什么? [难]可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods1。29. web应用程序体系结构是怎样的? [难]一般分为表示层、业务层、数据存取层30. .GET和POST有什么区别? [难]GET是明码传递,POST是暗码传递31. HTTP协议的特点? [中]使用端口发送和接受消息 。端口是协议发送和接收数据的信道或机制 ,80是默认端口通过这种协议传递数据服务器不会保存连接信息,因此又称为连接信息。32. 如何通过RandomAccessFile操作文件 [难]RandomAccessFile rf =new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");for(int i=0; i<10; i++)rf.writeDouble(i*1.414);rf.close();rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");for(int i=0; i<10; i++)System.out.println("Value " + i + ":" + rf.readDouble());rf.close();rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");rf.seek(5*8);rf.writeDouble(47.0001);rf.close();rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");for(int i=0; i<10; i++)System.out.println("Value " + i + ":" + rf.readDouble());rf.close();}}32. 静态方法有什么好处? [难](1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)使用类的静态方法时,注意:a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。b) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:fun(){static int i=0;//非法。}(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:static{}33. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? [中]Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判断两个对象是否相等。34. JAVA中的静态方法有什么理解? [难]在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:public static int maximum(int n1,int n2)使用类的静态方法时,注意:a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。b) 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:fun(){static int i=0;//非法。}(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且之被执行一次,静态块常用来执行类属性的初始化。例如:static{}35. JSP中动态INCLUDE与静态INCLUDE的区别? [难]动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>36. Java有没有goto?java中的保留字,现在没有在java中使用。37. 启动一个线程是用run()还是start()? [难]启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。38. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [易]switch(expr1)中,expr1是一个整数表达式。应该是 int、 short、 char byte。long,string 都不能作用于swtich。39. try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? [难]会执行,在return前执行。40. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?不对,有相同的hash code。 [易]\41. char型变量中能不能存贮一个中文汉字?为什么? [难]可以,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的42. Java中的线程有四种状态分别是是什么? [难]运行、就绪、挂起、结束。43. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? [难]字节流,字符流。字节流继承于InputStream \ OutputStream,字符流继承于InputStreamReader \ OutputStreamWriter。44. 静态变量和实例变量的区别? [中]static i = 10; //常量class A a; a.i =10;//可变45. 什么是java序列化,如何实现java序列化? [难]序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化46. 是否可以从一个static方法内部发出对非static方法的调用? [难]不可以,如果其中包含对象的method();不能保证对象初始化.47. 在JAVA中,如何跳出当前的多重嵌套循环? [难]用break; return 方法。48. 面向对象的特征有哪些方面 [中]1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。49. String是最基本的数据类型吗? [中]基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类50. int 和 Integer 有什么区别 [中]Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。51. 运行时异常与一般异常有何异同? [ 难]异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。52. &和&&的区别。 [ 中]&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。53. final, finally, finalize的区别。 [中]final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。Jsp/servlet面试题1. 四种会话跟踪技术是什么?(jsp) (中)答:cookie,url重写,session,隐藏表单域。2.不同客户端可不可以共享Session?不可以 (易)Jps和Servlet之间可不可以用session传值?可以3.简介cookie的有关知识 (中)浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待,这样的不好之处可想而知。为了弥补这个缺陷,Netscape 开发出了cookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。cookies是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C: \windows\cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。cookies给网站和用户带来的好处非常多:1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径2、Cookie能告诉在线广告商广告被点击的次数 ,从而可以更精确的投放广告3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务JSP是使用如下的语法格式来创建cookie的:Cookie cookie_name =new Cookie(""Parameter"",""Value"");例如:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);4.在浏览器的打开时再新打开一个浏览器还是同一个session吗? (中)对IE而言不是同一个SESSION5.描述Cookie和Session的作用,区别和各自的应用范围 (中)Cookie和Session都可以用来在多个页面之间共享数据,区别是Cookie保存在客户端,可以设置比较长的保存时间.而Session保存在服务器端,通常生存时间较短。如果客户端禁用了Cookie,Cookie将无法工作,而session不受这一影响。一般来说保密性高、保存时间短的信息适合用session来存放,而Cookie适合存放需要长期保存的非敏感数据。6.如何实现购物车添加新项,又不使购物车中原有项目被取消? (易)可以将购物车存放在session当中7.Cookie的过期时间如何设置? (易)使用setMaxAge(int exp)方法8.如果BROWSER已关闭了cookies,在JSP中我如何打开session? (中)如果Cookie被禁用,session将通过url重写的方式来传送,所以不会影响session的使用9.include指令和include动作的区别 (中)10. Jsp有哪些常用动作?作用分别是什么?(jsp) (中)答:JSP有6种常用基本动作 jsp:include:在页面被请求的时候引入一个文件。jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。jsp:forward:把请求转到一个新的页面。jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。11. "forward与redirect区别? (中)Forward是在服务器端进行分发,分发后地址栏无变化,用户看不到分发后的地址.而redirect是在客户端进行的页面重定向,地址栏上会显示重定向后的网页.forward的页面只能是在同一个web应用程序之内,而重定向可以定位到外部资源.forward后还是同一个request请求,而重定向后以前的request请求就不存在了.12.Jsp和Servlet中的请求转发分别如何实现? (易)Jsp中使用动作,servlet中使用RequestDistpatcher对象的forward方法"13.什么是web容器?(易)答:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。14.应用服务器有那些? (中)答:BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,JBoss,Tomcat。"15.请说出JSP的内置对象及方法 (中)答:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie,header, 和session数据的有用的方法。response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。page表示从该页面产生的一个servlet实例。16.使用JSP如何获得客户浏览器的信息? (易)request对象的getXXXX方法"17.B/S与C/S的联系与区别。 (中)答:C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专用的客户端软件。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如NetscapeNavigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQLServer等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过WebServer 同数据库进行数据交互。C/S 与 B/S 区别:1).硬件环境不同:C/S 一般建立在专用的网络上, 小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备.信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行2).对安全要求不同C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强.一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。3).对程序架构不同C/S 程序可以更加注重流程, 可以对权限多层次校验,对系统运行速度可以较少考虑.B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上.比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean构件技术等,使 B/S更加成熟. 来自: 魏正钦的图书馆 >《SSH》转藏到我的图书馆 献花(0)分享到:类似文章《权术论》笔记【管理策略】一张图教你《管理策略:管理者需理解的40条》让你做个合格的管理者!370条成语“脑筋急转弯”,超级有趣最蛋疼的搞笑说说大全中国知识界的怪现状一念之间,情系一生

范文7:最全的JAVA试题(四)【以文搜文】

Java面试题和答案
JAVA相关基础知识
1、面向对象的特征有哪些方面
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
2、String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
3、int 和 Integer 有什么区别
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型 封装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
4、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构
造字符数据。
5、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
6、说出Servlet的生命周期,并说出Servlet和CGI的区别。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
7、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
Session Bean 还可以再细分为 Stateful Session Bean 与 Stateless Session Bean ,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体。Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体来执行这个 method。换言之
,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行。从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。
9、Collection 和 Collections的区别。
  Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
10、&和&&的区别。
&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。
11、HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
12、final, finally, finalize的区别。
  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
13、sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
14、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方
法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
15、error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
17、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
18、heap和stack有什么区别。
栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。
堆是栈的一个组成元素
19、forward 和redirec
t的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
20、EJB与JAVA BEAN的区别?
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组件。
21、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
22、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现 25、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回与参数最接近的长整数,参数加1/2后求其floor.
27、String s = new String(够被容器或者 Beans自己管理。
EJB通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。
32、应用服务器有那些?
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
33、给我一个你最常见到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
34、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
35、List, Set, Map是否继承自Collection接口?
List,Set是,Map不是

范文8:java四十道试题【以文搜文】

答案来自于网上,大部分的还算不错的解释,有兴趣的自己上网查查答案,看看别人的博客。

1. 一个java源文件中是否可以包括多个类不是内部类?有什么限制?

一个".java"源文件中可以包含多个类,但是只能有一个public类.并且public类的类名必须与文件名一致.

2. Java有没有goto

Goto—java中的保留字,现在没有在java中使用

3. 说说&和&&的区别.

&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长

&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。

4. 在JAVA中如何跳出当前的多重嵌套循环?

在java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的的break语句,即可跳出外层循环。

5. switch语句能否作用在byte上?能否作用在long上?能否作用在String上?

在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中

6. short s1 =1 ;s1 =s1 +1;有什么错?short s1= 1 s1+= 1有什么错?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

7. char型变量中能不能存贮一个中文汉字?为什么?

可以。JAVA默认的编码是UNICODE.不是ASCII的char.汉字的编码需16位,即两个字节。

8. 用最有效率的方法算出2乘以8等於几。

2 << 3。

9. 请设计一个一百亿的计算器

答案详见另一文档;

10. 使用final关键字修饰一个变量时是引用不能变,还是引用的对象不能变?

使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:

finalStringBuffer a=new StringBuffer("immutable");

执行如下语句将报告编译期错误:

a=new StringBuffer("");

但是,执行如下语句则可以通过编译:

a.append(" broken!"); 11. “==”和equals方法究竟有什么区别

“==”是看两个对象是否是同一个对象,也就是两个对象引用是否指向同一个对象(Java分配的内存地址一样)当然如果用于int,long,double就不是看两个值是否相等了。 equals()是比较两个对象的内容是否相等,一般如果用户自己不定义针对自己的类的equals()方法,那么就会使用Object的活着你的类的父类的这个方法。如果你的类里没有对象引用的域,就不必要覆盖equals()(注意String域也是对象)String有自己的equals()方法(它已经覆盖了Object的该方法了。

如果你的类中的域有对象引用,那么你需要重写equals()

因为Object的equals()的工作实质是对你的所有的域进行“==”比较历遍,所以如果你的域有对象引用,“==”比较就又变成了对域的对象引用是否指向同一个对象了

12. 静态变量和实例变量的区别

变量前加static是类变量,不加static是对象变量当一个对象是这个类所有的实例所共享的时候,用类变量,如果每个实例的值都可能不同,就用实例变量。

13. 是否可以从一个static方法内部发出对非static方法的调用?

静态方法只能访问静态成员。非静态既可以访问静态,又可以访问非静态。static修饰的方法可以直接用类名调用.静态变量可以被对象调用,还可以被类名调用。非static修饰的方法只能被对象调用,必须用类new出对象才能调用当我们用类名直接调用时,可能这个类的对象并没有new。如果这时候static方法里调用非static的方法就会出现空指针异常,当然这种错误编译时就不会通过

14. Integer与int的区别.

int 是基本数据类型 Integer是其包装类,注意是一个类。 一是为了在各种类型间转化,通过各种方法的调用。

否则 你无法直接通过变量转化。

15. Math.round(11.50)等於多少?Math.round(-11.5)等於多少

12,-11;

16. 下面的代码有什么不妥之处

17. 请说出作用域public,private,protected以及不写时的区别

public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

18. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

overload一般翻译为重载,表示多个函数共用同一个函数名,为了保证调用这些同名函

数时能正确区分究竟应该调用的是其中的哪一个,重载的各个函数的参数表(不考虑形参名)必须彼此不同,通常简略地说成“不同参数表”。它对返回值的类型没有任何要求,所以你可以随意为每一个重载的函数设置返回类型,相同也行,不同也行。

override一般翻译为覆盖,表示子类对从父类继承来的虚函数重新定义,它要求参数表必须跟父类中被覆盖的那个函数的参数表完全相同,返回值类型原则上也要求相同,但如果返回类型是父类的指针或者父类的引用,覆盖时返回类型允许是子类的指针或者子类的引用。 19. 构造器Constructor是否可被override

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload. 构造器不是方法,那么用来修饰方法特性的所有修饰符都不能用来修饰构造器(并不等与构造器具备这些特性,虽然不能用static修饰构造器,但它却有静态特性)构造器只能用 public private protected这三个权限修饰符,且不能有返回语句。

20. 接口是否可继承接口抽象类?是否可实现implements接口?抽象类是否可继承具体类

concrete class?抽象类中是否可以有静态的main方法

接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。抽象类中可以有静态的main方法,main方法都是静态的;

21. 写clone方法时通常都有一行代码是什么.

clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

22. 面向对象的特征有哪些方面

JAVA面向对象最重要的特征就是:封装,继承,多态。封装是为了方便调用类库里面已经写好的函数,继承是方便对已有函数的功能进行直接调用和扩展。按照原则,java中已经写好的类库会被打包成jar包,不允许调用者更改里面的代码。但是你可以通过其中的抽象类或者接口,根据具体的业务逻辑进行功能的扩展。多态的作用是,可以实现对继承对象的统一调度,是面向对象的精髓所在。另外,java还有语言简单,面向对象,和平台无关性。之所以java可以跨平台,在于他可以通过java虚拟机JVM,将java代码解释成该平台能理解的语言。

23. java中实现多态的机制是什么

强制的:一种隐式做类型转换的方法。

重载的:将一个标志符用作多个意义。

参数的:为不同类型的参数提供相同的操作。

包含的:类包含关系的抽象操作。

24. abstract class和interface有什么区别

含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。

含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

下面比较一下两者的语法区别:

1.抽象类可以有构造方法,接口中不能有构造方法。

2.抽象类中可以有普通成员变量,接口中没有普通成员变量

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

25. abstract的method是否可同时是static是否可同时是native是否可同时是synchronized

都不可以,因为abstract申明的方法是要求子类去实现的,abstract只是告诉你有这样一个接口,你要去实现,至于你的具体实现可以是native和synchronized,也可以不是,抽象方法是不关心这些事的,所以写这两个是没有意义的。然后,static方法是不会被覆盖的,而abstract方法正是要子类去覆盖它,所以也是没有意义的。所以,总的来说,就是java语法不允许你这样做,事实上,也没有意义这样做。

26. 什么是内部类?Static Nested Class和Inner Class的不同?

内部类就是在一个类的内部定义的类,内部类中不能定义静态成员。静态成员不是对象的特性,只是为了找一个容身之处,所以需要放到一个类中而已

27. 内部类可以引用它的包含类的成员吗?有没有什么限制?

完全可以。如果不是静态内部类,那没有什么限制!如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员。

28. Anonymous Inner Class 匿名内部类是否可以extends继承其它类是否可以implements实

现interface接口

内部类,存在于另一个类内部的类,而匿名内部类,顾名思义,就是没有名字的内部类。每个inner class都能够各自继承某一实现类(implementation)。因此,inner class不受限于outer class是否已继承自某一实现类。匿名类本身就是通过继承类或者接口来实现的。但是不能再显式的extends 或者implements了。

29. super.getClass()方法调用.

super不是超类的引用,而是表示在子类中调用父类的方法或属性而已,并且给出例子在test方法中,直接调用getClass().getName()方法,返回的是Test类名由于getClass()在Object类中定义成了final,子类不能覆盖该方法,所以,在test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test。如果想得到父类的名称,应该用如下代码:getClass().getSuperClass().getName();

30. String是最基本的数据类型吗?

String类并不是基本数据类,而是一个类(class),是C++、java等编程语言中的字符串.String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。 String 对象是System.Char对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

31. Strings=”Hello”;s=s+”world”这两行代码执行后原始的String对象中的内容到底变了没有?

没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+

操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

32. 是否可以继承String类

String类是final类故不可以继承. 一切由final修饰过的都不能继承.

33. String s =new String(“xyz”)创建了几个String Object二者之间有什么区别

两个(一个是“xyz”,一个是指向“xyz”的引用对象s)

34. String和StringBuffer的区别

1.三者在执行速度方面的比较:StringBuilder>StringBuffer> String

2.String <(StringBuffer,StringBuilder)的原因

String:字符串常量

StringBuffer:字符创变量

StringBuilder:字符创变量

35. 如何把一段逗号分割的字符串转换成一个数组

Split()方法或者StringTokenizer类实现。

36. 数组有没有length这个方法 String有没有length这个方法

数组没有length方法,有length属性. String有length方法

37. 下面这条语句一共创建了多少个对象String s=”a”+”b”+”c”+”d”;?

答案各种各样,自己去摸索把

38. try 里有一个return语句那么紧跟在这个try后的finally 里的code会不会被执行?什么

时候被执行?在return前还是后?

会被执行,在return 语句执行完之后执行。但是记住一点,return语句的结果反返回之后,finally不影响输出。

39. 下面的程序代码输出的结果是多少

40. final, finally ,finalize的区别

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

范文9:淘宝java试题【以文搜文】

一、String,StringBuffer, StringBuilder 的区别是什么?

String 字符串常量

StringBuffer 字符串变量(线程安全)

StringBuilder 字符串变量(非线程安全)

简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比 StringBuffer 快的: String S1 = “This is only a” + “ simple” + “ test”;

StringBuffer Sb = new StringBuilder(“This a”).append(“ simple”).append(“ test”); is only

你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM

的一个把戏,在 JVM 眼里,这个

String S1 = “This is only a” + “ simple” + “test”; 其实就是:

String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:

String S2 = “This is only a”;

String S3 = “ simple”;

String S4 = “ test”;

String S1 = S2 +S3 + S4;

这时候 JVM 会规规矩矩的按照原来的方式去做

在大部分情况下 StringBuffer > String

StringBuffer

Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。 可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append(

在大部分情况下 StringBuilder > StringBuffer

java.lang.StringBuilde

java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作

StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

二、VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?

1 ArrayList底层是采用数组实现的(并且改数组的类型是Object类型的)2 如果是jdk6的话,采用Array.of()方法来生成一个新的数组,如果是jdk5.0的话,使用的是System.arraycopy方法(将数组拷贝)

3 List list = new ArrayList();时,底层会生成一个长度为10的数组来存放对象,如果预先知道list

会存放多少个对象的话,最好通过new ArrayList(int length)的方式先确定数组的最小长度,如new

ArrayList(50),这样能提高底层的效率。

4 对于ArrayList与Vector来说,底层都是采用数组方式来实现的(该数组是一个Object类型的数组)

5 对于ArrayList,所有方法都不是同步的,对于Vector,大部分是public的方法都是同步的。

6、LinkedList底层是由双向循环链表实现的,对于ArrayList,查找速度非常快,增加和删除操作非常

慢。(本质上是由数组的特点来决定的)

7、对于LinkList,查找速度非常慢,增加和删除操作非常快。(本质上是由双向循环链表的特点来决定

的)

一、同步性

ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。

二、数据增长

从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。

三、检索、插入、删除对象的效率

ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。

LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。 所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList

三、HASHTABLE, HASGMAP,TreeMap区别

四、ConcurrentMap和HashMap的区别

五、Tomcat,apache,jboss的区别

六、GET POST区别

七、SESSION, COOKIE区别

八、Servlet的生命周期

九、HTTP 报文包含内容

十、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入

十一、redirect, foward区别

十二、关于JAVA内存模型,一个对象(两个属性,四个方法)实例化100次,现在内存中的存储状态,几个对象,几个属性,几个方法。

十三、谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的

十四、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化

十五、谈谈Hibernate与Ibatis的区别,哪个性能会更高一些

十六、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理 十七、线程同步,并发操作怎么控制

十八、描述struts的工作流程。

十九、Tomcat的session处理,如果让你实现一个tomcatserver,如何实现session机制 二十、关于Cache(Ehcache,Memcached)

二一、sql的优化相关问题

二二、oracle中 rownum与rowid的理解,一千条记录我查200到300的记录怎么查? 二三、如何分析ORACLE的执行计划?

二四、 DB中索引原理,种类,使用索引的好处和问题是什么?

二五、JVM垃圾回收实现原理。垃圾回收的线程优先级。

二六、jvm 最大内存设置。设置的原理。结合垃圾回收讲讲。

范文10:中兴java试题【以文搜文】

1。使用java写出快速算法;

2。使用java写出N!(N阶层);

public static int WhileTest(int m) {

if (m == 0 || m == 1) {

return 1;

}

int i = 1;

int s = 1;

while (i <= m) {

s =s* i;

i++;

}

return s;

}

public static int DoWhileTest(int m) {

if (m == 0 || m == 1) {

return 1;

}

int i = 1;

int s = 1;

do {

s *= i;

i++;

} while (i <= m);

return s;

}

public static int ForTest(int m) {

if (m == 0 || m == 1) {

return 1;

}

int s= 1;

for(int i=1;i<=m;i++){

s*=i;

}

return s;

}

public static int IfTest(int m) { if (m == 0 || m == 1) { return 1; } else { return m * IfTest(m - 1); } }

3.j2ee的分城几层;

(1) 表示逻辑层(显示数据)。

(2) 业务逻辑层(处理数据)。

(3) 数据访问逻辑层(存取数据)。 4。什么是存贮过程?是用来做什么?使用sql语句写出存贮过程?

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程的优点:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程可以重复使用,可减少数据库开发人员的工作量

4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权 缺点:

1.如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。

2.可移植性差

由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

5。什么是触发器?有什么作用?

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从

DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。

触发器可以查询其他表,而且可以包含复杂的 SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。 触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。

优点:

触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。

6。HashMap和Hashtable的区别;Overload和Override的区别

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map 接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全 的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

7。给我十个你最常见到的runtime exception;多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、NoSuchElementException

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

wait():使一个线程处于等待状态,并且释放所持有的对象的lock。

sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。

notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

8。使用数据库连接池连接mysql数据库,并添加查询相应数据;

9。sleep() 和 wait() 有什么区别

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

10。J2EE中web会话跟踪有几种,区别是什么?

11。servlet容器必需遵守的生命周期

12。Struts controller基本功能

13。文件读写,实现一个计数器;

14。EJB是基于哪些技术实现的?并说 出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别.

15。概述struts,以及struts如何实现MVC架构

16。说出你 对hibernate,spring,ajax的理解。你在实际项目中如何使用hibernate,spring,struts来开发项目。