笔记
java面向对象
面向对象三大特征:封装,继承,多态。封装说明一个类行为和属性与其他类的关系,低耦合,高内聚(增加代码的复用性);继承是父类和子类的关系(增加代码的复用性);多态是类与类的关系(增加了代码的可移植性,健壮性,灵活性)。
ACID是靠什么保证的
原子性:由undolog日志来保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql
一致性:由其它三大特性保证,程序代码要保证业务上的一致性
隔离性:由MVCC(多版本并发控制)来保证(事务与事务之间相互隔离)
持久性:由redolog来保证,mysql修改数据的时候会在redolog中记录一份日志数据,就算数据没有保存成功,只要日志保存成功了,数据仍然不会丢失。
BeanFactory和ApplicationContext有什么区别
相同:
- Spring提供了两种不同的IOC容器,一个是BeanFactory(Bean对象工厂),另外一个是ApplicationContext(应用程序上下文),它们都是Javainterface,ApplicationContext继承于BeanFactory
- 都可以用来配置XML属性,也支持属性的自动注入。
- 进行使用时,使用方式相同
不同:
- 当调用getBean()方法时,BeanFactory仅实例化bean,而ApplicationContext在启动容器的时候实例化单例bean,不会等待调用getBean()方法时再实例化
- BeanFactory不支持国际化,即i18n,但ApplicationContext提供了对它的支持。
- BeanFactory与ApplicationContext之间的另一个区别是能够将事件发布到注册为监听器的bean。
- BeanFactory 的一个核心实现是XMLBeanFactory而ApplicationContext 的一个核心实现是ClassPathXmlApplicationContext,Web容器的环境我们使用WebApplicationContext并且增加了getServletContext方法。
- 如果使用自动注入并使用BeanFactory,则需要使用API注册AutoWiredBeanPostProcessor,如果使用ApplicationContext,则可以使用XML进行配置。
- 简而言之,BeanFactory提供基本的IOC和DlI功能,而ApplicationContext提供高级功能,BeanFactory可用于测试和非生产使用,但ApplicationContext是功能更丰富的容器实现,应该优于BeanFactory
HashMap和HashTable的区别
- HashTable线程同步(线程安全,效率较低),HashMap非线程同步(线程不安全,效率较高)。
- HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。
- HashTable使用Enumeration,HashMap使用Iterator。
- HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式是2的指数倍。
- hashtable继承与Dictionary类,hashmap继承自AbstractMap类
HashMap有哪些线程安全的方式
HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.
方法一:通过Collections.synchronizedMap()返回一个新的Map,这个新的map就是线程安全的.这个要求大家习惯基于接口编程,因为返回的并不是HashMap,而是一个Map的实现.
方法二:重新改写了HashMap,具体的可以查看java.util.concurrent.ConcurrentHashMap.这个方法比方法一有了很大的改进.