博主一学弟在研一六月的时候开始刷 leetcode,在 b 站上看了一个视频把本科学的算法分析给捡起来了,然后花了两个月左右的时间大量刷题,然后参加周赛锻炼,基本上每次都能做出三题,偶尔能做出四题,觉得差不多的时候就只做每日一题了,然后在 B 站上看多线程,网上找了一个烂大街的高并发商城秒杀项目做了做,又凑了一个实验室的垃圾项目包装了一下,项目如下:
投递,笔试(1.76/2)
问题记得不是很全,开始先聊了会天
二面是我觉得最刺激的面试(小声 bb:问了很多八股)
是个大老板面,主要是聊天,然后围绕项目问了一些生产上的问题,结果当然是答得一般般。三十分钟
这个就没什么好说的,常规问题,手里有啥 offer 吗,公司怎么选择啊,还介绍了项目,这是没想到的,二十分钟。
然后就是漫长的等 offer 时间,找了内推人和一面面试官好几次(一面面试官人挺好的),等了整整三个星期才收到意向书,期间收到了美团的offer,要不然这日子是真的难熬。
1. 什么是索引?
索引是一种数据结构,可以帮助我们快速的进行数据的查找.
2. 索引是个什么样的数据结构呢?
索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引.
3. Hash索引和B+树所有有什么区别或者说优劣呢?
首先要知道Hash索引和B+树索引的底层实现原理:
hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据.
那么可以看出他们有以下的不同:
因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围.
hash索引不支持使用索引进行排序,原理同上.
hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAA和AAAAB的索引没有相关性.
hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询.
hash索引虽然在等值查询上较快,但是不稳定.性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差.而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低.
因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度.而不需要使用hash索引.
4.唯一索引比普通索引快吗, 为什么
唯一索引不一定比普通索引快, 还可能慢.
查询时, 在未使用limit 1的情况下, 在匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现不匹配后返回. 如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微.
更新时, 这个情况就比较复杂了. 普通索引将记录放到change buffer中语句就执行完毕了. 而对唯一索引而言, 它必须要校验唯一性, 因此, 必须将数据页读入内存确定没有冲突, 然后才能继续操作. 对于写多读少的情况, 普通索引利用change buffer有效减少了对磁盘的访问次数, 因此普通索引性能要高于唯一索引.
1.Server
2.存储引擎: 存储数据, 提供读写接口.
1. MySQL支持哪些存储引擎?
MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory,Archive等等.在大多数的情况下,直接选择使用InnoDB引擎都是最合适的,InnoDB也是MySQL的默认存储引擎.
InnoDB和MyISAM有什么区别?
数据量过大的情况下, limit offset分页会由于扫描数据太多而越往后查询越慢. 可以配合当前页最后一条ID进行查询, SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT}. 当然, 这种情况下ID必须是有序的, 这也是有序ID的好处之一.
阿里的面试体验挺好的,非常快,一面的时候不会的还告诉了答案,就是等的太漫长了,总之要给项目赋能(包装),给面试官打造面试抓手(让面试官有处可问),形成将问题引向自己会的方向的打法。
篇幅有限!篇幅有限!关于缓存架构技术:Redis+MongDB,就聊到这儿啦…啦…啦…
以上博主所介绍的全部相关的笔记资料都已整理成册,手写pdf笔记,想白嫖都很so easy!!
——如果你get到了,那就点个赞转发支持一波吧!
——祝前程似锦,offer不断,好好学习,天天向上!