快手Java后端开发面经(一面)

一、项目加八股

1,介绍一下实习项目模块,主要负责的服务(接下来就是根据介绍的项目拓展问八股)

2,为什么不用外键

阿里开发手册:

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

说明: 以学生和成绩的关系为例,学生表中的 student_id 是主键,那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。

分库分表的场景,无法使用外键

3,Mysql深分页

a)select id,name,balance from account where update_time> '2020-09-19' limit 100000,10;

通过普通二级索引树idx_update_time,过滤update_time条件,找到满足条件的记录ID。

通过ID,回到主键索引树,找到满足记录的行,然后取出展示的列(回表)

扫描满足条件的100010行,然后扔掉前100000行,返回。

b)select id,name,balance FROM account where id >= (select a.id from account a where a.update_time >= '2020-09-19' limit 100000, 1) LIMIT 10;

由执行计划得知,子查询是用到了idx_update_time索引。首先在索引上拿到了聚集索引的主键ID,省去了回表操作,然后第二查询直接根据第一个查询的 ID往后再去查10个就可以了!

c)业务限制

强制指定查询条件:以京东 web 端为例,根据关键词搜索历史订单,时间维度默认为近三个月,以年为单位允许用户手动切换,但不允许查询全量数据。

瀑布流场景:将上一页的查询结果中的最大 id 作为下一页查询的 where 条件,这样可以大幅减少扫描行数,提高查询性能。只要索引设置得当,可以提供与浅分页近似的查询性能。这种方案的局限性也比较大,不支持跳页,而且要求 id 是升序的。但从业务角度看,它非常适合瀑布流场景,只有上一页和下一页。

限制最大页码数:

4,Mysql游标

5,.事务特性,怎么实现

6,事务传播行为

a)PROPAGATION_REQUIRED

b)PROPAGATION_REQUIRES_NEW

c)PROPAGATION_NESTED

d)PROPAGATION_MANDATORY

e)PROPAGATION_SUPPORTS

f)PROPAGATION_NOT_SUPPORTED

g)PROPAGATION_NEVER

7,分布式锁实现,过期时间设多久,释放锁怎么保证原子性

a)续期原理

续期原理其实就是用lua脚本,将锁的时间重置为30s

Watch Dog 机制其实就是一个后台定时任务线程,获取锁成功之后,会将持有锁的线程放入到一个 RedissonLock.EXPIRATION_RENEWAL_MAP里面,然后每隔 10 秒 (internalLockLeaseTime / 3) 检查一下,如果客户端 还持有锁 key(判断客户端是否还持有 key,其实就是遍历 EXPIRATION_RENEWAL_MAP 里面线程 id 然后根据线程 id 去 Redis 中查,如果存在就会延长 key 的时间),那么就会不断的延长锁 key 的生存时间。

如果服务宕机了,Watch Dog 机制线程也就没有了,此时就不会延长 key 的过期时间,到了 30s 之后就会自动过期了,其他线程就可以获取到锁。

8,知道哪些redis数据结构

9,Redis有事务吗,为什么

有,但和mysql的事务不一样。

原子性:队列中上下执行失败相互不受影响,且不会回滚,不满足原子性要求。

一致性:Redis事务执行期间只有提交状态数据对外可见。

隔离性:Redis执行期间别的事务不会插入事务执行命令序列中是串行执行,但是执行中db通过锁定行完成隔离,而redis不会锁定key非事务命令依然可以修改删除key,导致结果看起来并不完全支持隔离性。

持久性:Redis持久性取决于redis持久化模式,Redis有能力支持持久性。

10,Redis怎么支持同时访问(不清楚问的是并行还是并发)

11,Dubbo做了一件什么事,怎么实现

12,Zookeeper一致性

13,Java的锁,公平性怎么实现

14,http报文的组成,怎么保持长连接

15,上下文切换怎么实现

16,设计频控,30天出5次,怎么做缓存

17,项目遇到的难点,作为非科班怎么上手的

二、手撕

1.最小高度树‘

#快手##面经##软件开发笔面经##软件开发投递记录##Java#
全部评论

相关推荐

查看10道真题和解析
点赞 评论 收藏
分享
评论
1
10
分享

创作者周榜

更多
牛客网
牛客企业服务