
字节国际电商一面(3.12) --凉
不得不说,面试官问的一些问题还是很值得去思考的,有些地方平时真的没有想到啊
JAVA
- hashmap 扩容时为什么有可能死锁
- 红黑树的旋转具体流程
- 链表和数组的使用场景
- 数组访问速度快,但插入删除慢,且内存必须连续,可能存在空间浪费或不足无法扩展
- 链表插入速度快,可以动态开辟空间,适合频繁增删改,但是访问速度慢
- 环形链表的应用
- 资源循环分配,循环队列(体现公平性、轮询)
- 怎么实现链表,有什么方式 ### MySQL
- MySQL的B+树是如何分裂的
- 每个索引页面维护了一个上次插入的位置,以及上次的插入是递增/递减的标识
- 对于新插入的数据,如果不满足递增/递减的约束,采用传统的50%分裂策略,把50%的数据移入新的一页
- 否则,采用优化策略,原本满的页数据保留。对于新插入的递增/递减数据,如果相邻页可以存放数据,并入,否则,将其单独放入新页(减少了空间利用率低的问题)
- 并入策略是为了避免下图这种BUG使得空间利用率更低
- 每个索引页面维护了一个上次插入的位置,以及上次的插入是递增/递减的标识
- mysql数据空洞问题,如何解决
- mysql的执行原理
- 连接器:拦截器与客户端建立连接,权限验证(默认为长连接,可以接受多个请求)
- 分析器:对SQL语句词法分析,语法分析,检查SQL语句执行权限
- 优化器:优化SQL语句,分析索引使用
- 执行器:打开目标表,从存储引擎获取所有数据后响应给客户端
- limit分页怎么优化 > 分页的问题,limit是把offset+target数据全部查出来后再丢弃offset数据,查询数据每行都回表,性能降低 低效率SQL:SELECT * FROM 表 a, where 条件 LIMIT 100000,20;
- 延迟关联(本质是索引覆盖) SQL更改为:SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id
- 子查询在利用索引的同时,只查询符号条件的id,无需回表,效率高
- 查出来的数据是小表 join 原来的大表a,对于小表的每个id,直接从a表的主键索引拿到对应的行,只有目标的20行使用了主键索引