SSH简答题汇总.docx
- 文档编号:23958474
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:19
- 大小:483.59KB
SSH简答题汇总.docx
《SSH简答题汇总.docx》由会员分享,可在线阅读,更多相关《SSH简答题汇总.docx(19页珍藏版)》请在冰豆网上搜索。
SSH简答题汇总
Java基础题
java中多态的描述?
面向对象编程有四个特征:
抽象,封装,继承,多态。
多态有四种体现形式:
1.接口和接口的继承。
2.类和类的继承。
3.重载。
4.重写。
其中重载和重写为核心。
重载:
重载发生在同一个类中,在该类中如果存在多个同名方
法,但是方法的参数类型和个数不一样,那么说明该方法被重
载了。
重写:
重写发生在子类继承父类的关系中,父类中的方法被子
类继承,方法名,返回值类型,参数完全一样,但是方法体不
一样,那么说明父类中的该方法被子类重写了。
Instanceof
java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。
instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result=objectinstanceofclass
参数:
result:
布尔类型。
object:
必选项。
任意对象表达式。
class:
必选项。
任意已定义的对象类。
说明:
如果object是class的一个实例,则instanceof运算符返回true。
如果object不是指定类的一个实例,或者object是null,则返回false。
List,set,collection,collections的区别
1.List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合。
Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。
2.List接口实现类有ArrayList,LinkedList,Vector。
ArrayList和Vector是基于数组实现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢LinkedList是基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候速度较快。
又因为Vector是线程安全的,所以他和ArrayList相比而言,查询效率要低。
JavaWeb
servlet的生命周期?
加载并实例化---初始化---提供服务---销毁
转发与重定向的区别
1)转发使用request,而重定向使用response
2)转发url不会发生变化,重定向url会发生变化
3)转发可以携带参数,重定向不可以携带参数
4)转发是服务器端跳转,重定向是客户端跳转
5)转发只能在本项目内跳转,重定向可以跨域跳转,且可以访问别的网页或者项目
6)转发中的路径前面可以加上“/”,表示从项目的根目录下去寻找,而重定向时候的路径前面绝对不可以加上“/”,因为重定向的路径前面加上/表示在服务器的根目录下寻找,即在tomcat的根目录下寻找,就会丢失项目名称,发送404错误
请写出用jdbc连接数据库的过程,以及伪代码
1.加载驱动
Class.forName(“oracle.jdbc.driver.OracleDriver”);
2.创建连接
Connectioncon=DriverManager.getConnection(“URI”,”name”,”pass”);
3.取得语句对象
Statementstmt=con.createStatement();
4.发送sql命令
stmt.executeUpdate(“sql语句”);
5.关闭数据库
stmt.close();
con.close();
传参数的方式有哪些?
至少3种
(1)url?
参数名=参数值&参数名=参数值传参
(2)提交form表单传递参数
(3)Ajax发送请求传参数
{
“参数名”:
参数值,
“参数名”:
参数值
}
(4)restful风格传参数url/参数值
简述在form的action中的路径前面什么都不加,加上/,加上./和加上../的区别
1、什么都不加,当前目录下
2、加上/服务器的根目录,即tomcat的根目录,丢失项目名称(不可以使用)
3、./当前目录,等于1
4、../上一级目录
Session和cookie的区别?
session是存储在服务器端,cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的。
又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间,然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过sessionid获取的,而sessionid是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在。
那么,session在什么情况下丢失,就是在服务器关闭的时候,或者是sessio过期,再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法,然后session在什么时候被创建呢,确切的说是通过调用session.getsession来创建,这就是session与cookie的区别
Struts
Strtus2的运行原理
1、tomcat启动的时候会加载web.xml、核心控制器FilterDispatcher会加载并解析struts.xml
2、客户端会发送一个请求到action、FilterDispatcher会根据后缀名进行拦截
3、FilterDispatcher根据struts.xml的配置文件信息找到某个action对应的某个类里的指定方法
4、执行相关的业务逻辑最后返回一个String
5、
简述什么是MVC
MVC中M表示Model模型层V代表View试图层C代表Controller控制器
MVC即模型-视图-控制器.MVC是一种设计模式,它强制把应用程序的输入处理和输出分开.视图是用户看到并与之交互的界面。
视图向用户显示相关的数据,并能接受用户的输入,但是它并不进行任何实际的业务处理。
模型是应用程序的主体部分。
模型表示业务数据和业务逻辑。
控制器接受用户的输入并调用模型和视图去完成用户的需求
Struts1和Struts2的区别?
(1)Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,
struts1严重依赖于servletAPI,属于侵入性框架,
struts2不严重依赖于servletAPI,属于非侵入型框架。
(2)线程模型方面:
Struts1的Action是单实例的,一个Action的实例处理所有的请求。
Struts2的Action是一个请求对应一个实例(每次请求时都新new出一个对象),没有线程安全方面的问题
(3)封装请求参数:
Struts1中强制使用ActionForm对象封装请求的参数。
Struts2可以选择使用POJO类来封装请求的参数,或者直接使用Action的属性。
(4)struts1的前端总控制器(核心总控制器)为ActionServlet,
struts2的前端总控制器(核心总控制器)为FilterDispather
简述搭建Struts2框架的步骤
1、创建webProject
2、项目中导入必须的几个jar
3、在web.xml中配置核心控制器StrutsPrepareAndExecuteFilter
4、在src(classpath)下添加配置struts.xml文件
5、开发Action类,并配置到struts.xml内
6、测试流程
5种以上resulttype类型
dispatcher、chain、redirect、redirectAction、stream、freemarker、velocity、plainText
struts2中默认属性如何配置?
2种
例如后缀名配置为.do
(框架后缀名默认为:
struts.action.extension=action,,)
1、在struts.xml标签内使用常量标签
2、在classpath下自定义struts.properties文件配置属性
struts.action.extension=do
struts2自定义拦截器开发流程?
1、开发一个拦截器类:
实现Interceptor接口或继承AbstractInterceptor类,
在intercept方法内实现拦截功能。
2、定义拦截器:
在struts.xml配置文件的package标签内使用
3、在需要使用该拦截器的Action类的
4、当Action内引用了自定义拦截器后,默认拦截器栈需要手动引用。
Struts2获取request三种方法?
(1)通过ServletActionContext类来获取
HttpServletRequestrequest=ServletActionContext.getRequest();
(2)通过ActionContext实例来获取
Maprequest=(Map)ActionContext.getContext().get("request");
该Map类型的request对应HttpServletRequest实例
(3)通过ServletRequestAware接口通过IOC机制注入Request对象
Action实现ServletRequestAware接口,实现接口中的方法
publicclassXXXActionimplementsServletRequestAware{
privateHttpServletRequestrequest;
//实现接口中的方法
publicvoidsetServletRequest(HttpServletRequestrequest){
this.request=request;
}
publicStringexecute(){
//可以使用request实例
}
}
struts2如何防止用户表单重复提交?
1. 第一步:
在表单中加入 token /> 2. 第二步,使用token栏截器 3.定义 Hibernate Hibernate中级联的关键字以及可选的配置项? Cascade: all: 代表在所有的情况下都执行级联操作 none: 在所有情况下都不执行级联操作(默认值) save-update: 在保存和更新时执行级联操作 delete: 在删除时执行级联操作 分页 每页10条数据,显示第10页数据,则分别使用Hibernate分页以及mysql的分页完成? Hibernate: setFirstResult(90) setMaxResults(10) Mysql: Select*from表limit90,10; 事务的概述? 在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。 当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。 事务的ACID属性 1.原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生, 要么都不发生。 2.一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。 (数据不被破坏) 3.隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被其他事务干扰. 4.持久性(Durability) 持久性是指一个事务一旦被提交, 它对数据库中数据的改变就是永久性的. 在JDBC中, 事务默认是自动提交的, 每次执行一个SQL语句时,如果执行成功, 就会向数据库自动提交,而不能回滚 为了让多个SQL语句作为一个事务执行: (1)执行语句前调用Connection对象的setAutoCommit(false); 以取消自动提交事务 (2)在所有的SQL语句都成功执行后,调用commit();方法提交事务 (3)在出现异常时,调用rollback();方法回滚事务。 简述Hibernate运行原理 首先通过configuration去加载hibernate.cfg.xml这个配置文件,根据 配置文件的信息去创建sessionFactory,sessionFactory是线程安全的, 是一个session工厂,用来创建session,session是线程不安全的,相当于 jdbc的connection,最后通过session去进行数据库的各种操作,在进行操作 的时候通过transaction进行事务的控制。 hibernate持久化操作的步骤和伪代码 简述Hibernate对象的三种状态以及对各种状态的描述? Transient(临时状态): 在new之后,save之前,数据库没有对应的数据 Persistent(持久化状态): 在save之后,在session关闭之前, 数据库有相对应的数据 Detached(脱管状态/游离状态): 在session关闭之后 简述Jdbc和Hibernate中是如何操作事务的? 在JDBC中, 事务默认是自动提交的, 每次执行一个SQL语句时,如果执行成功, 就会向数据库自动提交,而不能回滚 为了让多个SQL语句作为一个事务执行: (1)执行语句前调用Connection对象的setAutoCommit(false); 以取消自动提交事务 (2)在所有的SQL语句都成功执行后,调用commit();方法提交事务 (3)在出现异常时,调用rollback();方法回滚事务。 在hibernate中 开启事务session.beginTransaction(); 执行相关的操作,如果成功则session.getTransaction().commit(); 执行操作失败则session.getTransaction.rollback(); Hibernate的5大核心接口? Configuration SessionFactory Session Query Transaction Hibernate的两大配置文件,以及描述各个配置文件所配置的内容 1.*.hbm.xml: 1.类和表的对应关系 2.类里面的属性和表里面字段的对应信息 3.映射关系(one-to-one,one-to-many,many-to-one,many-to-many) 4.主键生成策略 2.hibernate.cfg.xml: 1.Hibernate运行的底层信息: 数据库连接信息、JDBC驱动、数据库Dialect(方言)等。 2.Hibernate映射文件(*.hbm.xml) 每页显示5条数据,取出第三页数据,则使用Hibernate进行分页? setFirstResult(10) setMaxResults(5) ORM概述? (ObjectRelationMapping)对象关系映射,其中的O指的是java对象,R指的关系型数据库,M指的是在java对象和关系型数据库之间建立起来的映射关系。 关系型数据库: mysqloraclesqlserver ORM这种思想下的具体技术实现包括Hibernate,Ibatis,JPA Hibernate中有哪几种映射关系(并写出对应的英文)? 一对一: 一对多: 多对一: 多对多: Hibernate的五种检索策略(查询方式),并解释描述 OID查询: 通过get和load方法加载指定的OID对象 HQL查询: 通过Query接口使用HQL语言查询 QBC查询: 通过Criteria等接口和类进行查询 SQL查询: 通过原生sql语言进行查询 对象导航查询: 通过已经加载的对象,导航到其关联的对象 hibernate的get和load的区别(最少写出四点) 1、通过主键去查询没值时候: get返回null,load抛异常 2、检索策略: get立即加载,load延迟加载 3、返回结果: get返回实体,load返回代理 4、检索机制: get查询去一级缓存,若是一级缓存没有直接去数据库查询,load去一级缓存查询,没有去二级缓存,二级没有再去数据库查询 谈谈你对hibernate事务的理解 1、hibernate对jdbc实现了轻量级的封装,本身并不具备事务管理的能力 2、hibernate的事务其实是依赖与底层的jdbc或者jta,或者说hibernate将事务交给jdbc或者jta来托管 3、hibernate在与Spring集成之后将事务交给了Spring去管理 简述hibernate中的query.list和query.iterate的查询机制的不同点 List: 查询一次,从数据库检索出所有符合条件的记录,包括全部字段 Iterate: 首先从数据库中检索出所有符合条件的记录,仅包含id字段 如果缓存中包含全部数据,则不需要在查询数据库,直接引用(1+0规则) 如果缓存中不包含任何数据,则需要再查询n次(1+n规则)(n指的是记录数) hibernate的query查询中只需要查询出实体中的某两个属性的值,且返回的是实体的list,请问使用什么查询方式,并简述操作步骤 使用构造器查询方式 步骤: 1、需要在实体类中创建需要查询的两个属性的构造器,并且创建一个无参构造器 2、书写hql语句selectnew实体(属性1,属性2)from属性名 Hibernate的主键生成方式,并简单描述? 5种以上 1)assigned 主键由外部程序负责生成,无需Hibernate参与。 2)increment 主键按数值顺序递增。 此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。 这种方式可能产生的问题是: 如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。 因此,如果同一数据库有多个实例访问,此方式必须避免使用。 3)identity 采用数据库提供的主键生成机制。 如DB2、SQLServer、MySQL中的主键生成机制。 4)sequence 采用数据库提供的sequence机制生成主键。 如Oralce中的Sequence。 5)native 由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。 6)uuid.hex 由Hibernate基于128位唯一值产生算法生成16进制数值(编码后以长度32的字符串表示)作为主键。 7)foreign 使用外部表的字段作为主键。 Hibernate与JDBC的区别 1、hibernate和jdbc主要区别就是,hibernate先检索缓存中的映射对象(即hibernate操作的是对象),而jdbc则是直接操作数据库. 2、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。 Hibernate可以用在任何JDBC可以使用的场合 3、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和AppServer没有任何关系,也不存在兼容性问题。 4、如果正确的使用JDBC技术,它的执行效率一定比hibernate要好,因为hibernate是基于jdbc的技术. 5、JDBC使用的是SQL语句,Hibernate使用的是HQL语句,但是HQL语句最终还会隐式转换成SQL语句执行。 说一下JDBC与iBATIS与hibernate的区别? (1)Hibernate属于全自动,Ibatis属于半自动,Jdbc属于手动 (2)从开发效率上讲hibernate较高,ibatis居中,jdbc较低 (3)从执行效率上讲hibernate较低,ibatis居中,jdbc较高,因为jdbc是手工写sql语句,程序员对sql的控制能力更大,可以根据业务需要进行优化,而ibatis虽然也可以对sql进行优化,但是他里面将resultset封装为实体的过程中采用了反射机制所以一定程度上影响了性能,而hibernate因为高度封装所以开发效率相对较高,但正因为这个原因,所以程序员在对sql语句的控制和优化方面相对比较弱,而且在将resultset封装成实体的过程中也采用了反射机制,所以在性能方面较低 Spring Aop概述? AOP是OOP(面向对象编程)的延续,是AspectOrientedProgramming的缩写,意思是面向方面编程或者面向切面编程。 AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面。 它的主要意图就要将日志记录,性能统计,安全控制等等代码从核心代码中清楚的划分出来. AOP代理可以通过jdk动态代理实现,也可以通过cglib实现,默认是通过jdk动态代理实现的。 jdk动态代理需要接口的支持,如果没有接口只有类,则使用cglib来实现. IOC概述? IOC被称为控制反转或者DI依赖注入是基于工厂设计模式,用来创建Bean实例,并且完成相关的注入。 所谓的控制反转就是将原来通过代码自己完成对象的创建(new)这种任务交给spring容器去完成。 Spring概
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH 答题 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)