文章标题

1.缓存
缓存就是数据库数据在内存中的临时容器
位于数据库与数据库访问层中间
ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用
避免了数据库调用性能的开销
相对内存操作而言,数据库调用是一个代价高昂的过程
2.缓存分类
一级缓存:当前事务范围内的数据缓存,就hibernate来讲,事务缓存是基于session生命周期实现的,session一旦关闭,一级缓存就清楚,一级缓存为hibernate自带的缓存,是必须的。
二级缓存(应用级):即在某个应用中或应用中某个独立数据库方位子集中的共享缓存,此缓存可由多个事务贡献。在hibernate中,应用缓存由SessionFactory实现
分布式缓存:即在多个应用实例,多个JVM间共享的缓存策略
3.hibernate的延迟加载
实体类对象的延迟加载(load())
集合的延迟加载(一对多,多对多时,关联集合)
属性的延迟加载(clob大数据类型时)
4.clob和blob
clob:存放大文本的类型
blob:存放二进制数据的类型
5.悲观和乐观锁
锁:多个用户可能同时读取或更新一个数据,需要一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法被其他程序修改
hibernate支持两种锁机制:
悲观锁:(Pessiomistic Locking)实现依赖于数据库机制,在整个过程中,将数据锁定,其他任何用户不能对其进行读取和修改,一般适合于短事务,并发性不好
乐观锁:(Optimistic Locking)悲观锁保证操作独占性,性能开销巨大。乐观锁依靠数据版本记录机制实现为数据增加一个版本标识,增加一个version字段,读取数据时,将版本号一同读出,更新时,版本号加一,将提交数据的版本与数据库对应记录的当前版本信息进行对比,如果提交的数据版本号大于数据库当前的版本号,则予以更新,否则认为是过期数据。
6.数据库隔离级别
Read UnCommited没有提交,就能读到。比如发出insert,在没有提交时就能更新数据库。
存在脏读,一个事务读取一行,另一个事务已经将该记录更新但没有提交。
如果一个事务已经写数据,另一个事务则不允许同时进行写操作
Read Commited提交读,提交之后,才可以更新数据库
不存在脏读,存在不可重复读
如果一个用户读出来是张三,另一个用户将该用户名改为李四,那么第一个用户在读就是李四
存在虚读,用户查询数据时,两次查询的内容不一致未提交的写事务将会禁止其他事务访问该行
Repeatable Read 可重复读
读取的事务将禁止写事务,写事务则禁止任何其他事务不存在不可重复读,但不能避免虚读
Serializable可序列化读
事务只能一个接一个执行,不能并发执行

7.数据库连接池
每一次请求都要建立一次数据库连接
每一次数据库连接连接,使用完后都得断开
不能控制被创建的连接对象数

频繁的数据库连接操作势必占用很多的系统资源,响应速度必定下降。程序出现异常而未能关闭,将会导致数据库系统中的内存泄露,最终不得不重启数据库。系统资源被毫无顾忌的分配出去,如连接过多,也可能导致内存泄露,服务器崩溃。

8.连接池工作原理
为数据库连接建立一个缓冲池,预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个,使用完毕后再放回去。通过设定连接池最大连接数来防治系统无休止的数据库连接。更为重要的是可以通过连接池的管理机制监视数据库的连接的数量,使用情况,为系统开发,测试及性能调整提供依据。
9.连接池的工作流程
持久层向连接池申请一个连接。连接池返回一个空闲连接。如果没有空闲连接,那么就检查连接池中的连接数量是否达到最大连接数。如果没有到达最大连接数,则建立新的连接对象放入连接池中。如果到达最大连接数,那么用户就需要等待。这时可以设置最大等待时间来控制用户的等待状态。等待时间内,有别的连接对象被释放,那么就分配给等待用户。如果超时,那么返回null。
10.hibernate常见的优化策略
用高版本的hibernate
制定合理的缓存策略
采用合理的session管理机制
尽量使用延迟加载
如有可能,采用UUID作为主键生成策略
如有可能,选用乐观锁代替悲观锁
在开发中,显示hibernate执行的SQL语句,从而制定更好的实现策略
复杂查询和统计查询可以使用SQL语句完成,甚至可以考虑使用存储过程完成
11.使用Spring有什么好处
Spring能有效的组织你的中间层对象
Spring能消除在许多工程中常见的Singleton的过多使用
Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化
Spring能够帮助我们真正意义上实现针对接口编程
在Spring应用中的大多数业务对象没有依赖于Spring
使用Spring构建的应用程序易于单元测试
Spring支持JDBC和O/R Mapping产品(hibernate)
MVC Web,提供一种清晰,无侵略性的MVC实现方式
JNDI抽象层,便于改变实现细节,可以方便地在远程服务和本地服务间切换
简化访问数据库时的例外处理
Spring能使用AOP提供声明性事务管理,可以不直接操作JAT也能够对事务进行管理
提供了JavaMail或其他邮件系统的支持
12.Spring的IoC、DI
IoC:控制反转。不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring框架中是IOC容器)赋值将这些联系在一起。
13.IoC的实现类型
IOC组件注入的方式:
1接口注入
2通过set方法注入(设值注入)
3通过构造方法注入
14.Bean工厂&ApplicationContext联系
ApplicationContext扩展Bean工厂接口
ApplicationContext提供附加功能
Bean工厂延迟加载所有的Bean,直到getBean被调用
ApplicationContext则在初始化自身时检验,为理解加载。这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用ApplicationContext
Spring容器中的bean缺省状态下是单态(单例)模式
15.应用上下文ApplicationContext常用实现
ClassPathXmlApplicationContext spring配置文件必须放在src目录下
FileSystemXmlApplicationContext 配置文件放在工程下
XmlWebApplicationContext根据部署路径寻找,webroot
16.Bean中id和name的区别
id是唯一标识bean.不能用特殊字符:x#@,不能用数字开头。在bean引用的时候只能有id指向你需要的bean
name可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3”用逗号隔。如果没有id,则name的第一个名称默认id。
17.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值