java知识总结-26
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java知识总结-26相关的知识,希望对你有一定的参考价值。
事务 :
事务是一个最小的工作单元,不论成功与否都作为一个整体进行工作。
即单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
当事务失败时,系统返回到事务开始前的状态。这个取消所有变化的过程称为“回滚”( rollback )。例如,如果一个事务成功更新了两个表,在更新第三个表时失败,则系统将两次更新恢复原状,并返回到原始的状态。
作用:
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。
------
一个逻辑工作单元要成为事务,必须满-
在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。
脏读 虚读 不可重复读
4.持久性
持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。持久性的概念允许开发者认为不管系统以后发生了什么变化,完成的事务是系统永久的部分。
********************隔离级别
Read Uncommitted(读取未提交内容) --- 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。 既脏读Dirty Read
Read Committed(读取提交内容) ---它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。 既不可重复读(Nonrepeatable Read)
Repeatable Read(可重读) mysql的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。 会导致 幻读(Phantom Read)
Serializable(可串行化) 最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题
工厂模式:
属于创建型模式,它提供了一种创建对象的最佳方式。屏蔽产品的具体实现,调用者只关心产品的接口
-----------
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
----------
优点:
1、一个调用者想创建一个对象,只要知道其名称就可以了。
2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。
3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
-----------
实现:第三方工厂类负责创建对象 调用工厂类得到创建的对象
简单工厂:不管产品有多少个,工厂类就一个 (工厂只需要提供一个静态方法)所以简单工厂也称为静态工厂(在产品类里符合开闭原则,工厂类不符合开闭原则)
工厂方法模式:
实现:创建工厂的工厂接口 实现该接口的工厂类 具体的类 调用创建工厂的工厂类 创建工厂 通过创建的工厂的方法的到对象
--定义一个工厂类的接口 所有的集体工厂都生产一中产品
单例模式:
涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式(必须是静态方法),可以直接访问,不需要实例化该类的对象。
实现:私有的构造方法 私有的属性 公共静态的得到本类对象的方法
面向接口编程:
接口是一种规范,一种规则 面向接口编程指 实现接口和使用接口的人都以接口为中心 实现同一个接口 把接口作为两者的媒介从而联系起来 通过第三方接口降低两者之间的耦合性 使得任何一方发生改变而不影响另一方 每一方不用关注另一方的内部逻辑 利于软件的分工和模块的单元测试
包的概念:
同一个开发小组的工作是在一个包中完成的,不同的包往往代表了不同的开发小组。
数据源:
数据源(Data Source)顾名思义,数据的来源,是提供某种所需要数据的器件或原始媒体。在数据源中存储了所有建立数据库连接的信息。就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,你可以找到相应的数据库连接。
轻量级和重量级:
---------------
轻量级 指它的创建和销毁不需要消耗太多的资源,意味着可以在程序中经常创建和销毁session 的对象;
轻量级 不需要继承或实现任何类任何接口,不具有侵入性,采用POJO开发
轻量级 侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(如事务功能弱、不具备分布式处理能力),比较适用于开发中小型企业应用。
轻量级 对容器也没有依赖性,易于进行配置,易于通用,启动时间较短
*************
重量级 重量级意味不能随意的创建和销毁它的实例,会占用很多的资源。
重量级 需要继承或实现框架中的类或接口,依赖关系强,有侵入性
重量级 则强调高可伸缩性,适合与开发大型企业应用。
重量级 对容器的依赖。,提供固定的一组机能,不具有配置能力。,不同的产品,部署过程不同,不易通用。,启动时间长。
Java内存泄露
内存泄露是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露。内存泄露有时不严重且不易察觉,这样开发者就不知道存在内存泄露,但有时也会很严重,会提示你Out of memory。
-----什么时候发生-------
当一个长周期的变量引用了一个短周期的对象的时候,会发生内存泄露
连接池:
连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
优点:
减少连接创建时间
简化的编程模式
受控的资源使用
javabean定义:
私有属性
geter seter 方法
无参构造
开发原则:
----------
开闭原则:对扩展开发 对修改封闭(扩展功能被推荐并且很容易扩展,不允许修改原有的方法和属性--即扩展后对原有的“对象”不能产生影响)
装饰模式:
1.在不改变原类所有功能属性的基础上进行操作(把原类作为属性,构造方法传入原类--get,set方法是调用原类的属性赋值给类属性,如果改变在方法类再次调set赋值后操作)
2.可以反复被装饰
------
实现:装饰类继承被装饰类
装饰类有一个被装饰类的对象作为其成员
装饰类通过有参构造传入一个被装饰类的对象
装饰类重写被装饰类的所有发方法,重写被装饰对象的相应方法
对于需要被装饰的方法,在调用想用方法之前或者之后加上相应的装饰代码
装饰类在重写被装饰类的方法之外,还可以第一自己的方法
---
把被装饰的类装饰后 可以再次装饰(效果叠加) 一定要调用原对象的方法
特点:
每个装饰对象需要传入一个装饰对象
每个装饰类都可以使用多次
动态代理
jdk动态代理:
定义一个接口
被代理类实现一个有方法的接口(非标记接口)并且在被代理方法在接口中有定义
写一个代理类 实现 InvocationHandler 接口 重写invoke方法 参数列表(代理类的实例,具体调用的方法,被调用方法的参数)
//参数列表 被代理类的类加载器 被代理类的实现接口 代理类的实例
how a = (Show) Proxy.newProxyInstance(User.class.getClassLoader(),User.class.getInterfaces(), new JDKProxyUser());
----------------------
cglib 代理
观察者模式:
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。
-------
优点:1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。
缺点:如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃
察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。
对一个被装饰的对象,可以对它进行不同的知识
优点:
优点:装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能
静态代理和装饰模式的区别;
1)静态代理:代理类不需要继承被代理类,装饰模式:装饰类必须继承被继承类
2)静态代理和装饰模式都需要一个成员变量保存一个目标类对象;
3)静态代理:目标类对象可以通过有参构造器传入,也可以在无参构造器中创建,装饰模式:目标类必须通过有参构造传入
4)静态代理和装饰模式都必须实现/重写目标类的所有方法
5)静态代理在实现这些方法时候,可以调用也可以不调用原对象的相应方法; 装饰模式必须调用原来方法
6)静态代理实现这些方法之外,一般没有新的方法,装饰模式不一定
代理模式:
静态代理缺点:如果被代理类的方法很多而需要修改的方法很少,大量代码重复
------------
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
*******
代理类用一个成员变量保存一个代理对象
被代理对象可以通过有参构造器出入,也可以在无参构造器中创建(--与装饰模式区别)
代理类实现被代理类的所欲方法,
在方法实现中,可以调用代理对象的相应方法,加入新的业务代码,也可以不调用(与装饰模式区别)
代理类除了实现被代理类的方法之外,一般没有增加方法
注解:
Annotation的原型是注释作为一种对注释的扩展而被引入成为一个语法要素,其本身就是为了对所标注的编程元素进行补充说明,从而进一步完善编程元素的逻辑语义。
di 依赖注入
ioc 控制反转
以上是关于java知识总结-26的主要内容,如果未能解决你的问题,请参考以下文章