java笔记

本文介绍了Java面向对象的封装、继承和多态三大特性,以及ACID概念在数据库事务中的应用。同时对比了Spring的BeanFactory和ApplicationContext,以及HashMap和HashTable在线程安全性和其他方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔记

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.这个方法比方法一有了很大的改进.

HashMap在扩容上有哪些优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值