Java面试基础部分 @上源码

一、数据类型

1)基础数据类型

类型基础类型占用内存默认值取值范围
整型byte1个字节0-2^72^7-1
short2个字节0-2^152^15-1
int4个字节0-2^312^31-1
long8个字节0L-2^632^63-1
浮点型float4个字节0F-3.403E383.403E38
double8个字节0D-1.79803E3081.798E308
字符型char2个字节'\u0000''A'...
布尔型boolean1个字节FALSETRUEFALSE

switch【byte、short、char、int、1.5(enum )1.7(String)】

2)引用类型

类、接口、数组、枚举、标注[注解]

强引用(Strong     Reference)

A a = new A(); 开发中的正常引用对象都为强引用对象,垃圾回收器无法回收具有强引用对象,当虚拟机内存空间不足时抛出OOM,程序终止。

软引用(Soft         Reference)

具有软引用对象在内存空间充足时,垃圾回收器回收时不会回收具有软引用对象,在内存空间不足时回收具有软引用对象。

弱应用(Weak      Reference)

弱化版的软引用,无论垃圾回收时内存空间是否充足都会回收掉具有弱引用的对象。

虚引用(Phantom Reference)

虚引用不会影响对象的生命周期,系统虚设,在任何时候垃圾回收都会回收掉具有虚引用的对象,虚引用必须与应用队列(ReferenceQueue)一起使用,主要用来跟踪对象被垃圾回收器回收的活动。

3)基本数据类型 VS 引用类型

基本类型创建时直接在栈上分配内存,数据直接存储在栈上。

引用类型创建时先在栈上给其引用(句柄)分配内存,对象的具体信息在堆中分配内存,栈中的引用指向堆中的对象地址信息。

4)String(引用类型)

被final修饰,不能被继承,底层是char数组,Sting对象指向的内存地址是可变的,地址指向的内容是不可变的(内容不可变的优势:方便构建String常量池,节省内存开销;线程安全;代码安全);

Xx.toString() Objiect的方法,不允许null, String.valueOf()  允许null,但是转换结果为"null";

String、StringBuilder、StringBuffer;String[线程安全]对象不可变[每次改变时都会生成一个新对象],StringBuilder[线程不安全]、StringBuffer[线程安全]每次改变时不会生成新对象

String.intern()方法会到常量池中查找是否存在该对象,如果存在,返回该对象。不存在的话就创建该对象并返回该对象(jdk1.6),(jdk1.7)会在常量池中存一个指向堆中的那个对象的引用。

5)== equals hashcode

== 基础数据类型值相等 、引用类型引用地址信息相等,equals内容信息相等(默认情况与==相同的逻辑,需要重写【自反性a.equals(a) 对称性a.equals(b) => b.equals(a) ) 传递性a.equals(b) b.equals(c) => a.equals(c)】)

equals、hashcode equals = true hashcode = true ,equals = false hashcode可以=,当重写equals时必须重写hashcode 反例:hashSet中的对象当只重写equals没有重写hashcode时排重失效。

二、万物皆对象

1)封装

隐藏对象属性和实现的细节,增加安全性简化编程,使用者不必要关注具体细节(private default protected public)

2)继承

子类继承父类,具有父类非私有的属性和方法,实现了代码复用

3)多态

继承、重写、父类引用指向子类对象(编译时多态【重载】,运行时多态【重写】)

三、异常

1)错误(Error)

 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。【OutOfMemoryError,IOError】

2)检查异常(CheckedException)

最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。【IOException、SQLException、NamingException ...】

3)运行时异常(RuntimeException)

运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。【NullPointerException、ClassNotFoundException、ArrayIndexOutOfBoundsException、...】

4)异常捕获、抛出

java        try catch finally throw throws

java7      try-with-resource        代码简洁,避免资源关闭问题

Reader stringReader= new StringReader(message);
BufferedReader bufferedReader = new BufferedReader(stringReader);
try (BufferedReader newBufferedReader  = bufferedReader) {
    return newBufferedReader.readLine();
}

Lombok:@SneakyThrows        代码简洁 (方法上@SneakyThrows(XxxException.class))

四、序列化

1)Java序列化 

2)Hessian序列化

3)Json 序列化

4)xml 序列化

5) Protocol Buffers序列化

           /

序列化速度

序列化后字节长度

反序列化速度

可靠性

可读性

通用性

java

5

5

5

1

0

0

Hessian

3

3

4

4

0

1

Json

2

2

2

3

1

2

xml

4

4

3

2

2

2

Protocol Buffers

1

1

1

2

0

1

五、IO

六、反射,注解

@浅见 @如有疏漏请帮忙补充完善 @开发一家人  0000018   完善中  感兴趣可以 点赞 收藏 评论 大家一起交流呀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值