1. 程式人生 > >20172301 2017-2018-2 《程序設計與數據結構》第十周學習總結

20172301 2017-2018-2 《程序設計與數據結構》第十周學習總結

end 基礎 常見 iteye 測試 理解 序列化 根節點 throw

20172301 2017-2018-2 《程序設計與數據結構》第十周學習總結

教材學習內容總結

  • 集合:是一個對象。
  • 同構和異構:取決於集合保存的是否是類型全部都相同的對象。
    ArrayList由於其多態性,所以可以存儲任何類型的對象,是異構
  • 線性數據結構:
    • 隊列:
      先進先出
    • 堆棧:
      後進先出
  • 非線性數據結構:
    • 樹:由一個根節點和構成層次結構的多個節點組成。
      • 內部節點:除根節點外的所有節點
      • 葉節點:沒有子節點的節點(就是在周圍兩邊的節點)
      • 樹的結構從上到下,根節點在頂層,葉節點在底層
      • 二叉樹:每個節點有不超過兩個的子節點。(有兩個枝丫)
    • 圖:使用常見的邊來連接節點。

教材學習中的問題和解決過程

  • 問題1:persistence (持續化)和 serialization(序列化)區別。這是針對這周錯題裏的,單獨分析一下。
  • 問題1解決方案:
    • 首先,在查閱了一些資料之後,我對這個問題有一定的理解,但是不是很懂。詳細請看錯題理解。跳轉
    • 然後,我在藍墨雲上請教了王老師,王老師給我了一個鏈接。參考資料:序列化和持久化的區別與聯系

      序列化和持久化很相似,有些人甚至混為一談,其實還是有區別的,序列化是為了解決對象的傳輸問題,傳輸可以在線程之間、進程之間、內存外存之間、主機之間進行。我之所以在這裏提到序列化,是因為我們可以利用序列化來輔助持久化,可以說凡是可以持久化的對象都可以序列化,因為序列化相對容易一些(也不是很容易),所以主流的軟件基礎設施,比如.net和java,已經把序列化的框架完成了。

    所以,序列化只是輔助持久化而已,是有一定區別的,換句話說,實現持久化就可以實現序列化。

代碼調試中的問題和解決過程

  • 問題1:在做PP13.3的時候,我想逐個比較列表中的數。結果
    技術分享圖片

  • 問題1解決方案:通過兩次結果的對比,我發現了,這個循環作用是,前一個和後一個相比較,並不是第一個依次與後幾個比較。然後,我總結我需要運用兩個循環,所以我定義了兩個指針。
    技術分享圖片

代碼托管

技術分享圖片

上周考試錯題總結

  • An exception can produce a "call stack trace" which lists B
    A . the active methods in the order that they were invoked
    B . the active methods in the opposite order that they were invoked
    C . the values of all instance data of the object where the exception was raised
    D . the values of all instance data of the object where the exception was raised and all local variables and parameters of the method where the exception was raised
    E . the name of the exception thrown
  • 理解:首先,我們要清楚call stack trace是什麽意思,在書P344,堆棧蹤跡。我們可能不是很熟悉,但是我們應該清楚什麽是堆棧。而堆棧是一種以
    後進先出方式管理數據的線性數據結構。
    堆棧跟蹤提供了儲存在運行時堆棧中的發生異常方法、文件和代碼行號。如果是,先進後出,那麽就是反序輸出的。

  • The idea that an object can exist separate from the executing program that creates it is called C
    A . transience
    B . static
    C . persistence
    D . serialization
    E . finality

  • 理解:其實我覺得這道題是超綱了。先不說我們不清楚選項的意思。這裏我唯一看懂的就一個B靜態的。
    • 那麽,我們來看下解析:

      對象存儲在內存中,當它們不再被引用時,被垃圾回收器回收。當Java程序終止時,沒有對象被引用,因此所有對象都被回收。但是,可以保存任何給定的對象以供將來使用。這種特性稱為持久性,通過將對象的實例數據保存到文件中來實現這一點。這可以通過將每個實例數據寫入數據文件來實現,但是使用對象序列化簡化。

    • 垃圾回收的什麽我們都懂,問題是persistence(持久化)是什麽。

      持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化的主要應用是將內存中的對象存儲在數據庫中,或者存儲在磁盤文件中、XML數據文件中等等。

    • 其實,就是把對象存入文件或者數據庫中,跟IO流有關系?
      同時,我也查了一下其他的選項。E應該是常量化,A不知道,主要是D序列化。我們再看一下序列化的定義:

      序列化是將對象狀態轉換為可保持或傳輸的格式的過程在MFC中儲存或恢復對象的過程即為Serialization,也稱為Persistent(永續生存)。在序列化期間,對象將其當前狀態寫入到臨時或永久性存儲區(存入文件中)。以後,可以通過從存儲區中讀取或反序列化對象的狀態,重新創建該對象。以此達到面向對象中的永續生存。

    不看不知道,一看嚇一跳。序列化也稱為Persistent(永續生存)。難不成他們還有淵源?為什麽不選D而選C呢?
    • 所以,我查到了java中的Serialiazation機制
      Serialization是指把類或者基本的數據類型持久化(persistence)到數據流(Stream)中,包括文件、字節流、網絡數據流。
      JAVA中主要靠兩個類:ObjectOuputStream和ObjectInputStream。 他們是JAVA IO系統裏的OutputStream和InputStream的子類。
    • 我們接著查下API加以理解接口Serializable
      技術分享圖片

    • 其實,我還是不理解,或者說,使用serialization也必須持久化,所以才選的C,不明白別的同學怎麽想的吧,對我來說有點難度。
    • 參考資料:
      Persistence VS Serialization
      serialization
      持久化
      什麽是java persistence
  • Character streams manage C
    A . byte-sized data
    B . binary data
    C . Unicode characters
    D . ASCII characters
    E . compressed data

  • 理解:字符流用於16位Unicode字符。這與用於管理任何字節大小數據的字節流不同,包括ASCII字符和其他類型的二進制數據。
  • System.err is a(n) C
    A . input stream
    B . GUI dialog box that indicates when an error has arisen
    C . object
    D . Error subclass
    E . RuntimeException subclass
  • 理解:這題確實是魯莽了。在書P352:

    System類中有三種對象引用變量(in, out, err),分別代表了三種標準I/O流。

    所以,System.err應該是一個對象,代表的是錯誤流。

  • Assume infile is a BufferedReader for a textfile and that the textfile is empty. What is returned from the message infile.readLine( ); ? B
    A . 0
    B . null
    C . a special character known as the End-of-file marker (EOF)
    D . none of the above, the message causes a NullPointerException to be thrown
    E . none of the above, the message causes a EndOfFileException to be thrown
  • 理解:這道題,我選了D。那為什麽不會拋出異常呢。我們需要了解空指針異常有哪些。
    參考資料:一般報java.lang.NullPointerException的原因有以下幾種

    • 字符串變量未初始化;
    • 接口類型的對象沒有用具體的類初始化;
    • 當一個對象的值為空時,你沒有判斷為空的情況。

    恍然大悟。

  • While the Exception class is part of java.lang, IOException is part of java.io. A
    A . true
    B . false
  • 理解:如圖。
    技術分享圖片

結對及互評

點評過的同學博客和代碼

  • 博客互評情況
    • 學號1
    • 學號2
    • 學號3
    • 學號4
    • ...

其他

編程方面一切如常,但是測試方面卻有了大幅度的下滑。其實,我感覺測試難度並不小。而我每次都是掐著時間,30道題大約40分鐘。所以,這次正確率就比較低了。其實,我感覺,並不是我沒有努力,只是我的進步沒有其他人大吧。我也註意到這次測試有滿分的,同樣也有30分鐘以內做完題目的。所以,我覺得應該仔細查找一下自己的失誤在哪裏,畢竟大家學的都是一本教材。另一方面,由於四則運算項目的原因,我並沒有詳細的預習11章,這是應該避免的。調整好自己的狀態,要能承擔的起生活的壓力。不管是學習,還是其他。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 122/122 1/1 20/20
第二周 487/609 1/2 18/38
第三周 482/1091 1/3 22/60
第四周 1357/2448 1/4 20/80
第五周 628/3106 1/5 20/100
第六周 566/3672 2/7 20/120
第七周 934/4606 1/8 25/145
第八周 2407/7013 1/9 30/175
第九周 1504/8517 1/10 20/195
第十周 981/9498 1/11 18/213

參考資料

  • 《Java程序設計與數據結構教程(第二版)》

  • 《Java程序設計與數據結構教程(第二版)》學習指導

20172301 2017-2018-2 《程序設計與數據結構》第十周學習總結