`

有价值的面试题总结

阅读更多

1.譬如问我:“最熟悉哪些设计模式?”,
“那你讲讲Factory的特点和用途?”,

 

 

2.“Spring IOC的实现方式?”

 

3. 有一个对象数组a,写出按其中元素的属性b排序的程序,用jdk自带的api

 

 

4.关于5个强盗,100块砖石的分配问题。

著名的经济学模型:海盗分金

百度百科有详细解释,很经典...http://baike.baidu.com/view/5221.html?wtp=tt

(以上两题出自:http://www.iteye.com/topic/661409

 

5.用最简便的方法求最大公约数

public class Main {   
	static int divisor(int m,int n){
		return m%n==0?n:divisor(n,m%n);
	}

    public static void main(String[] args){
    	int n = 50;
    	int m = 30;
    	System.out.println(divisor(m,n));
    	
    }
}

 

6.用递归的方式判断某个字符串是不是回文字符串(正反读都一样) 比如(“abcdcba”)

 

public static boolean zf(String str,int i){   //str是要判断的字符串,i是判断到第几位了(从0开始到字符串的一半)
        if( i == str.length()/2 || str.length() == 1){//到中间的时候相等肯定为回文,顺便把长度等1和0也判断了   
            return true;   
        }else{   
            if(str.charAt(i) == str.charAt(str.length()-i-1)){   
                return zf(str,i+1);   
            }else{   
                return false;   
            }   
        }   
    }

 

7.有一组数据3,5,9,7,4,13,15,0,2,20.已知最大数是20,把数据从小到大排序,而且算法复杂度只能是1,不能用Java提供的类实现,如Arrays.sort()等。

解答:可以用桶算法来解决....

int[] a = {3,5,9,7,4,13,15,0,2,20};
boolean[] b = new boolean[21];
for(int i=0;i<a.length;i++){
b[a[i]] = true;
}
for(int i=0;i<b.length;i++){
if(b[i]){
System.out.print(i+",");
}

}

 

附桶算法的一般要求:对于数组中出现重复数,负数,或没有给定最大数,均无法使用桶。
当这三个条件都具备时且最大数不算太大时(桶的容量和最大数对应),可以使用桶算法来排序。

 

8.一哥们到阿里巴巴面试的题目:

问题1: 索引有什么坏处?

第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

问题2: hashtable和hashmap有什么区别?

一们仁兄的解答:

Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
  HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
  还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
  最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
问题3: 浏览器与服务器间的会话是怎样实现和保持的?(大致是这个意思)

session,cookie区别,什么情况下使用,大概讲了一下;transient的作用

   1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。   
  2、session中保存的是对象,cookie中保存的是字符串。   
  3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到。而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的。   
  4、session需要借助cookie才能正常。如果客户端完全禁止cookie,session将失效。

 

 

9.请描述一下数据库三范式”

1.1 第一范式(1NF)无重复的列
比如oracle中的date类型,一般会把年月日 / 时间放在一起 一个字段内.
1.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖]
比如memcache里的所有的value都对应一个key值.......好不好查不是我们关心的事.
1.3 第三范式(3NF)属性不依赖于其它非主属性[消除传递依赖]
比如C语言中常常用到的指针,跳来跳去....

 

 6.jsp中jsp:forward 与 redirect区别

 (1).从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容
再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所
以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
(2).从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,
甚至是使用绝对URL重定向到其他站点的资源.
forward,方法只能在同一个Web应用程序内的资源之间转发请求.
forward 是服务器内部的一种操作.
redirect 是服务器通知客户端,让客户端重新发起请求.
所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "
(3).从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
(4).从效率来说
forward:高.
redirect:低.

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics