Java面试题(基础方面).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Java面试题(基础方面).doc》由会员分享,可在线阅读,更多相关《Java面试题(基础方面).doc(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) & 3(0011) 5、S
2、tring s = new String(xyz);创建了几个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里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用=还是equ
3、als()? 它们有何区别答: 11、xml有哪些解析技术?区别是什么?答:12、用jdom解析xml文件时如何解决中文问题?如何解析?答: 13、abstract class和interface有什么区别答:14、Hibernate中关于get()和load()方法检索的区别答: 15、Hibernate中的update()和saveOrUpdate()的区别答:16、一个hibernate对象有几种状态答:17、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递答: 18、ArrayList和Vector的区别,Hash
4、Map和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并不会访问数据库,而是仅仅返回代理类实例答:26、java中实现多态的机制是什么?答:27
5、、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收答:28、List、Map、Set三个接口,存取元素时,各有什么特点?答:29、说出一些常用的类,包,接口,请各举5个答:30、Ibatis和Hibernate有什么区别?31、Session和cookie的区别在Hibernate应用中如何处理批量更新和批量删除批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段:tx = session.beginTransacti
6、on();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万条年龄大于零的记录,那么Session的find()方法会一下子加载1万个Customer对象到内存。当执行mit()方法时,会清理缓存,Hiberna
7、te执行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语句的数目太多,每个update语句只能更新一个Customer对象,必须通过1万条update语句才能更新一万个Customer对象,频繁的访问数据库,会大大降
8、低应用的性能。为了迅速释放1万个Customer对象占用的内存,可以在更新每个Customer对象后,就调用Session的evict()方法立即释放它的内存: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);session.
9、flush();session.evict(customer); mit();session.close();在以上程序中,修改了一个Customer对象的age属性后,就立即调用Session的flush()方法和evict()方法,flush()方法使Hibernate立刻根据这个Customer对象的状态变化同步更新数据库,从而立即执行相关的update语句;evict()方法用于把这个Customer对象从缓存中清除出去,从而及时释放它占用的内存。但evict()方法只能稍微提高批量操作的性能,因为不管有没有使用evict()方法,Hibernate都必须执行1万条update语句,才
10、能更新1万个Customer对象,这是影响批量操作性能的重要因素。假如Hibernate能直接执行如下SQL语句:update CUSTOMERS set AGE=AGE+1 where AGE0;那么以上一条update语句就能更新CUSTOMERS表中的1万条记录。但是Hibernate并没有直接提供执行这种update语句的接口。应用程序必须绕过Hibernate API,直接通过JDBC API来执行该SQL语句:tx = session.beginTransaction();Connection con=session.connection();PreparedStatement s
11、tmt=con.prepareStatement(update CUSTOMERS set AGE=AGE+1 +where AGE0 );stmt.executeUpdate();mit();以上程序演示了绕过Hibernate API,直接通过JDBC API访问数据库的过程。应用程序通过Session的connection()方法获得该Session使用的数据库连接,然后通过它创建PreparedStatement对象并执行SQL语句。值得注意的是,应用程序仍然通过Hibernate的Transaction接口来声明事务边界。如果底层数据库(如Oracle)支持存储过程,也可以通过存储过
12、程来执行批量更新。存储过程直接在数据库中运行,速度更加快。在Oracle数据库中可以定义一个名为batchUpdateCustomer()的存储过程,代码如下:create or replace procedure batchUpdateCustomer(p_age in number) asbeginupdate CUSTOMERS set AGE=AGE+1 where AGEp_age;end;以上存储过程有一个参数p_age,代表客户的年龄,应用程序可按照以下方式调用存储过程:tx = session.beginTransaction();Connection con=session.
13、connection();String procedure = call batchUpdateCustomer(?) ;CallableStatement cstmt = con.prepareCall(procedure);cstmt.setInt(1,0); /把年龄参数设为0cstmt.executeUpdate();mit();从上面程序看出,应用程序也必须绕过Hibernate API,直接通过JDBC API来调用存储过程。Session的各种重载形式的update()方法都一次只能更新一个对象,而delete()方法的有些重载形式允许以HQL语句作为参数,例如:session.
14、delete(from Customer c where c.age0);如果CUSTOMERS表中有1万条年龄大于零的记录,那么以上代码能删除一万条记录。但是Session的delete()方法并没有执行以下delete语句delete from CUSTOMERS where AGE0;Session的delete()方法先通过以下select语句把1万个Customer对象加载到内存中:select * from CUSTOMERS where AGE0;接下来执行一万条delete语句,逐个删除Customer对象:delete from CUSTOMERS where ID=i;de
15、lete from CUSTOMERS where ID=j;delete from CUSTOMERS where ID=k;由此可见,直接通过Hibernate API进行批量更新和批量删除都不值得推荐。而直接通过JDBC API执行相关的SQL语句或调用相关的存储过程,是批量更新和批量删除的最佳方式,这两种方式都有以下优点:(1) 无需把数据库中的大批量数据先加载到内存中,然后逐个更新或修改它们,因此不会消耗大量内存。/数据检索策略关键字: 检索 检索策略:1. 立即检索 2. 延迟检索 3. 预先抓取 4. 批量立即加载 5. 批量延迟加载 立即检索 lazy=false 延迟检索 l
16、azy=true 预先抓取 1. 如果 对象之间全部是立即加载,会导致加载一个对象附带着加载更多的关联对象-无效开销太大 2. 如果对象之间全部是预先抓取,通过一条sql语句完成所有的关联操作。设置hibernate_max_fetch_depth=?外连接的表的个数。一对多 多对多使用延迟加载;一对一,多对一使用预先抓取 批量加载 一对多 多对多的时候 在多的一端,配置文件在一的一端设置set inverse = true batch-size=3.1. 批量立即加载:少发送sql :in(?,?) 注意适当配置batch-size的大小 2. 批量延迟加载: 1:ORM主要解决的问题是对象
17、-关系的映射。一班情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录。2:常用的5个核心接口介绍 (1)Configuration接口,用于配置并根启动Hibernate。 (2)SessionFactory接口,一个SessionFactory实例对应一个数据库存储源,它是线程安全的,重量级的,之所以称 它为重量级,是因为启动它要一个很大的缓存,当然,用户可以为它配置二级缓存 (3)Session接口,不是线程安全的,Session实例是轻量级的,它有一个第一级缓存 (4)Transaction接口,是Hibernate的数据库事务接口, (5)Query和Criteria接口
18、,它们是Hibernate的查询接口,Query实例包装了一个HQL查询词句,HQL是面象对象的, 它引用类名和类的属性,而不是表名和表的字段3:持久化类的默认规则 (1)对属性的操作,一这要用setXXX()和getXXX()这样的命名,如果是boolean类型,则可以用isXXX()命名(2)最好实现java.io.Serialiizable接口, (3)必须提供一个不带参数的,最好是public或protected的默认构造方法4:数据类型的映射过程是,先参照表字段类型,再比较java类型,最后由上两种来决定hibernate数据类型5:元素的常用属性 (1)name,指定的是java类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 试题 基础 方面
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内