阿里电话面的几个问题回溯

两个电话,问了不少,一些简单的问题未列出来。

1. 简述HashMap的原理
我的答案:主要描述了原理和对查询效率的影响。
原理分析:HashMap可以理解为简单的内存DB吧?

2. Oracle查询时,模糊查询是否会使用到索引
我的答案:%xx%一定用不到,xx%和%xx应该可以用到。
总结答案:xx%可以用到,%xx和%xx%用不到。
原理分析:索引底层使用B-TREE,此tree采用散列值映射的方式,因为是树状结构,查询效率为log(n)。当然查询必须从根节点向下搜索,故而xx%可使用到索引的前半部分,而%xx则无法使用索引。

3. where子句中,!=是否用到索引
我的答案:用到
总结答案:未用到
原理分析:感觉这是个陷阱。理论上确实用到了——过滤非的时候。但之后真正的查询逻辑却要扫描n-1次。从业务查询的角度看,未使用到。

4. 查询表时,where后条件的顺序是否影响查询效率?
我的答案:对于单表,语法分析器会自动优化,不会影响。
总结答案:建议将过滤给力的部分放在最后;语法分析器或优化,效率无差别。
原理分析:oracle查询分析器执行时,where子句自右向左执行,所以将大过滤放在最右边。

5. 开放题
假如双11淘宝搞了秒杀活动,指定时间会有大量用户涌入。
目前有两个表:
user_base:id, name, password.....
user_grade:level, last_login_time, bill_count
有何策略,在用户大量涌入时减少db压力?
我的答案:
1. ui层面。因用户的真正需求是秒杀,可将用户等级信息在页面默认隐藏,用户需要时才点击显示。
2. 逻辑层面:cache
3. DB层面:通过大数据预判某些用户行为,将可能登录的用户特殊处理。
原理分析:尚不明。

1. 多线程情况下,如果B线程在A线程执行后执行。
我的答案:wait,notify
总结答案:最简单的方法:两个线程共享一个资源,例如byte sig=1。线程1在sig=1时执行,执行完后置sig=2。线程2在sig=2时执行。
还有其它方法,大概多用到java5中concurrent包。
原理分析:此题简单,秀逗了未答好。

2. 有什么方法,能保证事务一致性?
我的答案:DB层面,实现JTA接口,使用spring的事务管理。
总结答案:待续。

3. linux定时任务,怎么操作
我的答案:at命令,具体执行时间与spring中quartz相似。但我使用的定时任务多是app层面的,不熟。
总结答案:cron命令,具体执行时间与quartz相似。
原理分析:at可定时执行,但功能稍弱。cron确实没怎么用过,短板。

4. 将10W条数据写入到分布式DB中,如何保证写入均匀,无重写,漏写?

我的答案:无思路。

原文地址:https://www.cnblogs.com/xzs603/p/3533237.html