今天又到面试了一场,瞬间感觉自己知识不够用,自己以前的东西差不多全部忘记了,真的是坑爹!
1.servlet与filter区别
答:Filter不能向用户生成响应,完整的流程是:filter对用户请求进程预处理,接着将请求交给servlet进行处理并生成响应,最后filter再对服务器响应进行后处理。
2.mybatis中的$与#区别
答:1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #id#,那么传递的是111,那么解析sql时的值为order by “111”;而$将传入的数据直接显示生成的在sql中。如:order by $user_id$,如果传递的是111,那么解析成sql的值为order by user_id
2.#方式可以防止sql注入;而$无法防止sql注入;
3.jsp内置对象
答:九大内置对象 : request ,response,pageContext ,session,application,out,config,page,exception
4.jdbc连接数据库步骤是哪些?
答:1.加载jdbc驱动程序 2.提供jdbc连接的URL 3.创建数据库连接 4.创建一个statement 5.执行sql语句 6.关闭jdbc对象
5.hibernate连接数据库步骤?
答:1.加载配置文件 2.获得sessionfactory 3.创建session对象 4.创建事务 5.操作 6.提交回滚 7.释放资源
6.doGet与doPost区别?
答:不同点一:通过get方式提交数据有大小限制,通常是1024字节左右;而post没有数据大小限制
不同点二:通过get传递数据,实际上是将传递的数据按照“key”,“value”的方式跟在URl的后面来达到传递数据的目的;而post传递数据在URl中并没有明文显示。
7.spring中属性scope的prototype
答:scope=‘prototype" 的bean容器在接受到该类型的对象请求的时候,会每次重新生成一个新的对象给对方。
scope=‘singleton’ 的bean是由容器来保证这种类型的bean在同一个容器内只存在一个共享实例。
8.spring传播行为
答: required :表示当前方法必须在一个具有事务的上下文运行,如有客户端有事务在进行,那么被调用端将在事务中运行,否则的话重新开启一个事务(如果被调用端发生异常,那么调用端与被调用端都将回滚)。
supports :表示当前方法不必需要具有一个事务上下文,但是如果有一个事务的话,它也可以在这个事务中运行。
mandatory :表示当前方法必须在一个事务中运行,如果没有事务,将抛出异常
nested :表示如果当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务可以独立于被封装的事务中进行提交或回滚。如果封装事务存在,并且外层事务抛出异常回滚,那么内层事务必须回滚。反之,内层事务并不影响外层事务。如果封装事务不存,则同required的一样。
never :表示当前方法不应该存在一个事务中运行,如果存在一个事务,则抛出异常。
requires_new :表示当前方法必须运行在它自己的事务中。
not_supported:表示该方法不应该存在一个事务中运行
9.springmvc工作原理
答:当用户发送一个请求时,1.首先请求提交到dispatcherservlet,2.由dispatcherservlet控制器查询一个或多个handmapping,3.找到相应的处理controller,4.controller调用业务逻辑处理后,返回相应的modelandview 及视图。
10.mysql索引有哪些,何时使用索引,何时不使用索引 ?
答:1.普通索引 2.唯一索引 3.主键索引 4.组合索引
注意:
并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引,索引占用磁盘空间,并且降低添加,删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势远远大于它的不足之处
何时使用索引
1.当使用不以like开头的通配符
2.在进行联结时从另一个表中提取行时
3.在where中出现列需要建立索引
何时不使用索引
1.如果mysql能估计出它将可能比扫描整张表还要快
2.如果使用以通配符开始like
3.搜索一个索引而在另一个索引上做order by
10.servlet生命周期
1.初始化阶段 调用init方法 2.响应用户请求阶段 调用service方法 3.终止阶段 调用destroy()方法
servlet初始化阶段:
在下列时刻servle容器装载servlet:
1.servlet容器启动时自动装载某些servlet,实现它只需要在web.xml文件中的<servlet></servlet>之间添加如下代码啊啊:<loadon-startup>1</loadon-startup>
2.在servlet容器启动后,客户首次向servlet发送请求
3.servlet类文件被加载后,重新装载servlet
servlet被装载后,servlet容器创建一个servlet实例并且调用servlet的init方法进行初始化,在servlet的整个生命周期内,init()方法只被调用一次。
11.servlet工作原理
首先客户发来一个请求,servlet是调用service()方法进行响应的,service()方法中请求的方法进行匹配,选择调用doget,dopost方法,然后在进行对应的方法中调用逻辑层的方法,实现对客户响应。
12.过滤器与拦截器的区别:
1.拦截器是基于java的反射机制的,而过滤器是基于函数调用
2.拦截器不依赖servlet容器,而过滤器依赖
3.拦截器只对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4.拦截器可以访问action上下文,而过滤器不能。
5.在action的声明周期中,拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次。
13.arrayList查询效率快,增删速度慢原理?
因为arrayList底层是数组实现的,根据下标查询不需要比较,查询方式为,首地址+(元素长度*下标),基于这个位置读取相应的字节数就可以了,所以非常快;
增删会带来元素的移动,增加数据会向后移动,删除数据会向前移动,所以影响效率。
14.set去重原理?
set里元素是不能重复的,用iterator()方法来区分重复与否。
15.创建事务的时机
是否需要创建事务,是由事务传播行为控制的。读数据只为其指定只读事务,而数据的插入,修改,删除就需要进行事务管理,1,这就是由事务的隔离级别控制的。
16.spring隔离级别有哪些?
1.serializable:最严格的级别,事务串行执行,资源消耗最大。
2.repeatable_read:保证了一个事务不会修改已经由另一个事务读取但未提交的数据。避免了“脏读取”和“不可重复读取”的情况。
3.read_committed:大多数主流数据库的默认事务级别,保证了一个事务不会读到另一个事务已修改但未提交的数据,避免了“脏读取”
4.read_uncommitted:保证了读取过程中不会读取到非法数据。
17.java中存在四种内部类:常规内部类,静态内部类,局部内部类,匿名内部类
一:常规内部类:常规内部类没有用static修饰并且定义在外部类类体中。
public class A{
class B{
private String name="";
}
public class c(){
//在外部类方法中创建内部类实例
B b=new B();
}
}
二:静态内部类:与类的其他成员类似,可以用static来修饰内部类,这样的类就称之为静态内部类。
public class A{
public static class B{
private String name="";
}
}
三:局部内部类:在方法体或语句块(包括方法,构造方法,局部块或静态初始化块)内部定义的类成为局部内部类。局部内部类不能加任何访问修饰符,因为它只对局部块有效。
public class A{
public void make(){
class B{
}
}
}
四:匿名内部类:定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一次,则可以将类的定义与类的创建,放到与一起完成,或者说在定义类的时候九车间一个类,以这种定义的没有名字的类成为匿名内部类。
new A(){
//类体
}
注意:
1.匿名内部类可以继承一个类或实现一个接口,但匿名内部类不能同时实现一个接口和继承一个类,也不能实现多个接口。如果实现了一个接口,该类是object类的直接子类,匿名类继承一个类或实现一个接口,不需要extends 或implements关键字。
2.由于匿名内部类没有名称,所以类体中不能定义构造方法,由于不知道类名,所以也不能创建该类实例。
18.collection与collections的区别?
答:collection是集合类的上级接口,继承与他的接口主要是set,list
collections是针对集合类的一个帮助类,它提供一系列静态方法实现各种结合的排序等操作。
19.数组中有没有length()方法?string有没有length()这个方法?
答:数组中没有length()方法,而string有。
20.error和exception有什么区别?
error表示恢复不是不可能但是很困难的情况下一种严重的问题,比如说内存溢出
exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从来不会发生的情况。
21.接口是否可以继承接口,抽象类是否可实现接口?抽象类是否可继承实体类?
可以,可以,主要是看实体是否有构造方法