快手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-08 21:10
蚌埠坦克学院 Java
timeline无笔试技术1面 2024.11.25 技术2面 2024.11.26大概过一周oc,已拒 ,两次面试时间都不到30分钟,无算法题,有sql题技术1面1. 自我介绍(名字、学校、专业、项目)2. 项目:第一个项目(从业务 到 技术架构 整体介绍,各个功能使用的技术各自有哪些,哪个技术为了实现哪个场景进行使用。3. 项目:线程池的参数,和具体的使用问题,参数怎么设置比较好4. MySQL一道题:问一个表两列,自增主键和邮箱,邮箱有重复,问怎么能用delete语句把邮箱去重?(我答的是先用distinct去重,然后把去重后的数据生成新表,然后删除旧表,和delete效果是一样的)5. 反问:部门业务(瓜子的中台的开发,主要是给其他部门提供功能api调用,还有工单系统,主要是内部平台的开发) 面试次数(总共2面)出结果技术2面1. 简单自我介绍2. 政府的项目的一个介绍(还有我负责的模块,流媒体、图文模块、权限认证模块、机构模块)3. rpc框架的介绍,主要结合第一个项目来描述。基于第一个项目微服务架构的需求,以及openFeign的底层原理,实现自定义rpc框架, 并且应用到项目中,对远程调用模块进行升级,但是没提交上线。4. 自我介绍(做过的觉得很牛的事情,1. 本科的外卖平台搭建  2. 考研对人生的改变  3. 研究生做的项目 4。 rpc项目的设计与实现,当时参考的东西  4. jvm底层的学习  5. 最难的juc的学习,测试的困难5. 多久能来实习,能干多久,喜欢做哪种工作6. 反问:部门业务 base北京#牛客创作赏金赛##瓜子二手车##北京##我的求职思考##面经##ai智能作图#
查看10道真题和解析 牛客创作赏金赛 我的求职思考
点赞 评论 收藏
分享
2024-12-09 18:06
已编辑
东北大学 Java
测试经历,在百度除了自动化接口测试开发之外还做过什么吗(基本没有)作为测开,你认为在软件生命周期的职责是什么,应该如何保证代码健全然后就开始拷打了你的rpc项目,能聊聊dubbo的架构吗,你的zookeeper拿来干什么的,底层是怎么做的,还实现了哪些东西反射是什么,底层如何实现的栈、堆的区别,哪个更快,为什么,还嫌我栈和堆讲的太简单了,栈、堆都怎么回收垃圾,堆中除了垃圾回收器还能怎么回收,栈怎么回收垃圾类加载的生命周期,双亲委派模型讲讲java的多线程如何实现通信,你说到锁,一般怎么做,一般怎么分(乐观悲观),select加锁吗,你说到synchronized,原理是什么,底层如何实现的,还了解其他锁吗,乐观锁除了cas还能怎么做,synchronized锁一般粒度是多少,锁整个类和方法体对象,锁代码块有什么区别(问的是把关键字放在不同位置,他们锁的对象是啥),synchronized和volatile的区别是啥,volatile是线程安全的吗抽象类和接口的区别,能被实例化吗,里面能加方法体吗,(这里嫌我讲的不够详细,也不够重点)hashmap和hashset底层,哪个更快,为什么,他们都是实现了什么类一题sql,查出学生表中平均成绩大于60的学生数量一题算法,一个字符串,随意拆分子串,一共有多少个子串是回文的最后问我能不能接受养蛊(三个月实习,通过率不详,通过后发offer)。那我当然是同意了挺无语的,感觉是这两周面的最难的一次,啥都问了,最后还得养蛊,本身就是打算面着玩的,没想到这么恶心
查看15道真题和解析
点赞 评论 收藏
分享
评论
28
347
分享

创作者周榜

更多
牛客网
牛客企业服务