途虎养车二面-JAVA工程师
1、自我介绍
2、手撕:有n个数,随机排列成一个最大的数,输出一个字符串,例:[3,10,24,25],输出:"3252410"
3、优化一个SQL语句:
SELECT \* FROM orders
WHERE user_id=123
AND status='PAID'
ORDER BY create_time DESC
LIMIT 10;
表中字段:id, user_id, status, amount, create_time
数据量:1亿条记录
4、联合索引为什么按user_id、status、create_time这个顺序呢,你怎么知道数据库引擎就是按这个顺序去检索的呢,对数据库索引底层是如何做的有了解吗
5、除了索引和select \*,还会有什么问题吗,你会怎么去解决呢
6、你说到了根据user_id分表,那具体用什么策略去分表呢
7、为什么选择user_id,而不用主键id,或者其他呢
8、给了一段代码,用来在秒杀场景中进行减库存操作,一个stock表示库存量,一个减库存的方法,在单服务器部署场景下,代码会有什么问题吗(没加锁),怎么解决呢
9、synchronized和ReentrantLock实现机制清楚吗
10、下面考虑分布式部署的情况,只加上面的锁,会有什么问题吗
11、那这里的取值操作需要加锁吗,还是说只有减库存需要加锁
12、如果让你设计一个分布式锁,你会考虑哪些方面
13、场景:设计一个类似微薄的点赞和取消点赞功能,需要设计一个api的接口实现这个功能,给出他的请求方法和URL,同时设计表,来存储点赞数据。主要实现三个业务功能:存储点赞信息,对这些信息做统计,让用户能看到自己的点赞
14、如果需要考虑一些特殊场景,保证这个接口的安全,比如用户身份鉴权,恶意的流量攻击等待
15、统计点赞数的逻辑如何实现,什么时候去统计比较合适