Java面試真題之中級進階(執行緒,程序,序列化,IO流,NIO)

码路编程發表於2024-10-26

前言

本來想著給自己放鬆一下,刷刷部落格,慕然回首,執行緒、程式、程序?Java 序列化?Java 中 IO 流? Java IO與 NIO的區別(補充)?似乎有點模糊了,那就大概看一下Java基礎面試題吧。好記性不如爛鍵盤

*** 12萬字的java面試題整理 ***

簡述執行緒、程式、程序的基本概念。以及他們之間關係是什麼?

執行緒與程序相似,但執行緒是一個比程序更小的執行單位。一個程序在其執行的過程中可以產生多個執行緒。與程序不同的是同類的多個執行緒共享同一塊記憶體空間和一組系統資源,所以系統在產生一個執行緒,或是在各個執行緒之間作切換工作時,負擔要比程序小得多,也正因為如此,執行緒也被稱為輕量級程序。
程式是含有指令和資料的檔案,被儲存在磁碟或其他的資料儲存裝置中,也就是說程式是靜態的程式碼。
程序是程式的一次執行過程,是系統執行程式的基本單位,因此程序是動態的。系統執行一個程式即是一個程序從建立,執行到消亡的過程。簡單來說,一個程序就是一個執行中的程式,它在計算機中一個指令接著一個指令地執行著,同時,每個程序還佔有某些系統資源如 CPU 時間,記憶體空間,檔案,輸入輸出裝置的使用權等等。換句話說,當程式在執行時,將會被作業系統載入記憶體中。
執行緒是程序劃分成的更小的執行單位。執行緒和程序最大的不同在於基本上各程序是獨立的,而各執行緒則不一定,因為同一程序中的執行緒極有可能會相互影響。從另一角度來說,程序屬於作業系統的範疇,主要是同一段時間內,可以同時執行一個以上的程式,而執行緒則是在同一程式內幾乎同時執行一個以上的程式段。

Java 序列化中如果有些欄位不想進行序列化,怎麼辦?

對於不想進行序列化的變數,使用 transient 關鍵字修飾。
transient 關鍵字的作用是:阻止例項中那些用此關鍵字修飾的的變數序列化;當物件被反序列化時,被 transient 修飾的變數值不會被持久化和恢復。transient 只能修飾變數,不能修飾類和方法。

說說Java 中 IO 流Java 中 IO 流分為幾種?

Java 中 IO 流分為幾種?

  • 按照流的流向分,可以分為輸入流和輸出流;
  • 按照操作單元劃分,可以劃分為位元組流和字元流;
  • 按照流的角色劃分為節點流和處理流。

Java IO 流共涉及 40 多個類,這些類看上去很雜亂,但實際上很有規則,而且彼此之間存在非常緊密的聯絡, Java IO 流的 40 多個類都是從如下 4 個抽象類基類中派生出來的。

  • InputStream/Reader: 所有的輸入流的基類,前者是位元組輸入流,後者是字元輸入流。
  • OutputStream/Writer: 所有輸出流的基類,前者是位元組輸出流,後者是字元輸出流。

Java IO與 NIO的區別(補充)

NIO即New IO,這個庫是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但實現方式不同,NIO主要用到的是塊,所以NIO的效率要比IO高很多。在Java API中提供了兩套NIO,一套是針對標準輸入輸出NIO,另一套就是網路程式設計NIO。

相關文章