天天看點

20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結

20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結

教材學習内容總結

  • 集合:是一個對象。
  • 同構和異構:取決于集合儲存的是否是類型全部都相同的對象。

    ArrayList由于其多态性,是以可以存儲任何類型的對象,是異構

  • 線性資料結構:
    • 隊列:

      先進先出

    • 堆棧:

      後進先出

  • 非線性資料結構:
    • 樹:由一個根節點和構成層次結構的多個節點組成。
      • 内部節點:除根節點外的所有節點
      • 葉節點:沒有子節點的節點(就是在周圍兩邊的節點)
      • 樹的結構從上到下,根節點在頂層,葉節點在底層
      • 二叉樹:每個節點有不超過兩個的子節點。(有兩個枝丫)
    • 圖:使用常見的邊來連接配接節點。

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

  • 問題1:persistence (持續化)和 serialization(序列化)差別。這是針對這周錯題裡的,單獨分析一下。
  • 問題1解決方案:
    • 首先,在查閱了一些資料之後,我對這個問題有一定的了解,但是不是很懂。詳細請看錯題了解。跳轉
    • 然後,我在藍墨雲上請教了王老師,王老師給我了一個連結。
      參考資料:序列化和持久化的差別與聯系
    序列化和持久化很相似,有些人甚至混為一談,其實還是有差別的,序列化是為了解決對象的傳輸問題,傳輸可以線上程之間、程序之間、記憶體外存之間、主機之間進行。我之是以在這裡提到序列化,是因為我們可以利用序列化來輔助持久化,可以說凡是可以持久化的對象都可以序列化,因為序列化相對容易一些(也不是很容易),是以主流的軟體基礎設施,比如.net和java,已經把序列化的架構完成了。
    是以,序列化隻是輔助持久化而已,是有一定差別的,換句話說,實作持久化就可以實作序列化。
  • 問題2:list下ArrayList和Linked和Vector的差別
  • 問題2的解決方案:在list下這幾個有什麼差別。ArrayList我們都熟悉,是以數組的形式來實作的。
    • Vector、ArrayList都是以類似數組的形式存儲在記憶體中,LinkedList則以連結清單的形式進行存儲。
    • List中的元素有序、允許有重複的元素,Set中的元素無序、不允許有重複元素。
    • Vector線程同步,ArrayList、LinkedList線程不同步。
    • LinkedList适合指定位置插入、删除操作,不适合查找;ArrayList、Vector适合查找,不适合指定位置的插入、删除操作。
    • ArrayList在元素填滿容器時會自動擴充容器大小的50%,而Vector則是100%,是以ArrayList更節省空間。
參考資料:[Vector,ArrayList, LinkedList的差別](https://www.cnblogs.com/zkk-wust/p/7250776.html)
  • 問題3:Java集合不能存放基本資料類型,隻存放對象的引用。那麼,為什麼ArrayList可以存放int類型的資料?
    20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結
  • 問題3解決方案:
可以通過包裝類把基本類型轉為對象類型,存放引用就可以解決這個問題。更友善的,由于有了自動拆箱和裝箱功能,基本資料類型和其對應對象(包裝類)之間的轉換變得很友善,想把基本資料類型存入集合中,直接存就可以了,系統會自動将其裝箱成封裝類,然後加入到集合當中。

也就是說,集合類可以存放基本類型的包裝類。那麼,因為系統可以自動的裝箱和拆箱,我們就可以不用考慮添加的元素是否是基本資料類型了。

參考資料: [Java集合不能存放基本資料類型,隻存放對象的引用](https://blog.csdn.net/zm13007310400/article/details/71256507)

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

  • 問題1:在做PP13.3的時候,我想逐個比較清單中的數。結果
    20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結
  • 問題1解決方案:通過兩次結果的對比,我發現了,這個循環作用是,前一個和後一個相比較,并不是第一個依次與後幾個比較。這是和題意相悖的。然後,我總結我需要運用兩個循環,是以我定義了兩個指針。讓他們分别去循環。
    20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結

代碼托管

20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結

上周考試錯題總結

  • 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。
      20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結
    • 其實,我還是不了解,或者說,使用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的原因有以下幾種](https://blog.csdn.net/zwhfyy/article/details/885588/)

>- 字元串變量未初始化;

>- 接口類型的對象沒有用具體的類初始化;

>- 當一個對象的值為空時,你沒有判斷為空的情況。

恍然大悟。
           
  • While the Exception class is part of java.lang, IOException is part of java.io. A

    A . true

    B . false

  • 了解:如圖。
    20172301 2017-2018-2 《程式設計與資料結構》第十周學習總結

結對及互評

  • 部落格互評情況
    • 20172328
    • 李馨雨同學的部落格每次感悟都很深刻。有能力,但是錯過了追求有價值的東西,心态會崩;沒能力,但是強行追求,最終達不到目的,心态會崩。也就是,價值觀需要理性。對于她未解決的代碼問題,我認為空指針異常應該是她指針指向的是不存在的,也就是說她指針指向有問題。希望她可以通過調試和分析代碼,分析在哪一步驟指向的為空,找到問題所在。
    • 20172304
    • 段志軒同學的部落格内容有點少,但是對于問題都有自己的了解。像教材内容問題中,指針的問題,他也問過老師,就是應該寫的詳細一點,也友善别的同學閱讀。

其他

程式設計方面一切如常,但是測試方面卻有了大幅度的下滑。其實,我感覺測試難度并不小。而我每次都是掐着時間,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程式設計與資料結構教程(第二版)》學習指導
  • Vector,ArrayList, LinkedList的差別
  • 序列化和持久化的差別與聯系
  • 一般報java.lang.NullPointerException的原因有以下幾種