先来说说我自己情况吧,二本毕业,对自己的专业不怎么满意,感觉学历也不是很好,想转行干互联网,于是自己自学了半年Java,出来面试,只能说是一把辛酸泪啊,我自认为我学了这么久,应该至少能轻松通过一面,可只能说行业竞争太激烈,互联网寒冬可不是开玩笑的,失败率高居不下,相信也有很多应届毕业生也有跟我一样的遭遇吧,说实话,碰壁多了难免会自我怀疑,但是我没办法,既然自己选了这条路,中途放弃也不知道能去干什么,曾一度陷入很emo的状态,但是还是得继续找工作,继续学习啊,这里我也分享一下自己的面试经历吧,希望大伙能吸取点我失败的教训
前传
一面的面试官来到来我的跟前,开始对我的简历进行了一番打量然后就开始了技术提问。
面试官:什么是大事务?
我:就是 很大...的...事务??(说好的问基础,为啥我感觉一点也不基础呢?)
面试官: 看了下你在简历上边有写到过关于电商系统的设计,那我想深入问下你在电商系统设计的几个问题哈。
小林: 好的。
面试官: 你们电商系统的每天的日活量大概在多少呢?
小林: 嗯,日活用户数目在5万左右,搞促销活动的时候还会涉及到一些大流量的访问。
面试官: 嗯嗯,那么接下来我问你几个系统内部设计的场景吧。
小林: 嗯嗯。(表面风平浪静,内心还是会有些慌张)
面试官:你刚才提到了促销活动,那么在搞促销活动之前,你们应该会有一些特殊的准备吧,能和我讲几个场景的实际案例吗?
小林: 嗯嗯,我们的商品信息其实是存储在mysql里面的,当进行促销活动的时候需要进行一次预热工作,将一些热点数据加载到缓存层当中,减少对于实际mysql访问的压力。在缓存方面我之前一贯都是使用了redis来存储数据,但是高峰时期对于redis的查询依然是需要网络消耗,有些特殊的业务场景需要在循环里面对redis做查询(老旧代码的原因,不推荐在工作中着么使用),因此这部分的模块我加入了本地缓存作为优化手段。
面试官: 嗯嗯(就这??)
我停顿了一会,看面试官似乎还觉得说得不够,然后继续回答接下来的内容点。
我: 对于一些热点数据而言,我们的本地缓存使用的是Guava Cache 技术,它提供了一个LoadingCache接口供开发者进行缓存数据的本地管理。当查询数据不存在的时候会发生缓存命中失效,这时候可以通过定义内部的一些callable接口来实现对应的策略。
面试官:如果每次查询不了数据都需要在get的时候去重写策略,岂不是很麻烦吗?(其实面试官也用过这款技术,他就是故意深入问问求职者是否有更多的了解内部构造)
我:嗯嗯,其实可以在定义LoadingCache做一个全局性的callable回调操作处理,我脑海中还对这段代码有印象,主要是通过cacheloader来做实现。
面试官: 嗯嗯,那你对于这些缓存算法有过相关研究吗?可以讲讲自己的理解吗?
我: 嗯呢,常见的缓存队列可以采用lru算法,所谓的lru其实本质的核心就在于:最近最久未使用的数据,可能在将来也不会再次使用,因此当缓存空间满了之后就可以将其淘汰掉。简单的实现思路可以用一条队列来实现,当数组中的某个元素存在且再次被访问的时候就会将其挪到