文章标题: 「第十九期」虾皮社招后端面经
简介:
本文分享了「第十九期」虾皮社招后端面经,包括算法题、面试官提问的知识点以及面试评价等内容。文章内容详细,对于准备后端面试的同学非常有参考价值。
算法题比较简单,输入输出都是基本功,刷过题的都会,最难也就是中等题中的简单题。
一面:
面试官拿着我的简历,围绕以下知识点进行了提问:
Redis 和 MySQL 可以用 binlog 同步全量数据,也可以更新 MySQL 后删除 Redis 更新缓存
Kafka 架构,WAL,一致性保证(producer 用 PID,consumer 用 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++ 写过,编程的模型完全不一样,所以花了很大篇幅解释)
一致性 hash
Redis、多写的分布式一致性原理(这个我参考 HDFS 的分布式设计方案,读写锁,多段提交,基于 codis 方案的健康管理和 hash)
高并发系统设计(Redis、限流器、前端,层层拦截),照着秒杀系统的框架往里面套
三面:
Boss 的压力测试
Hash 表,一致性 hash
设计库存服务的系统设计
- 一致性原理
总的来说,面试官提出的问题比较有深度和广度,涉及分布式系统、缓存、数据库等方方面面的知识点。虽然有些问题"为难而难",但只要保持平和的心态,认真回答就行了。最终的评价还可以。