大话java面试-java基础-1

1、int 和 Integer 有什么区别,Integer的值缓存范围

int是基本类型,Integer是int的包装类。Integer的缓存范围默认是-128到127.最大值 127 可以通过 JVM 的启动参数 -XX:AutoBoxCacheMax=size 修改。Integer对象内部维护了一个IntegerCache静态内部类。注意只有short long int byte char会缓存,注意范围。Integer具体讲解

2、装箱和拆箱

装箱:把基本类型封装为对象。拆箱:对象转换为基本类型的值。

涉及到运算的时候就会自动拆箱,如:

Integer a = 1;

Integer b = 2;

Long g = 3L;

System.out.println(g==(a+b));

System.out.println(g.equals(a+b));

返回结果是true和false

==如果有运算,比较的是基本类型的数值,不是对象,a+b会自动拆箱为基本类型,然后==会自动比较Long对象的数值,所以==为true;

equals方法并不会进行类型转换所以返回false.深入剖析Java中的装箱和拆箱

3、反射的用途及实现原理

反射是指获取类的属性、方法和对象,并可以调用对象的方法。

反射的用途有IOC、动态代理、动态加载类

如果调用public以外的方法需要设置setAccessible(true),双检锁和静态内部类单例可以反射破解。

通过newInstance方法调用class对象的构造方法获取对象实例,

4、说说自定义注解的场景及实现

jdk一共有三个注解@Override @Deprecated @SuppressWarnings

如果要自定义注解的话需要用元注解@Targer@Retention@Inherited@Documented

通过反射的Class对象的getAnnotation方法获取注解实现类

注解的话可以了解下lombok插件 注解的妙用

5、HTTP协议

TCP的三次握手和四次挥手    

6、Java序列化和反序列化

对象实现Serializable 接口可以进行序列化。

transient可以阻止变量序列话,反序列化后获取的是初始值。

通过ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化。

序列化 ID不一致也不能反序列化,序列化并不保存静态变量。

arraylist为了序列化时不保存数组里的null值重写了writeObject和readObject方法。arraylist序列化优化

7、Object类中常见的方法,为什么wait  notify会放在Object里边?

wait notify必须是在synchronized代码块里,因为是对持有当前锁的线程进行操作。因为锁住的是任意对象,所以任意对象都可以使用wait方法。sleep方法的线程不会释放对象锁。

你可能感兴趣的:(大话java面试-java基础-1)