日期:2014-05-20  浏览次数:20618 次

面试遇到的题,请大神解答
1、在hibernate中如何开启查询缓存,如果查询缓存和二级缓存同时开启,在什么情况下性能会减低。
2、静态变量和ThreadLocal的区别。
3、在spring配置文件中,如果bean1的属性要注入bean2,而bean2的属性要注入bean1,如何避免死循环

------解决方案--------------------
坐等大牛解答~
------解决方案--------------------
抛砖引玉:
1. 打开use_query_cache属性,或者指定cacheable属性覆盖配置,当两级缓存的命中率都很低的时候效率自然就会降低,因为缓存被白白浪费了。
2. 静态变量随虚拟机加载并初始化,ThreadLocal随所在位置加载,它的成员随线程加载。主要区别是后者线程安全,主要应用场景也是多线程。实际上spring的scope=prototype工作模式就是用ThreadLocal保存参数的。
3. 简单做就是bean循环依赖但是方法不循环调用。 从设计上避免的话,应该拆分bean,然后禁止循环依赖。
------解决方案--------------------
3,禁止倒是应该,不过真的遇到,难道不是放在init里面初始化么?或者用factorybean什么什么的?

不能写所有代码的,你得应付各种奇葩的。
------解决方案--------------------
1、 hibernate任何时候性能都不高,你真能把它的性能提高的话,你对于缓存,数据库,JDBC的理解已经足够你自己写个适合自己的ORM框架了。
2、个人认为这两个东西的联系不大。只能是把静态变量和ThreadLocal各自的加载时机,调度方式,多线程的利用都说一遍,然后区别自己去看吧。
3、最蠢的方式:在一个set方法里校验一下。