【项目篇】如何提升自己应付场景题的能力?
在校招技术岗面试中,基于项目的场景题是最让人抓狂的一个部分,因为这种特别考察综合能力,不像八股文那样,虽然很多,但是可以强行背诵。而场景题,根本无从背起,哪怕背诵了,换一个场景马上就挂了。
所以我觉得,要应付好场景题,最核心的就是具备扎实的计算机基础,只有这样,你才能不畏惧面试官会问什么类型的场景题,因为万变不离其宗,场景题无非就是造火箭,只要我们掌握了造火箭所需要的原件,并且把他们练熟悉,我们就能够和面试官对线。
下面我们来说一说,火箭大概会怎么造的,这样方便我们更好去准备对应的基础知识。
场景题的背后是基础知识的灵活运用
很多系统,如果仅从使用的角度上看,都是可以非常非常简单的,比如如果淘宝只有十几个用户在用,那么要设计出一个淘宝,是非常容易的事,甚至都不需要数据库。
但是如果 一个系统,使用的人非常非常多,比如突然之间,从几百人用,变成几百万人用,那么系统就会变的非常复杂,而这种场景题,大部分就是假设当用户量特别特别大的时候,我们应该如何去设计。
比如当用户多了,数据也自然会非常多,那么单个表的数据就会很大,为了检索数据更快,我们得给一些字段加上索引,这就要求你懂索引的相关原理,你才能更好去权衡;当然,仅仅是索引不一定管用,或许我们还需要用上分库分表,这就要求你懂分库分表的原理;这还不够,为了更快,我们还可以来个主从数据库,而主从的难点则是要保证多个数据库的数据一致性,所以你得懂如何保证数据一致性……
其实其他也是类似的,比如你加个缓存来加快响应速度,而缓存与数据库之间,如何保证数据一致性,这也是一个难点,并且为什么从缓存拿数据会比从数据看拿数据快呢?你得懂计算机的一些底层原理,比如内存为啥快,磁盘为啥慢,而且还有一级缓存二级缓存……
其他也是一样的,场景题的背后,就是考察你对这些知识的灵活运用,而且你会发现,他们都是息息相关的,我打个比方,比如一致性问题,基本很多都会涉及一致性问题,比如缓冲啊,分布式事务啊,主从啊,等等。
但其实,如果你学过 MySQL 的事务是如何保证一致性的原理,那你完全可以把这个原理应用到其他一致性问题上;又比如你学过计算机内存,磁盘,缓存这些,你其实也知道如何优化电脑的响应速度,那也就知道了如何利用缓存去优化一个项目的响应速度,而用了缓存之后,我们会遇到很多问题,那如何解决这些问题,前者其实也会涉及到,那么我们就可以把这些设计思想拿过来用。
也就是说,想要应付面试中的场景题,最好的方式就是,把基础打好,当你积累了一定的基础之后,你就会掌握很多设计思路,那你就基本不怕这种场景题了,哪怕问到你不懂的,那也没有关系,你完全可以和面试官慢慢聊,面试官也会提示你,你大概率也能根据提示,给出一个还不错的方案,那么在面试官看来,你也是合格的。
总结
说实话,当年我面试的时候,也被问过不少场景题,比如项目中的某个问题,突然点击量很大,类似于知乎某个问题突然成为热榜之后,该如何处理?
那遇到这些问题,我其实在此之前并没有去研究过,但是我在回答的时候,基本都能回答个大概,无法就是中间套一层缓存,如果不行就套两层,其他的无非也是加上主从啊,加上负载均衡啊,加上 CDN 啊,等等。
所以呢,大家平时打好基础,然后再找一些经典的场景题看看,就问题不大的了,因为绝大部分的系统设计,都差不多。