1.购买域名
登录 阿里云万网域名 购买域名:waylanpunch.online
WP
69个经典Spring面试题和答案
1. 什么是spring?
Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。
2. 使用Spring框架的好处是什么?
轻量:Spring 是轻量的,基本的版本大约2MB
控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们
面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开
容器:Spring 包含并管理应用中对象的生命周期和配置
MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)
异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常
2018年Java面试题汇总 - 5
一、Java相关
乐观悲观锁的设计,如何保证原子性,解决的问题;
char和double的字节,以及在内存的分布是怎样;
对象内存布局,然后讲下对象的死亡过程?
对象头,详细讲下;
sync原理详细,sync内抛异常会怎样,死锁吗?还是释放掉?怎么排查死锁?死锁会怎样?有没有什么更好的替代方案?
详细讲一下集合,HashSet源码,HashMap源码,如果要线程安全需要怎么做?
多线程是解决什么问题的?线程池解决什么问题?
线程池,如何设计的,里面的参数有多少种,里面的工作队列和线程队列是怎样的结构,如果给你,怎样设计线程池?
AQS原理,ReentranLock源码,设计原理,整体过程。
继续聊多线程源码,sync原理,然后一个场景设计题;
float f = 1.4f;double d = 1.4d; 与 float f = 1.5f;double d = 1.5d; 是否为true,内存是怎样的;
split的源码,split(“a|b|c”);得出多少个数组;
把所有认识熟用的JUC( java.util.concurrent(简称JUC)包)下的类写出来,讲下使用,然后讲下原生的线程操作;
开闭原则,解析工厂方法模式,建造者模式,区别。手撸出来。
讲下JVM的大页模式,JVM内存模型;
什么是敏捷开发,防御性编程,并行编程。Team Leader的思考;
逃逸分析是什么,作用是什么,用途是什么;
怎么认为一个类是线程安全?线程安全的定义是什么?Java有多少个关键字进行同步?为什么这样设计?(聊了一大堆,一堆为什么);
两个线程设计题。记得一个是:t1,t2,t3,让t1,t2执行完才执行t3,原生实现。
写个后缀表达式,为什么要设计后缀表达式,有什么好处?然后写下中缀。
我看你做过性能优化,比如你怎么分析项目里面的OOM的,内存泄露呢?详细说思路;
说下多线程,我们什么时候需要分析线程数,怎么分析,分析什么因素;
抽象方法和类方法的区别,static的抽象方法可以吗?
说下Java的克隆体系;
涉及OOM、JVM优化、源码问题、数据库优化、多线程等问题;
CPU高?什么情况CPU高?解决什么问题?
你有遇到过临界区问题吗?有遇到过吗?你在项目遇到这个问题是怎样解决的?
volatile关键字作用;
Java的多态怎么实现;
解释一下自旋;
解释一下信号量;
什么情况下会触发类加载;
Java内存抖动严重,优化的思路;
2018年Java面试题汇总 - 4
一、Java基础
为什么JVM调优经常会将-Xms和-Xmx参数设置成一样;
Java线程池的核心属性以及处理流程;
Java内存模型,方法区存什么;
CMS垃圾回收过程;
Full GC次数太多了,如何优化;
直接内存如何管理的;
Java线程池的几个参数的意义和实现机制;
Java线程池使用无界任务队列和有界任务队列的优劣对比;
CountDownLatch和CyclicBarrier的区别;
Java中有哪些同步方案(重量级锁、显式锁、并发容器、并发同步器、CAS、volatile、AQS等)
如果你的项目出现了内存泄露,怎么监控这个问题呢;
标记清除和标记整理的区别和优缺点,为何标记整理会发生stop the world;
线程池,如何根据CPU的核数来设计线程大小,如果是计算机密集型的呢,如果是IO密集型的呢?
让你设计一个cache如何设计;
String中hashcode是怎么实现的;
JDK中哪些实现了单例模式?
多个线程同时读写,读线程的数量远远⼤于写线程,你认为应该如何解决并发的问题?你会选择加什么样的锁?
线程池内的线程如果全部忙,提交⼀个新的任务,会发⽣什么?队列全部塞满了之后,还是忙,再提交会发⽣什么?
synchronized关键字锁住的是什么东西?在字节码中是怎么表示的?在内存中的对象上表现为什么?
wait/notify/notifyAll⽅法需不需要被包含在synchronized块中?这是为什么?
ExecutorService你一般是怎么⽤的?是每个Service放一个还是个项目放一个?有什么好处?
2018年Java面试题汇总 - 3
一、基础题
怎么解决Hash冲突;(开放地址法、链地址法、再哈希法、建立公共溢出区等)
写出一个必然会产生死锁的伪代码;
Spring IoC涉及到的设计模式;(工厂模式、单利模式。。)
toString()方法什么情况下需要重写;
判断对象相等时,什么情况下只需要重写 equals(),什么情况下需要重写 equals(),hashcode()?
Set内存放的元素为什么不可以重复,内部是如何保证和实现的?
如何保证分布式缓存的一致性(分布式缓存一致性hash算法?)?分布式session实现?
Java 8流式迭代的好处?
项目中用到的JDK的哪些特性?
说一下TreeMap的实现原理?红黑树的性质?红黑树遍历方式有哪些?如果key冲突如何解决?setColor()方法在什么时候用?什么时候会进行旋转和颜色转换?
Spring的bean的创建时机?依赖注入的时机?
ArrayList和LinkList的删除一个元素的时间复杂度;(ArrayList是O(N),LinkList是O(1));
CopyOnWriteArrayList是什么;
序列化和反序列化底层如何实现的(ObjectOutputStream 、ObjectInputStream、 readObject writeObject);
如何调试多线程的程序;
一个线程连着调用start两次会出现什么情况?(由于状态只有就绪、阻塞、执行,状态是无法由执行转化为执行的,所以会报不合法的状态!)
HashMap在什么时候时间复杂度是O(1),什么时候是O(n),什么时候又是O(logn);
wait方法能不能被重写?(wait是final类型的,不可以被重写,不仅如此,notify和notifyall都是final类型的),wait能不能被中断;
一个Controller调用两个Service,这两Service又都分别调用两个Dao,问其中用到了几个数据库连接池的连接?
2018年Java面试题汇总 - 2
一、Java相关
Arraylist与LinkedList默认空间是多少;
Arraylist与LinkedList区别与各自的优势List 和 Map 区别;
谈谈HashMap,哈希表解决hash冲突的方法;
为什么要重写hashcode()和equals()以及他们之间的区别与关系;
Object的hashcode()是怎么计算的?
若hashcode方法永远返回1或者一个常量会产生什么结果?
Java Collections和Arrays的sort方法默认的排序方法是什么;
引用计数法与GC Root可达性分析法区别;
浅拷贝和深拷贝的区别;
String s=”abc”和String s=new String(“abc”)区别;
HashSet方法里面的hashcode存在哪,如果重写equals不重写hashcode会怎么样?
反射的作用与实现原理;
Java中的回调机制;
模板方法模式;
开闭原则说一下;
发布/订阅使用场景;
KMP算法(一种改进的字符串匹配算法);
JMM里边的原子性、可见性、有序性是如何体现出来的,JMM中内存屏障是什么意思,