如何准备一场Java面试?

如何准备一场Java面试?

不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为,非常反对!我觉得这种方法特别极端,而且在稍有一点经验的面试官面前是根本没有用的。建议大家还是一步一个脚印踏踏实实地走。

1 如何获取大厂面试机会?
在讲如何获取大厂面试机会之前,先来给大家科普/对比一下两个校招非常常见的概念——春招和秋招。

招聘人数 :秋招多于春招 ;
招聘时间 : 秋招一般7月左右开始,大概一直持续到10月底。但是大厂(如BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为3月,次佳时间为4月,进入5月基本就不会再有春招了(金三银四)。
应聘难度 :秋招略大于春招;
招聘公司: 秋招数量多,而春招数量较少,一般为秋招的补充。
综上,一般来说,秋招的含金量明显是高于春招的。

下面我就说一下我自己知道的一些方法,不过应该也涵盖了大部分获取面试机会的方法。

关注大厂官网,随时投递简历(走流程的网申);
线下参加宣讲会,直接投递简历;
找到师兄师姐/认识的人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
博客发文被看中/Github优秀开源项目作者,大厂内部人员邀请你面试;
求职类网站投递简历(不是太推荐,适合海投);
除了这些方法,我也遇到过这样的经历:有些大公司的一些部门可能暂时没招够人,然后如果你的亲戚或者朋友刚好在这个公司,而你正好又在寻求offer,那么面试机会基本上是有了,而且这种面试的难度好像一般还普遍比其他正规面试低很多。

2 面试前的准备

  • 2.1 准备自己的自我介绍

从HR面、技术面到高管面/部门主管面,面试官一般会让你先自我介绍一下,所以好好准备自己的自我介绍真的非常重要。网上一般建议的是准备好两份自我介绍:一份对hr说的,主要讲能突出自己的经历,会的编程技术一语带过;另一份对技术面试官说的,主要讲自己会的技术细节,项目经验,经历那些就一语带过。

我这里简单分享一下我自己的自我介绍的一个简单的模板吧:

面试官,您好!我叫某某。大学时间我主要利用课外时间学习某某。在校期间参与过一个某某系统的开发,另外,自己学习过程中也写过很多系统比如某某系统。在学习之余,我比较喜欢通过博客整理分享自己所学知识。我现在是某某社区的认证作者,写过某某很不错的文章。另外,我获得过某某奖,我的Github上开源的某个项目已经有多少Star了。

  • 2.2 关于着装

穿西装、打领带、小皮鞋?NO!NO!NO!这是互联网公司面试又不是去走红毯,所以你只需要穿的简单大方就好,不需要太正式。

  • 2.3 随身带上自己的成绩单和简历

有的公司在面试前都会让你交一份成绩单和简历当做面试中的参考。

  • 2.4 如果需要笔试就提前刷一些笔试题

平时空闲时间多的可以刷一下笔试题目(牛客网上有很多)。但是不要只刷面试题,不动手code,程序员不是为了考试而存在的。

  • 2.5 花时间一些逻辑题

面试中发现有些公司都有逻辑题测试环节,并且都把逻辑笔试成绩作为很重要的一个参考。

  • 2.6 准备好自己的项目介绍

如果有项目的话,技术面试第一步,面试官一般都是让你自己介绍一下你的项目。你可以从下面几个方向来考虑:

对项目整体设计的一个感受(面试官可能会让你画系统的架构图)
在这个项目中你负责了什么、做了什么、担任了什么角色
从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。

  • 2.7 提前准备技术面试

搞清楚自己面试中可能涉及哪些知识点、那些知识点是重点。面试中哪些问题会被经常问到、自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多少?能记住多久?第二:背题的方式的学习很难坚持下去!)

  • 2.8 面试之前做好定向复习

所谓定向复习就是专门针对你要面试的公司来复习。比如你在面试之前可以在网上找找有没有你要面试的公司的面经。

举个栗子:在我面试 ThoughtWorks 的前几天我就在网上找了一些关于 ThoughtWorks 的技术面的一些文章。然后知道了 ThoughtWorks 的技术面会让我们在之前做的作业的基础上增加一个或两个功能,所以我提前一天就把我之前做的程序重新重构了一下。然后在技术面的时候,简单的改了几行代码之后写个测试就完事了。如果没有提前准备,我觉得 20 分钟我很大几率会完不成这项任务。

3 面试之后复盘
如果失败,不要灰心;如果通过,切勿狂喜。面试和工作实际上是两回事,可能很多面试未通过的人,工作能力比你强的多,反之亦然。我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!

一些好的学习和编程习惯
养成一个学习习惯和编程习惯真的太重要了,一个好习惯的养成真的对后面的学习有很大帮助。说实话我自己当初在这方面吃了不少亏,很多比较好的习惯我也是后面自己才慢慢发现,所以这里想着重给大家说一下有哪些好的学习和编程习惯。

正确提问
我们平时任何时候都离不开提问特别是初学的时候,但是真正知道如何正确的提问的人很少。问别人问题前不要来一句“在吗”,你说你问了在吗我是回复好还是不回复好呢 ?不要让别人给你发 32 位的JDK,除非你是喜欢那个人。

更多关于如何提问的内容,详见 github 上开源版『提问的智慧』 https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md,抽时间看一下,我想看完之后应该会有很多收获。

健康生活
我一直觉得这一方面是最重要的,我想很多人和我一样会无意识间忽略它,等到真的身体不舒服了,你才开始意识到健康生活的重要性。

除非万不得已,不要熬夜了。熬夜的危害就不用多说了,秃头加内分泌失调,你懂得!
看电脑45分钟之后,起来走5分钟,看看远方放松一下。不要觉得这5分钟浪费时间,相反,这5分钟可能为你带来更大的效率提升。
可以考虑买一个电脑架子,保护好自己脊椎的同时,办公体验也会提升很多。
可以下载一个护眼宝,感觉可以护眼模式挺棒的,非常适合我们这种需要经常盯着电脑的人使用,强烈安利。
高效搜索
尽量用 google 查找技术资料以及自己在学习中遇到的一些问题。

解决 bug
程序遇到问题先在 stackoverflow 找找,大部分别人已经遇到过了。如果上面没有的话,再考虑其他解决办法。实在解决不了的话,再去问你觉得有能力帮你解决的人(注意描述好自己的问题,不要随便截一个Bug 图)。

善于总结
学习完任何一门知识后,你可能当时看视频感觉老师讲的挺容易懂的。但是,过几天后你发现你忘的一干二净,别人问你一个类似的问题,你一点思路都没有。所以,我推荐你学完一门知识后不光要及时复习,还要做好总结,让知识形成一个体系。另外,你可以假想自己要给别人讲这个知识点,你能不能把这个知识点讲清楚呢?如果不能,说明你对这个知识点还没有彻底了解。这也就是人们经常说的费曼学习技巧。

总结的方式:

有道云笔记、OneNote…这类专门用来记录笔记的软件上;
思维导图;
通过写博客输出。可以考虑自己搭建一个博客(hexo+GithubPages非常简单),你也可以在简书、掘金…等等技术交流社区写博客。Markdown 格式参考:https://github.com/sparanoid/chinese-copywriting-guidelines 中文文案排版指北:https://github.com/sparanoid/chinese-copywriting-guidelines
多用 Github
没事多去Github转转,如果有能力可以参与到一些开源项目中。多看看别人开源的优秀项目,看看别人的代码和设计思路,看的多了,你的编程思想也会慢慢得到提升。除了这些优秀的开源项目之外,Github上面还有很多不错的开源文档、开源资料什么的,我觉得对我们平时学习都挺有帮助。Github用得好还能装一下,毕竟人家还是一个全英文网站,咳咳咳。

实践
多去实践,将学到的东西运用到实际项目中去。很多人都找我抱怨过没有实际项目让自己去做,怎么能有项目经验呢?如果实在没有实际项目让你去做,我觉得你可以通过下面几种方式:

在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深出学。
Github或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖。
注意代码规范
从学习编程的第一天起就要养成不错的编码习惯,包、类、方法的命名这些是最基本的。

推荐阅读:

阿里巴巴Java开发手册(详尽版)https://github.com/alibaba/p3c/blob/master/阿里巴巴Java开发手册(详尽版).pdf
Google Java编程风格指南:http://www.hawstein.com/posts/google-java-style.html
沟通能力
程序员也离不开沟通。你可能需要与客户交流需求,还要和同事交流项目问题,还有可能定期需要向领导汇报项目进展情况。所以,我觉得不错的沟通能力也是一个优秀的程序员应该有的基本素质。

做Java架构师(P7)岗位有一年时间了,期间也从事了很多招聘定级工作,来说说我见解吧。

既然楼主提到年薪40w,那我们看看什么公司,什么级别可以给到,再看看要求。

阿里是Java大厂,所以可以参考阿里的标准,阿里一般是16薪水,所以就是税前2.5w,在阿里应该是P6就可以达到,而对P6的要求是什么呢,我们内部有个简单的概述,那就是可以独立完成部门内部的项目,而面试过程中,也会有相应的考察。

如何定义一个人可否完成部门内部项目

代码能力
代码能力是基本功,Java语言本身,包括语言的各个方面包括对并发的理解,对内存使用对理解,对Java运维的理解等等。语言本身外,社区里常用的框架是否可以十分清晰的了解,包括spring,包括他实现的ioc,aop,orm,web机制是否有清楚的认识,有丰富的经验等等。
对常用中间件的理解
毕竟在一个大系统中,各种中间件是是否常见的,缓存中间件,消息中间件,例如 redis、memcache、rmq这些。要理解常用中间件使用场景,使用姿势(例如redis的常用命令),甚至包括他的一些运维。一旦出了问题,除了专门的运维人员,也需要你参与问题的排查,因为有时候这些中间件出现问题,是不当的使用姿势引起的。
架构、业务落地能力
前面提到了语言本身,各种中间件。如果你有很好的业务抽象能力和架构思维,就可以把一款部门内部产品很好的设计并实施了。这点蛮难的。想必都有过接手现有项目的经历吧,有时候真恨不得把之前的设计者拿出来批斗。作为一个设计者,你能否做到当下一个接手它的人会说一句,这个系统设计的真好,稳定又可拓展,理解起来也很容易。
这需要很多能力,除了对现有系统的理解,还包括对未来可能发生变化的理解
沟通协作
毕竟一个部门内部产品,是不可能由一个人完成的,所以需要沟通协作,把设计好的方案,要和2-3个小伙伴一起实施,包括同样身份的后端人员,前端人员,产品等角色。这个级别的人可能会参与带2-3个人,例如应届毕业等,所以你自己对知识的把握,分享精神,leadership都是很好的加分项。
总的来说呢,到这个阶段,代码真的只是你技能桶中的一个最长的,或者最长的之一。而其他软技能,会显得越来越重要。

PS :年薪40w真的不算啥,具体几年可以达到,因人而异,不过大多数身边的人很多3-5年是这个水平。那些创业一夜暴富的不在考虑之内

别逗了

真的是 40w 的话,也不仅仅是 Java 的知识和经验的价值,而是这个人的综合能力的价值。
你所看到的 40w 年薪的 Java 从业者,使用 Java 只是 很表面的一个特征。

以你的例子,若换个角度,是不是又要问,搞并发的,如何达到 40w 年薪?

所以更多的价值在于,如何构建众多游戏服务端整个体系的能力。

不要以编程语言来定方向
不要以编程语言来定方向
不要以编程语言来定方向

不要以编程语言来思考问题
不要以编程语言来思考问题
不要以编程语言来思考问题

这是因素单一化思维,很有问题。对一个公司对一个企业说了,你创造也多少价值的是衡量回报的指标。你对公司企业的商业模式起多大效用也是一个指标。

若你没转变过来,还持着“我也是搞Java的”这样不全面思维,无戏

另外,你有考虑过:什么叫“Java后台开发” ?
所以,脱离业务谈编程语言的应用,是扯谈

小编是一个有着5年工作经验的java’开发工程师,关于java’编程,自己有做材料的整合,一个完整的java编程学习路线,学习材料和工具,能够进我的群收取,免费送给723197800大家,希望你也能凭着自己的努力,成为下一个优秀的程序员。

你可能感兴趣的:(程序员,Java,java技术,编程)