A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 就业高冷派 黑马粉丝团   /  2019-4-30 10:29  /  6923 人查看  /  120 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 逆风TO 于 2019-5-27 11:19 编辑

公司名称:西安丝路软件有限公司
地址:西安市高新区科技二路72号西安软件园凌翼广场10401号
1. 请解释Spring Bean的生命周期?
SpringBean的生命周期简单易懂。在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。
Springbean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成。
1.  初始化之后调用的回调方法。
2.  销毁之前调用的回调方法。
Spring框架提供了以下四种方式来管理bean的生命周期事件:
·        InitializingBean和DisposableBean回调接口
·        针对特殊行为的其他Aware接口
·        Bean配置文件中的Custom init()方法和destroy()方法
·        @PostConstruct和@PreDestroy注解方式
使用customInit()和 customDestroy()方法管理bean生命周期的代码样例如下:
<beans>
    <beanid="demoBean" class="com.howtodoinjava.task.DemoBean"
           init-method="customInit"destroy-method="customDestroy"></bean>
</beans>

2、Spring框架中的单例Beans是线程安全的么?
Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Springbean并没有可变的状态(比如Serview类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。
3、请说出你所知道的线程同步的方法。
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

4、描述Cookie 和Session 的作用区别和各自的应用范围
Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。Session:保存在服务端,每一个 session 在服务端有一个 sessionID 作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。
5、synchronized 和 ReentrantLock 有什么不同(以前面试被问过)
      a.这两种方式最大区别就是对于Synchronized来说,它是java语言的关键字,是原生语法层面的互斥,需要jvm实现。而ReentrantLock它是JDK 1.5之后提供的API层面的互斥锁,需要lock()和unlock()方法配合try/finally语句块来完成。
      b.Synchronized进过编译,会在同步块的前后分别形成monitorenter和monitorexit这个两个字节码指令。在执行monitorenter指令时,首先要尝试获取对象锁。如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1,相应的,在执行monitorexit指令时会将锁计算器就减1,当计算器为0时,锁就被释放了。如果获取对象锁失败,那当前线程就要阻塞,直到对象锁被另一个线程释放为止。
     c. ReentrantLock由于ReentrantLock是java.util.concurrent包下提供的一套互斥锁,相比Synchronized,ReentrantLock类提供了一些高级功能,主要有以下3项:
         1.等待可中断,持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待,这相当于Synchronized来说可以避免出现死锁的情况。
         2.公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,Synchronized锁非公平锁,ReentrantLock默认的构造函数是创建的非公平锁,可以通过参数true设为公平锁,但公平锁表现的性能不是很好。
         3.锁绑定多个条件,一个ReentrantLock对象可以同时绑定对个对象。
6、ThreadLocal 用途是什么,原理是什么,用的时候要注意什么      
我们知道,在多线程程序中,同一个线程在某个时间段只能处理一个任务.我们希望在这个时间段内,任务的某些变量能够和处理它的线程进行绑定,在任务需要使用这个变量的时候,这个变量能够方便的从线程中取出来.ThreadLocal能很好的满足这个需求,用ThreadLocal变量的程序看起来也会简洁很多,因为减少了变量在程序中的传递.
2.ThreadLocal的原理是怎么样的?
    每个运行的线程都会有一个类型为ThreadLocal.ThreadLocalMap的map,这个map就是用来存储与这个线程绑定的变量,map的key就是ThreadLocal对象,value就是线程正在执行的任务中的某个变量的包装类Entry.
3. ThreadLocal保存变量的生命周期是怎么样的?
    ThreadLocal保存变量的生命周期 <=任务的生命周期<=线程的生命周期
ThreadLocal.set,ThreadLocal.remove实际上是同样的道理。


120 个回复

倒序浏览

加油,努力,向上
回复 使用道具 举报

厉害厉害
回复 使用道具 举报
赞赞赞
赞赞赞
赞赞赞
回复 使用道具 举报
回复 使用道具 举报
                                                
回复 使用道具 举报
      
回复 使用道具 举报
66666666666666666666666666
回复 使用道具 举报
666666666666666666666666
回复 使用道具 举报
666666666666666666666666666666666666
回复 使用道具 举报
学习到很多
回复 使用道具 举报
作者棒棒哒
回复 使用道具 举报
感谢分享
回复 使用道具 举报
6666666666666666666666666666666
回复 使用道具 举报
duanshaobo 来自手机 中级黑马 2019-5-27 15:01:48
15#

西安黑马JavaEE就业34期
平均薪资7420元,毕业18个工作日,就业率49.21%
回复 使用道具 举报
感谢分享
回复 使用道具 举报
西安丝路软件有限公司
回复 使用道具 举报
赞赞赞,6666
回复 使用道具 举报

赞赞赞
赞赞赞
赞赞赞
回复 使用道具 举报
赞赞赞
赞赞赞
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马