转载声明:文章来源https://www.nowcoder.com/discuss/584869081673650176
第一次面试,不过没考算法,面试官没开摄像头,面完之后HR无联系只有邮件发了个问卷,盲猜KPI,发出来攒人品。
自我介绍,主要围绕项目问的问题
1.Citus数据库物流项目
介绍7张表和基本业务逻辑,仓库、订单、顾客、订单、商品、订单项、库存。。。。一些字段的类型简要说了一下
分库分表:为什么要使用仓库id和地区id拼接作为分片键?
之前的方案导致了分布不均匀,影响耗时(说了下怎么排查和select看节点的shard_size)保证节点数据分布均衡,缓解数据倾斜情况对于业务耗时的影响,分片键原则(尽量在共有列分片)
当前的分片方案下,之后业务中是否仍然会出现数据倾斜情况?
有可能,但是当前分片是在课题给定数据情况下的较优解,如果新增的订单均来自相同的仓库&地区,那么仍然会出现问题,不过项目主要围绕DAO层面SQL完成业务的实现,对于上一层的服务来说,要避免这个情况需要新建订单时,根据库存表、地区表来分配新Order的主键,一方面要保证对应地区的库存够,一方面要让新建的Order尽量均匀的散步到不同节点(我临时想的)
具体是怎么通过索引优化查询的?
先讲了一下理论,对所有业务中所有的SQL语句的order by, where等条件排查,涉及到复合索引的查询要注意顺序(最左匹配),用explain来查看执行计划,对没有覆盖上索引的键,评估具体业务内容之后再单独建立索引,举了个例子,查询欠款额最高的用户,分析了一下这类业务占总量的多少,在balance上构建索引,优化了多少百分比
2.牛客论坛项目
简单介绍,主要的技术栈是Redis和Kafka,但是面试官没问kafka
Redis数据类型?
八股,顺道提了一下网站用bitmap和hyperlog统计DAU和UV
哪里用了redis?
保存登录凭证(自动过期,频率高),点赞(去重),二级缓存(redis+caffeine)
点赞功能怎么做的?
点赞数用redis来存,为什么?去重,两次点击为取消点赞,两个key-value结构,实体id-点赞用户id,实体id-获赞数量。
点赞怎么持久化?
用来给帖子打分的定时任务顺道刷到MySQL的帖子表中
为什么做二级缓存,缓存怎么做的?
主要在热门的帖子榜单上做,一个是因为更新稳定,一个是访问频繁,另外本地缓存快,讲了一下网络开销,caffeine+redis,先后怎么访问巴拉巴拉
你的缓存怎么保证一致性?
有点宽泛,我分了两点,一个是一致性要求高的情况 -- refer黑马点评抢券,一个是一致性可延时的情况,本项目榜单属于后者,定时任务刷盘即可,做修改和删除,如果存在热榜中,那么MQ发一个消息做异步缓存删,然后请求过来重新到数据库更新一道缓存
3.Spring
有了解过AOP吗,底层原理?
有的,胡扯了了一下定义和作用,原理是反射获取类中的方法,延申具体应用场景,一个是操作日志记录,一个是统一异常捕获,一个是公共字段填充 -- refer苍穹外卖
有了解过动态代理吗?
知道这个词但没背,直接坦白,笑
反问:
1.组里做什么业务?
得物国际版的库存方面,对接国内卖家和进口卖家,SaaS短链(听说过,但是具体是啥不知道,不懂装懂点头)
2.有没有二面?
问hr,补充说一般技术面是有两面,太极拳?
3.我5月才能回国,日常实习可以那个时候入职吗?
问hr
没考算法有点惊讶,对于第一次面试来说,面试官声音比较年轻,给人的感觉很好,个人感觉答的还行,除了动态代理那个问题,其他都扯了一会儿。
年前投了一片,就得物回应了我,安排了面试,年后再说吧,明天去看间谍过家家剧场版了。