你问我答:关于面试过程中的项目亮点,如果没做过高并发的项目该怎么去准备呢?

1,065 阅读3分钟

Q:

小匠,关于面试过程中的项目亮点,如果没做过高并发的项目该怎么去准备呢,包括回答一些qps等等的问题,总觉得一编,面试官很快就能知道你在说谎

**

A:

**

答案只有一个就是学以致用,我的亲身经历,你啃书再透彻,自己的练习 demo 写的再完备,对上面罗列的技术和知识点依然是一知半解。所以你能做的就是推动当前项目做技术变革。

这并不是天方夜谭,当你接到一个需求后评估时间,发现自己可以用 3 周完成,那么这时间足够了啊。首先快速分析一下当前的业务是否使用什么分布式架构?dubbo 或者 spring-cloud,接下来尝试通过自己的分布式架构的理解,配合上文中提到的知识点,书籍设计一个架构图。然后快速评估一下接入这个架构需要的时间,如果是5周,那么每天多干 3 小时,周末加加班,是不是就够了呢?然后就是最重要的时候了,拿着自己的架构图和评估时间去找大佬沟通并且给一个 commitment,自己肯定能搞定。如果老大比较开明那么这件事情就简单了,接下来就看你自己的了。

再举一个“栗子”,如果你正在学习 Redis 的数据结构,你刚好学到 5种基本类型中一种类型叫做 sorted set。sorted set 里 items 内容大于 64 的时候同时使用了 hash 和 skiplist 两种设计实现。这也会为了排序和查找性能做的优化。添加和删除都需要修改 skiplist,所以复杂度为 O(log(n))。但是如果仅仅是查找元素的话可以直接使用 hash,其复杂度为 O(1) ,其他的 range 操作复杂度一般为 O(log(n)),当然如果是小于 64 的时候,因为是采用了 ziplist 的设计,其时间复杂度为 O(n)。

这样以后查询和更新阅读都变得简单,那是不是可以用其实现 TopN 的需求呢?这样类似的需求就不需要你查数据,再在内存里面计算和操作了。比如我们简单的周排行,月排行都可以考虑使用这个数据结构实

这样回想你所有的项目,是不是有类似的需求你可以用 zset 实现?那么去重构,在实际项目中发现问题,寻找问题,这样理解的知识才足够深入。

Q:

也就是说如果项目没有特别好的亮点的话,就只能结合自己的所学,自己发现项目架构存在的问题,自己去发掘亮点

还有一个小问题,面试中遇到这种情况,是直接说项目中不足的情况,然后说出自己对它的优化,还是一上来就说优化,不提原先的糟粕设计

**

A:

**

面试是另一个问题,你研究一下 star 思路,百度一下关键词你就理解了,面试更重要的是体现你的水平,你自己是不是发现了问题,解决了问题,拿到了结果?