算法题比较简单,输入输出都是基本功,刷过题的都会,最难亦便是中等题中的简单题。
一面
面试官拿着我的简历, redis 和mysql 能够用binlog 同步全量数据,亦能够更新mysql后删除redis更新缓存kafka 架构,WAL,一致性保准(p用pid,c用offset管理,broker用WAL和并发锁,partition、replica高吞吐),broker的并发锁,offset用特殊topic收集存在zookeeper里es mysql用 mysql binlog同步的架构+同步方法,这个属于ETL的过程hash表,jdk1.8后的hashtable特别有说头,数组+链表+红黑树+rehash都能展开来讲一致性hash(dynamo的hash方法,2^64的hash空间,每一个设备加入集群随机撒点,key hash后按顺时针找设备,每一个kv顺时针存在三个点上),怎么处理数据倾斜(nmk,n指加设备,m指撒更加多点,k要检讨partitionkey 或key后加随机值)mysql 索引一个脑筋急转弯
二面多线程多进程的区别(由于我都用c++写过,编程的模型完全不同样,因此花了很大篇幅解释),一致性hashredis、多写的分布式一致性原理(这个我参考hdfs的分布式设计方法,读写锁,多段提交,基于codis方法的健康管理和hash)高并发系统设计(redis、限流器、前端,层层拦截),照着秒杀系统的框架往里面套。
三面
boss的压力测试 hash表,一致性hash设计库存服务的系统设计表结构一致性原理
非常多问题便是为难而难,放平心理就行了。
评估: 总的来讲还行,不会的就说不会,例如一面有问到kafka broker并发的时候加锁,由于无看过源码因此不晓得有这么回事,但最后的评估还能够。一二面都有算法题,难到是不难。本来听说要面golang的,准备了垃圾回收,tcmalloc,内存管理,协程调度,context的内容,然则一个都没考,很蛋疼。谷歌三驾马车,一致性hash,redis,mysql,高并发,分布式系统设计,这些八
|