常见Java面试题

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生内存数据库 Tair,内存型 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
相关文章
|
5天前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
5天前
|
安全 Java 数据库
一天十道Java面试题----第四天(线程池复用的原理------>spring事务的实现方式原理以及隔离级别)
这篇文章是关于Java面试题的笔记,涵盖了线程池复用原理、Spring框架基础、AOP和IOC概念、Bean生命周期和作用域、单例Bean的线程安全性、Spring中使用的设计模式、以及Spring事务的实现方式和隔离级别等知识点。
|
5天前
|
存储 监控 安全
一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)
这篇文章是Java面试第三天的笔记,讨论了线程安全、Thread与Runnable的区别、守护线程、ThreadLocal原理及内存泄漏问题、并发并行串行的概念、并发三大特性、线程池的使用原因和解释、线程池处理流程,以及线程池中阻塞队列的作用和设计考虑。
|
5天前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
5天前
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
5天前
|
SQL Java 数据库连接
一天五道Java面试题----第六天(1)
这篇文章是关于Java面试中常见的五个问题,包括MyBatis和Hibernate的对比、MyBatis中#{}和${}的区别、MyBatis插件的运行原理及开发流程、索引的基本原理以及MySQL聚簇索引和非聚簇索引的区别。
|
5天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
5天前
|
前端开发 Java 数据库连接
一天十道Java面试题----第五天(spring的事务传播机制------>mybatis的优缺点)
这篇文章总结了Java面试中的十个问题,包括Spring事务传播机制、Spring事务失效条件、Bean自动装配方式、Spring、Spring MVC和Spring Boot的区别、Spring MVC的工作流程和主要组件、Spring Boot的自动配置原理和Starter概念、嵌入式服务器的使用原因,以及MyBatis的优缺点。
|
6天前
|
存储 Java 编译器
|
5天前
|
存储 关系型数据库 MySQL
一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)
这篇文章是关于Java面试中关于数据库性能优化和MySQL特性的五个问题,包括处理慢查询、ACID特性保证、MVCC概念、MySQL主从同步原理以及MyISAM和InnoDB存储引擎的区别。