java面试技巧
简历
1.HR看简历,都是看技术关键词。可以多看招聘要求,简历上要多写些关键词。比如io,集合,多线程,并发,spring,mysql,分布式等等。
2.可以准备多份简历,根据不同的jd发送不同的简历。
3.网上简历做成pdf格式会好一些,word因为版本原因可能排版会变乱。
4.网上简历可以稍微夸大一下,半懂不懂的也写上去。纸质简历一定要将半懂不懂的技术去掉。当然,最好还是保持一致。
5.没有了解过的技术,不要写在纸质简历上,一问就蒙了。
6.频繁跳槽的经历,可以合成一段。频繁跳槽给人的印象很差。
7."个人评价"直接写技术栈,不要写乐观向上,团结友爱这些。
8."项目经验"除了介绍项目,还要写清楚涉及到的技术内容,以及自己负责的模块。
9.博客、GitHub都是加分项。不要担心自己写的东西很简单,其实几乎没有面试官会去看的。
10.阅读过Java源码,Spring源码。这些也是加分项。
项目经验
项目简介:
我任任职XX公司XX部门,该部门后台系统主要由API模块,APP后台模块,算法模块以及数据模块组成。后台的任务通过分布式任务系统进行任务管理。
责任描述:
我主要负责XX模块,实现了XX功能、XX功能和XX功能。XX功能运用到了XX技术……
技术要点:
整套系统部署在公司的服务器上,主要基于公司的Mysql集群和Redis集群做数据存储,使用MQ集群做消息队列,基于ZK集群搭建高可用系统,前期我们服务之前的调用方式都是基于HTTP的方式,服务耦合性较高,后期我们基于SpringCloud框架做了整个系统的微服务化,进行解耦。
投递网站
拉勾网:专注互联网招聘。可以直接上传简历,非常方便,还可以查看面试的评价。
BOSS直聘:在线聊天,之后再投简历。可以先设置好招呼语,比如:
你好,我正在找java开发的工作。
XX年毕业,本科,XX大学,XX专业。
java基础扎实,熟悉io,集合,多线程,并发;
熟悉spring,springMvc,mybatis,springBoot,springCloud等框架,
熟悉分布式/微服务,缓存redis,消息队列kafka,服务协调zookeeper等。
猎聘网:会有猎头来找你。可以设置成只有猎头可以查看。
51job:工作岗位挺多的。
其他:智联招聘。
1.除非实在找不到工作,否则记得将简历设置成不可查看,不然一大堆外包公司打电话过来。
2.不要直接就投递给大公司。先投简历给一些中小型公司,总结自己的不足,然后再去心仪的公司面试,这样拿到好offer的机率更大。
3.面试几家练练手后,就可以投给比较大的公司了。筛选出500-2000人以上的公司。
4.记得时常刷新简历。这样猎头更容易找到你。
内推
内推更靠谱些。直接跳过投简历环节,可以通过同学/朋友了解到公司内部的情况。
如果面试成功,内推的人是可以拿到奖励的。因此,找朋友内推别不好意思,人家也是愿意拿钱的。
我以前内推过朋友进公司,赚了三天工资。哈哈。
公司
1.最好是互联网行业。有最新的技术。复杂的场景。高可用高并发分布式。
2.技术栈最好要匹配。如果不是理想的技术栈,可能干久了还是没有长进。
3.其次是中大型规模的公司IT部门。最好是几百人以上的公司。
4.其他的选择:
创业公司:做的事情太杂。需要通才,什么脏活累活都得干,加班太多了。而且创业公司随时有裁员、倒闭的可能。
外包公司:外包干久了,只会变成搬运工,而且外包的工作经历可能会减分。
国企:技术特别落后,流程极慢,人际关系复杂。不过国企上班时间很短,适合养老。
外企:外企加班一般不多。
5.可以通过“看准网”、“职友集”这类网站查看公司的评价。
跳槽准备
1.想要跳槽,最好提前两个月,开始准备面试。
2.离职证明,用彩色打印多几份,章也是红色的,跟原件基本是一样的。
行业及产品
除了技术栈和薪水,还要考虑行业和产品。
行业背景也很重要。假如你去面试一家金融公司,那么做过有关金融的项目经验就是极大的加分项。
面试资料
1.书籍:《码出高效》(重点看集合和多线程的源码讲解,非常实用),《剑指offer》,《java程序员面试宝典》,《Cracking the Coding Interview(6th)》
2.网站:牛客网、LeetCode
如果想进大公司,必须刷题。面试时可能需要手写算法。
3.看准网、职友集等平台,面试前可以先查看某公司的面试题。
4.面试题不要死记硬背,理解最重要。看背试题时,多举几个实际例子,理论联系实践,才能深刻理解,深度记忆。
技术模块
优先级:java基础,集合,多线程,并发,ssm,数据库,jvm ,分布式,网络,操作系统。
加分项:高并发、分布式、微服务
其他:linux,git
数据结构和算法:手写代码、手写算法
项目经验:这个主要介绍项目,以及自己负责的模块及技术,因人而异。
如果去大公司面试,非常注重技术广度和技术深度。一般会进行连环炮问法。对某一个知识点,一直深问到底层原理。
比如,问线程池参数,你回答后就会问参数中的"拒绝策略"有哪些?阻塞队列有哪些?队列是默认值是什么?有哪些不同类型的线程池?怎么自己设计一个线程池?
如果想进大公司,一定要多读源码,理解底层原理。
如果是高级开发或者架构,那还会考验系统设计能力、架构能力。
各模块面试题可查看: https://www.cnblogs.com/expiator/category/1372059.html
面试
1.完全不懂的,就直接说不会,瞎扯给人的印象更差。
2.半懂不懂的,可以说一时想不起来,让面试官提示一下。
3.不懂的东西,一个字都不要提。不然人家一问就蒙了。比如人家问redis可以做什么?就说缓存,如果没用过分布式锁,千万别提。
4.不要一直由面试官说话。有时可以自己推进。。比如面试官问新建线程的方式有哪些?你回答完之后,还可以再补充一下。说开发中用线程池比较多,那面试官可能就会问你一些线程池的技术。
5.其实,负责java岗位的面试官,有可能是搞c++/php的,也可能是不懂技术的管理人员。遇到不懂技术的,可能适当说些专业术语吹吹牛。不过,一个不懂技术的人来面试java岗位,可能公司是不太靠谱的。
6.平常工作中比较少用到的知识,如果实在理解不了,可以背起来。
手写代码
1.有时候需要手写代码,最好自己先写一遍。
2.算法:数组、字符串、栈、链表、树、查找算法(尤其二分查找法)、各种排序算法(快排最重要、冒泡比较"低端"),可以看下《剑指offer》
3.设计模式:面试要求写的有单例模式(最好能写线程安全的)、工厂模式、观察者模式、代理模式、生产者消费者模式。
4.就算是写不出来,也可以写些伪代码,或者说一下大体的思路,最重要的就是思路。
5.面试常见的算法题: https://blog.csdn.net/weixin_38118016/article/details/90761111
如果时间不太够,刷LeetCode时,Status选择Top Interview Question,先刷面试常考的
提问问题
面试后面试官可能会问,“你还有什么要问我的?”
1.介绍一下技术团队的规模和人员。有几个后端?有没有产品人员?
2.团队做的是什么项目?属于哪些方面?
3.使用了哪些技术栈?有没有用到分布式或者微服务的技术?有没有落地?
4.公司的作息时间。
5.做开发肯定是要加班的,但我想了解一下加班的强度。
心态
1.面试也是提高能力的一种方法。在学习过程中,需要设定目标,分模块逐步学习,测试学习成果,获取反馈,针对不足刻意训练。
而面试就是一种获取反馈的有效手段。可以针对面试不足,不断总结提高。
把面试当成是交流和学习吧,心态放平会好很多。