1
删除表中所有记录使用delete from 表名; 还是用truncate table 表名;
删除方式:delete 一条一条删除,不清空auto_increment记录数。
truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
2
DOM解析XML
* 在内存中形成树状结构
* 缺点:如果文档过大,容易产生内存溢出的问题。
* 优点:方便做增删改的操作
SAX解析
* 基于事件驱动,边读边解析
* 优点:不会产生内存溢出问题。
* 缺点:不能做增删改操作。(DOM4J在内存生成树状结构)
3
重定向和请求转发的区别:
重定向发送两次请求 请求转发发送一次请求
重定向不能使用request属性操作 请求转发可以使用request的属性
重定向是response的方法 请求转发是request的方法
重定向发送站外和站内的请求 请求转发只能在服务器内部发送
重定向完成后地址栏发送改变 请求转发地址栏不变
4
域对象:
servletContext
创建:项目启动的时候,为每一个项目创建一个servletcontext
销毁:项目移除的时候或者服务器关闭的时候
存放的共享的数据
request
创建:请求来的时候
销毁:响应生成的时候
存放的是一次请求的数据
session(验证码,登录)
创建:
在java中暂时认为 第一次调用request.getSession的时候
销毁:3种
服务器非正常关闭的时候
超时
手动销毁
session.invalidate()
存放的是私有的数据
通用的api
xxxAttribute
5
getAttribute()和getParameter()的区别:
第一、它们的取值不同
前者取到的对象是Object
后者取到的是String
第二、传递数据的路径不同
前者传递的数据只存在于web容器内部,在具有转发关系的web组件之间共享
后者传递的数据是从web客户端传到web服务器 代表HTTP的请求数据,用于表单或URL重定向时使用
6
jsp的内置对象(隐式对象)
在页面上可以直接使用的对象(9个)
内置对象
java类型
request
HttpServeltRequest
response
HttpServletResponse
out
JspWriter
session
HttpSession
exception
Throwable
page
Servlet(this)
config
ServletConfig
application
ServletContext
pageContext
PageContext
7
(1)事务的特性:ACID
原子性
事务中所有操作,要么全部成功,要么全部失败,事务不可切分
一致性
事务执行的前后的业务状态要和其他的业务状态保持一致.
隔离性
一个事务的执行不受其他的事务的干扰
持久性
一旦事务提交或者回滚.这些操作都要更新到数据库中
(2)不考虑隔离性的隔离性会出现的读问题:
脏读:一个事务读取到另一个事务未提交数据
不可重复读:一个事务中两次查询的结果不一致(针对的是update操作)
虚读(幻读):一个事务中两次查询的结果不一致(针对的是insert操作)
(3)数据库的隔离级别:
read uncommitted
读未提交
不能避免上面出现的问题
read committed
读已提交
能避免脏读的发生,不能避免不可重复和幻读的发生 oracle
repeatable read
重复读
能避免脏读和不可重复读的发生 不能避免幻读的发生 mysql
serializable
串行化
能避免所有的问题
安全性:
serializable > repeatable read > read committed > read uncommitted
效率 反之;
8
过滤器与拦截器的区别:
(1)拦截器是基于JAVA反射机制的(拦截器配置的都是类的全路径),而过滤器是基于函数回调的(过滤器实例是由Tomcat服务器来创建的)
(2)拦截器不依赖于Servlet容器,而过滤器依赖于Servlet容器
(3)拦截器只能对Action请求起作用(Action中的方法),而过滤器可以对几乎所有的请求起作用(CSS JSP JS)
(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
(6)拦截器可以获取IOC容器中的各个bean,而过滤器就不行
9
多线程:
(1)继承Thread
* 好处是:可以直接使用Thread类中的方法,代码简单
* 弊端是:如果已经有了父类,就不能用这种方法
(2)实现Runnable接口
* 好处是:即使自己定义的线程类有了父类也没关系,因为有了父类也可以实现接口,而且接口是可以多实现的
* 弊端是:不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方法,代码复杂
sleep和wait的区别:(1)sleep是让线程休眠,必须给定休眠的时间,时间到了后自动醒来,不需要唤醒,休眠时不放弃cpu的执行权
(2)wait是让线程等待,可以给时间,也可以不等时间,但是必须要唤醒才能醒来(使用notify或者notifyAll),等待时放弃cpu的执行权
10
MYSQL和ORACLE的一些区别
1. 自动增长的数据类型处理
MYSQL有自动增长的数据类型,ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,
2. 单引号的处理
MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。
3. 日期字段的处理
MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE
4. 空字符的处理
MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。
11
读已提交是Oracle默认的隔离级别
可重复读是Mysql的默认隔离级别
12
1 cookie和session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
?? 考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
?? 考虑到减轻服务器压力方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
2 什么是值栈?值栈的内部结构
13
struts2的执行流程
1、客户端发送请求
2、请求先通过ActionContextCleanUp-->FilterDispatcher
3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行
5、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类
6、ActionProxy创建一个ActionInvocation的实例
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
8、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现。
14
谈谈你知道的sql语句优化
1.建立必要的索引
2.避免对列的操作 ?(任何对列的操作都可能导致全表扫描,这里所谓的操作包括数据库函数、计算表达式)
3.避免不必要的类型转换
4.增加查询的范围限制 增加查询的范围限制,避免全范围的搜索
5.尽量去掉"IN"、"OR"