Java面试总结

2021-09-26

1 概述

1 介绍

最近换工作,对最近面试的过程进行总结,总结每个公司的面试流程和问到的面试题,记录自己,也供大家参考。

我是一名Java开发,工作经验10年,所以面试一名高级Java开发工程师。

简历投递平台,只使用了Boss直聘。

由于生鲜电商裁员,我也是受害者的一员,就职的公司是*菜。

2021年9月8号开始开始投简历,2021年9月18号关闭Boss简历,去掉周末面试8天。

2 Boss数据

沟通过:500+,面试:20,已投简历130+

由于有复试原因,最多一天面试6家(超级赶,本来约了三家,但是来了3家复试,他们都要求最好能面了。给他们看了Boss预约信息,都要求插空一个小时)

3 面试岗位情况

10年Java经验,所以我投递是高级Java工程师的岗位。

由于住在顺义,所以面试的一般都是望京周围的公司。

4 面试情况

为了避免不必要的麻烦,这里把公司抹掉了,大家如果想要要的话,可以私信我

时间 结果 总结
9-8 一面二面通过,HR面失败 这个有点坑,二面全都过了,结果卡在学历上了(成人本科在读)
9-9 一面没过 面试官全程面试10分中,全程没有互动,我把这种现象归为一类,不用可惜,也不不用自责,没有眼缘
9-9 一面没过 面试时间50分钟,聊的挺好,可能是挂在了mysql集群的搭建上
9-10 现场面试,一面没过 面试时常1个小时,先做了个非常初级的面试题,面试官也是冷脸,估计挂在延时队列的时间论上
9-13 现场面试没过 这个有点坑了,去了公司,面试先来了HR,然后来了业务总监,聊了1个多小时,我说技术不面吗,过了一会HR跑来说,不好意思,业务总监说以前没做支付行业,可能不匹配(CNM怎么不早说)
9-13 一面没过 这个印象不深
9-14 一面 这是个0基础Java转go的,因为有好多出行找我转GO的,好奇就面了下,没有结果
9-15 5面了 无人机行业,远程1面,去公司2/3/4面,5面CEO亲自面试(2分钟),现在处于等通知阶段
9-15 1面挂了 现场面试,面试1个小时,这个属于那种问道你死为止,还会用眼神嘲笑你一下的那种,面试官很矫情,同样的意思没有用他的话术说出来,他都会纠正出来,个人建议直接pass
9-15 1面 直播行业,现场面试,这个工作环境和传统的差别太大了,有点太open。面试还可以,问的比较多,聊了1个小时,没下文。估计给的钱比较多,去面试的很多
9-16 2面挂了 出海游戏,一面过了,二面问的比较深。估计页是给的钱比较多 30-60*18薪。办公环境是共享场地,也很open,游戏怎么挣钱吗???
9-16 直接一面过 做金融相关,面试官不错,聊了1个小时,聊的很好,1面直接说我不用2面了,会让HR直接给我谈钱
9-16 通过 一个公司两条业务线,做生鲜的类似盒马,一面二面都通过了,薪资待遇和上面一模一样,还纠结了一段要去哪个
9-17 通过 这个面明显群面,10点一面通过,立马让二面,二面下午5个人面我,通过,节后通知我让我去公司谈钱,由于是个跨境支付,规模也不大,综合考虑不去了
9-17 通过 一个高中教育,网易投资的,一面是网易的,有个算法题用到双指针,二面总监面也通过,也面到了延时队列的时间轮,HR谈钱
9-17 一面 一个传统公司,面试官问的问题都不错,答得不好的,还给了详细的回答,当时说是过了,等通知 现在还没信息,也懒得问了
9-18 一面不过 算法没过

5 Boss面试截图

为了避免不必要的麻烦,这里把公司抹掉了,也只晒出了部分截图,大家如果想要要的话,可以私信我

Boss预约的有16家,通过邮件的有********,还有一个让我拒了,距离有点远。

加起来总面试是20家

6 面试过程

为了避免不必要的麻烦,这里把公司抹掉了,也只晒出了部分截图,大家如果想要要的话,可以私信我

本来打算每个都写一下面试过程来着,感觉有点流水账的意思了,没什么意思。这里挑几个典型介绍下。

*送:全程10分种多点,面试官全程没有表情。问的问题:springboot自动装配过程,springboot循环依赖,springboot自定义start,hashmap。

遇到过很多这种情况,问的问题也答了,面试官没有反应,继续问他的问题。一般遇到这种情况,不用惋惜也不要生气,他可能刚遇到啥生气的事情,或者性格就这样……(尽管这样安慰自己,当时也很生气哈哈)

***水:面试时长1个小时,问的问题:JVM/ArrayList/JMM内存屏障,往深了问,比方JMM内存屏障怎么设计的,为什么要这么做……

基本就是问到你不会为止。

这种情况也比较多,有些大公司会这么问,这种除了自己生气,应该要好好看源码哈哈

****r:明显的群面,让我生气的是,如果过了,你就往下进行就行,HR说的很隐晦,就说前面两轮不错,要不来公司看看……

猜测应该是她给很多人都这么说了,估计面试周期会很长,他们面试基数比较大,可能是100个人里找2个人哈哈

**付:面试流程明显有问题,应该也是群面的。去了HR先给我聊了半个多小时,大体问了工作经历,家庭情况,职业规划啥的,看起来是在拖延时间。一会叫来了业务总监,看看了工作经历。没有技术给我面试,最后HR说我们业务总监说你没有支付经验,所以不好意思。
你怎么不一开始就问有没有支付经验,那样咱们就都不耽误时间。

就是说这些吧,都是些负面的,希望大家不要遇到这种公司。

7 面试结果

这次面试周期10天,面试20家,offer3个,拒掉2个(直接没谈钱),还有一个再谈。也就是到谈钱的是6个。

可能一开始有点慌,没有仔细筛选公司,所以面了几个没必要面的。

我这通过了有点低

8 面试高频

总结下面试高频知识

1 Java基础

  • JVM:一般从JVM组成开始介绍,然后单独介绍每一块,然后就会慢慢衍生出垃圾回收方式,垃圾回收器,还可以衍生出volatile之类的,你也可以往自己重点掌握的去引导。

​ 重点:栈帧/堆,垃圾回收方式,垃圾回收器的对比 G1---CMS。unsafe类navicat到volatile。

  • 集合类:一般会问HashMap或者arraylist,有的还会让比对arraylist和linklist。ConcurrentHashMap等

​ 一般回答初始化过程,组成,底层结构,算法,线程是否安全等,这块一定要回答仔细,要看过源码,或者看些B站的源码讲解很仔 细,到每一个方法名字,要是集合类就挂掉了,那就凉凉了……

​ 重点:hashmap组成,寻找算法,扩容算法,put get过程,红黑树二叉树 B+树的区别。

​ 经典问题:为什么使用红黑树,不使用普通的二叉树。

  • :AQS实现,公平锁/非公平锁,synchronized和lock的区别,synchronized锁演化过程

一般从AQS谈起,这个和HashMap一样一定要通读源码,知道每一个方法的名字和过程,和集合类同样重要。

即使没有问你,你最后也可以对比下synchronized和lock和LockSupport,显得JUC下面都精通。

还有这三个CountDownLatch_CyclicBarrier_Semaphore,一般会问使用场景,要了然于胸

  • CAS:通常搭配volatile问,我一般在上面几个回答中就带上了,这个应用比较广泛了,AQS,集合等大量使用,源码的时候直接说了就OK

  • ThreadLocal:也是要看源码,还可以结合4大引用类型,堆内存泄漏使用,还有使用场景

  • 线程池:这个基本上99%都会问道,非常重要,和前面一样,源码来一遍。

    重点:7大参数,拒绝策略。回答思路,7大参数,拒绝策略介绍完。把线程池扩容场景描述一遍。结合实际使用场景说一下,参数配置,一个是耗CPU一个是耗IO的,应该就问题不大

    大体就写这么多,可能还有JMM/JUC下面的很多,就不一一列举了,总结下 Java基础是敲门砖,很多都要问源码,所以要非常熟悉,一般把这个当作一个开胃菜,回答好了,下面你才会自信,面试官也不 会鄙视你,否则即使往下问了,面试官也基本上给你判了死刑了,想想就知道多尴尬……

    当然还有很多厂,一面就问道这里,所以很重要。

2 Spring相关

spring的问题问的也不少,但也不是很多,总结几个高频吧

IOC/AOP/事务:把它们归为一类吧,比较常问。一般就从理论谈到源码,然后加一些实际使用,具体方法。

重点:IOC的实现,也就是注册托管……,AOP的实现逻辑方式的区别,AOP的使用ASpect的增强方法的顺序。事务的传播方式。

  • Spring初始化Bean的过程:可以在上面问题一块回答了。也有可能单独问你。这个要看源码,那几个状态,几个方法名字,bean的Scope,主要说sigleton。里面有很多的设计模式也可以说下
  • Spring循环依赖:可以结合上面的一块说。
    重点:三个map,bean的状态,scop方式
  • SpringBoot自动装配:springboot好像就这一个可以问的问题,所以要看源码,具体的哪个reflsh方法,要背下来。一般就说从注解说的简单的那种。要是还问,就要从run开始说了。我看过几遍,方法太多了,有些记不住呐…………

3 MySql

数据库是必问的,这里就说mysql了。

  • 索引:一般这一个问题,你就可以把mysql的所有问题串一下。先说下innodb和myisam,再说聚集索引/非聚集索引,B+树,索引覆盖,执行计划expline,

重点:聚集索引/非聚集索引的区别。B+树结构,怎么才能不回表。查询优化,覆盖索引。执行计划expline的参数。查询优化过程。

最后查询优化还可以加上分库分表,这里面问的就更多了,分库分表方式,怎么能更快的读取,快速定位。要加上实际场景说,才有说服力……

经典问题:为什么不适用其他的树使用B+树。这里还会和hashmap的红黑树比对。要看树的结构了,所以数据结构很重要。看了B+树的结构就清楚了,我的理解B+树叶子节点又加了一个类似数组的串了起来,范围查询的时候,就不用回树了,提高效率。

非聚集索引怎么才能不回表:非聚集索引存储的是索引内容+ID,当索引覆盖就不回表,这里就涉及到了联合索引的最左法制……,就说这么多,自己总结吧,太多了,你可以一直串着往下说,这样回答了问题,还进行了扩展,要不面试官也得往下问哈哈

  • 事务:这个也是必问的,先从ACID说,然后用undolog ...保证的,然后隔离级别和出现的现象。然后再说隔离级别的底层,也就是mysql的锁,表锁行锁间隙锁,再到MVCC

    重点:这里那几个隔离级别比较绕,要仔细看下,还有实际应用场景,否则很容易被问住。我这里卡过两个哈哈

  • 集群:主从复制,分片,分库分表。这里会问道集群搭建啥的,我一般就答一下分库分表相关的,偏运维的我还没有深入搞过,下面要学习了……

4 Redis

缓存是必问的了,总结了几个高频

  • redis的数据类型:5大常用3个不常用的,然后结合使用场景都说下。

  • 缓存问题和解决方案:缓存雪崩,缓存击穿,缓存穿透。解决办法,多级缓存,布隆过滤器(黑白名单),万一击穿阻塞。这个是常见问题,可以结合你的项目说一下。一定不能挂,要不就凉凉……

  • 淘汰策略:几种淘汰策略介绍,然后说下LRU的算法实现(伪代码),看下LRU的算法,好多算法题就是手写LRU算法。

  • 持久化:RDB和AOF,使用场景,两种都用先用AOF恢复

  • 集群:主从/哨兵/分片,重点哨兵的介绍

  • 重点:分布式锁:这个是重点,可以再你的项目场景中就说了,分布式的一定涉及到这个问题。

    结合下图的5个特性说,从redisson说到redlock,重点就是下面五个特性和看门狗的实现,集群下的容错性。

5 MQ

队列在分布式中应用广泛,所以这个一定会问,就算不问,你在说项目的时候也要说下应用场景

  • MQ的类型:direct/ topic/ fanout分别的应用场景说一下
  • 分布式下的应用:说一下排对使用场景,然后围绕高可用进行说,发送端接收端如何保证消息的可靠性
  • 延时队列:这个被问到好多次,MQ的实现是使用死信队列进行实现,两外两种一个是redis+springboot实现,二是时间轮。这个是重点要好好看下,因为这个场景比较多,延时多久发信息,延时取消订单

还有问几个MQ的区别的或者问怎么选型的,我没回答太好,因为没有全都用过。

6 微服务架构

微服务架构这个很重要,一般我都是在介绍项目的时候就介绍了,然后对几个框架进行对比

回答技巧:我一般从微服务的几大组成开始谈,然后对比他们的区别。到每一个技术的时候,说一下具体使用。

比如:sentienl,先说下主要功能,然后结合项目怎么实现的,可以提一下SentinelResource的blockHandler,这样让面试官知道是敲过代码的。然后说限流是根据什么配置的,熔断和降级解决什么实际问题

分布式事务:分布式事务放到这里说吧,这个致命重要,分布式下面常见场景,我一般放到这里讲。因为我准备的是ailbaba的seate,大体说下分布式事务的几种方式,2pc 3pc。然后重点介绍自己项目使用的seate,要说到seate服务使用表名字,怎么使用全局唯一ID和3大组件实现的,实现流程详细阐述,前置镜像后置镜像。最后说下优缺点,就齐活了…………

7 算法/设计模式/Vue/项目经验/未来发展

这些就不说了,算法前端我都比较菜,算法也没有刷。

设计模式可以准备一下,一般在spring里面直接说了。要是面试官直接问,比方装饰模式是什么……我就跪了,看来还要全面的看一遍。

至于项目经验/未来发展这些都要准备,因为即使一面不问,后面的面试也会被问到,所以要准备充分。

还有一个题 狼来了,兔子猴子都跑了,代码实现哈哈

7 总结

作为一名Java开发工程师,要学习的东西实在太多了,这里只是从java基础/Spring/Mysql/redis……这些方面总结下这几天被问到的高频面试题,记录自己,供大家参考………………

9 面经总结

总结下Java面试面试总结

个人总结面试需要自己准备几个方面吧

1 技术基础:java基础 数据库基础 缓存 中间件等,比如hashMap原理,数据库索引结构,redis类型,mq等。基础是敲门砖,最起码不能被这些问题给问住,如果超过两个基础你没有回答上来,一首凉凉送给你。

2 算法题:力扣,牛客,算法题还是要刷的,否则一个二叉树镜像你就挂了……我比较懒,没有刷这些题,所以遇到就挂了,等工作后一定要刷个1k道题哈哈

3 微服务相关:三个微服务框架 netfix,alibaba,dubbo+zk的这些你都要了解过或者搞过,现在的技术,这些都是常用的,别说没搞过,要不又是一首凉凉……

4 高大上的技术应用实例:高大上的技术应用实例,一定要是通用场景(方便面试官往下问),你不要说一个只有行业才知道的技术使用场景,那就没得聊了。一定要是你技术的最高体现,高并发/高可用/微服务/缓存/事务这种技术的综合体现。

当然准备好了是加分,要是没准备充分被问倒了就是减分项。

比方我就是准备订单秒杀场景:这种场景包含上面提到的所有信息。可以聊的东西比较多。

5 2分钟内能介绍清楚的项目:这个主要是在二面或者三面的时候高级别的面试官,考察你逻辑表达的能力。一般不用太复杂,但一定要是合情合理的业务场景,尽量大一点,完整的业务场景,不要说是某个边边角角。要使用简短的语言,通俗的话语说清楚。还要注意一点可以加上自己的项目负责人这一点,都说的这么透彻了,再加上负责人,面试官感觉你掌控项目没问题哈哈

总结

总结就上面这几点吧,虽然是我总结的,我也没有做的这么好,有很多一面就挂掉的,所以大家肯定比我优秀。

如果有什么心得可以一块探讨。

希望大家都能找到自己合适的工作。