Java岗跳槽季,6个技巧可以大大提升你的面试成功率
春暖花开,宅在家里快两个月的在家办公模式基本告一段落。企业复工,大家的工作生活终于可以回归正轨,相信不少朋友已经走出家门,迎战跳槽季了。一些动作快的朋友已经拿到一两个 Offer 了。
其实,除了表达能力和面试技巧外,无非就从这些个方面进行准备:
一、那么专业技能怎么写?
先问一下你自己会什么,然后看看你意向的公司需要什么。我说的是一般HR可能并不太懂技术,(当然内部人员来面试就不一样了)所以他在筛简历的时候可能就盯着你专业技能的关键词来看。对于公司有要求而你不会的技能,你可以提前花几天时间学习一下,然后在简历上可以写上自己了解这个技能。比如你可以这样写(下面这部分内容摘自我的简历,大家可以根据自己的情况做一些修改和完善):
计算机网络、数据结构、算法、操作系统等课内基础知识:掌握
Java 基础知识:掌握
JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理):掌握
高并发、高可用、高性能系统开发:掌握
Struts2、Spring、Hibernate、Ajax、Mybatis、Redis、JQuery :掌握
SSH 整合、SSM 整合、 SOA 架构:掌握
Dubbo: 掌握
Zookeeper: 掌握
常见消息队列: 掌握
Linux:掌握
MySQL常见优化手段:掌握
Spring Boot +Spring Cloud +Docker:了解
Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase :了解
Python 基础、一些常见第三方库比如OpenCV、wxpy、wordcloud、matplotlib:熟悉
二、分享一下我面试某家公司Java高级开发岗位,文末会分享一些我个人的学习文档
一面(基础面:大约60分钟)
自我介绍
对象相等的判断,equals方法实现。 Hashcode的作用,与 equal 有什么区别?
Java中CAS算法?
G1回收器讲一下?
HashMap,ConcurrentHashMap与LinkedHashMap的区别
如何在多线程环境下使用Map,ConcurrentHashMap原理,ConcurrentHashMap如何加锁。
多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现。
TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl。
aio,nio,bio的了解
ReetrantLock和synchronized的区别。
Java有哪些悲观锁的实现?
Java有哪些类实现了乐观锁?
二面(二面就死抓多线程问)
线程池有哪些参数?分别有什么用?如果任务数超过的核心线程数,会发生什么?阻塞队列大小是多少?
数据库连接池介绍下,底层实现说下
hashset底层实现,hashmap的put操作过程
说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点?
说说B+树和B树的区别,优缺点等?
算法题,对一个链表进行归并排序,链表可能有环
怎么实现一个线程安全的计数器?
原子类AtomicInteger实现原理是什么?和你设计的计数器优劣比较?CAS怎么实现原子操作的?
Java中的锁有什么?synchronized与Lock的区别?公平锁和非公平底层怎么实现的?AQS原理详细介绍一下?
你在项目中一般怎么调优JVM的呢?
说一下GC吧,什么时候进行Full GC呢?
你了解哪些收集器?CMS和G1。详细谈谈G1的优点
三面(Redis和mysql也要掌握,面试也是必问)
了解哪些排序算法,讲讲复杂度
手撕归并排序
Redis有哪些数据结构?底层的编码有哪些?有序链表采用了哪些不同的编码?
redis的hash数据结构最多能存储多少个元素
自己如何实现RPC?
mysql默认存储引擎?MyISAM、InnoDB、MEMORY的区别
什么是幻读,如何解决
事务隔离级别有什么?通过什么来实现的?分别解决了什么问题?
乐观锁与悲观锁的使用场景
四面(这里问的技术问题就较多了 分布式架构 dubbo Spring cloud Kafka 数据库)
介绍对你技术能力帮助最大的项目,重点讲架构设计思路
分布式全局唯一ID怎样来实现?
dubbo的生产者如何发布服务,注册服务,消费者如何调用服务?
dubbo负载均衡的策略有哪些?一致性哈希详细聊一下?
分布式session如何实现的
微服务你的理解?以及常用的微服务方案dubbo、spring cloud的比较?
Kafka怎么保证数据可靠性?
数据库主从同步数据一致性如何解决?技术方案的优劣势比较?
分布式锁的实现方式你知道有哪些?主流的解决方案是什么?
Spring两大特性?AOP和IOC
Spring的初始化过程?Spring bean的生命周期?
多个RPC请求进来,服务器怎么处理并发呢?
面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。
三、比如,有如下的职位描述。
我们能从中挖掘出如下的技能需求点:
3年经验,熟悉常用类库
熟悉Spring和Mybatis框架
熟悉分布式中间件(比如消息,缓存等中间件)
熟悉数据库,最好是NoSQL
最好有大数据经验
而关于非技能的要求如下:
有责任心,有主动性
需要有团队合作的能力
需要有良好的编码习惯,学习能力要强。
对于java高级开发而言,可以准备如下的话题,大家也能以此为参考,准备些其它的话题:
虚拟机内存优化
数据库性能调优
分布式高并发架构
一些热门组件,比如redis,nginx等
大数据方向的用法
java core(比如集合或多线程)方面的底层实现代码
Spring系列(比如IOC, AOP, MVC,Spring Boot, Spring Cloud)方面的底层实现代码。
四、要准备到什么程度:
最好结合项目实际说出真的用过这些技术。
最好往性能调优方面靠。
下面就以虚拟机为例,说下如何在面试中引出该话题,以及面试时该怎么说。其它亮点话题也可以照此准备。
第一:在简历的最近项目介绍里加上类似这样描述,“这个项目的内存要求比较高,虽然在项目里分配的对象不少,但这个项目只被分配了1G内存,所以在这个项目里,我实践了一些定位排查内存问题的技能,也做了些调优的工作“,这样面试官见到简历的描述,就会自然而然地提问了。
第二:在面试中总会有“项目介绍”这个环节,面试官会让候选人介绍最近的(或最拿得出手)的一个项目,这样大家就可以顺势说出刚才已经给出的描述。
第三:大家可以在回答数据库或集合等方面的问题时引出这个话题,比如回答完JDBC问题后,大家可以说一句,“用好的Connection对象我们会及时关闭,否则它所占用的内存对象无法被GC回收”,或者在谈及List等集合类型时,同时多说一句,“用好的集合对象我们会及时clear掉,否则这个集合也会对一些对象产生强引用,这样就会延迟对象的回收时间”。
第四:在自我总结时,可以说,有虚拟机调优的经验。
那么,在面试时,该怎么说呢?
大家可时设置成null,以撤销强引用。集合对象用好后应当及时clear。尽量别频繁地使用String(或其它不变类)对象,这样容易产生内存碎片。
还展示监控、定位和调优方面的综合能力。这里可以说下,比如通过Jprofiler+jmeter进行JVM性能调优的方法。
大家甚至可以看些虚拟机的底层实现细节,在面试中说下,这样能大大提升自己的专业素养。
五、刷题:
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
六、提示自身的软实力(知识和技术)
第二个关键就要自己的自身实力过硬了,无论是你应届生,还是工作好几年,无论是校招还是社招,企业招聘的永远是自身实力过硬的,也就是你的知识储备,你的技术水平要达到要求,而提升自身软实力的唯一办法就是:不断学习。
以下分享一些我个人的学习文档,有需要的朋友自行选择获取:
友情提醒:获取以上所有文档资料,转发+评论,关注我,然后私信回复【面试】即可打包获取!(免费分享的~)
Java核心知识点
Spring系列(实战)
以上学习资料均免费放送,最后祝愿各位顺利拿到心仪的offer!