厦门金智软件科技公司面试题
面试题目如下:
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或其他语言)。
现场答案:
public class Main {
public static void main(String[] args) {
int[] intNums = new int[10000];
//对数组intNums赋值,现场答案不包话以下部分
Random r = new Random();
for (int i = 0;i < intNums.length;i ++)
{
intNums[i] = r.nextInt(10000);
System.out.print(intNums[i]);
System.out.print(" ");
}
//赋值结束
for (int i = 0;i < intNums.length;i ++)
{
for (int j = i;j < intNums.length;j ++)
{
if (intNums[j] < intNums[i])
{
int intTemp = intNums[j];
intNums[j] = intNums[i];
intNums[i] = intTemp;
}
}
}
//显示排序后的数组在现场答案中也未出现
System.out.println();
for (int i = 0;i < intNums.length;i ++)
{
System.out.print(intNums[i]);
System.out.print(" ");
}
}
}
public class Main {
public static void main(String[] args) {
int[] intNums = new int[10000];
//对数组intNums赋值,现场答案不包话以下部分
Random r = new Random();
for (int i = 0;i < intNums.length;i ++)
{
intNums[i] = r.nextInt(10000);
System.out.print(intNums[i]);
System.out.print(" ");
}
//赋值结束
long start = System.currentTimeMillis();
int temp = 0;
boolean hasChange = true;
for (int i = intNums.length - 1;i > 0;i --)
{
if (hasChange)
{
hasChange = false;
for (int j = 1;j >= i;j ++)
{
if (intNums[j - 1]< (intNums[j]))
{
hasChange = true;
temp = intNums[j];
intNums[j] = intNums[j - 1];
intNums[j - 1] = temp;
}
}
}
else
{
break;
}
}
//显示排序后的数组在现场答案中也未出现
System.out.println();
for (int i = 0;i < intNums.length;i ++)
{
System.out.print(intNums[i]);
System.out.print(" ");
}
System.out.println(System.currentTimeMillis() - start);
}
}
4.写出n!的函数(java或其它语言)。
现场答案:
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
System.out.println(Fun(cin.nextInt()));
}
private static long Fun(int N)
{
if (N == 0 || N == 1)
{
return 1;
}
else
{
return Fun(N - 1) * N;
}
}
}
5.什么是MVC模式?
现场答案:M--model、V--view、C--controller
补充答案:MVC(Model/View/Controller)模式是国外用得比较多的一种设计模式,好象最早是在Smaltalk中出现。MVC包括三类对象。Model是应用对象,View是它在屏幕上的表示,Controller定义用户界面对用户输入的响应方式。
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