3.4.概念aop,ioc,事务

下面列出了在MySQL中常见的字符串数据类型:
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT等。
Char,varchar,binary,varbinary,blob,text.

连接池基本的思想是在系统初始化(项目启动)的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。
常用数据库连接池
Java中常用的数据库连接池有:DBCP(DataBase Connection Pool) 、C3P0、BoneCP、Proxool、DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager及阿里巴巴Druid等。

Sun
1.让多人一起开发代码的时候能够做到数据共享多人共享同一的资源,并且可以对资源实现修改和更新;

  1. 记录资源的每一次变更,以及记录更改该资源的人,并且可以恢复到之前的任何一个修改点;

Mysql端口号:3306;
Oracle端口号:1521
Hibernate端口号:8080;
Web服务器:tomcat

封装,继承,多态
封装:私有化属性,并且生成公有的getter和setter方法,生成有参无参构造。
继承:继承的关键字为extends,子类继承父类,那么子类就拥有了父类的所有非静态非私有方法和属性。
一个类只能有一个父类。一个父类可以有多个子类。所以说类是单继承的,如果父类的方法无法满足
子类的需求时,则需要在子类中重写父类的方法。
多态:通过子类创建父类对象,通过实现类创建接口对象,方法的重写和重载
一.struts2框架的搭建
(1)导入jar包到lib目录下。
(2)在web的xml中配置struts的核心控制器StrutsPrepareAndExecuteFilter。
死抓死pu特俺的伊克斯非有特
(3)将struts.xml文件放到src目录下。
(4)新建action【埃克森】类方法的修饰符必须是public返回值类型为String或void(方法是无参的)
(5)配置每个请求的action标签和result标签。
(6)访问时路径需要组装 package【牌给鸡】标签中的namespace以及action标签中的name加上 规定好的请求后缀进行访问

二.struts的传参方式

  1. 用Action的属性
    在action 里面定义要接收的参数,并提供相应的setter,getter,和提交参数的名称一致,并不用做数据类型的转换。
  2. 使用DomainModel
    在Action 里面不用很多的属性,而是用Model 层用到的模型,保存它的一个对象。并提供相应的setter,getter
    3.使用ModelDriven:
    在创建Action 的时候,Action 实现了ModelDriven 接口,去调用接口的getModel()方法,取到了相关对象。(不常用)
    4.在Action类中获取request:
    通过这个方法ServletActionContext.getRequest()获取request。

三.struts2的运行原理:
1.tomcat 启动加载web.xml文件,并加载核心控制器StrutsPrepareAndExecuteFilter,加载并解析struts.xml
2.客户端发出请求到action,StrutsPrepareAndExecuteFilter根据后缀名拦截。
3.StrutsPrepareAndExecuteFilter根据struts.xml配置文件信息,找到指定的action方法。
4.执行相关的业务逻辑后返回字符串
5.根据返回的字符串,在struts.xml的的name属性的值,进行匹配跳转。

四.struts实现jsp跳转和重定向…
在struts.xml通过action标签中配置result标签进行页面跳转,其中result标签中的type 属性默认是dispatcher。请求方式有
(1)type=“dispatcher” 为默认(转发),用于jsp页面跳转,(数据共享) 浏览器路径不改变
(2)type=“redirect”(ruei\di\ruai\ke\de) 重定向到jsp、action、外部网址,(数据不共享)浏览器路径改变
(3) type=“redirectAction” 重定向到另外一个action
(4)type=“chain” 用于action跳转(转发)。

redirect与redirectAction区别
一、使用redirect需要后缀名 使用redirectAction不需要后缀名
二、type=“redirect” 的值可以转到其它命名空间下的action,而redirectAction只能转到同一命名空间下的 action,因此它可以省略.action的后缀直接写action的名称。

五.图片上传是如何实现的
1.图片的配置:
1)表单
1.在form表单中加入属性enctype[yi,ke,tai,pu]=“multipart[mai,nei,piu,te]/form-data” 方法必须为post
2.给一个input type类型为file 的输入框还有给name
2)配置
在struts.xml中配置设置struts2上传的文件大小,默认情况下的大小是2M
3)action接受上传的附件
1.接收图片的参数定义规则:
文件名称的接收:必须定义的是全局变量,表单中的file框中的name值加FileName;
2.接收文件内容的参数
private File photo;属性名和input中的name值一样。
2.获取项目发布的绝对路径(就是指项目发布在tomcat的路径如 d:\tomcat\car\)指定文件要保存的路径
3.构建输入流FileInputStream 加载上传的文件
4.构建输出流FileOutputStream创建一个空的输出流
5.用输入流将文件读入byte[]中,
6.用输出流将byte[]中字节流读到指定的文件中

六.hibernate{海波内特}中session{c神}中的常用方法
save():保存{色儿vu}
saveOrUpdate()保存或者修改
delete()删除
update()修改
get()根据唯一标示获取对象 立即加载
load()根据唯一标示获得对象 ,延迟加载

七.hibernate{海波奈特}运行原理(基于对象操作数据库)
1.通过configuration加载了hibernate.cfg.xml文件。
{康菲这瑞申} {海波内特}
2.加载后创建sessionFactory.(sessionFactory是线程安全的)
3.然后同sessionFactory {c神科特锐} 获得session。(创建会话,相当于jdbc中的connection 是线程不安全的)
4.通过session操作数据库,最后通过transaction(踹赛课神)来进行事物的控制.

八.hibernate的五大核心接口
1.Configuration(类):
加载配置文件hibernate.cfg.xml文件中的配置信息,从而得到:
1).hibernate的底层信息:
数据库连接,jdbc驱动,方言,用户名,密码。
2).hibernate的映射文件(*.hbm.xml)
2.sessionFactory(接口)
通过configuration创建sessionFactory。
可以用来获得session。
sessionFactory是线程安全的,
里边加载的数据信息有数据库的配置信息和映射关系.
3.Session(接口)
线程不安全。
相当于jbdc的connection.
用来操作数据库.(基于对象操作数据库)
4.Transaction(接口)
进行事物的控制实现事物的commit(提交)和rollback(回滚)
5.Query(接口)
用来执行数据库的查询操作。

九.hibernate主键生成策略:
1)increment(银科瑞门特) :先选出当前表的最大ID,在此基础上加1,hibernate会自行处理,适用于int short,long类型的主键
2)sequence:oracle数据库会自行处理,会增加一个序列配置为:

sequence_id

3)assigned(爱字三恩的):人工指派不给的话会报错。
4)native(通用多个数据库,数据库的本地生成策略)
5)uuid:生成一个32的,不重复的字符串,可以达到夸数据库。

十.jdbc和hibernate的区别。
hibernate是JDBC的轻量级封装,hibernate基于jdbc
jdbc:
jdbc是纯手工的原生sql语句
执行效率高于hibernate
jdbc可以直接操作数据库的表如:select * from 表名
hibernate:
hibernate是全自动
跨数据
开发效率高于jdbc
使用的是hql语句最终会转化为sql语句.语法是 from 对象名

十一.hibernate中query的常用方法。
1)excuteUpdate():用于hql语句的执行修改和删除
2)uniqueResult():返回单条记录
3)setFirstResult():设置分页时的查询开始下标
4)setMaxResults():设置每页条数
5)list():方法返回查询结果集

十二.get和load的区别
1)load是延迟加载,查询是不会立即发送sql语句,当访问是对象时发送sql语句,访问实体不存在时返回(对象不存在异常),如果设置了lazy=“false”,load就不再进行延迟加载
2)get立即加载 查询时立即发送sql语句,当访问实体不存在时返回null

十三.hibernate配置多对一操作和一对多
重点是找外键以及外键关联的主键。在外键所在的表对应的映射文件中增加many-to-one,在主键所在的表对应的映射文件中配置one-to-many
如下:
多对一:(many-to-one)

参考可以不背)
里边需要四个属性
1.name属性可以自定义,但是必须在对应实体类中创建,属性的数据类型和class配置的对象一致。
2.class:指明该外键对应主键所在对象。就会自动与该对象的主键建立主外键关系。
3.column:外键对应的字段名。
4.lazy=“false” 关闭延迟加载,开启立即加载。

一对多
1)在one的一方配置set集合,指向多的一方的实体bean,并指明外键,关闭延迟加载lazy=“false” 配置级联操作cascade=“all”

//指明外键

//指向多的一方的shitibean


十四.分页是如何实现的
1.需要新建一个分页工具bean
2. 在dao层需要两个方法分别统计总条数和查询当前分页数据
3.在service(ser\vei\si)类中的操作
1.)调用dao层统计方法统计总条数
2.)通过总条数去创建分页工具bean,从而得到总页数,开始下标
3.)调用查询分页数据方法出入的参数为分页bean
4.dao层的方法注意事项
1.)统计方法: query.uniqueResult();返回一条数据只能用Long进行强转
2.)查询分页数据方法
// 用于分页传的值为开始下标
query.setFirstResult(page.getStartPos());
// 用于分页传的值为每页条数
query.setMaxResults(page.getPagesize());

十五.分页工具bean中的属性
PageModel需要的属性
(1)总条数 totalNum (select count() from 对象名)
(2)总页数 if(totalNum%pageSize==0){
this.pageTotal = totalNum/pageSize;
}else{
this.pageTotal = totalNum/pageSize+1;
}
(3)每页条数 pageSize=3 (自己定)
(4)当前页 pageNow=1 (是从前台jsp获取的)
(5)开始下标: startPos((pageNow -1)
pagesize )
(7)需要一个计算方法
(8)加了一个存放数据列表的list

十六.java的面向接口开发:
1.接口的概念:java中,接口是一个特殊的抽象类,接口里面的所有方法都是抽象方法,所有属性都是常量。
只定义了方法,但是没有方法的具体实现。
2.接口的思想:接口的思想是指将外部的调用和内部的实现隔离开来,也就是“封装隔离”
3.接口的好处:因为接口将外部的调用和内部的实现隔离开来,所以当改变内部的但是没有改变接口,
这样就不会对外部的应用有所影响。让系统变得更加灵活。
十七.Spring 的核心是啥:控制事物,增强代码
spring的核心ioc的控制反转,DI的依赖注入,AOP的面向切面编程。
DI依赖注入: 处理对象间的依赖关系
依赖注入的方式有:
常用的有:属性注入(也就是setter方法注入),构造函数注入。
不常用的:接口注入

十八.IOC的概念:
IOC也称控制反转,就是把原先控制代码对象的生产由代码转换到IOC容器中去实现。作用是为了解耦,降低类之间的耦合度,其设计思想就是设计模式的工厂模式,我们并不需要知道其生产的具体过程,我们只要其产出的对象即可。其工作流程就是:在Spring容器启动的时候,Spring会把你在applicationContext.xml中配置好的bean都初始化,在你需要调用的时候,把已经初始化的bean分配给你要调用这些bean的类,而不用去创建一个对象的实例。

十九.AOP的理解
AOP:面向切面编程是软件编程思想发展到一定阶段的产物,是面向对象编程(OOP)的有益补充。AOP一般适用于具有横切逻辑的场合,如安全控制、事务管理、日志记录、性能统计等。面向切面编程简单地说就是在不改变源程序的基础上为代码段增加新的功能,对代码段进行增强处理。
AOP的代理通过JDK动态代理,也可以通过CGLIB实现,默认是通过JDK动态代理实现的。JDK动态代理需要接口的支持,如果没有接口只有类,则使用CGLIB实现。

二十.spring 的优点?
1)依赖注入(DI)方法使得javabean中的依赖关系一目了然
2)IOC容器更轻量级使用了单例,节约内存。………
3)iOC控制反转技术实现了解耦。对象通过spring容器管理,不用再程序中实例化。
4)集成了相应的组件,让测试更方便。
5)aop可以在不修改业务代码的情况下,增加新的功能。如日志,登录拦截,事务管理,统计分析,安全认证。
Mvc
MVC是一种架构模式MVC是一种软件架构模式,
在MVC模式中,应用程序被划分为模型层(Model)/视图层(View)/控制层(Controller).MVC就是把应用程序按照业务逻辑、视图、数据进行分离分层组织代码。
M:模型:模型是应用程序的主体部分,表示业务数据和业务逻辑
V:视图就是用户看到的那一部分(jsp、html)
C:控制器:用来处理用户请求的(servlet,action)
二十一.SSH是如何搭建的。
首先我们的SSH 框架是struts2,hibernate3,spring3.2.5.
(1)导入jar包。
(2)在web.xml中配置struts2的核心控制器(struts prepare And Execute Filter),导入struts的核心配置文件。
(3)将hibernate的核心配置文件hibernate.cfg.xml导入到项目中,同时新建映射文件,将数据库中的表和字段与实体类一一对应。
(4)配置spring,在web.xml中配置spring的监听。导入spring的核心配置文件applicationContext.xml到项目中。

配置action, service, Dao 各层的依赖注入关系。
声明session Factory,同时将hibernate.cfg.xml文件注入到session工厂中。声明事物 (transcation Manager)和事物的传播特性。并配置AOP进行事物的管理。

二十二.你们用AOP是如何管理事物的(你们事物是咋配置的啊,管理的)
AOP管理的是数据库的事务。
首先在spring的配置文件中配置sessionFactory,并加载数据库的连接信息,
声明事物transactionManager,并且反射到session工厂。
配置事物的传播特性,以add,insert,delete等开头的执行增删改操作的方法必须开启事物以及事物的回滚,其他方法走的是只读事物。
将事务交给aop进行管理,我们用aop横切的是service层。

二十三.hashMap和hashTable的区别
hashMap不是线程安全的,hashtable是线程安全的。
hashMap允许空的键和值,hashtable不允许。
hashmap性能优于hashtable

二十四.jq的选择器,常用属性和事件
一。选择器
1)KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲id") …(".class") class选择器
3) ( " [ 属 性 = 属 性 值 ] " ) 属 性 选 择 器 4 ) ("[属性=属性值]") 属性选择器 4) ("[=]")4)(“标签名称”) 标签选择器
5 符合选择器

二。常用属性
attr():给标签增加属性
css():给标签增加样式
prop():多用于给单选和复选框以及下拉框被选中
append():给网页中追加子标签
html():获得网页指定标签的文本内容,也可赋值
val():获取表单中的文本框的值,也可赋值.

三.常用事件(说五个)
.click(function(){}) 点击事件
Ready() 写法一 ( d o c u m e n t ) . r e a d y ( f u n c t i o n ( ) ) 写 法 二 (document).ready(function(){}) 写法二 (document).ready(function())(function(){})页面加载事件
.blur(function(){})失去焦点事件
.change(function(){})内容改变事件
.focus(function(){})获得焦点事件
.dblclick(function(){})双击事件

二十五:ajax的介绍
Ajax的优点 的优点:
(1)提高用户体验度(UE)
(2)提高应用程序的性能
(3)异步加载
(4)进行局部刷新
ajax的常用属性和解释
$.ajax({基于类传的值
url:配置请求路径,
type:发送请求方式默认为get,
dataType:期望的返回值类型配置有text和json,
data:{}发送请求是传递的参数,写法(4{“name”:name,“pwd”:pwd}),
async:true或者false异步加载的开启或者关闭
success:function(result){
后台请求访问成功的回调函数
},
error:function(){
后台请求访问失败的回调函数
}
})

二十六.常见技能常识
1)struts的上传默认的文件大小为2M
2)web的mvc三层结构中的mvc指:model,view,controller
3)SSH是struts2,spring,hibernate的简拼
4)实现拦截器的三种方式:
(1) 实现接口Interceptor(yin te sai pu te)
(2) 继承抽象类AbstractInterceptor 重写doIntercept方法
(3) 继承MethodFilterInterceptor类
5)struts2框架的原名是 webwork2

二十七. Get和Post的区别
1.get是从服务器上获取数据,post是向服务器传送数据,
2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
4.在进行文件上传时只能使用post而不能是get。

二十八.StringBuffer StringBuilder String 区别
StringBuffer:线程安全的可变序列,效率低
StringBuilder:线程不安全的可变序列,效率高于StringBuffer和String
String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象StringBuffer和StringBuilder都是可变的,当进行字符串拼接时采用append方法,在原来的基础上进行追加,所以性能比String要高

二十九.接口和抽象类的区别
1.抽象类可以提供成员方法的实现细节,而接口中只能存在抽象方法(默认 public abstract)
2.抽象类中的成员变量可以是多种类型,而接口中的成员变量必须用public static final(常量)修饰
3.一个类只能继承一个抽象类(单继承),但可以实现多个接口(多继承)。
4.抽象类中允许含有静态代码块和静态方法,而接口类不能。

三十. forward和redirect的区别
(1)forward(转发):
1.是服务器内部的重定向,客户端浏览器的网址是不会发生变化的。
2.关于request: 由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。
(2)redirect(重定向):
1.是客户端的重定向,浏览器中显示的url网址会发生变化。
2.因为这种方式比forward多了一次网络请求,因此效率会低于forward。

事物的传播特性
Propagation

Required 需要 如果存在一个事务,则支持当前事务。如果没有事务则开启

Supports 支持 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行

Mandatory 必要的 如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

required_new 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。

Not_support 总是非事务地执行,并挂起任何存在的事务。

Never 绝不 总是非事务地执行,如果存在一个活动事务,则抛出异常

Nested 嵌套的 如果有就嵌套、没有就开启事务
————————————————
三十一:
工厂模式(spring的依赖注入),单例模式,代理模式,观察者模式,门面模式(hibernate的hibernateTemplete)建造者模式

三十三.什么是事物?
1.所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败的时候,整个事务回滚,只有全部正确才完成提交
2.事务的四大特性ACID
(1)原子性(Atomicity)
①原子性是指事务是一个不可分割的工作单位,事务的操作要么都发生要么都不发生
(2)一致性(Consistentcy)
①事务必须使数据库从一个一致性状态到另一个一致性状态
(3)隔离性(Isolation)
①一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
(4)持久性(Durability)
①指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

三十四:单例手写.

  1. (什么是单例)单例只能实例化一个对象
    特点:[ 1,私有的静态属性
    2,私有的构造函数
    3,共有的静态方法]

  2. 饿汉式
    public class Singleton1 {
    /** 饿汉式是在声明的时候就已经初始化Singleton1,确保了对象的唯一性 /
    /
    声明的时候就初始化对象会浪费不必要的资源* */
    private static Singleton1 instance = new Singleton1();
    私有的静态属性
    private Singleton1() {
    私有的构造函数
    }
    // 通过静态方法或枚举返回单例对象
    public Singleton1 getInstance() {
    共有的静态方法
    return instance;
    }
    }

  3. 懒汉式
    public class Singleton2 {
    private static Singleton2 instance;
    private Singleton2() {
    }
    /** getInstance 添加了synchronized 关键字,也就是说 getInstance 是一个同步方法, * 这就是懒汉式在多线程中保持唯一性的方式* * 懒汉式存在的问题是,即是instance已经被创建,每次调用getInstance方法还是会同步,这样就会浪费一些不必要的资源* */
    public static synchronized Singleton2 getInstance() {
    if (instance == null) {
    instance = new Singleton2();
    }
    return instance;
    }
    }

三十五:hibernate的三种状态
transient’trænzɪənt:
在创建对象即在new之后,在save之前的状态:
session中和数据库中都不存在该数据
persistentpə’sɪst(ə)nt:
在save之后,session关闭之前,
session中和数据库中都存在对应的数据
detacheddɪ’tætʃt:
session关闭之后,session不存在,数据中有对应的数据

三十六:Web 项目的 三层架构:
控制 业务逻辑 持久
MVC设计模式:
M:model 模型层
V:view 视图层
C:control 控制层
是一种将模型层、视图层与控制层的业务进行分离的设计模式,提高了代码的可读性与重用性。
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
后台分层:控制层、业务层、持久层

三十七:list 、set以及Map(括号内的内容只需要了解)
一、List 实现了collection接口<有序可重复集合>
1.可以允许重复对象
2.可以插入多个null值
3.有序容器,保持每个元素的插入顺序,输出顺序和插入顺序一致
4.常用实现类ArrayList、LinkedList以及Vector

二、Set 实现了collection接口<无序不可重复集合>
1.不允许重复对象
2.只允许一个null元素
3.无序容器,无法保证每个元素的存储顺序
4.常用实现类 HashSet(基于HashMap实现)、LinkedHashSet以及TreeSet(特殊 实现了SortedSet接口 因此可以视为 通过compare()和compareTo()方法实现排序的有序容器)
三、Map 未实现collection接口 即 非collection子类
1.Map中每个entry中都持有两个对象一个是键对象、一个是值对象。通过键-值对的形式持有数据 其中值对象可能相同 但是键对象必须唯一
2.允许随意多个null值 但是null键只能唯一
3.常用实现类HashMap、HashTable

二月份

  1. JDBC操作数据库的实现步骤及其主要代码
    –(1)导jar包
    –(2)加载驱动为数据库连接做准备 关键字:Class.forName
    –(3)连接数据库 关键字:DriverManager.getConnection
    –(4)写sql语句
    –(5)创建数据库操作对象 关键字:preparestatement
    –(6)执行sql语句 关键字:executeupdate/executequery
    –(7)关闭连接释放资源 关键字:.close

一月份
1.方法重载(overload)
在同一个类,方法的名称相同,参数的个数,顺序,类型至少有一个不同,那么就构成了方法的重载,方法的重载与返回值类型和修饰符无关

2.重写,覆盖(overwrite)
1.重写发生在继承关系中;
2.在子类中重写父类的方法
3.要求子类中的方法的方法名和参数列表和返回值类型必须与父类中的完全一致
4.子类不能重写父类的私有方法private和静态static
5.子类重写父类的方法时,不能抛出比父类更大的异常
6.子类重写父类的方法时,访问权限不能小于父类
7.当父类的方法无法满足子类的需求时,我们通常在子类里重写父类的方

3.手写冒泡(从小到大)
for (int i = 0; i for(int j = 0; j if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j+i]= arr[j];
arr[j+1] = temp;
}
}
}

你可能感兴趣的:(poi)