20155212 2016-2017-2 《Java程序設計》第6周學習總結

20155212 2016-2017-2 《Java程序設計》第6周學習總結

教材學習內容總結

Chapter10

  • 輸入串流爲java.io.InputStream,輸出串流爲java.io.OutputStream,無須理會來源或目的真正形式。
  • 在不使用InputStreamOutputStream時,必須使用close()關閉串流,可是JDK7會嘗試自動關閉資源語法。
  • System.inSystem.out分別是InputStreamOutputStream的實例,分別表明標準是輸入與標準輸出。
  • 串流繼承架構

  • 可使用SystemsetIn()方法指定InputStream實例,指定標準輸入來源。
  • 標準輸出能夠從新導向至檔案,只要執行程序時使用>將輸出結果導向至指定的檔案。若是使用>>則是附加訊息。
  • 可使用System的setOut()方法指定PrintStream實例,將結果輸出至指定的目的地。
  • System.erroPrintSteam實例,稱之爲標準錯誤輸出串流,用來當即顯示錯誤訊息。
  • System.out輸出的訊息可使用>或>>從新導向至檔案,但System.err輸出的訊息必定會顯示在文本模式中,沒法從新導向。
  • 可使用System.setErr()指定PrintStream,指定標準錯誤輸出串流。
  • FileInputStreamInputStream的子類,能夠指定文件名建構實例,一旦建構檔案就開啓,接着就可用來讀取數據。
  • FileOutputStreamOutputStream的子類,能夠指定文件名建構實例,一旦建構檔案就開啓,接着就能夠用來寫出數據。
  • 不管是FileInputStreamFileOutputStream,不使用時都要使用close()關閉檔案。
    • FileInputStream主要實做了InputStreamread()抽象方法,使之可從檔案中讀取數據。
    • FileOutputStream主要實做了OutputStreamwrite()抽象方法,使之可寫出數據至檔案 。
  • DataInputStreamDataOutputStream提供讀取、寫入Java基本數據型的方法,像是讀寫int、double、 boolean等的方法。
  • 若是在做對象串行化時,對象中某些數據成員不但願被寫入,則能夠標上transient關鍵詞。html

    Chapter11

  • 若是想在main()之外獨立設計流程,能夠撰寫類別實做java.lang.Runnable接口,流程的進入點是實做在run()方法中。
  • 能夠建構Thread實例來執行Runnable實例定義的run()方法。
  • 除了將流程定義在Runnable的run()方法中以外,另外一個撰寫多線程程序的方式,是繼承Thread類別,從新定義run()方法。
  • 線程有其優先權,可以使用Thread的setPriority()方法設定優先權:
    • 可設定值爲1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY),預設是5(Thread.NORM_PRIORITY)。
    • 超出1到10外的設定值會拋出IllegalArgumentException
  • 線程因輸入輸出進入Blocked狀態後,在完成輸入輸出後,會回到Runnable狀態,等待排班器排入執行(Running狀態)。
  • 一個進入Blocked狀態的線程,能夠由另外一個線程呼叫該線程的interrupt()方法,讓它離開Blocked狀態。
  • 若是A線程正在運行,流程中容許B線程加入,等到B線程執行完畢後再繼續A線程流程,則可使用join()方法完成需求。
  • 當線程使用join()加入至另外一線程時,另外一線程會等待被加入的線程工做完畢,而後再繼續它的動做。
  • 不只有中止線程必須自行根據條件實做,線程的暫停、重啓,也必須視需求實做,而不是直接呼叫suspend()、resume()等方法。
  • java.lang.ThreadGroup類別能夠管理羣組中的線程,可使用如下方式產生羣組,並在產生線程時指定所屬羣組:java

ThreadGroup threadGroup1 = new ThreadGroup("group1");
ThreadGroup threadGroup2 = new ThreadGroup("group2");
Thread thread1 = new Thread(threadGroup1, "group1's member");
Thread thread2 = new Thread(threadGroup2 "group2's member");
  • 想要一次取得羣組中全部線程,可使用enumerate()方法。
  • 在JDK5以後,若是ThreadGroup中的線程發生例外時:
    • 若是ThreadGroup有父ThreadGroup,就會呼叫父ThreadGroupuncaughtException()方法。
    • 不然,看看Thread是否使用setUncaughtExceptionHandler()方法設定Thread.UncaughtExceptionHandler實例,有的話就會呼叫其uncaughtException()方法。
    • 不然,看看例外是否爲ThreadDeath實例,若「是」什麼都不做,若「否」則呼叫例外的printStrackTrace()
  • 第9章介紹過的CollectionMap,都未考慮線程安全。
  • 放在等待集合的線程不會參與CPU排班。
  • java.util.concurrent.locks套件中提供LockReadWriteLockCondition接口以及相關實做類別,能夠提供相似synchronizedwait()notify()notifyAll()的做用,以及更多高階功能。
  • Lock接口還定義了tryLock()方法,若是線程呼叫tryLock()能夠取得鎖定會傳回true,若沒法取得鎖定傳回false
  • BlockingQueueQueue的子界面:
    • 若呼叫put()方法,在隊列已滿的狀況下會被阻斷。
    • 若呼叫take()方法,在隊列爲空的狀況下會被阻斷。
  • ConcurrentHashMapConcurrentMap的實做類別ConcurrentNavigableMapConcurrentMap子接口,其實做類別爲ConcurrentSkipListMap,可視爲支持並行操做的TreeMap版本。

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

  • 什麼是dump()方法?
    • dump是堆的意思,dump()含義就是存儲。
  • 實做Runnablerun()中定義額外流程好?仍是繼承Threadrun()中定義額外流程好?
    • 實做Runnable接口的好處就是較有彈性,你的類別還有機會繼承其它類別
    • 若繼承了Thread,那該類別就是一種Thread,一般是爲了直接利用Thread中定義的一些方法,纔會繼承Thread來實做
    • 若是主線程中啓動了額外線程,預設會等待被啓動的全部線程都執行完run()方法才停止JVM。
    • 若是一個Thread被標示爲Daemon線程,在全部的非Daemon線程都結束時,JVM自動就會終止。
  • 有幾種情況會讓線程進入Blocked狀態
    • 進入synchronized前競爭對象鎖定的阻斷
    • 呼叫wait()的阻斷
    • 等待輸入輸出完成

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

  • 以前一直commit,而後提示我本地領先遠程太多,提示我push,push事後出現上述錯誤,後來cd ~/Java-20155212``在根目錄git commit```而後push成功。原來,在當前目錄git只能git當前目錄的代碼。

代碼託管

上週考試錯題總結

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分git

  4. 代碼調試中的問題和解決過程, 一個問題加1分安全

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • 博客內容不夠深入
  • 代碼中值得學習的或問題:多線程

  • 基於評分標準,我給本博客打分:10分。得分狀況以下:
  1. 正確使用Markdown語法,加1分
  2. 模板中的要素齊全,加1分
  3. 教材學習中的問題和解決過程, 一個問題加1分,共1個問題,加1分
  4. 本週有效代碼超過300分行的(加2分)
  5. 感想,體會不假大空的加1分
  6. 排版精美的,加1分
  7. 進度條中記錄學習時間與改進狀況的,加1分
  8. 代碼Commit Message規範的,加1分
  9. 錯題學習深刻的加1分

點評過的同窗博客和代碼

其餘(感悟、思考等,可選)

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 18/18 1/1 10/10
第二週 172/190 1/2 18/38
第三週 464/654 1/3 23/61
第四周 876/1530 1/4 28/89
第五週 831/2361 1/5 15/114
第六週 1404/2765 1/6 24/138

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。架構

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法學習

  • 計劃學習時間:24小時.net

  • 實際學習時間:24小時線程

  • 改進狀況:比之前有了很大的進步,可是主要緣由仍是在於第11章特別多,逼得本身不得不投入時間。設計

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索