快手电商一面
1、mysql有哪些索引类型
https://www.cnblogs.com/luyucheng/p/6289714.htmlhttps://segmentfault.com/q/1010000003832312
https://www.yanxurui.cc/posts/project/2017-07-15-mysql-full-text-index/
普通索引(单列索引、联合索引)
全文索引
唯一索引
主键索引
hash索引
2、主从同步延迟如何解决?可以调整哪些参数?为何用mix类型,sql同步会有什么问题?
答:
binlog有三种格式:行模式,语句模式,混合模式。binlog只在提交事务时写一次,在server层实现。 延迟的原因:
(1)主库执行大量dml操作,产生大量的binlog,从库sql线程重放不过来,造成中继日志积压。可以水平拆库。
(2)大事务可以缩小,及时提交。
(3)可能从服务器压力较大,可以加机器。
(4)从库有其他实例,配置和主库不一样
3、主库挂了,从库自动切换么?mysql参数调优
需要代码实现切换,例如通过zk实现动态切换。
4、如何利用mysql做个复杂系统?
分库分表。
5、lock的实现,底层基于AQS实现。
aqs如何实现,是双向列表吗?是的。
非公平锁如何实现?获取锁时如果当前锁可用,直接得到锁,不会进入排队,也就是可以插队。
6、快排实现
确定第一个元素的顺序,然后作为分割点并交换,最后达到左边比分割点小,右边比分割点大,不对进行二分即可。
7、redis zset层高算法如何实现
层高应该是随机的,且有个最大值,例如最大是32,避免占用太多空间。
8、rdb如何实现,fork什么原理
(1)rdb是全量复制,每次都会fork一个子进程,对当时的内存快照进行存储。
9、java有哪些队列的数据结构?阻塞队列的实现原理是什么? https://www.jianshu.com/p/065b7c5e820b
(1)DelayQueue/BlockingQueue
(2)阻塞队列的原理,主要是take/offer的时候,如果空了或者满了会阻塞主,直接有数据可取或者可以放。
10、redis sortedset是否打满,有什么解决措施?
起个定时任务进行监控,如果达到一定长度,可以拒绝并报警。
