美文网首页
java 面试题2

java 面试题2

作者: vincky倩 | 来源:发表于2018-04-18 17:42 被阅读0次

集群环境中,session如何实现共享

1、Java集群之session共享

SimpleDataFormat是非线程安全的,如何更好的使用而避免风险呢

SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。

解决方法:(1)synchronized(sdf){ return sdf.format(date); }

(2)private static ThreadLocalthreadLocal = new ThreadLocal();

public static DateFormat getDateFormat() { DateFormat df = threadLocal.get(); if(df==null){ df = new SimpleDateFormat(date_format); threadLocal.set(df); } return df; } 

getDateFormat().format(date);

Java序列化

(1)使用默认的序列化机制,即实现Serializable接口即可,不需要实现任何方法。static成员变量和transient关键字修饰的成员变量不会被序列化保存

(2)实现Externalizable接口

Externalizable接口是继承自Serializable接口的,我们在实现Externalizable接口时,必须实现writeExternal(ObjectOutput)和readExternal(ObjectInput)方法,在这两个方法下我们可以手动的进行序列化和反序列化那些需要保存的成员变量。

泛型中extends和super的区别

1. 只能用于方法返回,告诉编译器此返参的类型的最小继承边界为T,T和T的父类都能接收,但是入参类型无法确定,只能接受null的传入 

 2. 只能用于限定方法入参,告诉编译器入参只能是T或其子类型,而返参只能用Object类接收

或者:

1、List<? extends T >是说 这个list放的是T或者T的子类型的对象,但是不能确定具体是什么类型,所以可以get(),不能add()(可以add null值)

extends 可用于的返回类型限定,不能用于参数类型限定

2、List<? super T> 是说这个list放的是至少是T类型的对象,所以我可以add T或者T的子类型,但是get得到的类型不确定,所以不能get

super 可用于参数类型限定,不能用于返回类型限定。

什么是内部类,内部类的作用

(1)内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类

(2)1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

(3)内部类的种类: 成员内部类、 局部内部类、 静态内部类(静态内部类的创建是不需要依赖于外围类,可以直接创建 静态内部类不可以使用任何外围类的非static成员变量和方法)、 匿名内部类(匿名内部类是没有访问修饰符的。 匿名内部类必须继承一个抽象类或者实现一个接口 匿名内部类中不能存在任何静态成员或方法 匿名内部类是没有构造方法的,因为它没有类名)

(4)内部类通过(外部类.this)来获得外部类的引用例如:

public class OuterClass { public void display(){ System.out.println("this is OuterClass..."); } public class InnerClass{ //获取外部类的引用 public OuterClass getOuterClass(){ return OuterClass.this; } public void innerDisplay(){ //内部类也可以通过外部类的引用访问外部元素 getOuterClass().display(); } } public static void main(String[] args) { OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass = outerClass.new InnerClass(); innerClass.innerDisplay(); } }

(5)部类可以通过内部类引用间接访问内部类元素,例如

public class OuterClass { public void display(){ //外部类访问内部类元素,需要通过内部类引用访问 InnerClass innerClass=new InnerClass(); innerClass.innerDisplay(); } public class InnerClass{ public void innerDisplay(){ System.out.println("I am inner class"); } } public static void main(String[] args) { OuterClass outerClass=new OuterClass(); outerClass.display(); } }

(6)在外部类外面创建内部了对象

OuterClass.InnerClass innerClass=new OuterClass().new InnerClass();

或者

OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass = outerClass.new InnerClass();

String,StringBuffer与StringBuilder的区别

String 字符串常量 ,String类是被final修饰,String类不能被继承,

StringBuffer 字符串变量(线程安全)

StringBuilder 字符串变量(非线程安全)

String、StringBuilder、StringBuffer三者的执行效率:StringBuilder > StringBuffer > String 

int、char、long各占多少字节数

Java基本类型占用的字节数:

 1字节: byte , boolean

 2字节: short , char

 4字节: int , float

8字节: long , double

Java基础之int和Integer有什么区别

(1)Integer是int的包装类;int是基本数据类型;

 (2)Integer变量必须实例化后才能使用;int变量不需要;

 (3)Integer实际是对象的引用,指向此new的Integer对象;int是直接存储数据值 ;

 (4)Integer的默认值是null;int的默认值是0

(5)int i = 128;  Integer i2 = 128;17 System.out.println(i == i2); //Integer会自动拆箱为int,所以为true

(6)Integer i7 = new Integer(128); 29 Integer i8 = new Integer(123); 30 System.out.println(i7 == i8); //false 由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

相关文章

网友评论

      本文标题:java 面试题2

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