快手Java 二面 45min

这面感觉有点不对劲,时间太短了

一上来根据项目问了一道场景题:MySQL主从复制读写分离后,主从之间存在延迟,在一个操作内发成写后读,未读到正确数据怎么办?(我的个人博客中根本不涉及到写后读这种操作,一上来就把我问蒙了,所以答得感觉不是很好,说了一种思路是同一个事务下读同一个库,另一种思路是业务线程内等待但是会影响响应时间,感觉都不太对,有懂的老哥指点一下。。。)

第二道场景题:分库分表后如何读写分离?(没GET到,我认为分库分表后读写分离与单表的读写分离其实差别不大,懂的老哥指点一下。。。)

第三道场景题:按userid分库分表后,A部门的user可能分布在不同的库表中,想查询所有A部门的user只能全查吗?(懵,懵的不行,我答的:首先我会考虑如果有这个业务需求,是否当初分库分表的设计有问题。其次如果确实存在大量按userid分表的需求,同时又存在这个需求,我能想到的解决方案是借助Redis按部门存储数据,避免扫库。但是这样只适用于查询需求只需要查询user的部分信息,存缓存的开销可以接受。如果想全部信息都查的话,在我的理解里只能全表查或者借助分布式存储引擎去查,懂的老哥指点一下。。。)

项目提问:说一下用token鉴权的流程,主要就说的SpringSecurity的流程,以及在前端的localstorage存储Token

然后就做题了???做题了??? 到这才30分钟

算法题:三数之和,秒了。。。

做完题直接来了个毫无关联的八股,String是不是final的。。。我说是。。。然后就没然后了,

又来个八股,怎么解决HASH冲突,说了拉链法,开放寻址法(顺序寻,间隔寻)

然后就反问了,整体过程刨去反问只有40分钟不到。。。感觉不太对。。。唉,随缘了

----------------------------------两个小时后约三面了----------------------------补充一下场景题解答

首先第一个场景题其实应该很常见,我上网一查就查到很多博客(而且这个场景题与一面面到我的那个题是同源的。。。就这个没去查,结果二面又考了,惭愧):

首先会出现延时是由于MySQL默认基于binlog-pos的复制是异步复制,即当写操作执行完就直接返回客户端,后期异步去更新从库。那第一个很简单的解决方式就是将MySQL的异步复制改为半同步复制或全同步复制,半同步复制实质上就是部分同步的更新从库,必须有一个从库将数据存入relaylog后向主库发送一个ACK确认包,主库收到确认包后才会提交事务并返回客户端,需要安装半同步插件semisync_xxx.so 并启用。半同步复制更侧重于预防主节点挂掉之后数据丢失问题,无法解决时延问题,必须采用全同步复制(组复制)解决,组复制的要求就更加严格,当主节点事务执行时,必须全部节点事务执行完成才能返回(性能怕是会降低很多)。第二种方式就是我面试中回答的,对于特定操作比方说同一事务内强制访问主库,这个需要业务代码调整。第三种方式可以在每次写主库时记录一个key到Redis中,过期时间为主从复制的延时,在写操作之后轮询查询Redis中是否存在Key值,如果存在则代表当前有数据可能处于主从未同步的状态则等待,这个其实就是我说的写完等待的具体实现。

第二个场景题确实是个陷阱,分库分表后的读写分离实际与单表读写分离没有太大区别。

第三个场景题后来我理解,可能面试官想问的是分库分表后如何查询数据。这个直接使用ShardingJDBC即可,ShardingJDBC既提供了读写分离的功能也提供了分库分表查询的功能。具体原理就不写在这了,感兴趣的童鞋可以自行查阅。

全部评论
已约三面...太效率了,面完俩小时约三面
5 回复 分享
发布于 2023-08-07 15:56 河北
我一面就是40分钟,也过了
3 回复 分享
发布于 2023-08-07 15:26 上海
我也感觉不对劲,就问了两个不相关的,做了两个题
3 回复 分享
发布于 2023-08-07 16:10 陕西
哥,你好厉害,带带
3 回复 分享
发布于 2023-08-08 10:57 北京
分库分表和读写分离本身不冲突,ShardingSphere 两个可以同时生效
2 回复 分享
发布于 2023-08-07 20:17 北京
第三个场景用shardingJDBC就能避免全查吗?
1 回复 分享
发布于 2023-08-07 22:00 辽宁
m
1 回复 分享
发布于 2023-08-08 00:37 陕西
很受用,楼主必offer😋
1 回复 分享
发布于 2023-08-08 01:33 北京
大佬有实习经历吗
1 回复 分享
发布于 2023-08-08 07:54 北京
感觉问的的确不多
1 回复 分享
发布于 2023-08-08 13:03 北京
投个jd呢
点赞 回复 分享
发布于 2023-08-08 13:49 北京
第一道场景应该是要开一个事务写后读,能读到最新数据,我这边开发一般都这么处理,没啥大毛病
点赞 回复 分享
发布于 2023-08-08 15:07 广东
第一个实践中直接读主库,对时延不敏感读从库。第三题异构数据库或者做数据冗余比较好,扫线上库增加线上压力。
点赞 回复 分享
发布于 2023-08-08 16:09 广东
老哥几号投的简历,官网投的吗
点赞 回复 分享
发布于 2023-08-10 12:46 北京
投个jd呢
点赞 回复 分享
发布于 2023-08-17 13:55 北京
老哥,快手三面咋样了
点赞 回复 分享
发布于 2023-08-21 09:03 湖北

相关推荐

2024-12-23 13:57
广西大学 Java
秋招真的是一场漫长的马拉松,现在也终于轮到我松口气啦,拿到了平安产险科技中心的offer,记录一下拿到offer的全过程:我的timeline:11.12 笔试12.2 初面12.6 复试12.20 offer面试情况:平安产险问的问题真的太多了,从项目问到Java框架,从Java框架问到Java基础,从基础问到操作系统,妈耶,我记得初面面到后面都给我面累了,但是面试官一直在很认真的问和引导我,我就也没放弃,给你们大致感受一下。1.项目技术框架2.逻辑业务设计3.项目技术难点4.修改bug5.Springboot特点6.实现ioc的方式7.Bean的注入方法8.过滤器和aop的区别9.Springboot的自动配置如何加载10.Mybatis实现方式11.Mapper如何实例化12.Nacos服务注册,基于什么协议13.Springsecurity讲一下14.数据隔离有什么实现方式15.讲一下minio如何存储的16.项目redis更新频率17.Java8的新特性18.讲一下lamda表达式19.Java的多态20.Java学习路线21.Java的集合22.List的底层数据结构23.List实现动态扩容,什么时候进行扩容,如何扩容24.List是否指定大小有什么区别和好处25.多线程如何处理,如何加锁,加锁的对象26.如果类的其他方法调用了上锁的对象会怎样27.Linkedlist底层数据结构,如何增删,如何判断是否环状联表28.Hashmap的键值是否能为空,数据结构,如何转化29.为什么红黑树的效率高30.树的常见结构(除了二叉树还有什么)31.讲一下红黑树,有什么应用场景32.讲一下进程和线程33.如果一个线程高cpu,如何定位34.如何查看具体的线程35.多线程操作,原子变量,volatile具体实现36.Io操作37.字节流和字符流区别38.字符流遇到乱码怎么处理39.常见的字符集40.网络编程不管怎么样,最终算是过了,也拿到了offer,求职体验也还不错。offer情况:base深圳福田市中心,位置非常核心,周边都是商场,很便利。产险业务比较核心也比较稳定,据说工作强度也不算大,公司比较人性化,我们后面报道的路费和报道的酒店都是报销的,加入还是比较安心的。其实offer唯一美中不足的是薪资不高,不过好在平安产险背景比较强,行业背书还可以,以后跳槽还比较容易,甚至更好升职级,就先接了。大厂真的是我们秋招的托举,总是让我们很安心,本来一直到11月还没有offer的我很焦虑,直到平安产险连续发初试复试和最终发offer,让我感觉很温暖!#平安产险科技中心求职汇总#
开挂了的鲸鱼很深情:秋招真的就是过关斩将,结果是好的就好啦
查看40道真题和解析
点赞 评论 收藏
分享
评论
28
347
分享

创作者周榜

更多
牛客网
牛客企业服务