《Java面试题选 30题》由会员分享,可在线阅读,更多相关《Java面试题选 30题(9页珍藏版)》请在金锄头文库上搜索。
1、Java 面试题选 30 题1. J2EE 是什么?J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型 (enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不 同计算机上,并且处于相应的层次(t ier)中。所属层次包括客户层(clie tn t ier)组件,web层和组件Business层和 组件,企业信息系统(EIS)层。2. J2EE 是技术还是平台还是框架?J2EE本身是一个标准,一个为企业分布式应用的开发提
2、供的标准平台。J2EE 也是一个框架,包括 JDBC、JNDI、RMI、JMS、EJB、JTA 等技术。3 .请对以下在J2EE中常用的名词进行解释(或简单描述):web 容器、EJB 容器、JNDI、JMS、JTA、JAF、RMI/II0P。web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接 接口互,不必关注其它系统问题。EJB 容器: Enterprise java bean 容器。JNDI: (Java Naming & Directory Interface)JAVA 命名目录服务。JMS: (Java Mess
3、age Service)JAVA 消息服务。JTA: (Java Transaction API)JAVA 事务服务。JAF: (Java Action FrameWork)JAVA 安全认证框架。RMI/IIOP: (Remote Method Invocation /internet对象请求中介协议)JNDI 的全称是什么,简单描述它的用途。JNDI = Java Naming and Directory InterfaceJNDI 是 J2EE 提供的命名服务,命名服务用来确定网络中可以访问的对象,在一个命名服务中, 把一个名称和对象绑定在一起,并且可以通过给定的名称找到对应的对象。命名
4、服务在分布式应用程序中是不可缺少的,它不仅提供了方便,更主要的是提供了一层间接引用。JNDI是接口,由J2EE服务器实现,应用程序使用。4. 你是否使用过数据库连接池?请简要描述数据库连接池的工作原理。连接池就是在内存中缓存一定数量的数据库连接,每次需要数据库操作的时候,从连接池中去取出连接, 使用完之后,放回连接池。这样,不用每次需要连接数据库的时候都建立物理连接。可以提高数据库访问性能5. 说出数据连接池的工作机制是什么?J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池 驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连
5、接,池驱动程序就新建一定数量的连接 新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以 使用这个连接。6. JDBC中Statement和PreparedStatement有什么不同?简要说明PreparedStatement对性能的影响。Statement对象代表一个静态SQL语句,只能执行一次. PreparedStatement对象代表一个预编译的SQL语句,可以被多次执行,效率更高.7. 般在JDBC中对于数据库的操作分为创建数据库连接、执行SQL语句、操作结果集对象等几步,简述各步的实现 方法并写出实现各步操作的程序段。创建数据库连接
6、,分为以下两步: 首先注册数据库驱动程序: Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);然后根据具体的JDBC URL地址,调用DriverManager对象的getConnection()来获取一个代表数据库连接的 java.sql.connection 对象。Connection con二DriverManager.getConnection( “url” , “帐号”,“密码”) 执行SQL语句: 可以使用 Statement 对象或 PreparedStatement 对象执行 SQL 语句Stat emen t对象将SQL语句发送到DBMS
7、,由Connec tion对象的crea teS tat emen t()方法创建Stat ement对象。 Statement接口提供的执行SQL语句的常用方法: executeQuery():用于产生单个ResultSet的语句。executeUpdate():用来创建和更新表,用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句。 Statement stmt = con.createStatement();包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。 IN 参数的值在 SQL 语句创建 时未被指定。相反的,该语句
8、为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行 之前通过适当的 setXXX() 方法来提供。PreparedStatement pStmt = conn.preparedStatement(insert into emp (empno , ename) values(?,?);操作结果集对象:ResultSet对象包含SQL语句的执行结果。它通过一套get方法提供了对这些行中数据的访问,即使用getXXX 方法检索数据,使用next ()等方法控制游标的移动。8. jdbc 相关知识, 其中 Class.forName 的作用 答, Class.forNam
9、e(.); /加载类驱动Connection conn = DriverManager.getConnection(sUrl, sUserName, sPassword);Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery(sSQL);9. Hibernate工作原理及为什么要用?原理:1. 读取并解析配置文件2. 读取并解析映射信息,创建 SessionFactory3. 打开 Sesssion4. 创建事务 Transation5. 持久化操作6. 提交事务7. 关闭 Session8. 关闭 S
10、esstionFactory 为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate 使用 Java 反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到 多对多的各种复杂关系。10 Hibernate 是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection)2. Hib
11、ernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中, 就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。11Hibernate 中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类 都映射在一起,它们通过配置文件中的 many-to-one、one-to-many、many-to-many、12 说下 Hibernate 的缓存机制1. 内部缓存存在 Hibernate 中又叫一级
12、缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据c) 第三方缓存的实现13. Hibernate 的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、关联查询4、分页查询5、统计函数14. 如何优化 Hibernate?1. 使用双向一对多关联,不使用单向一对多2. 灵活使用单向一对多关联3. 不用一对一,用多对一取代4. 配置对象缓存,不使用集合缓存5. 一对多集合使用Bag,多对多集合使用Se
13、t6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰15.Struts 工作机制?为什么要使用 Struts?工作机制:Struts 的工作流程:在 web 应用启动时就会加载初始化 ActionServlet,ActionServlet 从 struts-config.xml 文件中读取配置信息, 把它们存放到各种配置对象当 ActionServlet 接收到一个客户请求时, 将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客
14、户提交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示 表单验证成功;-(5)ActionServlet根据Act ionMapping所包含的映射信息决定将请求转发给哪个Act ion,如果相应的Act ion实例 不存在,就先创建这个实例,然后调用Action的execute()方法;-(6)Action 的 execute()方法返回一
15、个 ActionForward 对象,ActionServlet 在把客户请求转发给 ActionForward对 象指向的 JSP 组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的 繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。 基于 Struts 开发的应用由3 类组件构成:控制器组件、模型组件、视图组件16.Struts 的 validate 框架是如何验证的?在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。17. 说下 Struts 的设计模式MVC模式:web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象 被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验 证,如果需要就调用Act ionForm的Valida te ()验证后选择将请求发送到哪个Act ion,如果Act ion不存在, Act ionServlet会先