二试时面对电商系统层层提问,我太难了

二面的面试官来到来我的跟前,开始对我的简历进行了一番打量然后就开始了技术提问。

面试官: 看了下你在简历上边有写到过关于电商系统的设计,那我想深入问下你在电商系统设计的几个问题哈。

小林: 好的。

面试官: 你们电商系统的每天的日活量大概在多少呢?

小林: 嗯,日活用户数目在5万左右,搞促销活动的时候还会涉及到一些大流量的访问。

面试官: 嗯嗯,那么接下来我问你几个系统内部设计的场景吧。

小林: 嗯嗯。(表面风平浪静,内心还是会有些慌张)

**面试官:**你刚才提到了促销活动,那么在搞促销活动之前,你们应该会有一些特殊的准备吧,能和我讲几个场景的实际案例吗?

小林: 嗯嗯,我们的商品信息其实是存储在mysql里面的,当进行促销活动的时候需要进行一次预热工作,将一些热点数据加载到缓存层当中,减少对于实际mysql访问的压力。在缓存方面我之前一贯都是使用了redis来存储数据,但是高峰时期对于redis的查询依然是需要网络消耗,有些特殊的业务场景需要在循环里面对redis做查询(老旧代码的原因,不推荐在工作中这么使用),因此这部分的模块我加入了本地缓存作为优化手段。

面试官: 嗯嗯(就这??)

小林停顿了一会,看面试官似乎还觉得说得不够,然后继续回答接下来的内容点。

小林: 对于一些热点数据而言,我们的本地缓存使用的是Guava Cache 技术,它提供了一个LoadingCache接口供开发者进行缓存数据的本地管理。当查询数据不存在的时候会发生缓存命中失效,这时候可以通过定义内部的一些callable接口来实现对应的策略。

ps: 此时小林想起来自己以前刚学习guava cache技术时接触的代码:

 
 

//这种类型到好处在于 查询数据的时候,如果数据不存在,那么就需要写如何从内存里加载,每次查询都需要做一个callable的处理 Cache<Object, Object> cache = CacheBuilder.newBuilder().build(); cache.put("k1","v1"); //如果对象数据不存在,则返回一个null值 Object v1=cache.getIfPresent("k1"); Object v2 = cache.get("k2",new Callable<Object>(){ @Override public Object call() throws Exception { System.out.println("该数值不存在,需要到redis去查询"); return "k2"; } }); System.out.println(v1); System.out.println(v2);

面试官:如果每次查询不了数据都需要在get的时候去重写策略,岂不是很麻烦吗?(其实面试官也用过这款技术,就是故意深入问问求职者是否有更多的了解内部构造)

小林:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值