我的面试库

来源:互联网 发布:java run 编辑:程序博客网 时间:2024/06/04 19:10

算法题

公司现在的面试对算法要求很高,不妨开个贴,整理一下,弄出几个自己很熟悉又很有代表性的算法题,免得每次都要重新准备。

参考: http://blog.csdn.net/v_july_v/article/details/6543438


1. 有1000万条查询字符串记录,找出top 10 出现次数最多查询串。

用Hash Table 统计查询字符串出现次数,时间复杂度是O(N),详细:http://blog.csdn.net/v_july_v/article/details/6256463

用size为10的最大堆排序,找出Top 10,时间复杂度为N*logK,。

关于堆排序:

http://www.benfrederickson.com/2013/10/10/heap-visualization.html

http://en.wikipedia.org/wiki/Binary_heap


2. 对N个整数,寻找最小的K个整数 (例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。)

用部分排序+堆排序,http://blog.csdn.net/v_JULY_v/article/details/6370650


3. 设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N)

常规做法,时间复杂度是O(N*K), 用逆排序可以做到O(N)  http://blog.csdn.net/v_JULY_v/article/details/6322882

对N个元素,用N/2的时间就可以逆排序,空间上只需要一个额外存储。思路是不需要一个一个元素向右移动,只需要将数组的一半和另一半交换即可!

Reverse(int* arr, int b, int e)
{
     for(; b < e; b++, e--)
     {
          int temp = arr[e];
          arr[e] = arr[b];
          arr[b] = temp;
     }
}

或者

for(int i=0;i<=N/2;i++)

{      int t;

        t=a[N-i];

      a[N-i]=a[i];

      a[i]=t;

}

设计题

1. 如果让你设计一个数据库连接池,你将如何设计?



数据库SQL

有两张表,学生表 和 学生选课表, 写一条SQL统计所有学生的选课数,注意可能存在一门课程都没有选的情况。

考察点,left join 和 group by

完整SQL

select s.id, sum(case when c.name is not null then 1 else 0 end) from student as s left join course as c on s.id = c.studentId group by s.id


left join、right join、inner join的区别

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

Java题

1. HashSet HashTable 和 HashMap 的区别

HashSet实现了Set接口,它不允许集合中有重复的值,要先确保对象重写equals()和hashCode()方法

HashMap中怎样处理hash冲突的? HashTable 是线程安全的,HashTable不接受null的key和value


2. web container中加载执行servlet的过程? web.xml中配置,然后init() --> get() / post() --> destroy(),其是不是线程安全的? volatile 这个关键字的作用(对变量进行同步操作)


3. String和StringBuffer的区别,衍生到immutable class,immutable的好处(线程安全,安全的参数传入,减少内存消耗),如何实现immutable class.


4. JVM的类加载机制是怎样的? 

  bootstrap classloader load 核心库
                |
       extension classloader load jre/lib/ext
                |
       system classloader load -classpath 指定的jar包或类路径

http://www.blogjava.net/lhulcn618/archive/2006/05/25/48230.html


5. Java的内存模型? 你碰过几种outOfMemory的错误,都是由什么原因造成的? permgen, heap space, thread stack

参考 http://www.cnblogs.com/windlaughing/archive/2013/05/27/3101650.html

设计题

什么是观察者模式


架构题

1. 什么是RESTFul架构

2. 谈谈你理解的分布式系统架构