m.itlong.com
我的github - https://github.com/javahongxi
笔记:
基于事件驱动的模型
1.两个线程对 i=0进行 i++处理,结果为1或2,解释为1的情形
解答:jvm 内存模型(jmm),即主内存和工作区
2.悲观锁和乐观锁之SQL语句
解答:select for update; update t set amount = #newAmount# where amount = #oldAmount#
3.Top10问题
解答:比如数据库里有很多很多数据(int),从中挑出top10,我们可以先给定一个初始值均为0的 t[10],然后从数据库里分页查询第一批10个数a[10],拿出 a[0],若 a[0]>t[0],则 t[0]=a[0],接着若 t[1]<a[1]<=t[0],则 t[1]=a[1],若 a[1]>a[0],则 a[1]和 a[0]交换,然后依次规律下去,第二批数据比较时,t里面的元素该踢出的就踢出。
4.洗牌问题
解答:对于1,2,3,4,5,每次随机选出一个e = list.get(random.nextInt(a.size())),放入一个数组中,然后 list.remove(e)。由此可见,对于数组问题,往往需要借助新数组。
5.数据库分表策略
解答:比如订单表里有 order_id,user_id,.......,表长度1亿(即有1亿行记录),可以对 id取模,mysql 单表支持500W 条记录,那么分成20张表。如果还要根据 user_id 查订单,分表出中间表,就两字段 user_id,order_id,user_id 可能分散在多张表里,所以要经过各种查询,用查出来的订单号再去分表里查订单详情。
6
sleep和wait的区别,sleep不释放锁,wait释放锁
synchronized和lock的区别,lock需手动释放锁unlock
7
负载均衡loadBalance,容错fail fast
8
http://wangqiaowqo.iteye.com/blog/457912/
9
楼梯有n个台阶,上楼可以一步上1阶,也可以一步上2阶,一共有多少种上楼的方法?
斐波那契数列 第一项为1 第二项为2 也就是f(n)=f(n-1)+f(n-2),用递归求。
给个分析的例子:
有一个11级的台阶,一个人可走一步也可走两步,问这个人有多少种方法走完这个台阶?
解:
①只用一步走:1+1+1+1+1+1+1+1+1+1+1=11,共11步,只有C11,1=1种走法。
②用了一次两步走:1+1+1+1+1+1+1+1+1+2=11,共10步,有C10,1 =10种走法。
③用了两次两步走:1+1+1+1+1+1+1+2+2=11,共9步,有C9,2 =36种走法。
④用了三次两步走:1+1+1+1+1+2+2+2=11,共8步,有C8,3= 56种走法。
⑤用了四次两步走:1+1+1+2+2+2+2=11,共7步,有C7,4=35种走法。
⑥用了五次两步走:1+2+2+2+2+2=11,共6步,有C6,1=6种走法。
总共有1+10+36+56+35+6=144种
理论上分析:只有一个台阶的话,只有1种走法,2级台阶的话,可以一步一个台阶走,也可以一步2个台阶走,共有2种走法。
当台阶数大于等于3之后,可以这么分析:如果最后一步走一个台阶,那么就是n-1个台阶的走法的种类,如果最后一步走两个台阶,那么就是n-2个台阶的走法的种类,所以n个台阶的走法种类就是n-1个台阶和n-2个台阶的走法的总和。因此,这是一个递归函数。也是一个裴波那契函数。
下面给出一个C++程序: