马小帅面试遇“灵魂拷问“
互联网大厂Java面试实录:马小帅的求职之旅
第一轮提问
面试官:早上好,马小帅。请你先简单介绍一下自己,以及你过往的项目经验。
马小帅:早上好,面试官。我叫马小帅,毕业于XX大学计算机专业。我之前在一家互联网公司做过两个项目,一个是内容社区平台,另一个是电商系统。内容社区主要是用户发帖、评论、点赞这些功能;电商系统就是商品展示、购物车、下单这些。
面试官:很好,你提到的内容社区和电商系统都是常见的互联网场景。首先我们来看内容社区,假设你要构建一个高并发的用户发帖系统,你会如何选择技术栈?为什么?
马小帅:嗯...用户发帖系统啊,我会选择Spring Boot作为后端框架,因为Spring Boot开发效率高。数据库我会用MySQL,因为用得最多了。缓存用Redis吧,提高读取速度。
面试官:不错,Spring Boot和Redis在这个场景下是很常见的选择。那么对于数据库设计,你会如何设计用户表和帖子表的主从复制架构?
马小帅:主从复制啊...就是一台主服务器处理写请求,多台从服务器处理读请求吧?具体怎么配置我不太清楚...
面试官:没关系,这是一个分布式架构的问题。那么在用户发帖时,如果需要记录用户的操作日志和搜索索引,你会选择哪些技术方案?
马小帅:操作日志我会用数据库记录吧?搜索索引...好像是Elasticsearch?但具体怎么集成我不太清楚...
面试官:Elasticsearch是一个很好的选择。最后一个问题,如果系统需要支持消息推送功能,你会选择哪种消息队列?
马小帅:消息队列啊...Kafka吧?听说它性能很好。
第二轮提问
面试官:好的,接下来我们来看电商系统场景。假设你要构建一个秒杀活动页面,你会如何设计后端服务来应对高并发访问?
马小帅:秒杀啊...肯定会加锁吧?用数据库锁或者分布式锁?
面试官:加锁确实是一种方案。那么除了加锁之外,你还会考虑哪些技术手段来提升系统的并发能力?
马小帅:异步处理?比如使用消息队列把订单请求先存起来再处理?
面试官:没错,异步处理是提高并发的一种重要手段。那么在秒杀过程中如何防止恶意刷单行为?
马小帅:可以设置验证码吧?或者检查用户IP地址是否重复访问?
面试官:很好。接下来谈谈数据库方面的问题。在电商系统中商品信息表通常会包含大量的图片和描述信息,你会如何设计这张表的数据模型?
马小帅:商品ID、商品名称、价格这些基本字段肯定要有的。图片和描述可以存起来数据库里?但这样数据库会不会很大...