首页 java面试 java面试题(七)一面试模拟题

java面试题(七)一面试模拟题

一 笔试题 1. 事务是什么? 事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(…

一 笔试题

1. 事务是什么?

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、

一致性、隔离性和持久性)属性,只有这样才能成为一个事务:

原子性

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改

,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正

确的。

隔离性

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么

是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。

这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事

务执行的状态相同。

持久性

事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

2. 在数据库中条件查询速度很慢的时候,如何优化?

1.建索引
2.减少表之间的关联
3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面
4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据

3.  session.load()和session.get()区别

Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:
1) 如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
2) Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
3 ) load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。

4.  说一下Servlet的生命周期

A:定位:用户根据地址请求指定的servlet,web.xml根据用户输入的地址,定位到具体的servlet。
B:加载:将找到的servlet类加载到web容器中(servlet容器)。
C:实例化:调用默认无参构造函数,实现servlet的实例化。
D:初始化:调用Init方法,实现成员变量的初始化。
E:服务处理:servlet的service方法接收用户请求,根据当前用户请求的方式是get还是post,service自动将用户请求传递到doGet和doPost方法中进行处理。处理完成后,产生响应结果。
F:销毁:调用destroy方法,实现servlet的释放工作。
服务器关闭时进行释放。或者是servlet产生改变重新加载前进行释放原来的servlet。

注意:在servlet容器中,一个servlet只会产生一个一个实例对象进行工作。

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

final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父

类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,

可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能

读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的

catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前

做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在

Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其

他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

6.  为什么使用Hibernate,Hibernate执行流程。

1. 封装了jdbc,简化了很多重复性代码。
2. 简化了DAO层编码工作,使开发更对象化了。
3. 移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
4. 支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框架。

Hibernate执行流程:

1. 通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件。
2. 由hibernate.cfg.xml中的读取解析映射信息。
3. 通过config.buildSessionFactory();//得到sessionFactory。
4. sessionFactory.openSession();//得到session。
5. session.beginTransaction();//开启事务。
6. persistent operate;
7. session.getTransaction().commit();//提交事务
8. 关闭session;
9. 关闭sessionFactory;

二 手写编程题

1. 请用C++、Java、C#或VB.NET 任意一种面向对象的语言实现一个计算器控制台程序,要求输入输入两个数 和 运算符,得到结果。

2. 写一段代码验证StringBuffer ,String 字符串连接性能差别

String tempstr = “abcdefghijklmnopqrstuvwxyz”;
int times=5000;
long here1= System.currentTimeMillis();
String str = “”;
for (int i = 0; i < times;i++) {
str =str+ tempstr;
}
long here2= System.currentTimeMillis();
long time = (here2 - here1);
System.out.println(“以上代码执行需要”+time+”毫秒”);

long here1= System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < times; i++) {
sb.append(tempstr);
}
long here2= System.currentTimeMillis();
long time = (here2 - here1);
System.out.println(“以上代码执行需要”+time+”毫秒”);

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

jdbc和mybatis的区别

jdbc和mybatis的区别

jdbc和mybatis的区别 mybatis也是基于JDBC的。Java与数据库操作仅能通过JDBC完成。 mybat...
美团、58、百度、阿里面经(转)

美团、58、百度、阿里面经(转)

百度 一面: 自我介绍、 hashmap和hashtable区别、 对线程安全的理解、 讲讲web三大架构、 为什么要用...
软件测试工程师-面试题

软件测试工程师-面试题

  1、什么是软件测试?2’ 2、软件测试与软件质量保证的区别。10’ 3、报告软件缺陷时,测试人员要对软件缺...
spring面试集合

spring面试集合

问题清单: 什么是Spring框架?Spring框架有哪些主要模块? 使用Spring框架有什么好处? 什么是控制反转(...
Java中的注解是如何工作的?

Java中的注解是如何工作的?

自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如...
返回顶部