高级JAVA程序员面试题

2022/3/2 20:46:15

本文主要是介绍高级JAVA程序员面试题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

高级JAVA程序员面试一、Java基础

1、JVM:一般从JVM组成开始介绍,然后单独介绍每一块,然后就会慢慢衍生出垃圾回收方式,垃圾回收器,还可以衍生出volatile之类的。

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

2、集合类:一般会问HashMap或者ArrayList,有的还会让对比ArrayList和LinkList。还有ConcurrentHashMap等。

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

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

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

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

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

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

还有这三个:

CountDownLatch、CyclicBarrier、Semaphore,一般会问使用场景,要了然于胸

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

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

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

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

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

二、Spring相关

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

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

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

2、Spring初始化Bean的过程:可以在上面问题一块回答了。也有可能单独问你。这个要看源码,哪几个状态、几个方法名字、bean的Scope,主要说Sigleton。里面有很多的设计模式也可以说一下。

3、Spring循环依赖:可以结合上面的一块说。重点:三个map、bean的状态、scope的方式

4、SpringBoot自动装配:springboot好像就这一个可以问的问题,所以要看源码,具体的那个reflsh方法,要背下来。一般就说从注解说的简单的那种,要是还问,就要从run开始说了,看过几遍,方法太多了,不好记。。

三、Mysql

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

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

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

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

经典问题:

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

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

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

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

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

四、Redis

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

1、Redis数据类型:5大常用、3大不常用的,然后结合使用场景都说一下。

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

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

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

5、集群:主从\哨兵\分片,重点哨兵的介绍

6、重点,分布式锁:这个是重点,可以在你的项目场景中就说了,分布式一定涉及到这个问题。从Reidisson说到redlock

五、MQ

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

1、MQ的类型: direct/topic/fanout分别的应用场景说一下。

2、分布式下的应用:说一下排队使用场景,然后围绕高可用进行说,发送端接收端如何保证消息的可靠性。

3、延时队列:这个被问过好多次,MQ的实现是使用死信队列进行实现,另外两种一个是redis+springboot实现,二是时间轮。这个是重点要好好看一下,因为这个场景比较多,延时多久发消息,延时取消订单。

4、MQ的区别和选项: ActiveMq\RabittMQ\RocketMq\Kafaka各自优缺点

六、微服务架构

微服务架构这个很重要,一般在介绍项目的时候就介绍了,然后对几个框架Netflix、Alibaba、Dubbo+Zk进行比对。

回答技巧:我一般从微服务的几大组成服务注册中心、服务调用、服务降级熔断、服务网关、服务配置、服务总线)开始谈,然后对比他们的区别。到每一个技术的时候,说一下具体使用。

比如:sentienl,先说一下主要功能,然后结合项目怎么实现的,可以提一下SentinelResource的blockHandler,这样让面试官知道是怎么敲过代码的。然后说限流是根据什么配置的,熔断和降级解决什么实际问题。对于新手小白想更轻松的学好Java提升,Java架构,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,扩列下我尉(同英):1253431195【教程/工具/方法/解疑】

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

七、算法、设计模式、项目经验、未来发展

算法:力扣、牛客算法题适当刷一下。

设计模式:适当准备一下,常见的工厂模式、单例模式、代理模式必须要能说出来一些。

项目经验、未来发展:自己一定要准备好。



这篇关于高级JAVA程序员面试题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程