前言
昨天,有个女孩子问我提高数据库查询性能有什么立竿见影的好方法?
这简直是一道送分题,我自豪且略带鄙夷的说,当然是加「索引」了。
她又不紧不慢的问,索引为什么就能提高查询性能。
这还用问,索引就像一本书的目录,用目录查当然很快。
她失望地摇了摇头,你说的只是一个类比,可为什么通过目录就能提高查询速度呢。
唉,对啊,通过书目可以快速查询,这只是一个现象,真正原因到底是什么呢。
那女孩看着诧异且表情僵硬的我,满意而又意味深长的笑笑:原来你这个男程序员也不会,看来我还得靠自己研究了。
哎,熬夜又要憔悴了我这该死的美貌。
来自同行的羞辱,是可忍孰不可忍?!
于是,我踏上了数据库索引学习的不归路,原来数据库索引使用了一种叫 B+ 树的古老数据结构,当然也有 Hash 等类型,暂且不说,可 B+ 树 这是个什么妖魔鬼怪呢?
下面就来浅尝辄止的扒一扒树的前世今生。
01 阿里面试题之MySQL
之前的阿里面试题都有做总结,具体面试题内容整理成了文档,本文是针对MySQL系列的,所以下面只展示了自己第一次面试阿里时被吊打问到的一些MySQL难题
- 请解释关系型数据库概念及主要特点?
- 请说出关系型数据库的典型产品、特点及应用场景?
- 请详细描述 SQL 语句分类及对应代表性关键字。
- 什么是 MySQL 多实例,如何配置 MySQL 多实例?
- 如何加强 MySQL 安全,请给出可行的具体措施?
- 误操作执行了一个 drop 库 SQL 语句,如何完整恢复?
- 详述 MySQL 主从复制原理及配置主从的完整步骤。
- MySQL 如何实现双向互为主从复制,并说明应用场景?
- MySQL 如何实现级联同步,并说明应用场景?
- MySQL 主从复制故障如何解决?
02 二战阿里,天猫团队面试题(3轮技术面+HR面)
阿里面试技术题:
- 自我介绍呗
- 项目介绍呗(先自己介绍项目,然后再聊天)
- junit用法,before,beforeClass,after,afterClass的执行顺序
- 分布式锁
- nginx的请求转发算法,如何配置根据权重转发
- 用hashmap实现redis有什么问题(死锁,死循环,可用ConcurrentHashmap)
- 线程的状态
- 线程的阻塞的方式
- sleep和wait的区别
- hashmap的底层实现
- 一万个人抢100个红包,如何实现(不用队列),如何保证2个人不能抢到同一个红包,可用分布式锁
- Java内存模型,垃圾回收机制,不可达算法
- 两个Integer的引用对象传给一个swap方法在方法内部交换引用,返回后,两个引用的值是否会发现变化
- AOP的底层实现,动态代理是如何动态,假如有100个对象,如何动态的为这100个对象代理?
- 是否用过maven install、 mave