面试总结2012-6-15

来源:互联网 发布:ubuntu不支持vim 编辑:程序博客网 时间:2024/06/13 23:50

 1.什么是值类型,什么是引用类型?String 是不是值类型?

     答:值类型表示复制一个当前的变量传给方法,当你在这个方法中改变了这个变量的值时,最初声明的变量的值不会变。

    引用类型表示你操作的数据时同一个数据,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变了这个变量的值,那么调用这个方法时传入的变量的值也将改变。

    [值类型]:也就是基本数据类型

    基本数据类型常被称为四类八种

    四类:   1,整型 2,浮点型 3,字符型 4,逻辑型

    八种:   1,整型3种 byte,short,int,long;2,浮点型2种 float,double;3,字符型1种 char; 4,逻辑型1种 boolean

    [引用类型]

    除了四类八种基本类型外,所有的类型都称为引用类型

 

 2.集合和数组最大的区别在哪?

    答:数组:数组是java语言内置的数据类型,他是一个线性的序列,所有可以快速访问其他的元素,数组和其他语言不同,当你创建了一个数组时,他的容量是不变的,而且在生命周期也是不能改变的,还有JAVA数组会做边界检查,如果发现有越界现象,会报RuntimeException异常错误,所有不用担心和C和C++一样不做边界检查而出现的问题,当然检查边界会以效率为代价,数组和其他容器体现在3个方面:1.效率2.类型识别3.可以持有primitives。

            集合: JAVA还提供其他容器,list,map,set,他们处理对象的时候就好像这些对象没有自己的类型一样,而是直接归根于Object,这样只需要创建一个容器, 把对象放进去,取出时转换成自己的类型就行了,ArrayList:JAVA包里有一个java.util.ArrayLisy的类,他包括可以用以static的工具方法,其中最基本的4个方法:

    1、用来比较2个数组是否相等的eques()

    2、用来填充数组的fill()

    3、用来排序数组的sort()

    4、以及用于在一个已经排序的数组中查找元素的binarySearch()。

 这些方法都是对primitives和Object进行了重载,此外还有一个asList()方法,它接受一个数组,然后把它转成一个List容器。

 此为java标准库还提供了一个 System.arraycopy();的静态方法,能够以较快的速度拷贝数组,对primitive和Object进行了重载,要注意的是, 当进行Obeject拷贝的时候,进行的是浅拷贝;

 

 3.Spring的aop机制是什么?

    答:Aop 面向切面编程,Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。(建议尽量使用JDK的动态代理)如果被代理的目标对象实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。 如果你希望强制使用CGLIB代理,(例如:希望代理目标对象的所有方法,而不只是实现自接口的方法)那也可以。但是需要考虑以下问题:

    1、无法通知(advise)Final 方法,因为他们不能被覆写。

    2、你需要将CGLIB 2二进制发行包放在classpath下面,与之相较JDK本身就提供了动态代理

 

 4.Spring mvc 中的controller中李天如何在jsp中获得?

    答:AarService manager = (AarService) getBean("aarService");
            List pagedata = manager.getAarList();
            System.out.println("pagedata size " + pagedata.size()); 

            request.setAttribute("pagedata", pagedata); 
            System.out.println("-********************--");
            return mapping.findForward("raa");
            用这个来接受 pagedata 对应 request.setAttribute("pagedata", pagedata);的对象

            <c:forEach items="${pagedata}" var="ara">

            <tr> 
            <td><a href="/list.jsp"><c:out value="${ara.id}" /></td>
            <td><a href="/list.jsp"><c:out value="${ara.title}" /></td>
            <td><a href="<c:url value="/removeAar.oa?removeAar&id=${ara.id}"/>">数据删除</a></td>
            </tr>
            </c:forEach>

 

 5.打印出List集合中的键值对?

      答:for (Entry<String, List<Student>> ent : m.entrySet()) {  

                   List<Student> s = ent.getValue();   

                   int total = 0;   

                   //遍历学生集合得到每个学生的分数 求总和   

                   for (int n = 0; n < s.size(); n++) {   

                         total = total + s.get(n).getScore();   

                   }   

                   System.out.println(ent.getKey() + "班 总分:" + total + " 平均分:"  + (float) total / s.size() + " 人数:" + s.size());   

              }   

 

 6.string、 stringBuffer 和 stringBuild 的区别?

答:String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象,因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。

      而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。

      Java.lang.StringBuffer 线程安全的可变字符序列。类似于 String 的字符串缓冲区,但不能修改。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发 生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量 自动增大。从 JDK 5.0 开始,为该类增添了一个单个线程使用的等价类,即 StringBuilder 。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

      但是如果将 StringBuilder 的实例用于多个线程是不安全的。需要这样的同步,则建议使用 StringBuffer 。

 

7.javaweb中怎么处理Log的?

    答:1.JDK中提供的日志记录模块允许系统人员通过配置文件来指定输出哪些级别的日志信息、以什么格式输出日志信息、以及将日志信息输出到哪个目标设备。 
    2.JDK中的日志记录模块的所有类都位于java.util.logging包中,其中,只有java.util.logging.logger类是开发人员必须在程序中调用的类,而其他一些类则是在幕后工作或要扩展日志记录功能时才使用。
    3.JDK中的日志记录模块将日志信息定义成了7个级别:FINEST、FINER 、FINE 、CONFIG、INFO、WARNING和SEVERE,它们的级别按这里排列的顺序依次递增, logger类中定义了多组方法来分别生成这7个级别的日志信息。
    4.一个应用程序中可以有多个logger对象,每个logger对象都有一个名称,其名称通常采用包名的形式,用点(.)对名称进行层次划分。根据logger对象的名称,logger对象可以在逻辑上形成一种父子关系,例如,名称为“org.it315.test”的logger对象就是名称为“org.it315”的logger对象的子级。最顶级的logger对象称为根logger对象,用空字符串("")表示。 
    5.调用Logger.getLogger方法可以获得一个logger对象,logger对象的名称通过传递给getLogger方法的参数指定,如果指定名称的logger对象已经存在,getLogger方法返回已经存在的logger对象,否则,getLogger方法创建一个新的logger对象。
    6.在应用程序中创建的每个logger对象存储在一个LogManager对象中,一个JVM中只能有一个LogManager对象。这个全局唯一的LogManager实例对象在LogManager类加载时被创建,logger.getLogger方法内部首先调用LogManager.getLogManager()方法 获取LogManager实例对象,然后从中检索指定名称的logger对象。

 

8.请问什么是单例模式。

     答:java模式之单例模式: 单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。 特点:

     1、一个类只能有一个实例;

     2、自己创建这个实例;

     3、整个系统都要使用这个实例;

     Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。 一些资源管理器常常设计成单例模式。 外部资源:譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干个通信端口,系统应当集中管理这些通信端口,以避免一个通信端口被两个请求同时调用。内部资源,譬如,大多数的软件都有一个(甚至多个)属性文件存放系统配置。这样的系统应当由一个对象来管理这些属性文件。

 

 9.如果定义一个集合,并给予他一个最大值,我们是否可以超出这个值,如果超出了是怎么操作的。

 10.一个论坛,他每个月有不固定的人数注册,如果我给定一个6月份的注册人数,请给出一个算法,算出他1-6月份的总注册人数。

 11.一个论坛,他每个月有不固定的人数注册,如果我给定一个1月份和3月份的注册人数,请给出一个算法,算出这之间月份的总注册人数。

12.现在有一张表,id  name score三个列,请你将分数最高的头三条数据取出?

13.现在有一张表,获取这张表中name字段重复的数据?

原创粉丝点击