java中级考试 考点_java面试考点

1、round()方法“四舍五入”,其实非也,它的实现是Math.floor(x+0.5);floor地板就是向下取整的方法。round(-1.7)的结果是-1,而不是-2。

2、String str = "i";和 String str = new String("i");的区别?

答:①存放空间不同,前者存放在方法区的常量池中,后者存放在堆上。

②使用方式不同,"i"本身就代表常量池地址,常量池不准有两个不同常量,s1 = "i"与s2 = "i"指向同一块地址空间;

但,s1 = new String("i")与s2 = new String("i")指向不同的地址空间。

3、==和equals()的区别是非常重要的。

==比较的是引用

equals()方法比较的是实际内容,但是要注意,equals()方法默认是比较引用的(即从Object类继承而来的),只有重写了equals()方法才可以比较对象实际内容。

4、逻辑操作符&&与II有一个短路的问题,如(表达式一)&&(表达式二),一旦明确了整个式子的值就不会计算后面的表达式,即“表达式一”值为false整个表达式就为false,便不会再计算“表达式二”了。

5、访问权限

public > protected > friendly > private

其中类只有,public和friendly两种权限

protected:包访问权限 + 子类访问权限

friendly:包访问权限

解释:被friendly修饰的属性,在同一个包中对子类可见,在不同包中对子类不可见。被protected修饰的属性与方法,在不同包的子类中也可见。

6、初始化过程

①有基类先初始化基类静态变量和语句块

②初始化子类的静态变量与语句块

③初始化基类实例变量和语句块

④执行基类构造函数

⑤初始化子类实例变量和语句块

⑥执行子类构造函数

7、final关键字总结

(1)final修饰数据,表示常量,必须在定义处或者构造器中进行初始化

(2)  final修饰方法,第一种表示内联函数(现在已经过时,现在把关于性能的问题都交给编译器和虚拟机了)

第二种表示:此方法禁止被覆盖,入过个覆盖会报错。

(3)final修饰类,表示此类不可被继承(抽象类不可以被final修饰)

8、抽象类

抽象类不一定要有抽象方法

抽象类与接口的区别

一个是类一个是接口

接口中方法默认public,抽象类中任意

抽象类中不全是抽象方法,接口中全是抽象方法

9、String、StringBuilder、StringBuffer的区别

String与StringBuilder:String是不可改变的,所有的操作都会生成新的String对象;StringBuilder准许在原串的基础上操作,适合于操作字符串多的情况。

StringBuilder与StringBuffer:前者是线程不安全的,但是更高效;后者是线程安全的,适用于多线程环境。

10、反射

反射:将类的成员封装成其他的对象,Class类与reflect包共同对反射机制提供了支持。

反射的原理:将字节码文件中的域、构造方法、方法、映射成Field、Constructor、Method类。

获得Class对象的三种方法

Class.forName(String name)

ClassName.class

对象.getClass()

Class类的常用方法

与Field相关:

getField(String name):获得public的指定字段

getFields():获得所有public字段,返回Field[ ]

getDeclaredField(String name):获得指定的声明字段

getDeclaredFields():获得所有声明字段

与Method相关:

getMethod(String name, Class> ....parameterTypes):获得指定public方法

getMethod():获得所有public方法

getDeclaredMethod(String name, Class>....parameterTypes):获得声明的指定方法

getDeclaredMethods():获得声明的所有方法

与Constructor相关:

getDeclaredConstructor( Class>....parameterTypes):获得声明的构造方法

getDeclaredConstructors():获得声明的所有构造方法

其他:

getName():获得类的名称

newInstance():创建新的实例

Field类的常用方法

setAccessible():取消对成员的访问限制检查,用其访问私有成员

get(Object o):获得制定对象相应字段的值

set(Object o, Object Value):设置指定对象相应字段的值

Method类的常用方法

invoke(Object o, Object....args):调用指定对象的相应方法

Constructor常用方法

newInstance(Object...args):调用类的构造函数创建新的实例

反射创建对象的两种方式

Class.newInstance():类必须有默认构造函数

constructor.newInstance():任何构造函数都可

11、hashCode()与equals()

hashCode():默认情况使用对象地址计算散列码

equals():默认情况下比较对象的地址

12、Comparable与Comparator区别

Comparable:实现compareTo(T  o),是元素的自然顺序,一般是元素继承

Comparator:是比较器实现compare(o1, o2),一般是内部类实现

13、快速失败(fail-fast)与安全失败(fail-safe)机制的区别

快速失败:所有的java.util包下的集合都是快速失败机制,当一个线程在遍历集合时,另外一个线程对集合做出来修改,就会抛出ConcurrentModificationException,通过检查一个变量是否被修改来实现的。

安全失败:所有的juc包下的集合都采用安全失败机制,当线程遍历集合时会先复制集合的内容,在副本集合中遍历,适合多线程情况。

14、Map性能调优

容量:表中的桶位

初始容量:默认16

尺寸:当前存储的项数

负载因子:尺寸/容量 默认0.75 空间和效率的平衡

树化阀值:桶位中的项数,默认8

反树化阀值:桶中的项数,默认6

最小树化容量:默认64,容量没有达到64优先进行扩容,达到64并且达到树化阀值进行树化

15、实现用于容器的类

唯一性:实现equals()

散列:实现hashCode()

有序:实现Comparable接口

16、ArrayList扩容

数组容量增减1.5倍,把旧数组复制

17、int的范围

-2^31__2^31-1

18、序列化

原理:将对象转化成能够保存在数据库或文件中的字节序列,并能够将字节序列还原。

ObjectOutputStream与ObjectInputStream对序列化提供了支持。

序列化需要实现Serializable和Externalizable接口

后者提供了订制序列化,但是因此也暴露了接口,恶意类可以利用接口修改数据。

transient和static修饰的变量不可序列化。

如果类中含有不可序列化的成员变量可以通过transient轻松解决。

如果不指定SerialVersionUID,虚拟机会自动生成,但是代价是如果改变类结构所有旧的序列化对象均不可用。

使用场景

将内存中的对象保存到文件或数据库中

在网络上传播对象

RMI

19、IO流

InputStream

ByteArrayInputStream

FileInputStream

PipedInputStream

FilterInputStream

BufferedInputStream

DataInputStream

OutputStream

ByteArrayOutputStream

FileOutputStream

PipedOutputStream

FilterOutputStream

Reader

CharArrayInputReader

FileReader

PipedReader

InputStreamReader

Writer

CharArrayWriter

FileWriter

PipedWriter

OutputStreamWriter

20、IO模型

IO的两个过程

等待数据准备好

将数据拷贝到应用数据缓冲区

BIO阻塞IO:当应用线程发出IO请求,应用程序阻塞,直到内核收到数据并将数据拷贝应用缓冲区并返回结果。

NIO非阻塞IO:应用线程不断轮询,内核是否收到数据,内核马上返回结果,有数据拷贝数据没数据返回Error。

IO多路复用:一个线程管理多个连接,应用线程调用select()然后阻塞,内核轮询多个通道,一个通道有数据到来就返回。

AIO异步IO:应用线程发出IO请求,然后去做其他运算,等到内核把一切准备好了,通知应用线程。

Select:实时性要求较高的系统,可以移植性好。

poll:与select相似,没有最大描述符的限制

epoll:只需要运行在 Linux 平台上,有大量的描述符需要同时轮询,并且这些连接最好是长连接。

21、泛型

上下界,与上下限

上限不存、下限不取

22、List、Set、Map取元素时有什么特点

List:get(index)取相应位置元素

Set:只能迭代,没有取单个元素的接口

Map:get(key),根据键取值

23、多态的实现原理

invokevirtual指令多态查找,从对象的实际类型由下而上查找,与描述符相符的方法。

24、浮点数与0比较会产生误差

①使用BigDecimal类

②两数相减去和一个很小的数比较(即精度)

③将两个数都乘以10的n次方比较(n为精度)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值