我面试了个目标50w的大厂老哥,很符合预期

科技人鱼皮 2024-08-06 03:55:11

大家好,我是程序员鱼皮。上周我直播模拟面试了一位很优秀的老哥,有些感受想和朋友们分享分享。

先简单介绍一下:老哥是一本硕士出身 + 在大厂做后端开发 2 年,buff 拉满,目标是通过跳槽冲击 50 万的年薪。

说实在的,面试前我有点紧张,我自己满打满算在腾讯待了 4 年,深知能进大厂的朋友战斗力都很强,若是老哥提前准备了一些八股文,想必能反过来吊打我一波。所以我放平心态,准备把这场面试当做一场技术交流,自己应该也能学到不少东西。

结果面试下来,我的感觉是还好,很符合预期。咳咳,只不过这里的 “符合预期” 并不是指老哥能稳拿 50 万年薪的工作了,而是指很符合我对工作两年的程序员的状态的预期。

具体是啥意思呢?让我们先来看看面试过程吧,看完答案就不言而喻了。

为方便记忆,以下暂时称呼老哥为 “原坤”。

面试现场

因为时间隔得有点久了,不保证 100% 还原,凭着印象给大家分享一部分内容,可以在 编程导航 看到完整的模拟面试直播回放。

由于老哥的简历上写了 “深入理解 MySQL”,而 MySQL 也是衡量后端开发水平的关键技术,所以我打算先从 MySQL 开始问。

鱼皮:先来道基础的八股文暖暖场吧, MySQL 中 InnoDB 和 MyISAM 有什么区别?分别有哪些适用场景?

原坤:InnoDB 支持事务、有外键、支持安全恢复,适用于需要保证数据完整性的场景;MyISAM 查询性能更高。。。

鱼皮:回答的还不错,虽然漏了一些点,比如 MyISAM 只有表级锁、InnoDB 支持行级锁,能更精准地控制并发。

鱼皮:那我们提高下难度,有没有了解过 MySQL 底层是怎么对要执行的 SQL 语句进行优化的?

原坤:额。。索引?B+ Tree?

鱼皮:那我给个小提示,有没有了解过 MySQL 的查询优化器?

原坤:额。。

鱼皮:那我再问的具体一点,MySQL 的查询优化器可以做哪些事情?比如重写查询语句?它又是怎么选择执行计划的?

原坤:阿巴,阿巴!

鱼皮:好吧,看来是没有了解过,有空可以去阅读下《高性能 MySQL》这本书,开局就提到了优化器的概念,是非常重要的知识点。

鱼皮:那再问一道场景题,分享一次 MySQL 性能优化的经历?怎么发现的慢 SQL?

原坤:之前有一次线上接口超时,通过监控发现是有慢 SQL,然后加了个索引成功解决。

鱼皮:不错,那有哪些 MySQL 性能优化的方法呢?

原坤:禁用 select *、加索引,索引有个最左前缀原则。。。

鱼皮:除了加索引外呢?(一脸期待)

原坤:额,可以优化 SQL 语句?

鱼皮:除了修改 SQL 语句外呢?有没有更上层或者更底层的方法?

原坤:阿巴,阿巴!

鱼皮:好吧,可能是平时工作没怎么接触过,其实 MySQL 性能优化的方法非常多,除了你说的这些,可以运用批处理、库表设计(比如避免联表查询)、缓存、修改配置、选择合适的引擎或技术栈、分库分表、读写分离,甚至是升级物理机的配置来优化。

原坤:确实,刚刚思路被局限了,平时工作一般就是写 SQL,机器配置啥的都有运维来管,分库分表什么的也不需要我们关心。

鱼皮:我看你简历上还写了 “深入理解 Redis”,那还是老规矩,先来一道简单的开胃题,Redis 的 string 数据结构底层是怎么实现的?

原坤:我知道,SDS!

鱼皮:那什么是 SDS?

原坤:额。。。忘了,太久没看了。

鱼皮:那你属于是知道却又不知道了。我给个提醒,除了 SDS 之外呢?还有没有其他的实现方式?

原坤:那我不知道。

鱼皮:好吧,看来是没有准备过八股文了,那接下来我也不问八股文了,问一些系统设计和场景题。就拿一个经典的问题来说吧,怎么设计一个高并发的点赞系统?

原坤:需要有点赞记录表和点赞总数表,要使用消息队列来异步写记录,可以使用缓存来提升读性能。

鱼皮:不错,2 个核心点是回答到了,还能想到更多的么?我给个思路的提示,从系统架构、性能优化、可用性 / 稳定性优化、存储优化等角度考虑。

原坤:额。。。

鱼皮:没事,一个成熟的高并发点赞系统还是非常复杂的,像我之前学习过 B 站的千亿级点赞系统服务架构设计,涉及到了 RPC、服务网关、聚合请求、分库分表、三级缓存(本地缓存、分布式缓存、数据库)、数据同步、容灾备份等等,感兴趣可以去了解一下,这种题比较发散,一定是答的点越多越加分。

鱼皮:我看你的工作经历中经常跟消息队列打交道?

原坤:是的,我们大厂有自己的消息队列平台,直接申请就能使用和接入数据了。

鱼皮:那再问你一个系统设计题,怎么设计一个消息队列云服务平台?开发者可以按需申请资源和数据订阅。

原坤:嗯,首先要能管理和配置 Topic,还要对资源进行监控,差不多想到这些。

鱼皮:嗯没错,那你们公司内部的员工怎么登录这个平台呢?总不会是手动输入账号和密码吧?

原坤:对,我们是直接一键登录。

鱼皮:一键登录是怎么实现的呢?有个技术名词叫什么?

原坤:额。。一时间想不起来了

鱼皮:有没有了解过 SSO 或者 OAuth 2?

原坤:额,有了解过,但是不知道原理。

鱼皮:好吧,那再问一道和你做的项目相关的题目:你们系统在对接上游的任务系统来获取数据时,怎么防止消息丢失? 怎么防止重复消费? 这是结合业务场景 + 工作经验 + 八股文的一道经典题目。

当我问到这道题的时候,原坤显得有些激动了,显然是问到他擅长的地方了。篇幅有限,以下省略 1000 字的回答。

面试总结

通过这场面试,能很明显地发现候选人的不足,也非常符合工作 2 年的程序员的状态,总结一下就 6 个字 —— 上不去、下不来 。

“上不去” 是指仅仅关注自己工作中用到的技术,不拓宽自己的眼界去了解更多的技术选型,也没有跳出单个项目或技术、站在更高的全局视角去学习系统的架构设计。“下不来” 是指没有深入了解过技术的底层原理和实现细节,对校招来说这可能没那么重要,但当你正式工作了,必须要有自己的核心竞争力,跟其他经验不足的同学要有明显的区别。只有更多地了解底层,才能发现别人看不出来的性能问题和可优化点。

我相信大多数工作后的同学都是这样,除了刚毕业那一年有点自主学习的劲头外,后面基本上就只关注自己的工作内容,不怎么了解其他的知识了。这样其实就很容易出现 “偏科” 的情况,比如原坤老哥,因为工作中用消息队列比较多,所以问到消息队列的时候,他能够答出更多的内容,像 MySQL 和 Redis 等其他知识基本就只局限于会用而已。只能等到跳槽的时候,再去学习突击,比如背背八股文什么的。由于现在校招的竞争在加大,应届生基本都是要准备八股文的,这就导致了一个有趣的现象,很多工作几年还在写 CRUD 的人,技术水平可能还不如应届生。如果你在工作中不持续学习,水平很有可能不增反降。

哪怕像我当时在腾讯这样的大厂,还同时负责不止一个项目,工作 2 年半后,我都觉得自己能学到的东西很有限了,能预料到继续保持这种状态我肯定会躺平。所以我还是选择创业,给自己营造一个无法躺平的环境,虽然累点儿,学到的东西会更多。

好吧,就聊到这里~ 今天晚上 19 : 30,我还会在 B 站《程序员鱼皮》模拟面试,跟大家一起交流分享技术,欢迎来围观,谢谢大家!

上述的所有面试题,都可以在 程序员面试刷题网《面试鸭》 查看题解哦~

更多

编程学习交流:

简历快速制作:老鱼简历:

✏️ 面试刷题神器:面试鸭:

0 阅读:17

科技人鱼皮

简介:感谢大家的关注