快手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#
全部评论

相关推荐

09-30 18:33
门头沟学院 Java
0820投递0906一面1. 实习期间遇到的挑战以及解决方式2. 比如我们要用来实现一个乐观锁的功能,这个有研究过去做吗?比如现在Redis里面有一条数据,我们现在要去更新这条数据,在分布式场景下可能有问题,考虑用Redis实现一个乐观锁,让更新实现有序,最终数据库能够保证数据一致性,应该怎么去做?3. Java里面提到的开闭原则,你对开闭原则的理解是怎样的?可以大概描述一下这个原则吗?4. Java中基本数据类型和包装类型的变量,初始值分别是什么?5. 现在定义两个包装类型变量,给这两个变量赋相同的值,然后做“==”比较,结果为什么会不一样?6. Java中volatile关键字有什么作用?7. synchronized关键字在方法上具体怎么实现?对于一个类的普通方法和静态方法,加synchronized锁分别锁住的是什么?8. 假设有一张用户老表A,因模型升级适配新业务场景新建了一张用户新表B,需要将老表A的原始数据迁移到新表B,且老表A数据量特别大(比如上百亿数据),让你开发数据迁移程序,具体编码思路是先干什么、再干什么?9. 不考虑数据写入问题,只考虑将1000亿数据的用户老表A迁移到新表B,能不能通过MySQL的主从复制来做呢?10. 在分批迁移数据时,为了保证每批次拉取数据的执行效率都比较高,ID应该怎么来?轮询时为了保证数据的准确性和查询性能,应该怎么处理?比如每批次拉100条数据,但ID可能不是连续的,这种情况代码层面应该怎么解决?11. 现在要统计用户表(数据量特别大)中用户昵称相同的数据,即统计出现重复的用户昵称以及每个重复昵称出现的次数,应该怎么做?12. 你平时自己有在持续做一些技术学习和研究吗?13. 实习的工作节奏大概是什么样的?0909二面,比较像主管面,面试时间就25分钟1. 自我介绍。2. 你自己还接触过哪些方面(的技术或工作内容)?3. 你觉得比较有亮点、有代表性的一些需求或技术问题是什么?请大概介绍一个。4. 你原来接触过电商领域相关的内容吗?比如电商常用的商品等领域。5. (假设现在有一个任务)如果现在领导给你的任务是,一个基本的应用(比如商品相关应用)在单机情况下,面对高并发量时压力过大,你觉得应该按照什么样的维度或者标准去处理(来应对高并发、减轻单机压力)?6. 现在前台有一个页面,加载的时候用了5秒钟才显示出来,你觉得可能是什么原因导致的?该如何排查?7. 你现在在学习一些新的技术,大概会通过什么样的途径去学?8. 你最近关注或学习的一些技术性方向有哪些?9. 你觉得自己个人的优势和劣势是什么?0920线下hr面,简单跟面试官聊了半小时,都是比较常规的问题,说7个工作日出结果0930收到意向函,来个国庆礼物!
查看22道真题和解析
点赞 评论 收藏
分享
评论
4
28
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务