面试点滴(二)

来源:互联网 发布:psd文件打开软件 编辑:程序博客网 时间:2024/05/22 06:12

今天又到面试了一场,瞬间感觉自己知识不够用,自己以前的东西差不多全部忘记了,真的是坑爹!

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.接口是否可以继承接口,抽象类是否可实现接口?抽象类是否可继承实体类?

可以,可以,主要是看实体是否有构造方法


2 0
原创粉丝点击