不啰嗦,我们直接开始!

引言

无论是刚刚毕业的学生,还是刚刚工作一两年面试经验比较少的同学,往往会比较困惑该如何准备面试。面对至少三轮面试(或更多轮)大公司面试都有什么要求,我来分享一下我的经验。

给自己明确一个目标,把一部分工作交给你,你能否独立把控好一个项目的顺利运转,独立设计、开发、完成一个项目对于一个初级工程师或许有点困难,但是把这个当作自己今后的明确目标,给自己一个高起点也未尝不可。

那么独立完成一个项目需要那些硬实力和软实力呢?

合适的候选人:

  1. 系统业务场景,过去使用技术框架匹配度高,很多时候不是你不行,只是不太匹配
  2. 能否胜任岗位工作 - 技术基础扎实
  3. 你的直属领导是否愿意和你一起工作,多方面,性格,沟通,积极主动 - 在面试中了解
  4. 你能否在这个企业长久地工作 - 离职原因

1、语言基础知识:(一面)

为什么基础很重要:

第一,语言基础直接决定你的编码能力,属于基本功,通常技术第一面考察的是基础知识,以 Java 为例,你是否熟练使用 List & Map 数据结构,是否熟悉 Java 多线程 or 并发编程,线程池工具。

第二:是否会用 Spring 全家桶和一种持久化框架(Mybatis or Hibernate),这也是为什么会问你 Spring 原理(如 IOC 原理,AOP 原理),因为它是搬砖必备技能。如何证明这个砖你可以搬?语言基础真的很重要了,平时一定要多注意积累。

2、对常用中间件的理解 (一面 or 二面)

具备了语言基础和常用 SSM/H 框架能去大厂搬砖了吗?好像是不能,毕业设计做个单机版图书管理系统应该没问题。

大公司可不需要图书管理系统,你还需要会一些常用的中间件,毕竟在一个大型系统中,使用各种中间件是一定的,如缓存中间件 Redis,消息中间件 Kafka,搜索引擎 ES 等,还需要会一门 RPC 框架如 Thrift 或 Dubbo,要理解常用中间件使用场景,注意事项,或者一些运维能力。因为线上出问题后,除了专门的运维人员,开发人员也需要你参与问题的排查,大多数时候问题可能是因为你使用姿势不对引起的。

3、系统设计能力 (三面 or 四面)

面试官想考察你什么?

  1. 之前工作维护的系统什么规模,判断你的工作经验和岗位是否匹配。
  2. 你对系统的设计是否深入思考,对系统未来的规划。如何升级迭代,系统存在什么隐患等多方面的考虑。

前面提到了语言基础和中间件基础,在大型系统中,业务往往很复杂,你的业务抽象能力和架构设计能力,直接决定系统的稳定性和系统长线延展性和是否易于维护,这一点蛮难的,需要长期的经验积累,身为一个优秀的开发人员,你设计的系统是否能让新人很快理解上手,并在当前系统架构上用最少的工作量添加新的功能,还有一点很重要,你设计的系统是否存在缺陷,这个缺陷包括短时间暴露缺陷长时间暴露缺陷

举几个例子,都是现实工作中你会遇到的问题,并非面试造火箭,工作拧螺丝的问题。

案例 1:

我:我在项目中使用了 Kafka,异步处理高并发写入,多大提高系统并发能力。面试官:异步处理方案很好,那你是怎么使用异步处理解决数据一致性问题的????(短时间暴露缺陷)

案例 2:

我:对于千万数量级的大表,我使用了业务主键 Hash 分片的方式做了分表,有效缓解 SQL 慢查询的问题。

面试官:很好,那你还知道其他的分片算法吗?如果你分表后,数据一年后再次变成千万级以后该怎么办呢?使用 Hash 分片算法还合适吗?(长时间暴露缺陷)。

案例 3:

我:我在项目中使用了 Redis 缓存热点数据,大大提高了接口的响应速度。

面试官:很好,那是是如何更新数据到 Redis 里的?你是否做了候补方案应对缓存失效问题,比如热点数据不热了,命中率下降,你是否了解 Redis 的淘汰策略?

诸如此类的问题太多,能从各方面考察你对中间件的了解程度和系统设计能力。你能否证明自己可以胜任这份工作?系统交给你负责领导会放心吗?

4、软技能(每一轮)

  • 有效沟通能力:
    团队协作,一个部门内部产品不是你一个人能完成的,需要协作开发,你能否和产品经理有效沟通,明确需求,并把设计好的方法,和其他小伙伴一起分工完成?
  • 输出能力:
    你是否能做一个 PPT 或 Wiki,把你负责的系统用清晰的思路讲解给他人。
  • 影响力:
    在过去的工作中你是否有自己擅长的技能,在公司或团队做过分享,让你的小伙伴和你一起成长学习。
  • 平时有什么爱好?是否会学习提升自己?是否阅读源码深入研究某一领域技术?

当然这些问题不是绝对的,把面试当成平时聊天,想聊什么都可能,但是我相信每个面试官都希望自己未来的队友是个全方面发展的实力选手,能愉快地工作,共同成长。

5、面试官让我回来等通知,我还有希望吗?

最后还有一点小经验分享,我说的不一定对,但真的是经验,经常看到各种社区里有人会问面试是否还有后续的问题,互联网公司,如果你只面了一轮,面试官没有明确约你后续面试时间,让你回去等通知,那基本就是凉凉了。

死在第一轮无后续,多半是你基础不过关,赶紧回来补充基础知识,别抱幻想了。

死在第二轮无后续,多半是你的项目经验不足,同时基础知识也不够扎实出色,赶紧回来补基础 + 各种中间件知识。

死在第三轮 HR 无后续,多半是你各方面都还可以,但又和目前的坑位级别不对标,或者你的期望薪资和预期不匹配,原因有很多,面试成功与否只以实实在在的邮件 offer 为准,其他任何口头形式的 offer 都是耍流氓,你不能停止寻找下家(HR 可能把你当备胎,再观望一下有没有更合适的替代你)。

最后,面试是相互选择的过程,就像两个网友平时聊天一样尽可能发挥自己应有的实力。面试者不要想着自己是在乞讨一份工作。公司也不是大爷,想要什么样的员工就有什么样的员工,还要看公司是否有实力能否吸引优秀的人才,这是一个相互选择相互尊重的过程,如果失败了,很多时候不是你个人能力的问题,真心不是你不够优秀,也可能是你过去做的领域和现在的岗位不够匹配,也可能是自己太优秀而公司只想要一个非常初级的人员,平常心对待面试即可。

不啰嗦,文章结束,期待三连!

Logo

长江两岸老火锅,共聚山城开发者!We Want You!

更多推荐