又跳槽!3年java经验offer收割机的面试心得

中厂->阿里->字节,成都->杭州->成都

系列文章目录和关于我

0.前言

笔者在不足两年经验的时候从成都一家金融科技中厂跳槽到杭州阿里淘天集团,又于今年5月份从杭州淘天跳槽到成都字节。自认为自己在面试这方面有一点心得,处于记录和分享的目的便有了此文,此文纯主观,也许对3年社招的同学有所帮助。

本文主要是面试技巧,技术方面不涉及。

1.面试前

1.1 项目亮点梳理

也许你和我一样,写简历的时候写到项目亮点环节,感觉无从下手。

笔者在阿里甚至很少写数据库,大多做一些查询展示的功能,那么项目亮点从何而来?

亮点不等于高并发

实际618这种高峰情况下,生产环境有些接口qps小于机器数doge。不要觉得自己没有高并发的经验就觉得自己没有亮点。

你缺少发现亮点的眼睛

由于你是实际写项目的人,"不知庐山真面目,只缘身在此山中",很多时候你也许需要另外一个人听你描述项目,在对方的问题中你将找到项目的亮点!(这个人可以是我,详见文末!)

亮点不一定是你已经实现的

在真实场景中,也许因为排期、不要过度设计、或者其他原因,真正实现的方式是一口气梭哈,甚至在极端场景下是有题的。

  • 亮点可以来自你yy想出的:也许你可以想一个更加完善、更加具备扩展性、稳定性的设计,只要你能较完备的设计出方案,并且方案是可行的,那么这可以作为你的亮点,即使你没有写代码。

    例子:我在淘天的时候有一个依赖第三方抽奖接口的功能,代码实现是调用第三方接口,然后同步落表,并依靠消息来保证最终一致性。在这个背景下,我yy了使用本地消息表的分布式事务,这便成为了我的项目亮点。

  • 亮点项目不一定是你做的项目:虽然这有点不诚实,但是大部分情况下核心功能轮不到你做,如果你能主动的去梳理这个功能,了解需求背景、技术方案、稳定性等相关内容并融合贯通,那么这个项目又何必是你做过的?doge

想清楚怎么描述你这个项目

一般来说,面试的时候会让你做一个自我介绍并简要的说一下你自认为比较有挑战的项目。

这个时候你需要简要的描述这个项目,并且能简要的说出技术挑战(吊一下面试官的胃口,引导面试官doge),我是这样做的

  1. 简单的说明一下需求背景,一般一句话,不要太长!因为我是业务开发,这一句话主要要表现你对业务是有理解的,甚至有自己的理解,最好能知道需求的目的!不要太长,因为你面试的是技术开发,不是产品!

  2. 分条说项目的难点or亮点:

    比如合理的设计分库分表,满足后续业务迭代,并实现冷热数据分离利用本地消息表,基于消息和重试机制实现最终一致性。这里是简单的说一下你的几个项目,因此大概说一些技术难点即可,不需要展开,因为你应该不只有一个项目。

  3. 提一下成果:

    比如最终业务成果(业务指标,模糊的说一下,太精确就涉密了),技术成果(性能优化了多少,能抗多少qps,这个成功要和你克服的难点对应起来!)

如上是说,简单介绍项目,主要是简要说一下,一般后续面试官回挑它感兴趣的点进一步挖掘,面试前你要准备好如何应答,我一般是这样梳理的:

  • 业务背景和业务上的限制:

    业务上下游及背景,有些时候一个项目是有早期的枷锁的,可以提一下。这里一样简短,主要是给面试官一个背景,不然上来说这个项目xxxx,人家直接懵逼了!

  • 实现了什么功能:大致说一下核心接口的功能,大致流程,有哪些模型。

  • 难点,以及怎么解决的:难点1 :xxxx,你设计了一个什么样的方案并最终解决。

  • 你为什么这么做:这里要体现出你对技术的思考,比如分布式事务,你为什么不用tcc(需要上下游改造,别人不try 你做不到,那么上下游会配合你么?),等等其他选型都可以说一下,最终你选择了本地事务+消息重试保证最终一致性(为什么?因为实现简单,并且需求不需要实时的一致性,最终一致性即可,那么中间这一段不一致的时间,你是如何解决的,前端是如何表达的,等等)

  • 目前还有什么不足,后续如何做

    这里主要是体现,你有规划,是主动的,有技术追求的。而不是一个纯粹的执行者!

1.2 简历编写

排版啥的我就不说了

规避你的弱点

比如你学历不好,但是在公司拿过很好的绩效,有不俗的成果,那么工作经历应该放在学历上面。

让面试官看到你想让他看到的

和谈恋爱一样,你po在微信的肯定是最好的一面。写简历一样,把你最自信的技术栈加粗,放在最容易能看到的地方。

针对性的写简历

如何你有多个项目ABCD,篇幅限制只能写2项目,项目A和B和你投递的公司是更为契合的,那么何不把业务最match的项目写上昵?,在工作经历也可以体现出更匹配的地方!

example:笔者投递过蚂蚁的SRE,虽然自己不是做SRE的,但是平时也会关注一些稳定性相关的,我在工作经历中写了自己有系统稳定治理经验,参加过大促稳定性保障,并加粗。虽然这个SRE和我这个狭义的稳定性不是完全的一致的,但是也是有一点关系的。

1.3 降低预期

天生我材必有用

也许是没hc了,而不是你不够优秀!

另外人和人是有磁场的,你也许就是和这个面试官不对付,而不是你哪里不好(当然不好的地方要复盘)

吃个口香糖,上个厕所

面试前放松一下,一直绷着也不太好!

2.面试中

2.1 保持沟通

特别写leetcode,有的同学不知道咋写就尬住了,你可以说一下你的思路,或者你的问题(题目看不懂,或者你的思路解决了不了这个问题)和面试官沟通,反馈。

因为面试你的人是你未来的师兄or上级,工作中你肯定不是啥都知道的,也是需要沟通请教的,沟通到位反而是一个加分项。

即使你很会写,也要在写的过程保持沟通,比如实现代码的第一步,第二步!

2.2 良好的表达

表达有条理,语速适中,分情况,分条的表达。

特别需要注意一点,你需要介绍一点业务背景,但是不要过度介绍,因为招聘的是开发,而不是产品。

适当的表达,利于面试官了解背景,在表达中突出自己的对业务的了解,也是不错的,毕竟是业务开发,还是要懂业务的。比如你聊到分库分表,设计了x张表,x个库,是希望用户的数据集中在一个库一个表,减少分页查询聚合的开销,预留了很多空间是因为后面有哪些需求计划(模糊,不要涉密)会带来数据量的暴增。

2.3 体现你对技术的思考

  • 能比较多个技术选型,知道自己选择这个技术选型后的舍与得,每个方案的缺点和有点。
  • 能体现技术在业务上的取舍:比如分布式最终一致性,中间态是怎么做的,比如隔一段时间进行回查,比如表达一个抽奖中的状态(因为本地写了INIT记录,然后调用第三方,第三方maybe超时了,这时候INIT表达为抽奖中,回查就是来弥补这个超时)
  • 能知道使用的中间件解决了什么问题,为什么要使用,底层原理。

2.4 合理的猜

问到你不懂的点,你可以说不知道,但是自己可以猜一下,根据你其他的知识联想,或者自己的技术scene来推断该如何解决,给出你的解决方案,这也是体现你能力的点。

比如你不帅,但是你有钱。

2.5 幽默

我是一个比较逗的人,在面试字节的时候问到抽奖接口流量很高,如何解决,说了常规解决方案1,2,3等等,面试官还是继续问还有没有其他的解决方案,我说:"能不能抽几个倒霉蛋默认中一些廉价奖品,一般抽奖会有一些兜底奖品,比如积分,可以提前跑任务写中奖记录,而不是调用下游去抽奖doge,如果业务可以接受的话"。这个方案好么,不那么好(前提是你前面给出了很多其他技术方案,不要上来就让业务做阉割),但是把面试官干笑了

人家写了一天代码,开了一天会,还要面试你,如果你风趣幽默,是不是在一众候选人中脱颖而出昵,更有记忆点昵?

3.面试后

复盘,不懂的点及时弄懂,其他比如表达某一个项目不清楚,可以再梳理梳理。

4.福利

笔者目前在提供免费的简历修改建议,以及帮找项目亮点,可以查看《系列文章目录和关于我》文末的二维码,加群私聊群主1v1。

  • 为什么我愿意被白嫖:
    • 后续发展副业doge。
    • 交个盆友。
    • 你的项目会被我学会,变成我的系统设计经验。
  • 我什么水平,够格帮你么?
    • 3年经验,大厂p6,脉脉正常水平。
    • 另外本身免费,要求不要太高哈,而且我也是刚开始(目前帮助了2位朋友)。
    • 交流向,不是我教你,是我们互相学习。
  • 目前暂定周末(工作日不行)1到2位,1次1个半小时,腾讯会议的方式,时间灵活。