从小厂逆袭快手,我是如何准备面试的

2,421 阅读13分钟

我将文中提到的的 MySQL、Redis、Kafka 思维导图放到了我的公众号中,大家可以关注我的公众号【haxianhe】,回复 “思维导图” 领取高清pdf版思维导图


在上一篇文章 涨薪50%,从小厂逆袭快手 - 附面经 中,我概述性的给出了社招跳槽有哪些环节要去准备,那么今天我会给出面试复习比较推荐的复习资料、如何复习以及有哪些常见的注意事项。

自我介绍

自我介绍是面试的一场面试第一个环节,而一个好的自我介绍是可以引导整场面试的节奏的,下面就简单介绍一下如何准备一份“合适”的自我介绍。

首先,我们要知道面试官想通过自我介绍了解什么信息。

在技术面试中,面试官除了想在你自我介绍的时间看应聘者的简历之外,一般会想了解以下几点信息:年龄,毕业院校,工作年限,工作经历,行业背景,项目经验,技术面等这些基础信息,然后根据自我介绍和简历信息就可以深入的聊一下具体的项目经验,技术问题等。

一般在进行自我介绍的时候概述性的介绍一下自己的学历背景、工作经历、项目经验,以及自己擅长的技术面即可。如果面试官对你介绍的哪部分内容感兴趣,他会具体问你的。

项目经验

这部分是社招面试的重头戏,总的原则是 以“项目经验”容纳“线上问题”,支撑“技术亮点”。

面试提到的技术亮点是需要项目经验来支撑的。

大多数人在日常的工作中,用到的技术是非常有限的,可能就是 CRUD 外带一些调优,这也是普遍现象。反之,如果一个初级开发,在面试中说,之前开发的模块既有jvm调优、又有分布式组件,再外带数据库性能优化,似乎可信度也不高。

对此,你需要用“解决过的线上问题”去支撑想要展开的技术亮点,需要你平时工作中积极主动的去参与线上问题的解决,比如有 oom 问题、redis缓存被击穿,或者其他分布式组件的case,你参与排查并解决,那么将来面试的时候,你自然可以以此为基础去展开你事先准备好的技术亮点。

这样的话,就像上面的那张图一样,你就有足够的支撑物去支撑你的分布式组件以及其他值钱的技能了。

总之,技术本身不值钱,面试官只关心你如何使用技术去解决线上问题的。

项目介绍

在面试时,经过寒暄后,一般面试官会让介绍项目经验,常见的问法是:“说下你最近的(或最拿得出手的)一个项目”。

在面试前准备项目描述,别害怕,因为面试官什么都不知道

面试官是人,不是神,拿到你的简历的时候,是没法核实你的项目细节的(一般公司会到录用后,用背景调查的方式来核实)。

更何况,你做的项目是以月为单位算的,而面试官最多用3分钟来从你的简历上了解你的项目经验,所以你对项目的熟悉程度要远远超过面试官,所以你一点也不用紧张。

如果你的工作经验比面试官还丰富的话,甚至还可以控制整个面试流程。

下面给出了你和面试官的情况对比:

面试官
对你以前的项目和技能很了解只能听你说,只能根据你说的内容做出判断
在面试过程中的职责在很短的时间内防守成功即可如果找不出漏洞,就只能算你以前做过
准备时间面试前你有充足的时间准备一般在面试前用3分钟阅读你的简历
沟通过程你可以出错,但别出关键性的错误不会太为难你,除非你太差
技巧你有足够的技巧,也可以从网上找到足够多的面试题其实就问些通用的有规律的问题

既然面试官无法了解你的底细,那么他们怎么来验证你的项目经验和技术?

下面总结了一些常用的提问方式:

提问方式目的
让你描述工作经验和项目(极有可能是最近的),看看你说的是否和简历上一致看你是否真的做过这些项目
看你简历上项目里用到的技术,比如框架、数据库,然后针对这些技术提些基本问题还是验证你是否做过项目,同时看你是否了解这些技术,为进一步提问做准备
针对某个项目,不断深入地问一些技术上的问题,或者从不同侧面问一些技术实现,看你前后回答里面是否有矛盾深入核实你的项目细节
针对某技术,问些项目里一定会遇到的问题,比如候选人说做过数据库,那么就会问索引方面的问题通过这类问题,核实候选人是否真的有过项目经验(或者还仅仅是学习经验)

准备项目的各种细节,一旦被问倒了,就说明你没做过

一般来说,在面试前,大家应当准备项目描述的说辞,自信些,因为这部分你说了算,流利些,因为你经过充分准备后,可以知道你要说些什么。

而且这些是你实际的项目经验(不是学习经验,也不是培训经验),那么一旦让面试官感觉你都说不上来,那么可信度就很低了。

不少人是拘泥于“项目里做了什么业务,以及代码实现的细节”,这就相当于把后继提问权直接交给面试官。

下表列出了一些不好的回答方式:

回答方式后果
我在XX软件公司做了XX门户网站项目,这个项目做到了XX功能,具体是XX和XX模块,各模块做了XX功能,客户是XX,最后这个项目挣了XX钱直接打断,因为业务需求我不需要了解,我会直接问他项目里的技术
(需要招聘一个Java后端开发,会Spring MVC)最近一个项目我是用C#(或其他非Java技术)实现的,实现了……或者我最近做的不是开发,而是测试……或者我最近的项目没有用到Spring MVC提问,你最近用到SSH技术的项目是什么时候,然后在评语上写:最近XX时间没接触过SSH
在毕业设计的时候(或者在读书的时候,在学习的时候,在XX培训学校,在XX实训课程中),……直接打断,提问你这个是否是商业项目,如果不是,你有没有其他的商业经验。如果没商业项目经验,除非是校招,否则就直接结束面试
描述项目时,一些关键要素(比如公司、时间、所用技术等)和简历上的不匹配我们会深究这个不一致的情况,如果是简历造假,那么可能直接中断面试,如果真的是笔误,那么就需要提供合理的解释

在避免上述不好的回答的同时,大家可以按下表所给出的要素准备项目介绍。

要素样式
控制在1分钟里面,讲出项目基本情况,比如项目名称,背景,给哪个客户做,完成了基本的事情,做了多久,项目规模多大,用到哪些技术,数据库用什么,然后酌情简单说一下模块。重点突出背景,技术,数据库和其他和技术有关的信息。我在XX公司做了XX外汇保证金交易平台,客户是XX银行,主要完成了挂盘,实盘成交,保证金杠杆成交等功能,数据库是Oracle,前台用到JS等技术,后台用到Java的SSH,几个人做了X个月。不需要详细描述各功能模块,不需要说太多和业务有关但和技术无关的。如果面试官感兴趣,等他问。
要主动说出你做了哪些事情,这部分的描述一定需要和你的技术背景一致。我做了外汇实盘交易系统,挂单成交系统,XXX模块,做了X个月
描述你在项目里的角色我主要是做了开发,但在开发前,我在项目经理的带领下参与了业务调研,数据库设计等工作,后期我参与了测试和部署工作。
可以描述用到的技术细节,特别是你用到的技术细节,这部分尤其要注意,你说出口的,一定要知道,因为面试官后面就根据这个问的。你如果做了5个模块,宁可只说你能熟练说上口的2个。用到了Java里面的集合,JDBC,…等技术,用到了Spring MVC等框架,用技术连接数据库。
这部分你风险自己承担,如果可以,不露声色说出一些热门的要素,比如Linux,大数据,大访问压力等。但一旦你说了,面试官就会直接问细节。这个系统里,部署在Linux上,每天要处理的数据量是XX,要求是在4小时,1G内存是的情况下处理完5千万条数据。平均访客是每分钟XXX。

线上问题

大家平时工作中一定要 把握住出现“线上问题”的机会。

因为,功能做了只是具备了项目经验,但是面试的时候真正“值钱”的其实是技术的难点与解决方案,而一般技术难点普遍伴随着“线上问题”。所以,平时工作中积极主动点,出现了线上问题不管是不是自己的都去查、去解决,事后围绕着“问题现象、问题分析、问题影响、解决方案、问题扩展”等去总结、记录到自己的笔记总,后续都是自己最宝贵的财富。

技术亮点

结合自己遇到过的线上问题,优先准备分布式组件方面的技术亮点,常用的分布式组件主要有 MySQL、Redis、Kafka等。

这部分内容可以参考JD上对技术要求,有针对性的去准备,也可以参考我下面介绍的关于中间件部分的内容。

编程语言

关于这部分内容,转语言的同学可能更需要关注一下。

首先,需要明确的是你想转到什么语言,那你就需要事先准备好那个语言面试可能要问的内容,因为企业招你进去是干活的而不是再像校招那样,先把你招进去再去培养你。投简历前你是能看到JD的,JD上一般都有关于需要掌握的技术的明确的要求。

关于Java的复习材料,推荐开源项目

中间件

常见的中间件主要有:MySQL、Redis、Kafka,接下来我简单介绍一下我的复习经验。

复习材料

关于中间件的复习材料,推荐开源项目

MySQL复习的话,还有两本书给大家推荐一下:

  • 《MySQL 技术内幕:InnoDB 存储引擎》
  • 《高性能 MySQL》

Redis 复习的话,也给大家推荐一本书:

  • 《Redis 设计与实现》

复习方法

一般我会结合上面推荐的书和开源项目去整理一份自己的思维导图(思维导图我在下面放了截图)和笔记。

MySQL

Redis

Kafka

完整的思维导图太长了不好截图,有需要的同学可以 关注我的公众号【haxianhe】,回复 “思维导图” 领取高清pdf版思维导图

场景题

推荐一个秒杀的开源学习项目

一篇比较好的关于秒杀的场景设计的文章

算法题

算法的话推荐大家最起码刷一下牛客网上的 《剑指offer》67题

答案的话大家可以在网上搜一下“牛客网《剑指Offer》66题题解”,我本人参考的leetcode上的《画解剑指 Offer》不过这个要开会员,大家可以根据自己的需求进行选择。

之后要是还有时间和精力的话推荐大家再刷一下 牛客霸题,上面可以筛选企业和考察次数等

提问环节

最后,就是提问环节了,这个环节和第一个环节一样是唯二应聘者可以掌握主动权的环节,一般透过这个环节你可以表现自己的面试团队的兴趣,也可以表现出自己的虚心好学都可以。

下面我给出我给自己准备的几个经典问题,给大家用作参考:

1.能和我介绍一下你们的业务嘛? 2.能和我介绍一下你们的技术栈嘛? 3.如果有我有幸能拿到offer,你认为我入职之后最需要注意的点是什么? 4.这个职位在公司的发展前景是怎样的?有什么晋升机制?在什么条件下,可以获得晋升机会? 5.团队成员有多少人?大家怎么分工?目前团队的核心工作是哪些?

小结

到这这篇文章大体上把我想要分享的东西都讲清楚了,但是其实这里面还是有很多细节没有展开去讲,比如我总结的 MySQL、Redis、Kafka的学习笔记等等,这部分内容后续我会简单整理一下陆陆续续到我的公众号和个人博客上,可能就不会放到牛客网这种讨论区了,所以有需要的同学可以关注我的公众号【haxianhe】第一时间阅读。


我将文中提到的的 MySQL、Redis、Kafka 思维导图放到了我的公众号中,大家可以关注我的公众号【haxianhe】,回复 “思维导图” 领取高清pdf版思维导图