java基础的 (2,3里选1题)
---------
1说运行结果: (预计2分钟)
Integer a = 707; Integer b = 707; System.out.println(a>=b); System.out.println(a<=b); System.out.println(a==b); a = 70; b = 70; System.out.println(a>=b); System.out.println(a<=b); System.out.println(a==b);
2 如果一个类的一个private属性没有setter/getter方法, 这个属性的值可以被其他类获取/修改么?(如果回答可以,how) (3分钟)
3 简单介绍一下jvm的"warming up"。
4 通过class diagram(UML) 描述所有知道的java collection framework的classes 的相互关系。 (15-20分钟)
简单算法 (选2个问)
------
1 描述 Quick sort (5分钟)
2 描述 筛选法求质数 (5分钟)
3 如何存储稀疏矩阵 (3分钟)
Spring/Hibernate/jpa
----------------
1 什么是nested transactions? 具体在hibernate和JPA 的环境下如何定义(annotation based)?(1-2分钟)
2 下面伪代码的TryItOut class 中 tryIt()方法执行过程中,数据库会发生下面那种变化?说原因(5分钟)
a - 执行完毕后,数据库没发生变化
b - 当执行processList()方法,在for loop中处理List l中的元素的时候,每执行一次doUpdate(e), 数据库的相应记录将被更新
c - myservice的processList方法执行过程中,数据库无变化,当该方法执行完毕,List l中的相应记录在数据库一次被更新。
public interface MyService{
void doUpdate(Entity e);
void processList();
}
@Service
public class MyServiceImpl implements MyService{
@Autowired
private EntityDao dao; // assume that EntityDao has methods doUpdate() and getAllEntries()
@Transactional(readOnly=false) //declare transaction
public void doUpdate(Entity e){
dao.update(e);
}
public void processList(){
List<Entity> l = dao.getAllEntries();
for(Entity e : l){
//here do some changes on the entity
e.setX(foo);
e.setY(bar);
....
//now we want to do database update
doUpdate(e);
}
}
}
public class TryItOut{
@Autowired
private MyService myService;
public void tryIt(){
myService.processList();
}
}
3 下面的代码片段意图是在OneBean实例化的时候利用其它的spring bean来初始化title属性。有没有问题,为什么?如果是有问题,如何改正? (5分钟)
@Component
public class OneBean{
@Autowired
private AnotherBean bean2; //Assume AnotherBean has property: String title, with getter and setter.
private int a = 5;
private String title = "OneBean_" + bean2.getTitle();
//some other codes
.....
}
简单说下想法
1.1,这个可能很多人都被问过。主要就是那两个"=="的比较。java是比较引用的,但是有个autoboxing。如果有这个意识,很容易就能答了,707的==,是false, 70 的 == 是True。
1.2 reflection可以实现
1.3 这个warming up的问题曾经遇到过。尤其是那种效率要求比较高的消息处理应用,应该避免jvm warming up的这个阶段,因为这个阶段速度比较慢。
1.4 collection恐怕是最常用的基本点之一了,所以这个得心里有数。
2算法的都是常用或常识的,不说了。
3.1 nested transaction JPA 不支持
3.2 应该是a,数据库无变化。 因为spring是proxy based aop。transaction manager也是要以proxy来管理transaction. 尽管那个update方法定义了transaction,但是调用的时候没经过proxy,是自身类里调用的,所以压根transaction manager就没起作用。虽然不报错,但是数据库没有变化。这个在spring文档关于transaction manager里有写,也是平时容易犯的错误之一。
3.3 这个在spring bean初始化的时候会报错,也是常见错误之一。因为bean2还没injected呢。 如果非要用spring bean来初始化另一个spring bean的成员变量,可以写一个方法 init()来做,然后定义这个方法的annotation为@PostConstruct 这样在这个方法里就可以引用已经injected bean了。但spring 缺省单例模式,这个要注意。