常见Java面试题

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
22天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
54 14
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
1月前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
27天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
30 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
58 4
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
117 4
|
2月前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
117 1
Java面试题之Java集合面试题 50道(带答案)
|
2月前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
66 5
下一篇
DataWorks