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 命令把它清除掉的。但是我们可以杀死它的父进程,让它变成孤儿进程,并进一步被系统中管理孤儿进程的进程收养并清理。
网友评论