# 一面 ## 问有没有做过JAVA Web的项目,选一个讲 答:选择了一个做的CMS来讲,因为我是这个项目的总负责人 ## 问项目上有没有遇到什么困难 答:没有。。 ## 技术选型是如何决定的。 答:感觉不是真让回答技术选型的过程。我就对比了SpringMVC和struts的优缺点,Mybatis和Hibernate的区别。 然后他又问了为什么选择了shiro而不是spring security。我就说因为之前没有接触过权限管理的框架,在网上看帖子说spring security比shiro更为复杂和庞大,对于我们项目没有很多的时间和学习成本去接触spring security,shiro更容易上手。 ## 数据库查询 三个表,其中一个表是其他两个表的关系表。问如何根据一个表的字段查找出另外一张表的字段。 回答出sql。 我回答了子查询,其实用join更好点,但是一时间不知道怎么join。 ## 数据库索引有了解吗?索引的优缺点。 查询快,插入慢。所以适合查询为主的字段。 ## 常用的集合有哪些 LinkedList,ArrayList,Hashmap。 ## LinkedList和ArrayList的区别 底层实现不同。LinkedList双向链表,ArrayList数组。ArrayList插入慢,但是查询快。LinkedList插入快,查询慢。 ## LinkedList的底层实现是怎么样的?假如往LinkedList的第k个位置插入数据,时间复杂度?最后一个位置插入呢? 双向链表。 第k个位置插入数据:k+1 ,遍历k位,插入一次。 最后一个位置:1。因为是双向链表。 ## Hashmap能不能用对象做key。 可以。但是得重写hashcode方法和equals方法。 ## Hashmap用对象做key时,put后,又修改了这个对象,会发生什么。 我就说那得看你设计的这个hashcode和equals方法跟你修改得属性有没有关系,假如有,那会导致put进去,get不出来 ## java的异常分类 Error、Exception,还有一个比较特别的RuntimeException ## Java如何捕获异常 回答:try...catch.. 然后问finally不是吗? 回答:不是。finally只是配合使用的,没有异常的时候单独使用finally也是可以的。 然后问 什么情况下会在finally里面写代码? 回答:举了数据库连接的例子。。 ## JVM何时会发生内存泄露 不知道。。可以看这个帖子 http://blog.csdn.net/anxpp/article/details/51325838 看了这个帖子。。估计面试官是想问我数据库连接也会导致内存泄露吧。。。 ## JVM的内存划分是如何的 堆,栈,方法区,程序计数器什么呢。 ## 方法区都存放了哪些东西 类的信息,静态类和静态变量。 ## 平常私下会做什么事 讲了我github一直在维护的个人项目。爬虫和tinyjvm。 ## 算法题:0~n共n+1个数,从中随机抽取一个数,剩下的n个数都知道是什么,问随机抽出的数是什么。 刚开始回答了0~n加起来,然后减去剩下的n个数之和,就可以得到了。 他问假如n很大会发生什么情况? 我说会超出int或者long的最大值。 然后选择了bitmap的方式来解决,一个数对应一个bit。 #二面 聊项目 #HR面 聊性格