美文网首页
spring 面试题

spring 面试题

作者: five_year | 来源:发表于2020-08-30 00:34 被阅读0次

1.使用spring 框架能给我们带来哪些好处?

解放程序员,简化开发
DI:配置文件中的java bean 和内存中的一致,依赖关系一目了然
IOC:对象统一管理,高效管理bean
万能胶集成了很多第三方框架:mybatis hibernate 事物 redis quartz shiro webmvc
模块化,可插拔
测试用例支持很好,声明式事物

2 beanFactory 和 applicationContext 区别?

applicationContext 是beanfactory 的子接口
1 ioc 容器中的bean监控,生命周期
2 能够支持国际化
3 扩展了统一资源读取方式,本地url ,网络url 
extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver

3 解释spring bean 的生命周期

监控方式
1 initializingBean ,disposableBean 用来回调
2 Aware 接口
3 init() destory()
4 @postContruct @preDestory 监听
作用域范围 5个范围,什么时候创建,消失
1 什么时候用,什么时候出生,用完就死了 prototype 
singleton,request(对request来说是单例,对spring来说来说多例),session(对session来说是单例,对spring来说来说多例),global-session(context)

4 spring 中bean是线程安全的吗?

没有关系

5 spring 中用到哪些设计模式

模板,适配器,装饰器,原型,工厂模式,代理模式

6 spring 是怎么样处理循环依赖的

用缓存机制解决循环依赖问题,2次循环
第一次把能创建好的创建好,不能创建的标记号,第二次在创建第一次标记的

7 BeanFactory和FactoryBean的区别

BeanFactory是接口,提供了iOC容器最基本的形式,给具体的IOC容器的实现提供了规范,
FactoryBean也是接口,为IOC容器中Bean的实现提供了更加灵活的方式

synchronized和lock的区别

1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;

2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;

3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

4.用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;

5.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)

6.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

CMS与G1收集算法思想

CMS收集器
一种以获取最短回收停顿时间为目标的收集器。基于“标记-清除”算法实现的,整个过程分为4个步骤:
(1)初始标记(CMS initial mark)
(2)并发标记(CMS concurrent mark)
(3)重新标记(CMS remark)
(4)并发清除(CMS concurrent sweep)

7、G1收集器
运行步骤:
1、初始标记
2、并发标记
3、最终标记
4、筛选回收

G1收集器将整个java堆划分为多个大小相等的独立区域(Region),跟踪各个Region里面垃圾堆积的价值大小(回收所获得空间大小以及回收所需的时间经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region

Linux的僵尸进程的原因和解决方法

Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态。例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止。如果子进程已经终止,那么,它的终止代号将告诉父进程这个任务是否已成功地完成。
为了遵循这些设计原则,不允许 Linux 内核在进程一终止后就丢弃包含在进程描述符字段中的数据。只有父进程发出了与被终止的进程相关的 wait() 类系统调用之后,才允许这样做。这就是引入僵死状态的原因:尽管从技术上来说进程已死,但必须保存它的描述符,直到父进程得到通知。
如果一个进程已经终止,但是它的父进程尚未调用 wait() 或 waitpid() 对它进行清理,这时的进程状态称为僵死状态,处于僵死状态的进程称为僵尸进程(zombie process)。任何进程在刚终止时都是僵尸进程,正常情况下,僵尸进程都立刻被父进程清理了。

僵尸进程的产生是因为父进程没有 wait() 子进程。所以如果我们自己写程序的话一定要在父进程中通过 wait() 来避免僵尸进程的产生。
当系统中出现了僵尸进程时,我们是无法通过 kill 命令把它清除掉的。但是我们可以杀死它的父进程,让它变成孤儿进程,并进一步被系统中管理孤儿进程的进程收养并清理。

相关文章

网友评论

      本文标题:spring 面试题

      本文链接:https://www.haomeiwen.com/subject/bcqsgqtx.html