1.先盘了20分钟项目
2.mysql索引了解吗?说了一堆(自以为很懂,结果面试官给我细扒聚集索引的细节,一下懵了)。说的不是很清楚我当时,其实MYISAM引擎和 InnoDB最主要的区别就是MYISAM索引和数据时分开放的,它索引的实现都是非聚集索引是叶子结点存放的都是指向该条记录的指针,而InnoDB中聚集索引一张表只能有一个,一般来说就是主键索引(非NULL,不可重复),其他都是非聚集索引(也叫二级索引或者辅助索引),比如唯一索引,普通索引,前缀索引,这些索引的叶子结点里存的就是主键值,根据主键值再回表查(不一定会回表,如果要查的字段正好就是这个索引的话)。
(1)聚集索引一张表只能有一个吗? 是的,只能有一个。
(2)B+树一般是几层啊?(一下给我干懵了,之前看到过说是 三层的话就可以存很多了。B+树让全部数据存到叶子结点中,其他结点不存放数据,每个非叶子结点的分叉大大增多,代价就是每次查找都必须走到叶子结点。)
这里参考:https://blog.csdn.net/qq_37102984/article/details/124296196
(先说结论:一般B+树高大约为1~3层(通过主键索引查询,通常磁盘io数为1~3次),可容纳记录数约2000w条)
在 MySQL 中我们的 InnoDB 页的大小默认是 16k,当然也可以通过参数设置。
在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要 1~3 次 IO 操作即可查找到数据。
①MySQL的InnoDB存储引擎的最小存储单元是页(大小默认是16k,可通过参数设置)。页可用于存放B+树叶节点数据,也可用于存放B+树非叶节点的 “键 + 指针”。
②索引组织表通过非叶节点的 “二分查找” 法以及指针确定数据在下一层的哪个页中,进而再去叶节点的数据页中查找到所需数据。
一个非叶节点可容纳约1170个指针,这里假设一行记录数据大小为 1k,那么底层叶节点一页16k就能存16条记录。叶节点数 * 一个叶节点能存放的记录数 = 1170 * 16 = 18720条 记录数。
(3)非聚集索引怎么找到真正的数据的?
这里应该分引擎说的,我乱了阵脚。在MYISAM中,找到叶子结点,叶子结点的指针指向的就是那条记录,跟着指针查到记录即可。在InnoDB中,非聚集索引(也就是一般我们创建的索引)叶子结点存的是主键,拿到主键之后再回聚集索引(主键索引)中查找。
3.Redis过期策略(没答好,就答了一个惰性删除...)
4.Redis锁用到过吗?(回答的不好)
5.消息队列相关的,这个队列是存在哪里的?消息队列有什么作用?具体的工作原理是什么?
没有算法题,面试官体验感觉比字节的好一些....但是我答得很不好,当天还是约了二面,我怀疑在cpu我嗨呀
#快手面试#