面试经验总结

1、青蛙跳跳

n块石头,一只青蛙一次可以跳一块石头,也可以跳两块石头,请问这只青蛙有几种跳法?

n块石头 跳法枚举 总共T(n)
1 () 0
2 (1) 1
3 (1,1)(2) 2
4 (1,1,1)(1,2)(2,1) 3
5 (1111)(112)(121)(211)(22) 5

由上表可知,第k次的跳法是在第k-1次跳法中插入1和与1加1之和。例如:当k=3时,k-1=2,
* 第2次的跳法(1)插入1,即(1,1);
* 第2次跳法的1加1,即(2);
k=3的总跳法即(1,1)(2)。
n=6时,T(n)=8;n=7时,T(n)=12;则可以假设T(n)=T(n-1)+n-3。
当n≥4时,
T(4)-T(3)=1
T(5)-T(4)=2
……
即T(n)-T(3)=1+2+…+n-3=(n-3)(n-2)/2
所以T(n)=(n-3)(n-2)/2+2
利用数学归纳法可证明此等式成立。

SQL查询

1、给出一张表T,

id user_id money time
1 a 10 123
2 b 8 334
3 a 22 345
4 c 32 89
5 b 23 786
列出每个用户最近上线收到的红包。
select * from T a where exists (select user_id, max(time) as mt from T b group by user_id having a.user_id=b.user_id and a.time=mt)

因为没怎么用过exist语句,所以当时没写出来,后来查了一下exist,了解了exist和in的区别,发现exist确实比较实用。

session共享

分布式系统需要考虑

防表单重复提交

在表单中增加隐藏字段uuid,如果不一致就是重复提交。

session持久化

拿tomcat的实现类StandardSession来说,它在catalina.jar中,实现了Serializable,所以可以持久化。

锁定Integer管用吗

Integer和String一样,都是final修饰的类,内部字段也是final修饰,所以synchronized(Integer a)起不到同步的效果。

哇,感觉自己面试中傻傻的,恐怖!