今天去陪同学去厦门金智软件科技公司面试,小可有幸拿到一份面试题,并尝试做了一下,感觉题目并不太难,但也有些是自己不了解的,于是回来后把答案补充完整!

面试题目如下:
1.谈谈您对面向对象的理解。
2.HashMap和Hashtable的区别。
3.写个冒泡排序的算法(java或其他语言)。
4.写出n!的函数(java或其他语言)。
5.什么是MVC模式?
6.碰到问题时你要怎么解决》?
7.数据库索引有哪些优缺点?

以下是我的现场答案和回家后写的答案:
1.谈谈您对面向对象的理解。
  现场答案:面向对象有三个基本特征:封装、继承和多态;面向对象可以分为OOA、OOD、OOP三个不同过程。
  补充答案:http://www.cnitblog.com/Lily/archive/2006/02/23/6860.aspx

2.HashMap和Hashtable的区别。
  现场答案:本人对这两个类型都不了解,故没做现场答案。
  补充答案:
   1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。

    2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。

    3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。

    4.HashTable使用Enumeration,HashMap使用Iterator。

    以上只是表面的不同,它们的实现也有很大的不同。

    5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

    6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;
    而HashMap重新计算hash值,而且用与代替求模:
    int hash = hash(k);
    int i = indexFor(hash, table.length);

    static int hash(Object x) {
      int h = x.hashCode();

      h += ~(h << 9);
      h ^= (h >>> 14);
      h += (h << 4);
      h ^= (h >>> 10);
      return h;
    }
    static int indexFor(int h, int length) {
      return h & (length-1);
    }
    以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
    HashMap对null的操作。


3.写个冒泡排序的算法(java或其他语言)。
  现场答案:

厦门金智软件科技公司面试题import java.util.*;
}
  补充答案:
厦门金智软件科技公司面试题import java.util.*;
}
  两段代码的性能比较:现场答案运行耗时250ms,补充答案运行耗时0ms。

4.写出n!的函数(java或其它语言)。
  现场答案:
厦门金智软件科技公司面试题import java.util.*;
}
  补充答案:无。

5.什么是MVC模式?
  现场答案:M--model、V--view、C--controller
  补充答案:MVC(Model/View/Controller)模式是国外用得比较多的一种设计模式,好象最早是在Smaltalk中出现。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。
模型-视图-控制器(MVC)是80年代Smalltalk-80出现的一种软件设计模式,现在已经被广泛的使用。
    1、模型(Model):模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.
    2、视图(View):视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
    3、控制器(controller):控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。
    MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。
    早期的程序中,如果不注意对数功能和显示的解耦合,常常会导致程序的复杂及难以维护。很多VB,Delphi等RAD程序都有这种问题。甚至现在的C#,Java有时候也会出现把业务逻辑写在显示模块中的现象
    尽管MVC设计模式很早就提出,但在Web项目的开发中引入MVC却是步履维艰。主要原因:一是在早期的Web项目的开发中,程序语言和HTML的分离一直难以实现。CGI程序以字符串输出的形式动态地生成HTML内容。后来随着脚本语言的出现,前面的方式又被倒了过来,改成将脚本语言书写的程序嵌入在HTML内容中。这两种方式有一个相同的不足之处即它们总是无法将程序语言和HTML分离。二是脚本语言的功能相对较弱,缺乏支持MVC设计模式的一些必要的技术基础。直到基于J2EE的JSP Model 2问世时才得以改观。它用JSP技术实现视图的功能,用Servlet技术实现控制器的功能,用JavaBean技术实现模型的功能

    JSP Model 1 与 JSP Model 2
    SUN在JSP出现早期制定了两种规范,称为Model1和Model2。虽然Model2在一定程度上实现了MVC,但是它的应用用并不尽如人意

    JSP Model 1
    JSP Model 2
      model2 容易使系统出现多个Controller,并且对页面导航的处理比较复杂
      有些人觉得model2仍不够好,于是Craig R. McClanahan 2000年5月提交了一个WEB framework给Java Community.这就是后来的Struts.2001年7月,Struts1.0,正式发布。该项目也成为了Apache Jakarta的子项目之一。

6.碰到问题时你要怎么解决?
  现场答案:1.查看帮助文档或SDK;2.上CSDN社区寻求帮助;3.在网上搜索答案。
  补充答案:无。

7.数据库索引有哪些优缺点?
  现场答案:优点:检索数据速度快;缺点:胡乱使用,会带来性能问题
  补充答案:http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx

相关文章: