前言
Java后端面试标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架。
其实,很多面试者能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。
但现实情况是,大多数人可能面试前没准备,或准备方法不得当。要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问的问题点,换句话说,面试准备点和平时工作要点匹配度很小。
网易一面:
- 自我介绍
- 实习期间项目相关,然后转到Spring
- Spring 在项目中用了哪些特性,IOC,及Kafka监听接口相关实现。
- ThreadPool,Jdk原生线程池,四个参数详细解释原理,当线程池中poolSize达到corePoolSize且阻塞队列已满,再来一个任务,如何处理
- 多线程实现同步的方式、互斥同步、非阻塞同步
- 解释Synchronize关键字的锁优化技术,偏向锁,轻量级锁,重量级锁,这些锁是如何存储的,偏向锁撤销升级为轻量级锁的过程,结合源码解释
- volatile关键字语义,内存屏障如何实现,JMM对内存屏障做了哪些优化,volatile的语义增强
- 指令重排序相关及其happen-before时,数据依赖等
- HashMap底层数据结构,如何处理hash冲突,为何HashMap的大小要设置为2的n次幂,为什么IndexFor方法里,需要hash&length-1,为什么HashMap允许null值,resize()过程,多线程下resize为什么会出现死循环,详细解释,结合源码
- HashMap jdk1.8之后,为何转链式结构为红黑树,为何长度为8的时候,才转成红黑树
- NIO了解吗 不了解,属于自己的知识空白区域。但是面试官比较友好,并没有抓着这一块不放。
- 阐述一下快排基本原理。easy
- 手写单例模式。分别问了多线程情况如何处理,什么时候可以破坏单例模式,怎么防止单例模式被破坏
- JMM内存模型,如何保证缓存一致性。
网易二面:
- 自我介绍
- 介绍实习项目
- Kafka监听接口如何实现,为何采用Kafka而不是用其他消息队列
- 实现Kafka监听接口的时候,遇到哪些坑,采取了哪些措施或者解决方案
- Kafka的基本概念,及特点和优势。offset+zk+持久化分区日志顺序存储之类的
- MySQL了解吗,介绍一下InnoDB
- JVM了解吗,介绍一下,讲了垃圾回收机制
- Full GC和Minor GC区别,及各自的触发条件
- 说说CMS垃圾回收器,及其适用场景
HR面:
- HR小姐姐很漂亮
- HR小姐姐真的很漂亮
- 问题都比较中规中矩,没有一开口就让我讲一个冷笑话
- 有没有实习
- 在哪里实习
- 负责什么系统
- 为什么要让我独立负责
- 手头有没有其他offer
- offer薪资有多少
- 哪里人 以后打算在哪里发展 是否接受入职前实习
- 是否接受996(然后后来才知道我们部门并不是996)
总的来说问题都比较的基础,但是想要回答好却并不容易,因为很多问题属于你想答得很深就可以深不见底,想答得浅一点一两句话就讲完了的那种。在平时学习的过程中,一定要注重培养自己的知识体系,不要只会死记硬背一些所谓的面试题标准答案。面试其实是一件量体裁衣的事情,很多东西(包括某些专业知识)并不存在一个非常量化的标准,重点是如何在面试官面前展现出自己独特的一面。假如在回答某些问题时你直接把从网上背的“标准答案”说出来,面试官就会觉得你这个人对知识没有自己的理解。面试官可是身经百战了,什么样的候选人没见过?所以想要在面试中和面试官谈笑风生,一定要在踏踏实实打牢专业基础的前提下,再努力提升自己的编码能力。如此,你想不拿一个好的offer都难!
总结
无论是哪家公司,(尤其是大厂)都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实写了这么多,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。如果这些能够帮到你,那就最好了!