Java再回首

不积跬步,无以至千里;不积小流,无以成江海

面向对象

封装:将抽象性函式接口的实现细节部分包装、隐藏起来的方法;
多态:同一个行为具有多个不同表现形式或形态的能力
继承:子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法;

多态变量

Java的对象变量是多态的,它们能保存不止一种类型的对象;
它们可以保存的是声明类型的对象,或声明类型的子类的对象;
当把子类的对象赋给父类的时候,就发生了向上造型;

造型

子类的对象可以赋值给父类的变量,Java中不存在对象对对象的赋值;
父类的对象不能赋值给子类的变量,但可以用造型;
对象本身并没有发生任何变化,不是类型转换;
运行时有机制来检测这样的转化是否合理,ClassCastException;

函数调用的绑定

当通过对象变量调用函数的时候,调用哪个函数这件事情叫做绑定;
动态绑定,根据变量的动态类型来决定;
静态绑定,根据变量的声明类型来决定;
在成员函数中调用其他成员函数也是通过this这个对象来调用的;

死锁

两个或者两个以上的事务在执行过程中,因争夺资源而造成的一种互相等待的现象
产生的必要条件
	1.互斥
		并发执行的事务为了进行必要的隔离保证执行正确,在事务结束前,需要对修改的数据库记录持锁,保证多个事务对相同数据库记录串行修改
		对于大型并发系统无法避免
	2.请求和保持
		已经持有一个资源锁,等待另外一个资源锁
		死锁仅发生在请求两个或者两个以上的锁对象
		由于应用需要,难以消除
	3.不剥夺
		已经获得锁资源的事务,在未执行前,不能被强制剥夺,只能使用完时,由事务自己释放
		一般用于已经出现死锁时,通过破坏该条件达到解除死锁的目的
		数据库系统通常通过一定的死锁检测机制发现死锁,强制回滚代价相对较小的事务,达到解除事务的目的
	4.环路等待
		发生死锁时,必然存在一个事务---锁的环形链
		按照统一顺序获取锁,可以破坏该条件
		通过分析死锁事务之间的锁竞争关系,调整SQL的顺序,达到消除死锁的目的

MySQL

锁类别
	排它锁
		它跟任何的锁都是冲突的,如果一个事务加了排它锁,不管其他事务是加任何的锁,都必须要等待这个事务
	共享锁
		多个事务可以共享一把锁,多个锁是可以兼容的
加锁方式
	外部加锁
		由应用程序添加,锁依赖关系较容易分析
		共享锁:select * from table lock in share mode
		排它锁:select * from table for update
	内部加锁
		为了实现ACID特性,由数据库系统内部自动添加
		加锁规则繁琐,与SQL执行计划、事务隔离级别、表索引结构有关
		共享锁和排它锁
需要持有锁的SQL
	快照读
		在MySQL中所有的select读都属于快照读
		Innodb实现了多版本控制(MVCC),支持不加锁快照读
		select操作都是不加锁的,这样可以保证select的性能
		能够保证同一个select结果集是一致的
		不能保证同一个事务内部,select语句和其他语句的数据一致性,如果业务需要,需通过外部显式加锁
	当前读
		select * from table lock in share mode
		select * from table for update
		update from table set ......
		insert into ......
		delete from table ......
分析死锁的常用办法
	show engine innodb status

注解

元注解(描述注解的一种方式)
@Retention定义注解的声明周期:source->class->runtime
@Documented文档注解,会被Javadoc工具文档化
@Inherited是否让子类继承该注解
@Target描述了注解的应用范围【type:表示可以用来修饰类,接口、注解类型或者枚举类型; package:可以用来修饰包;
parameter:可以用来修饰参数;
annotation_type:可以用来修饰注解类型;
method:可以用来修饰方法;
field:可以用来修饰属性(包括枚举常量);
constructor:可以用来修饰构造器;
local_variable:可以用来修饰局部变量;

反射

反射的优缺点:
1.通过反射可以使程序代码访问装载到jvm中的类的内部信息,获取已装载类的属性信息,获取已装载类的方法,获取已装载类的构造方法信息
2.反射提高了Java程序的灵活性和扩展性,降低耦合性,提高自适应能力
3.反射会对性能造成一定的影响,同时让代码的可读性变低

反射(reflection):在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射。

事务管理

JDBC事务
hibernate事务
spring事务管理
	统一的事务编程模型
	编程式事务
		TransactionTemplate
		PlatorformTransactionManager
		适用于事务操作少
	声明式事务(AOP)
		xml
			添加schema
			定义事务管理器
			定义事务Advice
			定义Pointcut
			配置<tx:method/>
				name:匹配函数的名称,支持*匹配
				propagation:事务传播行为
				islation:事务隔离级别
				timeout:超时
				read-only:是否只读事务
				rollback-for:触发回滚的异常,逗号分隔
				no-rollback-for:不触发回滚的异常,逗号分隔
		@Tranctional
			value:使用的TransactionManager
			propagation:事务传播行为
			isolation:事务隔离级别
			timeout:超时
			readOnly:是否只读事务
			rollbackFor:触发回滚的异常
			rollbackForClassName:触发回滚的异常类名称数组
			noRollbackFor:不触发回滚的异常
		适用于事务操作多
事务管理器
	PlatorformTransactionManager
		DataSourceTransactionManager
		HibernateTransactionManager
TransactionDefinition
	getName:事务名称
	getIsolationLevel:隔离级别
	getPropagationBehavior:传播行为
	getTimeout:超时时间
	isReadOnly:是否只读事务
TransactionStatus
	isNewTransaction:是否是新的事务
	hasSavepoint:是否有(诊断,NESTED)
	isCompeleted:是否已完成
	isRollbackOnly:事务结果是否是rollback-only
	setRollbackOnly:设置事务为rollback-only(TransactionTemplate)
隔离级别
	ISOLATION_READ_UNCOMMITTED:读未提交
	ISOLATION_READ_COMMITTED:读提交
	ISOLATION_REPEATABLE_READ:重复度
	ISOLATION_SERIERLIZED:串行化
	ISOLATION_DEFAULT:默认
传播行为
	PROPAGATION_REQUIRED
		如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务
	PROPAGATION_SUPPORTS
		如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同
	PROPAGATION_MANDATORY
		如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常
	PROPAGATION_REQUIRES_NEW
		使用PROPAGATION_REQUIRES_NEW,需要使用 JtaTransactionManager作为事务管理器。它会开启一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起。
	PROPAGATION_NOT_SUPPORTED
		PROPAGATION_NOT_SUPPORTED 总是非事务地执行,并挂起任何存在的事务。使用PROPAGATION_NOT_SUPPORTED,也需要使用JtaTransactionManager作为事务管理器
	PROPAGATION_NEVER
		总是非事务地执行,如果存在一个活动事务,则抛出异常。
	PROPAGATION_NESTED
		如果一个活动的事务存在,则运行在一个嵌套的事务中。 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。 这是一个嵌套事务,使用JDBC 3.0驱动时,仅仅支持DataSourceTransactionManager作为事务管理器。 需要JDBC 驱动的java.sql.Savepoint类。使用PROPAGATION_NESTED,还需要把PlatformTransactionManager的nestedTransactionAllowed属性设为true(属性值默认为false)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

予润

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值