某互联网门户公司面试

  前两天去某互联网门户公司面试java后台开发职位,面试题目如下:

  1  添加索引后如何知道查询是否命中了索引?
     这个问题,我平时没有关注过,回答说如果添加索引后查询时间明显缩短那就命中索引了。面试官不满意,他提示数据库查询有缓存,同一sql语句,第二次查询会比第一次快,这不能表示命中索引。后来,在网上搜了一下,可以通过查看sql的执行计划。

  2  如果在A,B,C三个字段建了联合索引,问where A='value',是否会命中索引?
     我说不会。因为我觉得关键字是由A、B、C三个字段值组成的,应该是对(A,B,C)做的排序。网上查了一下,才知道这种情况其实是可以命中索引的。因为对(A,B,C)排序,可以保证A是有序的,虽然B、C是无序的。例如(1,9,2),(2,5,7)(2,1,3),(1,6,4),排序结果为:(1,6,4),(1,9.2),(2,1,3),(2,5,7)。参考:http://blog.csdn.net/shellching/article/details/7655793

  3  索引的数据结构?
     我说是一种多路查找树,我确实不记得是具体是什么树了。面试官接着问,具体是哪种树。没办法,我瞎蒙说是红黑树。又问查找的时间复杂度,我答应该是O(树高)。翻了一下数据结构教材,索引的结构是B树。B树的介绍可以参考:http://blog.csdn.net/v_JULY_v/article/details/6530142/

  4  不同的Java内存管理方案的优缺点?
     面试时没有打出来。搜了一下,面试官应该是想问CMS和Parallel两种gc算法。可以参考:http://www.deepinmind.com/gc/2014/05/01/g1-vs-cms-vs-parallel-gc.html

  5  servlet是单例的吗?
     我说是。又问,那怎么保证线程安全?我说尽量让servlet无状态,不要声明静态域和实例域。现在想想,回答的不够全,如果确实需要静态域和实例域的话,可以使用同步机制,通过加锁来保证正确性。上网查了一下,其实说servlet是单例是不准确的,严格地说是一个ServletMapping对应一个单例实例,如果一个Servlet被映射了两个URL地址,会生成两个实例。

  6  tomcat容器包含哪些模块?如何自己实现一个web 容器?
     这个真不会啊。

  先写这么多,想起别的来再补充。

猜你喜欢

转载自suparpeng.iteye.com/blog/2280902