简单自我介绍和项目介绍之后。就开始问问题,开始先来了几个八股。然后又开始问保证整个系统在高并发下的如何保证高可用。我从避免单点故障,限流降级,缓存等开始说。之后又出了一道海量数据的处理题。
面试官问的面试题: mysql聚簇索引的原理。为什么用B+树。这个比较简单,稍微准备都答得上来。后面上强度了,mysql插入一条记录的过程,聚簇索引和普通索引的B+树是怎么改动的? 这个说实话我答不出来。 然后又问了 select count(*) 和 select count(column) 的区别,哪个性能高,这个也没答好。
然后问redis,redis在内存满的时候内存淘汰策略是怎么样的。答的过程中有说到LRU然后让我实现一个LRU缓存(哈希表加链表)。
海量数据的处理,要统计一个有50亿个字符串,每个字符串64k的文件中重复字符串出现的次数,并按字数排序,并且你只有2g的内存,借鉴mapreduce的思路给了一个方案。
1. 前同事内推
2. 一面是电话面试,简单聊了一下MySQL的高可用、半同步复制设置的点、以及MVCC为什么采用多版本,而不是通过锁来实现的原因;
3. 给了一道python的编码题,要求实现一个缓存类似的程序,实现多线程高并发读写,同时要求不破坏对象的数据一致性,重点在线程中通信和互斥上,并且说明代码的优缺点;
4. 电话面试官比较和蔼,压力也不是很大;
1. 简单聊了一下MySQL的高可用、半同步复制设置的点、以及MVCC为什么采用多版本,而不是通过锁来实现的原因;
3. 给了一道python的编码题,要求实现一个缓存类似的程序,实现多线程高并发读写,同时要求不破坏对象的数据一致性,重点在线程中通信和互斥上,并且说明代码的优缺点;