1.String StingBuffer StringBuilder的区别?
(1)基本区别:String是final修饰的不可以被改变,其他二者的对象是可以改变的。
(2)效率区别:StringBuilder>StringBuffer>String。
(3) 安全区别:StringBuffer>String>StringBuilder。
(4)相同点:三者都是来处理字符串的,三个类都是被Final修饰的,不可以被继承, StringBuilder和StringBuffer有共同的父类AbstractStringBuffer
2.数据库外连接和连接的区别?
外连接分为:左外连接(left join)和右外连接(right join),内连接又称之为:全连接(inner join)
左外连接:左表数据会全部展示出来,副表数据与左表on条件匹配的数据才会显示出来。
右外连接:右表数据会全部展示出来,副表数据与之匹配的才会显示出来,与左连接相反。
内连接:两张表的数据会全部展示出来,遵循算法是笛卡尔积,表与表之间的连接可以看做是做乘法
3.索引在什么时候使用?
索引是单独的、物理存储的对数据库表一列或多列进行排序的一种数据结构,相当于书本上的目录,可以加快查询速度,当然用物理存储的遵循以空间换时间的原则,会占用磁盘空间。在数据库中数据非常庞大(拥有百万条数据)的时候,可以通过创建索引来增加查询速度。
创建索引:CREATE INDEX 索引名 ON TABLE名(字段名)
4.视图的定义,怎样创建视图,怎样修改已经创建的视图?
视图是一个虚拟的表,是由一条select语句查询的数据组成,与真实的表一样,视图中也存在相应的增删改方法,视图不占用实际的物理空间。
创建视图:CREATE VIEW 视图名(列1,列2,.....)AS SELECT (列1,列2....)FROM .......;
修改视图:ALTER VIEW 视图名 AS SELECT........
视图增删改:与表的增删改一致,这里不再多说
5.拦截器和过滤器的区别?
拦截器(interceptor);拦截器实现接口HandlerInterceptor,重写里面的三个方法,拦截器是链式调用,一个项目中可以存在多个拦截器
(1)prehandle();这个方法在请求处理之前来调用,注意该方法的默认返回值为false,视为请求结束,不仅会使自身拦截器失效还会导致其他拦截器失效。
(2)postHandle();这个方法在prehandle();方法返回true时才会调用,该方法是等控制器方法都执行完毕,视图渲染之前来执行。
(3)afterCompletion();方法是等postHandle()方法返回true时才会执行,该方法是在整个请求结束之后,视图渲染之后拦截。
过滤器(Filter):过滤器配置比较容易,直接实现Filter接口即可,也可以通过@WebFilter注解实现特定的url拦截,Filter接口中定义了三个方法。
(1)init():该方法在容器初始化时被调用,该方法仅仅只被执行一次,该方法必须执行成功,否则拦截器将不会启用。
(2)doFilter():容器中每一次都会调用该方法,FilterChain来调用下一个过滤器。
(3)destroy();当容器销毁时会执行该方法,一般用来销毁和关闭资源,该方法执行Filter生命周期结束。
不同之处:
实现原理不同:过滤器时基于函数回调的。拦截器是基于java的反射机制
使用范围不同:过滤器是java.servlet包下的,说明他依赖于TomCat等容器,导致他只能在web项目中使用,拦截器是spring组件,并由spring容器管理,并不依赖于Taocat.
触发机制不同:过滤器是请求进入容器候但是进servlet之前进行预处理,请求结束时在servlet处理完成之后。拦截器是进servlet之后在进入controller之前进行预处理,在controller渲染视图之后请求结束。