java常见的面试题集锦(一)

1、请写一个对数组进行冒泡排序的方法。

 public static void quickSort(int[] arr) {
   int temp = 0;
   for (int i = 0; i < arr.length - 1; i++) {
      for (int j = 0; j < arr.length - i - 1; j++) {
         if (arr[j] > arr[j + 1]) {
           // 如果第j个元素比它后面的相邻的元素大的话就交换
           temp = arr[j];
           arr[j] = arr[j + 1];
           arr[j + 1] = temp;
         }
       }
    }

   //输出结果
   System.out.println(Arrays.toString(arr));
 }


 

2、请写一个单例模式

  注:单例模式有两种形式。

   一://饿汉式单例

   public class Singleton1 {
       //无参构造函数
       private Singleton1(){ }
       private static Singleton1 singleton1 = new Singleton1();
       public static Singleton1 getInstance(){
          return singleton1;
       }
     }

   二://懒汉式单例

   public class Singleton2 {
      private Singleton2(){}
      private static Singleton2 singleton2;
      public static Singleton2 getInstance(){
         if(singleton2!=null){
            singleton2 = new Singleton2();
         }
         return singleton2;
      }
   }



3、请说一下Struts2和Struts1的区别是什么?

  介绍:

  Struts2是基于WebWork的一个全新框架。

  Struts2主要改进是取代了Struts1的Servlet和Action.

  Struts2的核心框架是当作一个filter来实现其功能的,

  而Struts1是ActionServlet.然后在Action上,

  Struts1都少不了要传递Request等参数,

  还要继承Action父类,而Struts2只要实现了一个public String execute()就可以了,

  这样Action就可以实现脱离Servlet 测试.

  Struts2还提供了拦截器(Interceptot)等Struts1所没有的技术.

  区别:

   一.Struts1需要实现一个Action或DispatchAction接口,并且重写execute()方法,而Struts2就是一个普通的javaBean,

      不需要继承任何类和实现任何接口,但必须有一个execute()的方法.
  二.Struts1中的execute()方法的返回值是一个ActionForward,由它来进行页面的跳转.而Struts2中的execute()方法的返回值是一个String.
  三.Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

     Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言 --”Object Graph Notation Language” (OGNL).中文意思称:对象导航语言
  四.Struts2简化了配置文件,支持通配符的配置.Struts1和Struts2的区别还是比较大的,因为它是一个全新的框架,

    这里只例举以上几条,仅供参考.

4、请描述MVC的设计思想?

  MVC:Model、View、Controlle
  Model:JavaBean,负责业务处理和数据的处理
  View:视图层,负责数据的展示
  Controlle:控制器,负责客户端请求,调用JavaBean,进行页面的跳转。
  运行原理:

    客户端的每个请求提交到Servlet,

    Servlet得到客户端提交的表单参数,

    然后调用JavaBean中的方法进行业务处理或数据的封装,

    处理完成之后,将结果返回给Servlet,

    由Servlet根据javaBean的处理结果,进行页面的跳转.

5、请说一下什么是IOC?

  IoC就是Inversion of Control,控制反转.

  在Java开发中,IoC意味着将你设计好的类交给系统去控制,

  而不是在你的类内部控制.这称为控制反转.在JAVA WEB开发中,

  最常见且用得最多的是Spring容器其中之一的核心组件IOC,

  另外一个核实组件是:AOP(Aspect Oriented Programming),面向切面编程,

  主要是用来做声明式事务.

6、请说一下什么是事务控制?

  事务控制就是将一系列操作当成一个不可拆分的逻辑单元,保证这些操作要么都成功,要么都失败。

  在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
  事务是恢复和并发控制的基本单位。
  事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
  原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。

        一致性与原子性是密切相关的。
  隔离性(isolation)。一个事务的执行不能被其他事务干扰。

        即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,

       它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
  事务有两种操作:提交,回滚。

7、请说一下过滤器的作用?

   过滤器是一个对象,可以传输请求或修改响应。它可以在请求到达Servlet/JSP之前对其进行预处理,

   而且能够在响应离开Servlet/JSP之后对 其进行后处理。所以如果你有几个Servlet/JSP需要执行同样的数据转换或页面处理的话,

   你就可以写一个过滤器类,然后在部署描述文件 (web.xml)中把该过滤器与对应的Servlet/JSP联系起来。

   你可以一个过滤器以作用于一个或一组servlet,零个或多个过滤器能过滤一 个或多个servlet。

   一个过滤器实现java.servlet.Filter接口并定义它的三个方法:

     1. void init(FilterConfig config) throws ServletException:在过滤器执行service前被调用,以设置过滤器的配置对象。

     2. void destroy();在过滤器执行service后被调用。

     3. Void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;

8、为什么要引入连接池?

    首先在Web开发中,如果使用 JDBC连接数据库,那么每次访问请求都必须建立连接——打开数据库——存取数据库——关闭连接等一系列步骤。

    但是我们知道数据库的连接打开不仅费时,而 且消耗比较多的系统资源。如果进行数据库操作的次数比较少,那么还不至于有多大的影响,

    但是假如频繁的进行数据库操作,那么系统的性能将会受到很大影响。其 次,是造成数据库连接泄漏。

    数据库连接泄漏这个词是第一次听说,指的是如果在某次使用或者某段程序中没有正确地关闭Connection、 Statement和ResultSet资源,

    那么每次执行都会留下一些没有关闭的连接,这些连接失去了引用而不能得到重新使用,因此就造成了数据库连接 的泄漏。

    数据库连接的资源是宝贵而且是有限的,如果在某段使用频率很高的代码中出现这种泄漏,那么数据库连接资源将被耗尽,影响系统的正常运转。
    为了解决上述问题,因此就引入了数据库连接池技术。用一句话概括数据库连接池技术那就是负责分配、管理和释放数据库连接。

9、Ajax是如何工作的?

    Ajax 基本上就是把 JavaScript 技术和 XMLHttpRequest 对象放在 Web 表单和服务器之间。

   当用户填写表单时,数据发送给一些 JavaScript 代码而不是 直接发送给服务器。相反,JavaScript 代码捕获表单数据并向服务器发送请求。

   同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,JavaScript 代码在幕后发送请求,用户甚至不知道请求的发出。

   更好的是,请求是异步发送的,就是说 JavaScript 代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。
   然后,服务器将数据返回 JavaScript 代码(仍然在 Web 表单中),后者决定如何处理这些数据。它可以迅速更新表单数据,

   让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。 JavaScript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,

   完全不需要用户干预!这就是 XMLHttpRequest 的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。

  结果就是类似于桌面应用程序的动态、快速响应、高交互性的体 验,但是背后又拥有互联网的全部强大力量。

10、说一下Servlet的生命周期?

   servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

   Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,

   当服务器决定将实例销毁的时候调用其destroy方法。web容器加载servlet,生命周期开始。

   通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

 

你可能感兴趣的:(java常见的面试题集锦(一))