javaweb面试必备知识点

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"








你可能感兴趣的:(javaweb)