Java面试题戏剧-第五幕 、

第一场)街边

【衣衫褴褛老者,保洁阿姨,面试者老王】

衣衫褴褛老者:“可怜身上诺基亚,心忧Java Offer少”

老王:这位老人家有故事,“老人家,1.Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

衣衫褴褛老者:字节流,字符流两种类型流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。其它与IO操作相关的类都是派生至上述4个抽象类。如字节相关的:FileInputStream、FileOutputStream类;字符相关的:BufferedReader、BufferedWriter类
在这里插入图片描述
衣衫褴褛者:什么老人家,我今年才30,公司裁员,我又买了烂尾房才沦落到这个地步啊。

老王:竟然是前辈,赶紧请教一下:大哥,2.什么是序列化,如何实现序列化?请解释Serializable接口的作用。

衣衫褴褛者:你是把我当npc了嘛,一个问题接着一个问题。
①我们的对象不只是存储在内存中,序列化技术将java对象变成字节流的形式传出去转换成一串由二进制字节组成的数组,然后将这二进制数据保存在磁盘或传输网络。通过反序列化从一个字节流中恢复成一个java对象,达到对象持久化的目的。。
②jre本身就提供了这种支持,被传输的对象必须实现serializable接口该接口是一个标记接口,其中没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,这样javac编译时就会进行特殊处理,这样才可以被OutputStream的writeObject方法操作,这就是序列化。

老王:你懂的这么多,竟然也被裁了。那么3.java里面的io跟nio有什么区别

衣衫褴褛者:比不上年轻人啊
①Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的,IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。
②Java IO的各种流是阻塞的。而Java NIO的是非阻塞模式 。阻塞式IO,每个连接必须要开一个线程来处理,不能使用线程池来处理,并且没处理完线程不能退出,在连接数不多的情况下,传统IO编写容易方便使用连接数较多将会出现资源不足的情况。 非阻塞式IO,可以利用线程池来处理。因为非阻塞IO处理连接是异步的。当某个连接发送请求到服务器,服务器把这个连接请求当作一个请求"事件",并把这个"事件"分配给相应的函数处理。我们可以把这个处理函数放到线程中去执行,执行完就把线程归还。这样一个线程就可以异步的处理多个 事件。
③选择器上,Java IO无选择器,而NIO有选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

老王:真复杂啊,看不懂,先背着吧。

衣衫褴褛者:“没关系呦,少年郎啊,年少不得之物终将困其一生,暮年浮光之景,又终会因一物一事而解终生之惑。将之瞬息点醒。”

2024年3月找到工作了,全剧终。

上一篇:【Linux】有关时间的命令(date、timedatectl)


下一篇:OneFlow深度学习框架:引领未来的通用深度学习框架