tips :之前9月份离职,休息一段时间后开始面试,正好赶上互联网寒冬时期,面试准备又不够充分,导致目前还在继续面试,稍微惨,总结了近期面试的一些题目,可以给大家一些参考,大神可忽略,话不多说,上货!(有错还请指正)
一、Java基础
1.equals和==的区别
类型 | equals | == |
String Integter Charcater double float short boolean | 值 | 值 |
普通类(重写equals) | 内容 | 地址 |
普通类(未重写equals) | 地址 | 地址 |
普通两个类要相等要重写equals和hashCode方法
notes:Spring框架没有标明情况下,创建的bean都是单例的,那两个请求中bean里的参数值变了,对象仍是相等的吗?
2.String StringBulider StringBuffer
StringBuffer是线程安全,因为源码在实现的时候使用了Synchronized关键字
StringBulider非线程安全
3.单例模式 懒汉 饿汉 破坏一个单例模式的方法及如何优化
/**
* 饿汉模式
*/
public class HungryExam {
public HungryExam() {
}
private static HungryExam instance = new HungryExam();
public static HungryExam getInstance(){
return instance;
}
}
/**
* 懒汉模式
*/
public class LazyExam {
public LazyExam() {
}
private volatile static LazyExam instance ;
public static LazyExam getInstance(){
if(instance == null){
synchronized (LazyExam.class){
if(instance == null){
instance = new LazyExam();
}
}
}
return instance;
}
破坏方法:
public static void main(String[] args) {
//正常创建
for (int i = 0 ; i < 10; i++){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
LazyExam lazyExam = LazyExam.getInstance();
System.out.println("获取到的单例对象:"+ lazyExam);
}
});
t.start();
}
//反射
Class c = Class.forName("test.string2int.LazyExam");
Object o = c.newInstance();
if(o instanceof LazyExam){
System.out.println("获取到的单例对象-反射:"+ o);
}
}
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象-反射:test.string2int.LazyExam@4554617c
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd
获取到的单例对象:test.string2int.LazyExam@252708dd