java面试题(基础方面)

上传人:xzh****18 文档编号:34567518 上传时间:2018-02-25 格式:DOC 页数:74 大小:342.50KB
返回 下载 相关 举报
java面试题(基础方面)_第1页
第1页 / 共74页
java面试题(基础方面)_第2页
第2页 / 共74页
java面试题(基础方面)_第3页
第3页 / 共74页
java面试题(基础方面)_第4页
第4页 / 共74页
java面试题(基础方面)_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《java面试题(基础方面)》由会员分享,可在线阅读,更多相关《java面试题(基础方面)(74页珍藏版)》请在金锄头文库上搜索。

1、Java 基础方面 : 1、 作用域 public,private,protected,以及不写时的区别(来表示是否有权限)答:区别如下:作用域 当前类 同一 package 子孙类 其他 packagepublic protected friendly private 不写时默认为 friendly2、Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接口)答:3、 Static Nested Class 和 Inner Class 的不同答4、 &和 &的区别答:2 (0010) 创

2、建了几个 String Object答:6、 Math.round(11.5)等於多少? Math.round(-11.5)等於多少答: 7、 在 Java 中使用 Hibernate 来对数据进行批量处理的话。 向数据库插入 100 000 条数据,用 Hibernate 可能像这样:答:8、数组有没有 length()这个方法 ? String 有没有 length()这个方法答:9、 Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型答: 10、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用=还是 equals()?

3、 它们有何区别答:11、xml 有哪些解析技术?区别是什么?答:12、用 jdom 解析 xml 文件时如何解决中文问题 ?如何解析?答:13、abstract class 和 interface 有什么区别答:14、 Hibernate 中关于 get()和 load()方法检索的区别答:15、Hibernate 中的 update()和 saveOrUpdate()的区别答:16、一个 hibernate 对象有几种状态答:17、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递答: 18、ArrayList 和 Vec

4、tor 的区别,HashMap 和 Hashtable 的区别答:19、GC 是什么? 为什么要有 GC答:20、STRING 与 STRINGBUFFER 的区别。 答:21、谈谈 final, finally, finalize 的区别答:21、heap 和 stack 有什么区别答:22、你所知道的集合类都有哪些?主要方法?答:23、描述一下 JVM 加载 class 文件的原理机制?答:24、java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?答:25、当执行 Session 的 load()方法时,Hibernate 并不会访问数据库,

5、而是仅仅返回代理类实例答:26、java 中实现多态的机制是什么?答:27、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收答:28、 List、Map、Set 三个接口,存取元素时,各有什么特点?答:29、说出一些常用的类,包,接口,请各举 5 个答:30、Ibatis 和 Hibernate 有什么区别?31、Session 和 cookie 的区别在 Hibernate 应用中如何处理批量更新和批量删除批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过 Hibernate API 批量更新 CUS

6、TOMERS 表中年龄大于零的所有记录的 AGE 字段:tx = session.beginTransaction();Iterator customers=session.find(from Customer c where c.age0).iterator();while(customers.hasNext()Customer customer=(Customer)customers.next();customer.setAge(customer.getAge()+1); mit();session.close();如果 CUSTOMERS 表中有 1 万条年龄大于零的记录,那么 Sess

7、ion 的 find()方法会一下子加载 1 万个 Customer 对象到内存。当执行 mit()方法时,会清理缓存,Hibernate执行 1 万条更新 CUSTOMERS 表的 update 语句:update CUSTOMERS set AGE=? . where ID=i;update CUSTOMERS set AGE=? . where ID=j;update CUSTOMERS set AGE=? . where ID=k;以上批量更新方式有两个缺点:(1) 占用大量内存,必须把 1 万个 Customer 对象先加载到内存,然后一一更新它们。(2) 执行的 update 语句

8、的数目太多,每个 update 语句只能更新一个 Customer 对象,必须通过 1 万条 update 语句才能更新一万个 Customer 对象,频繁的访问数据库,会大大降低应用的性能。为了迅速释放 1 万个 Customer 对象占用的内存,可以在更新每个 Customer 对象后,就调用 Session 的 evict()方法立即释放它的内存:tx = session.beginTransaction();Iterator customers=session.find(from Customer c where c.age0).iterator();while(customers.h

9、asNext()Customer customer=(Customer)customers.next();customer.setAge(customer.getAge()+1);session.flush();session.evict(customer); mit();session.close();在以上程序中,修改了一个 Customer 对象的 age 属性后,就立即调用 Session 的 flush()方法和 evict()方法, flush()方法使 Hibernate 立刻根据这个 Customer 对象的状态变化同步更新数据库,从而立即执行相关的 update 语句;evi

10、ct()方法用于把这个 Customer 对象从缓存中清除出去,从而及时释放它占用的内存。但 evict()方法只能稍微提高批量操作的性能,因为不管有没有使用 evict()方法,Hibernate都必须执行 1 万条 update 语句,才能更新 1 万个 Customer 对象,这是影响批量操作性能的重要因素。假如 Hibernate 能直接执行如下 SQL 语句:update CUSTOMERS set AGE=AGE+1 where AGE0;那么以上一条 update 语句就能更新 CUSTOMERS 表中的 1 万条记录。但是 Hibernate 并没有直接提供执行这种 updat

11、e 语句的接口。应用程序必须绕过 Hibernate API,直接通过JDBC API 来执行该 SQL 语句:tx = session.beginTransaction();Connection con=session.connection();PreparedStatement stmt=con.prepareStatement(update CUSTOMERS set AGE=AGE+1 +where AGE0 );stmt.executeUpdate();mit();以上程序演示了绕过 Hibernate API,直接通过 JDBC API 访问数据库的过程。应用程序通过 Sessio

12、n 的 connection()方法获得该 Session 使用的数据库连接,然后通过它创建PreparedStatement 对象并执行 SQL 语句。值得注意的是,应用程序仍然通过 Hibernate 的Transaction 接口来声明事务边界。如果底层数据库(如 Oracle)支持存储过程,也可以通过存储过程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在 Oracle 数据库中可以定义一个名为batchUpdateCustomer()的存储过程,代码如下:create or replace procedure batchUpdateCustomer(p_age in num

13、ber) asbeginupdate CUSTOMERS set AGE=AGE+1 where AGEp_age;end;以上存储过程有一个参数 p_age,代表客户的年龄,应用程序可按照以下方式调用存储过程:tx = session.beginTransaction();Connection con=session.connection();String procedure = call batchUpdateCustomer(?) ;CallableStatement cstmt = con.prepareCall(procedure);cstmt.setInt(1,0); /把年龄参数

14、设为 0cstmt.executeUpdate();mit();从上面程序看出,应用程序也必须绕过 Hibernate API,直接通过 JDBC API 来调用存储过程。Session 的各种重载形式的 update()方法都一次只能更新一个对象,而 delete()方法的有些重载形式允许以 HQL 语句作为参数,例如:session.delete(from Customer c where c.age0);如果 CUSTOMERS 表中有 1 万条年龄大于零的记录,那么以上代码能删除一万条记录。但是 Session 的 delete()方法并没有执行以下 delete 语句delete f

15、rom CUSTOMERS where AGE0;Session 的 delete()方法先通过以下 select 语句把 1 万个 Customer 对象加载到内存中:select * from CUSTOMERS where AGE0;接下来执行一万条 delete 语句,逐个删除 Customer 对象:delete from CUSTOMERS where ID=i;delete from CUSTOMERS where ID=j;delete from CUSTOMERS where ID=k;由此可见,直接通过 Hibernate API 进行批量更新和批量删除都不值得推荐。而直接通过JDBC API 执行相关的 SQL 语句或调用相关的存储过程,是批量更新和批量删除的最佳方式,这两种方式都有以下优点:(1) 无需把数据

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题 > 高中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号