乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java面試題 --- IO

       貪挽懶月 2022-06-20 發(fā)布于廣東

      1. IO流的分類有哪些?

      • 按照流向分為輸入流和輸出流;
      • 按照實(shí)現(xiàn)功能分為節(jié)點(diǎn)流和處理流。節(jié)點(diǎn)就是從一個(gè)特定的地方讀寫數(shù)據(jù),包括數(shù)組操作,管道操作和文件操作;處理流對(duì)已存在的流進(jìn)行封裝和處理,包括緩沖操作,打印操作和轉(zhuǎn)化操作等;
      • 按照處理數(shù)據(jù)的單位分為字節(jié)流和字符流

      2. 為什么有字節(jié)流還要有字符流?

      • 字節(jié)流是 java 用來(lái) ASCII 字符文件的,但 java 也支持其他字符,比如 unicode,為了方便操作字符且不會(huì)亂碼,就提供了字符流。

      3. 什么是 java 序列化?

      • 將對(duì)象進(jìn)行流化,對(duì)流化后的對(duì)象進(jìn)行讀寫操作或者網(wǎng)絡(luò)傳輸。要序列化的對(duì)象必須實(shí)現(xiàn) Serializable 接口。

      4. 對(duì)象序列化的過(guò)程是什么?

      • 用輸出流構(gòu)造一個(gè) ObjectOutputStream 對(duì)象,然后調(diào)用其 writeObject(Object obj) 方法即可將對(duì)象轉(zhuǎn)化成流,反序列化就是用輸入流。

      5. 如何克隆對(duì)象?

      • 重寫 Object 的 clone 方法;
      • 通過(guò)序列化和反序列化克隆。

      6. BIO、NIO 和 AIO 有什么區(qū)別?

      • BIO 是同步阻塞 IO,并發(fā)性不好;
      • NIO 是同步非阻塞 IO,JDK1.4 開始引入,基于通道和緩沖區(qū)操作,實(shí)現(xiàn)了 IO 多路復(fù)用;
      • AIO 是異步非阻塞 IO,并發(fā)性很好,基于事件和回調(diào)機(jī)制,目前還未廣泛使用。

      7. 說(shuō)說(shuō)你對(duì) NIO 的認(rèn)識(shí)?
      NIO 的核心就是緩沖區(qū)(Buffer)、通道(Channel)和選擇器(Selector)。
      (1). 緩沖區(qū)(Buffer)就是用來(lái)存儲(chǔ)數(shù)據(jù)的,八種基本類型只有 Boolean 類型沒(méi)有提供對(duì)應(yīng)的緩沖區(qū)。

      • 核心屬性:capacity,緩沖區(qū)的容量;limit,界線,緩沖區(qū)可用區(qū)域和已用區(qū)域的分界線;position,當(dāng)前的位置。
      • 核心方法:allocate,分配緩沖區(qū);put,往緩沖區(qū)寫數(shù)據(jù);get,從緩沖區(qū)讀數(shù)據(jù);

      (2). 通道(Channel)就是源位置與目標(biāo)位置之間打開的連接,數(shù)據(jù)傳輸?shù)耐贰?/p>

      • 核心實(shí)現(xiàn)類:FileChannel,操作文件的通道;DatagramChannel,通過(guò) UDP 讀取網(wǎng)絡(luò)數(shù)據(jù)的通道;SocketChannel,通過(guò) TCP 讀取網(wǎng)絡(luò)數(shù)據(jù)的通道;ServerSocketChannel,監(jiān)聽(tīng) TCP 連接的通道。
      • 核心方法:transferTo/transferFrom,通道間的數(shù)據(jù)傳輸;write,將緩沖區(qū)數(shù)據(jù)寫入通道;read,把通道數(shù)據(jù)讀取到緩沖區(qū)。

      (3). 選擇器用于IO多路復(fù)用,將channel都注冊(cè)到選擇器上,它會(huì)監(jiān)聽(tīng)哪些通道有事件發(fā)生,然后進(jìn)行處理。


      8. 知道零拷貝嗎?

      • 首先普通拷貝的過(guò)程是,源文件先經(jīng)過(guò) DMA 拷貝到內(nèi)核 buffer,然后通過(guò) CPU 拷貝到用戶 buffer,接著再通過(guò) CPU 拷貝到 socket buffer,最后通過(guò) DMA 拷貝到協(xié)議棧。這里經(jīng)過(guò)了四次拷貝,并且伴隨著三次用戶態(tài)的轉(zhuǎn)換,用戶態(tài)轉(zhuǎn)為內(nèi)核態(tài),再轉(zhuǎn)為用戶態(tài),最后又轉(zhuǎn)為內(nèi)核態(tài)。
      • 零拷貝不是不拷貝,是可以不經(jīng)過(guò)用戶 buffer,直接從內(nèi)核 buffer 通過(guò) CPU 拷貝到 socket buffer,且這里拷貝的內(nèi)容非常少,只拷貝長(zhǎng)度、偏移量等信息。通過(guò) linux 的 sendFile 函數(shù)即可實(shí)現(xiàn)零拷貝。java NIO 中的 transferFrom/transferTo 方法就通過(guò) sendFile 函數(shù)實(shí)現(xiàn)了零拷貝。

      掃描二維碼

        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多