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 控制反转

时间: 2024-08-25 13:14:25

java知识总结-26的相关文章

java 知识收集

1,若方法传入的对象参数为空,则在方法中改变参数并不会改变声明的对象 public void setList(List<String> list){ list = new ArrayList<String>() ; } @Test public void t4(){ List<String> list = null ; setList(list); System.out.println(list );//输出 null } 2,不要再foreach遍历的时候删除 jav

java知识查漏补缺

一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重写发生在同一个类的不同方法之间.重载发生在父类和子类自荐. 前提: 重写要求:方法名相同,参数列表不同,对于返回值类型不要求相同. 重载要求:方法名形同,参数列表也相同.重载是实现多态的关键,注意如果父类中的方法是private类型,那么子类中对应方法不算重载,而相当于是定义了一个新方法. 二.final的用法 修饰类:该类不能被继承 修饰方法:该方法不能被重写 修饰属性:该属性初始化后不

Java知识简介与环境变量配置问题

一.在学习一门语言中,不仅需要掌握其语法结构,开发平台以及环境也是很重要的.在开始Java学习之前首先对其进行压缩包的下载安装,以及开发平台环境下载安装.基于此下面文章就此展开: 1.        下载并安装JDK包,然后进行快速正确安装操作.(具体安装步骤网上很多,不在赘述.) 2.        安装成功后,需要对其进行环境变量配置,这一点有点特别,特别针对C语言.C#语言开发的同学更应该注意. 环境变量配置步骤如下: 打开:计算机属性->高级->环境变量选项卡->系统变量->

java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础

补充聊天项目功能,做如下需求分析: 梳理项目开发所需的必要Java知识基础 GUI将使用更快速的swt实现 SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的. 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包就是AWT (Abstract Windowing Toolkit). swt开发包下载地址 链接: https:/

Java知识图谱(附:阿里Java学习计划)

摘要:     本文主要描绘了Java基础学习过程,给出Java知识结构图,以及阿里Java岗学习计划,对Java学习爱好者.准备及将要从事Java开发方面的同学大有裨益. 温馨提示:     由于CSDN对图片的压缩,导致图片观看效果不理想,建议大家通过右键"在新标签页打开图片"进行观看或直接把图片下载下来观看. JVM 1. 内存模型( 内存分为几部分? 堆溢出.栈溢出原因及实例?线上如何排查?) 2. 类加载机制 3. 垃圾回收 Java基础 什么是接口?什么是抽象类?区别是什么

Java知识回顾 (11) 异常处理

距离最近的 Java知识回顾系列(10),2019.4.24日,到现在,已经近半年过去了. 感觉,做一件事情,如果有头无尾,实在不好,心里会一直悬着.所以,现在继续上面的内容. 再次声明,正如(1)中所描述的,本资料来自于runoob,略有修改. 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. 比如说,你的代码少了一个分号,那么运行出来结果是提示是错误 java.lang.Error. 异常发生的原因有很多,通常包含以下几大类: 用户输入了非法数据. 要打开的文

Java知识树梳理

Java知识树梳理 1.前端 HTML CSS JavaScript 2.后台 Java基础 算法 web方面 分布式.中间件.服务器等方面 大数据方面 3.数据库 原文地址:https://www.cnblogs.com/Lonnn/p/11727752.html

Java基础知识强化26:Object类之Object类的概述

1.Object类 类Object是类层次结构的根类,每个类都使用 Object作为超类.所有对象(包括数组)都实现这个类的方法 每个类直接或者间接继承自Object类 2.Object类无参构造: public  Object() 回想面向对象中为什么说:子类的构造方法默认访问的是父类的无参构造. 答:这是因为所有类的共同父亲Object只有一个无参构造. 来自为知笔记(Wiz)

Java知识汇集(2)

1.多线程 线程与进程的区别 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. ?线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小. 多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源.从根本上说,这就是多线程编程的最终目的. 了解一下java在多线程中的基础知识 1.Java