Java面试题
/ / 阅读耗时预计 2 分钟面试问题汇总
SpringBoot常用注解?
最主要注解
@SpringBootApplication
,这个注解其实是包含了ComponentScan
、@Configuration
、EnableAutoConfiguration
三个注解。@RestController
,@Service
、@ResponseBody
,@RequestBody
@PathVariable
用户获取路径参数,@RequestParam
用户获取查询参数。@ConfigurationProperties
用户读取配置信息并注入到bean的属性上。Oracle索引原理?
默认索引类型是B树,Oracle会维护索引列值和rowid值映射关系表。主要分为根、茎、叶三个部分,索引列值放在叶子节点上,茎存放叶子节点相关信息。
Springcloud组件有哪些?
eureka服务注册发现,ribbon客户端负载均衡,hystrix熔断器,zuul(getway)服务网关,config(Apollo)分布式配置。
线程池的拒绝策略有哪些?
AbortPolicy:丢弃任务并抛出拒绝异常RejectExcutionException(默认策略)
DiscardPolicy:丢弃任务并且不会抛出异常
DiscardOldestPolicy:丢弃队列最前面的任务,执行后面的任务
CallerRunsPolicy:有调用线程池处理,也就是当触发拒绝策略时,只要线程池没有关闭,就由提交任务的当前线程处理。
Java基础
HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化
JDK8中长度超过8链表转为红黑树,提高查找效率,避免并发情况下覆盖问题。
-
获取下标时使用&运算,2的N次幂数据很高效并且hash值比较均匀。
HashMap,HashTable,ConcurrentHashMap的区别
HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全
HashMap底层数组+链表(JDK8长度超过8转为红黑树)key和Value可以为null,线程不安全
ConcurrentHashMap是线程安全的HashMap
极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的
后者,HashTable是直接对整个table加锁,ConcurrentHashMap是分段加锁,分为16个table,可以同时支持16个线程操作。
HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么。
并发修改问题、数据覆盖问题、数据丢失问题、循环链表问题(JDK7之前)。
-
public所有包、类都可以访问
protected自身、子类可以访问
private自身可以访问
default同包中的类可以访问
-
equals、hashCode、clone、wait、notify、notifyAll、toString、getClass、finalize
接口和抽象类的区别,注意JDK8的接口可以有实现。
JDK8之后几乎差别不大,除了一点,接口支持多继承,抽象类不支持。
-
JDK动态代理:利用反射机制生成代理接口的匿名类,在具体方法调用前先调用InvokeHandler,但是只能代理接口。
CGLIB动态代理:利用ASM加载代理类字节码,修改字节码生成一个子类。但不能代理final修饰的类。
Java序列化的方式。
实现序列号接口Serializable,或者通过JSON实现
-
简单讲只有传值,如果是对象类型传的值是对象地址,如果是简单类型传的值是原址的拷贝。
一个ArrayList在循环过程中删除,会不会出问题,为什么
不管是在单线程还是多线程情况下,都是有可能出现并发修改异常(
ConcurrentModificationException
)@transactional注解在什么情况下会失效,为什么。
在非public方法上使用时、作用在接口上,但是接口却是用CGLIB也会导致失效。
Java 集合类框架的基本接口有哪些?
List、Map、Set、Collection
HashSet 和 TreeSet 有什么区别?
都可以去重,HashSet无序,TreeSet有序。
HashSet 的底层实现是什么?
HashMap
LinkedHashMap 的实现原理?
底层也是通过HashMap实现,只不过相比HashMap来说LinkedHashMap是有序的(插入顺序和访问顺序)。
为什么集合类没有实现 Cloneable 和 Serializable 接口?
具体实现类都是有实现的。只是在集合类接口上没有实现,考虑到接口的职责应该单一。
数组 (Array) 和列表 (ArrayList) 有什么区别?什么时候应该使用 Array 而不是 ArrayList?
Java 集合类框架的最佳实践有哪些?
ArrayList,HashMap,HashSet这些不就是咯
Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是 equals()?它们有何区别?
使用equals判断,
equals判断对象的内容是否相等
==判断基本类型的值和引用是否相等
Comparable 和 Comparator 接口是干什么的?列出它们的区别
Comparable通常是在集合内部定义排序,Comparator是在外部定义排序。
Collection 和 Collections 的区别。
一个是集合接口,一个是封装好的集合工具包
JVM与调优
JVM的内存结构。
JVM方法栈的工作过程,方法栈和本地方法栈有什么区别。
JVM的栈中引用如何和堆中的对象产生关联。
可以了解一下逃逸分析技术。
GC的常见算法
CMS以及G1的垃圾回收过程,CMS的各个阶段哪两个是Stop the world的,CMS会不会产生碎片,G1的优势。
双亲委派模型的过程以及优势。
常用的JVM调优参数。
对象什么时候进入老年代?
什么是内存溢出, 内存泄露? 他们的区别是什么?
引起类加载操作的行为有哪些?
Class.forName,反射,new,调用静态方法或者静态属性,
介绍一下 JVM 提供的常用工具
jconsole,jstat,jmap,jvisualvm,
Full GC 、 Major GC 、Minor GC 之间区别?
什么时候触发 Full GC ?
什么情况下会出现栈溢出
说一下强引用、软引用、弱引用、虚引用以及他们之间和 gc 的关系
Eden 和 Survivor 的比例分配是什么情况?为什么?
Eden是8/10,两个survivor分别是1/10,原因:jdk通过统计发现,大部分的对象生命周期都是很短的(大部分都是局部变量),经过一次MinorGC之后通常只剩下10%左右。所以只需要设置10%的survivor。
什么是分布式垃圾回收(DGC)?它是如何工作的?
串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
serial是单线程收集,收集垃圾时会发生STW,导致用户线程被暂停,所以吞吐量很低。
在 Java 中,对象什么时候可以被垃圾回收?
没有任何引用后会被回收。
Java并发
Spring
- 谈谈对 Spring IoC 的理解?
- 谈谈对 Spring DI 的理解?
- BeanFactory 接口和 ApplicationContext 接口不同点是什么?
- 请介绍你熟悉的 Spring 核心类,并说明有什么作用?
- 介绍一下 Spring 的事务的了解?
- 介绍一下 Spring 的事务实现方式?
- Spring 配置 Bean 实例化有哪些方式?
- Bean 注入属性有哪几种方式
- 在 Spring 中如何实现时间处理?
- Spring 中如何更高效的使用 JDBC ?
- 请介绍一下设计模式在 Spring 框架中的使用?
- IoC 控制反转设计原理?
- Spring 的生命周期?
- Spring 如何处理线程并发问题?
- 核心容器(应用上下文)模块的理解?
- 为什么说 Spring 是一个容器?
- Spring 的优点?
- Spring 框架中的单例 Beans 是线程安全的么?
- Spring 框架中有哪些不同类型的事件?
- IoC 的优点是什么?