常见Java面试题

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 常见Java面试题

一、Java基础

1、Arrays.sort实现原理和Collections.sort实现原理

答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort实现的。TimSort算法就是找到已经排好序数据的子序列,然后对剩余部分排序,然后合并起来.


2、foreach和while的区别(编译之后) 线程池的种类,区别和使用场景


3、分析线程池的实现原理和线程的调度过程


4、线程池如何调优


5、线程池的最大线程数目根据什么确定


6、动态代理的几种方式


7、HashMap的并发问题


8、了解LinkedHashMap的应用吗


9、反射的原理,反射创建类实例的三种方式是什么?


10、cloneable接口实现原理,浅拷贝or深拷贝


11、Java NIO使用


12、hashtable和hashmap的区别及实现原理,hashmap会问到数组索引,hash碰撞怎么解决


13、arraylist和linkedlist区别及实现原理


14、反射中,Class.forName和ClassLoader区别


15、String,Stringbuffer,StringBuilder的区别?


16、有没有可能2个不相等的对象有相同的hashcode


17、简述NIO的最佳实践,比如netty,mina


18、TreeMap的实现原理


二、JVM相关


1、类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序


2、JVM内存分代


3、Java 8的内存分代改进


4、JVM垃圾回收机制,何时触发MinorGC等操作


5、jvm中一次完整的GC流程(从ygc到fgc)是怎样的,重点讲讲对象如何晋升到老年代,几种主要的jvm参数等


6、你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms,g1


7、新生代和老生代的内存回收策略


8、Eden和Survivor的比例分配等


9、深入分析了Classloader,双亲委派机制


10、JVM的编译优化


11、对Java内存模型的理解,以及其在并发中的应用


12、指令重排序,内存栅栏等


13、OOM错误,stackoverflow错误,permgen space错误


14、JVM常用参数


15、tomcat结构,类加载器流程


16、volatile的语义,它修饰的变量一定线程安全吗


17、g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择


18、说一说你对环境变量classpath的理解?如果一个类不在classpath下,为什么会抛出ClassNotFoundException异常,如果在不改变这个类路径的前期下,怎样才能正确加载这个类?


19、说一下强引用、软引用、弱引用、虚引用以及他们之间和gc的关系


20、常见Java面试题大综合,非常值得一看,面试必备!!!


三、JUC/并发相关


1、ThreadLocal用过么,原理是什么,用的时候要注意什么


2、Synchronized和Lock的区别


3、synchronized 的原理,什么是自旋锁,偏向锁,轻量级锁,什么叫可重入锁,什么叫公平锁和非公平锁


4、concurrenthashmap具体实现及其原理,jdk8下的改版


5、用过哪些原子类,他们的参数以及原理是什么


6、cas是什么,他会产生什么问题(ABA问题的解决,如加入修改次数、版本号)


7、如果让你实现一个并发安全的链表,你会怎么做


8、简述ConcurrentLinkedQueue和LinkedBlockingQueue的用处和不同之处


9、简述AQS的实现原理


10、countdowlatch和cyclicbarrier的用法,以及相互之间的差别?


11、concurrent包中使用过哪些类?分别说说使用在什么场景?为什么要使用?


12、LockSupport工具


13、Condition接口及其实现原理


14、Fork/Join框架的理解


15、jdk8的parallelStream的理解


16、分段锁的原理,锁力度减小的思考


17、常见Java面试题大综合,非常值得一看,面试必备!!!


四、Spring


1、Spring AOP与IOC的实现原理


2、Spring的beanFactory和factoryBean的区别


3、为什么CGlib方式可以对接口实现代理?


4、RMI与代理模式


5、Spring的事务隔离级别,实现原理


6、对Spring的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop的实现原理,说说aop中的几个术语,它们是怎么相互工作的?


7、Mybatis的底层实现原理


8、MVC框架原理,他们都是怎么做url路由的


9、spring boot特性,优势,适用场景等


10、quartz和timer对比


11、spring的controller是单例还是多例,怎么保证并发的安全


五、分布式相关


1、Dubbo的底层实现原理和机制


2、描述一个服务从发布到被消费的详细过程


3、分布式系统怎么做服务治理


4、接口的幂等性的概念


5、消息中间件如何解决消息丢失问题


6、Dubbo的服务请求失败怎么处理


7、重连机制会不会造成错误


8、对分布式事务的理解


9、如何实现负载均衡,有哪些算法可以实现?


10、Zookeeper的用途,选举的原理是什么?


11、数据的垂直拆分水平拆分。


12、zookeeper原理和适用场景


13、zookeeper watch机制


14、redis/zk节点宕机如何处理


15、分布式集群下如何做到唯一序列号


16、如何做一个分布式锁


17、用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗


18、MQ系统的数据如何保证不丢失


19、列举出你能想到的数据库分库分表策略;分库分表后,如何解决全表查询的问题。


20、算法&数据结构&设计模式


21、海量url去重类问题(布隆过滤器)


22、数组和链表数据结构描述,各自的时间复杂度


23、二叉树遍历


24、快速排序


六、BTree相关的操作


1、在工作中遇到过哪些设计模式,是如何应用的


2、hash算法的有哪几种,优缺点,使用场景


3、什么是一致性hash


4、paxos算法


5、在装饰器模式和代理模式之间,你如何抉择,请结合自身实际情况聊聊


6、代码重构的步骤和原因,如果理解重构到模式?


7、数据库


8、MySQL InnoDB存储的文件结构


9、索引树是如何维护的?


10、数据库自增主键可能的问题


11、MySQL的几种优化


12、mysql索引为什么使用B+树


13、数据库锁表的相关处理


14、索引失效场景


15、高并发下如何做到安全的修改同一行数据,乐观锁和悲观锁是什么,INNODB的行级锁有哪2种,解释其含义


16、数据库会死锁吗,举一个死锁的例子,mysql怎么解决死锁


七、Redis缓存相关


1、Redis的并发竞争问题如何解决了解Redis事务的CAS操作吗


2、缓存机器增删如何对系统影响最小,一致性哈希的实现


3、Redis持久化的几种方式,优缺点是什么,怎么实现的


4、Redis的缓存失效策略


5、缓存穿透的解决办法


6、redis集群,高可用,原理


7、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据


8、用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次


9、redis的数据淘汰策略


八、网络相关


1、http1.0和http1.1有什么区别


2、TCP/IP协议


3、TCP三次握手和四次挥手的流程,为什么断开连接要4次,如果握手只有两次,会出现什么


4、TIME_WAIT和CLOSE_WAIT的区别


5、说说你知道的几种HTTP响应码


6、当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤


7、TCP/IP如何保证可靠性,数据包有哪些数据组成


8、长连接与短连接


9、Http请求get和post的区别以及数据包格式


10、简述tcp建立连接3次握手,和断开连接4次握手的过程;关闭连接时,出现TIMEWAIT过多是由什么原因引起,是出现在主动断开方还是被动断开方。


九、其他


1、maven解决依赖冲突,快照版和发行版的区别


2、Linux下IO模型有几种,各自的含义是什么


3、实际场景问题,海量登录日志如何排序和处理SQL操作,主要是索引和聚合函数的应用


4、实际场景问题解决,典型的TOP K问题


5、线上bug处理流程


6、如何从线上日志发现问题


7、linux利用哪些命令,查找哪里出了问题(例如io密集任务,cpu过度)


8、场景问题,有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有10个线程同时调用它,如何做到。


9、用三个线程按顺序循环打印abc三个字母,比如abcabcabc。


10、常见的缓存策略有哪些,你们项目中用到了什么缓存系统,如何设计的


11、设计一个秒杀系统,30分钟没付款就自动关闭交易(并发会很高)


12、请列出你所了解的性能测试工具


13、后台系统怎么防止请求重复提交?


14、有多个相同的接口,我想客户端同时请求,然后只需要在第一个请求返回结果的时候返回给客户端。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1月前
|
安全 架构师 Java
Java大厂面试高频:Collection 和 Collections 到底咋回答?
Java中的`Collection`和`Collections`是两个容易混淆的概念。`Collection`是集合框架的根接口,定义了集合的基本操作方法,如添加、删除等;而`Collections`是一个工具类,提供了操作集合的静态方法,如排序、查找、同步化等。简单来说,`Collection`关注数据结构,`Collections`则提供功能增强。通过小王的面试经历,我们可以更好地理解这两者的区别及其在实际开发中的应用。希望这篇文章能帮助你掌握这个经典面试题。
44 4
|
3月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
131 2
|
26天前
|
Java 程序员
Java社招面试中的高频考点:Callable、Future与FutureTask详解
大家好,我是小米。本文主要讲解Java多线程编程中的三个重要概念:Callable、Future和FutureTask。它们在实际开发中帮助我们更灵活、高效地处理多线程任务,尤其适合社招面试场景。通过 Callable 可以定义有返回值且可能抛出异常的任务;Future 用于获取任务结果并提供取消和检查状态的功能;FutureTask 则结合了两者的优势,既可执行任务又可获取结果。掌握这些知识不仅能提升你的编程能力,还能让你在面试中脱颖而出。文中结合实例详细介绍了这三个概念的使用方法及其区别与联系。希望对大家有所帮助!
163 60
|
2天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
35 14
|
5天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
34 13
|
25天前
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
65 16
|
22天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
27天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
60 12
|
1月前
|
监控 Dubbo Java
Java Dubbo 面试题
Java Dubbo相关基础面试题
|
1月前
|
SQL Java 数据库连接
Java MyBatis 面试题
Java MyBatis相关基础面试题