我是y哥的读者,已经毕业几年了,一直在做业务开发,最近想要跳槽。
对线面试官第一季花了大概一周时间吧,被我全部刷完了,刷的速度我觉得还算是挺快的,但是能记下多少,我就不知道了。。对于纯八股文而言,很多不是靠理解的,只要少用到就忘了,忘了自然在面试的时候就答不出来了,还是挺苦逼的一件事的,程序员真的太难了。
除了这些外,我还需要准备补下我用过的中间件,不过好多看y哥都没深入写过啊,比如ClickHouse/SpringCloud啥的,这些后面不知道y哥还有没有打算写,都是挺常见的技术栈(强烈暗示
)。
MySQL章节我看目录就三篇文章,分别是介绍索引、事务/锁/MVCC和调优的。
《MySQL索引》这块只要接触过八股文的,都知道MySQL的索引是B 树的,但是被问到为什么是B 树,不看还真的一时没法组织好语言,原来便于遍历这个也算是B 树的理由。
回表/覆盖索引/最左匹配原则这个很早就知道了,为什么主键要自增,这个原来理由就是非自增会影响到插入效率,之前倒是没怎么想过。
《MySQL事务和锁机制和MVCC》事务的几大特性从初学的时候就开始记,工作了几年之后还得把它给捞出来。持久性(redolog),原子性(undolog),隔离性(事务之间不影响,数据库会有隔离级别),一致性(它是目的,其他的特性都是手段)。
只要说到事务,就会有事务的隔离级别(uc/rc/rr/Serializable),我在校招的时候也被问到这些隔离级别是怎么实现的,面试前推演了一波,结果面试的时候紧张忘了,真尴尬。
- uc:读不加锁,写加锁,读到未提交的事务
- rc和rr都依赖MVCC,而MVCC的原理是read view和undolog,对比版本号来实现,只不过rc是与语句级的,而rr是事务级的。
- Serializable抛开不谈
对于锁的话,只要记住在InnoDB下,命中索引用的是行锁,其他的是表锁。
《MySQL调优》读完,说学到很多东西吧,好像又没有。说没学到东西吧,又不能这样说。这篇是以开发的角度去阐述的,本身我觉得是没问题的,但如果加些运维DBA的角度啥的,那将会绝杀。
线上的查询都应该要走索引,而走索引也可以看着场景去优化。我曾经在B站看过一个技术大佬分享,好像是购物车的案例吧。
跟这里的第六点不谋而合,大概的就是就是说:在一个事务内,本身是写的是更新在前,插入再后,后来把这个顺序改了(本身就没有依赖关系),然后插入的性能提高了许多。(就这么一个小的操作,就一定程度上避免了行锁的等待,进而提升了性能)
然后文章里探讨了如何走了索引,但是还是慢,还能怎么办的操作。思路也挺清晰的:1、数据能不能删 2、能不能上Redis 3、需不需要上Elasticsearch 4、多维度表打散,无需再join 5、OLAP平台能不能用?
后面又聊了分库分表的分库键,迁移的过程大概是怎么样的,这个经历过的都懂,不看也大概能说些。
下个章节项目场景类就三篇文章,我看了,觉得都不难,作为常年CRUD的我,不是啥问题,所以没使我有比较深刻的东西。
《如何实现去重和幂等》唯一Key 存储,性能不够前置来凑。
《系统需求多变如何设计》服务编排 规则引擎能解决,最近我看了个国产的服务编排(LiteFlow),还不错,给大伙推荐推荐。
《设计模式》单例/责任链/代理/策略/模板这些在业务代码里也经常能用到,而Spring也大概这些吧,其他的设计模式我用得也不多了。
最后一个章节是计算机网络了,八股文又又又回来了。不过就两篇,HTTP和TCP。好久没看过了,又又又又被我忘了,这个我在校招的时候绝对是很熟的,因为无论哪个公司都会问网络的。
《TCP三次握手和四次挥手》真的是经典面试问题啊。y哥总结还是不错的,三次握手实际上就是在确认通信双方(客户端和服务端)的序列号。连接本质上「只是互相维持一个状态,有连接特性」
而四次挥手的考点一般就是会考TIME_WAIT这个状态等待2MSL有啥用,过多了有什么问题。
《HTTP》主要就考察HTTP每个版本有什么区别,现在重点应该还是在HTTP/2上,主要能聊的我感觉是二进制分帧和多路复用这块上。HTTPS也可能会考察下这个加密的过程。
后面等面试的时候,给y哥投下面经吧,实验下对线面试官的内容能占面试多少,我也挺好奇的。