FilterPine's profileSun||OraclePhotosBlogListsMore ![]() | Help |
|
May 28 JiveJive分析 1、 什么时候进行数据库的连接,这么做的好处?提供数据库连接的类有几个? Jive的入口类DbForumFactory的构造函数在类创建的时候调用forums()函数获得forums的时候创建数据库的连接并初始化连接池。Forums调用 好处:未知。
就一个类:DefaultConnectionProvider
2、 Cache什么时候被初始化,什么时候载入有用信息(如一个forum的信息),如何利用Cache里的forum信息?是先划分出来一块内存,还是只规定其大小,当需要调用某个对象的时候分配该对象大小的内存? 答: Jive的Cache图大致如下:
是先划分出一块内存。是用了哈希图数据结构,LongHashMap内存结构如下:
Table里面填写唯一的ID值,例如forum的id号码。 Values 里保存的是数据对象,例如:forum对象。 State 里填写的是内存使用情况(free = 0,full = 1, removed = 2)。 以forum的内存划分为例:
这里面DbForumFactory和DatabaseCacheManager是紧耦合。
3、 ConnectionManager和DefaultConnectionProvider的分工,为什么要设置两个类? DefaultConnectionProvider类提供了底层的数据库操作(如:连接服务器,用户名,密码 连接池等)。这些东西无需暴露给开发所有开发人员。而且也会造成误操作。ConnectionManager提供了最基本的类操作。DefaultConnectionProvider提供。 4、 ConnectionManager类为什么都写成静态类? 答:第一,不用每次使用的时候都创建ConnectionManager类,方便调用。 第二,一个全局类。 5、 为什么要设置一个统一入口ForumFactory?优点和缺点是什么? 答:优点是方便扩展和思路清晰。 缺点是增加了一个层次的代码。 6、 ForumFactory和DbForumFactory的关系?为什么要用抽象类? 答:主要是想把DbForumFactory替换掉(在什么情况下会把DbForumFactory替换掉呢?)。 而替换的过程中会面临如下的问题。 DatabaseObjectIterator中有调用ForumFactory的getForum方法,如果用实现类DbForumFactory而不是抽象类ForumFactory来实现的话,当替换这个类的时候将修改非常多的代码。其实引入抽象类:ForumFactory
7、 分析Jive接口和实现模型。 8、 分析迭代模式在Jive中的应用,为什么要用它? 答: 第一、 延迟从数据库提取数据。 this.objectFactory = new DatabaseObjectFactory() { ForumFactory factory = (ForumFactory)extraObject; public Object loadObject(long id) { try { Forum forum = factory.getForum(id); return forum; } catch (ForumNotFoundException mnfe) { } catch (UnauthorizedException ue) { } return null; } }; 在DatabaseObjectIterator的构造函数中动态创建接口DatabaseObjectFactory的实现。 9、 从DbForum和DbForumFactory入手分析这两个类各自担当的不同责任。 答: DbForum继承于Forum接口。它主要的作用是从数据库中提取并持有一个forum的具体数据。 数据库方面:DbForum封装了基本的数据库操作,修改Forum的基本信息。
DbForumFactory是抽象类ForumFactory的实现,里面实现了对Cache的管理,每次获得对象的时候都会到Cache里看是否存在,不存在的话就到数据库里收索数据。 数据库方面: 10、简述数据库连接池对数据库连接的开关控制,如何控制连接数据库过多的问题。 答: 数据库连接开的控制由连接池控制。类ConnectionPool得到数据库的连接,关闭连接时由客户类例如:DbForum,来自己关闭。由于关闭连接分散到客户类中,完全由开发人员来管理链接,控制比较难。 |
|
|