Java面试题3(SE 第三阶段)

字符串

  • 字符串的特性/点?什么是字符串常量池?输出字符串时编译器的特点?

(1)字符串是不变对象,字符串对象一但创建,值是不可以改变的,要想改变就一定会创建新的对象。

(2)String常量池是java对字符串的一个优化措施, 在堆内存中开辟的一段空间,用于缓存所有使用字面量形式创建的字符串对象。 所以使用相同字面量形式创建的字符串都是重用同一个对象的以减少内存的开销。

(3)编译器在编译代码的时候若是看到计算表达式参与的所有的值都是字面量的时候,那编译器在编译期间就会把结果算好,减少java虚拟机每次运行的时候再重新计算的问题,变相的提高性能。

  • String str =new String("hello");总共创建几个对象?

创建过2个对象:首先有一个字面量虚拟机会创建一个字符串对象,并且把它缓存在常量池当中,再newString的时候只是引用了它而已,有自己new的对象和之前用字面量形式创建的对象。

  • ==与equals的区别?

(1)==是值比较,默认实现的就是==比较的。用于比较两个变量值是否相等, 当比较引用变量时候,就比较引用中保存的地址值是否相等, 地址相等得到true, 否则false。

(2)equals是Objcet定义的方法,若不重写就是用==比较的,equals是比较两个对象的内容,但是需要重写equals方法,因为我们重写以后才能实现我们想要的比较内容。

  • StringBuilder是做什么的?StringBuilder和StringBuffer的区别?如何选择?

(1)StringBuilder的出现是为了解决字符串频繁修改带来的性能问题,因为字符串是不变对象每次修改都要创建新对象,如果频繁修改内存中产生大量的垃圾对象出来,字符串的频繁拼接性能不高,因此java设计了一个类StringBuilder,它的内部维护着一个可变的字符数组,所有的修改操作都是在同一个字符数组中做操作的,扩容缩容都是用同一个,因此内存开销比较小,因此修改效率比较高,而且是专门为了编辑字符串产生的API,提供了很多便于我们修改字符串的方法,如:append、insert、remove、reverse。

(2)区别:

(3)选择:

1.StringBuilder不是线程安全的,StringBuffer是线程安全的,由于在实际开发当中我们很少在多线程操作同一个字符串,因此我们使用StringBuilder可以更好的提高运算性能。

2.但是在多线程情况下操作同一个字符串相当于并发操作同一个字符串时候,还是应当考虑使用StringBuffer。

RandomAccessFile

  • RandomAccessFile是做什么的?

简单说是读写文件的API、基于指针的随机读写形式。

  • RandomAccessFile和文件流的区别

1.最大的区别在于读写方式不同、RandomAccessFile是专门设计出来用来读取文件的API是基于指针的随机读写,可以对文件的任意位置或读或写。

2.文件流是基于java标准io的读写方式是处于顺序读写模式只能往后顺序的读或写,是不能回退的。灵活性上文件流不如RandomAccessFile。

  • 什么是节点流和处理流?

(1)节点流也称低级流,是实际连接程序与数据源的管道,负责实际读写数据的流。读写数据一定是建立在节点流的基础上进行的。节点流可以从或向一个特定的地方(节点)读写数据。

(2)处理流也称高级流,不能独立存在,必须连接在其他流上,目的是当数据流经当前流时可以对数据进行加工处理,简化我们对数据的相关操作工作。处理流是对一个已存在流的连接和封装,通过所封装流的功能调用实现数据读写。

  • 什么是流连接?流连接可以做什么?

串联一组高级流并最终连接到低级流上,使得读写数据以流水线式的方式进行,这种操作称为流的连接。这也是IO的精髓所在,它最大的特点就是流连接把复杂问题简单化。流的特点是流读写数据时,是顺序读写的,即:读写只能顺序向后进行,不能回退。

流连接可以:

1.利用过缓冲流连接文件流对文件进行块读写操作来提高文件的读写效率。

2.连接过对象流对java对象进行过序列化与反序列化操作。

3.在websever读取客户端的请求用socket得到的流也是基于io进行读写数据交互,读写文件连上字符流。

  • Java中有几种类型的流?各自的作用是什么?

字节流和字符流。各自的功能及作用如下:

  • 文件流的优势?文件输出流常用的构造方法?

(1)文件流基于java标准IO操作,我们可以利用流连接,连接上各种功能强劲的高级流,把一个复杂工作简单化。

(2)文件输出流构造方法有参数为一个的,为覆盖写模式,即:若创建文件流时发现该文件已经存在,则会先将该文件原有数据清除,然后通过该流写出的数据会作为文件数据保存。有参数为两个的,就是再传入一个boolean类型的参数,若该值为true,则是追加模式。即:原有数据保留,写出的内容会被追加到文件中。

  • 什么是序列化?序列化的实现?什么是反序列化?

   (1) 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

   (2)写出的对象所属的类必须实现可序列化接口,否则会抛出NotSerializableException,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOut

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值