初级程序员面试经典题目(大串烧 含答案)

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渲染视图之后请求结束。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值