rpc 远程过程调用
rmi 远程方法调用
EJB jsp的功能代码分类转移到对应的服务器执行 //https://www.cnblogs.com/strugglion/p/6027318.html
瓶颈在数据库端
a.EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。
b.RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。
c.服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。
IOC 控制反转 也叫 依赖注入(DI机制) // 实则反射 ...(ssh2,ssm名词复杂一大堆,原理也不说,扯毛线)
'''IOC就是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是通过容器生成,
同时,要是产生的是单例的bean,他还可以给管理bean的生命周期。'''
AOP
'''很多方法都可能会抛异常,你要记录这个异常到日志中去,
可以写个拦截器,在这个类中记录日志,
在spring.xml中配置一个记录这些日志的方法的拦截器,
在这个方法执行后调用这个拦截器,记录日志。这样就不用每次抛异常都要手动记录日志。'''
javabean https://www.zhihu.com/question/19773379
'''1、所有属性为private
2、提供默认构造方法
3、提供getter和setter
4、实现serializable接口'''
bean scope http://blog.csdn.net/camper001/article/details/6121910
sington /prototype https://www.cnblogs.com/atwanli/articles/4740184.html // important
bean postValue--->Bean http://blog.csdn.net/wodestudy/article/details/8277922 //important
a.@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;
b.@Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;
c.@Resource注解是由JDK提供,而@Autowired是由Spring提供
@Resource的方式;
d. @Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上
脏读 不可重复读 幻读
脏读 读到未提交的数据 try{a=1,b=1/0} catch e: rollback 此时别人已经读取到a=1了
'''
users: id 主键
1、T1:select * from users where id = 1;
2、T2:insert into users
(id
, name
) values (1, 'big cat');
3、T1:insert into users
(id
, name
) values (1, 'big cat');
T1 :主事务,检测表中是否有 id 为 1 的记录,没有则插入,这是我们期望的正常业务逻辑。
T2 :干扰事务,目的在于扰乱 T1 的正常的事务执行。
在 RR 隔离级别下,1、2 是会正常执行的,3 则会报错主键冲突,对于 T1 的业务来说是执行失败的,
这里 T1 就是发生了幻读,因为T1读取的数据状态并不能支持他的下一步的业务,见鬼了一样。
在 Serializable 隔离级别下,1 执行时是会隐式的添加 gap 共享锁的,从而 2 会被阻塞,3 会正常执行,
对于 T1 来说业务是正确的,成功的扼杀了扰乱业务的T2,对于T1来说他读取的状态是可以拿来支持业务的。
所以 mysql 的幻读并非什么读取两次返回结果集不同,而是事务在插入事先检测不存在的记录时,
惊奇的发现这些数据已经存在了,之前的检测读获取到的数据如同鬼影一般。这里要灵活的理解读取的意思,
第一次select是读取,第二次的 insert 其实也属于隐式的读取,只不过是在 mysql 的机制中读取的,插
入数据也是要先读取一下有没有主键冲突才能决定是否执行插入。
不可重复读侧重表达 读-读,幻读则是说 读-写,用写来证实读的是鬼影。'''
'''
脏读:(同时操作都没提交的读取)脏读又称无效数据读出。
一个事务读取另外一个事务还没有提交的数据叫脏读。
例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,
之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。
解决办法:把数据库的事务隔离级别调整到READ_COMMITTED
不可重复读:(同时操作,事务一分别读取事务二操作时和提交后的数据,读取的记录内容不一致)
不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。
例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,
便得到了不同的结果。
解决办法:把数据库的事务隔离级别调整到REPEATABLE_READ
幻读:(和可重复读类似,但是事务二的数据操作仅仅是插入和删除,不是修改数据,读取的记录数量前后不一致)
例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入(
注意时插入或者删除,不是修改))了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,
就好像发生了幻觉一样。这就叫幻读。
解决办法:把数据库的事务隔离级别调整到SERIALIZABLE_READ'''
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。
也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。
事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,
将发生回滚操作,撤消撤消之前到事务开始时的所以操作。
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,
也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,
转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用
户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么
在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有
其他事务在并发地执行。
事务 https://www.cnblogs.com/wzd5230/p/5854932.html //good
java动态代理(JDK和cglib)
java代理机制 https://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html
java动态代理机制是如何实现的 http://blog.csdn.net/wang_1997/article/details/52450549 //good
cglib是一个强大的,高性能,高质量的Code生成类库,
它可以在运行期扩展Java类与实现Java接口。
Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成。
java //反射机制,动态生成代码??编译代码,并载入内存???
spring //https://www.cnblogs.com/hafiz/p/5875740.html
//http://www.cnblogs.com/hafiz/p/5875770.html
javac -verbose xxx.java //编译文件
javap -verbose xxx //查看xxx.class