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

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

目錄

學習內容總結

Linux命令(sort/cat/split/join)

『sort』:sort將文件/文本的每一行做爲一個單位,相互比較,比較原則是從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。html

  • 語法:sort(選項)(參數)
  • 經常使用選項:
    • -b:忽略每行前面開始出的空格字符;
    • -c:檢查文件是否已經按照順序排序;
    • -d:排序時,處理英文字母、數字及空格字符外,忽略其餘的字符;
    • -f:排序時,將小寫字母視爲大寫字母;
    • -i:排序時,除了040至176之間的ASCII字符外,忽略其餘的字符;
    • -k:排序時,指定本域的開頭和結尾;
    • -m:將幾個排序號的文件進行合併;
    • -M:將前面3個字母依照月份的縮寫進行排序;
    • -n:依照數值的大小排序;
    • -o <輸出文件> :將排序後的結果存入制定的文件;
    • -r:以相反的順序來排序;
    • -t <分隔字符> :指定排序時所用的欄位分隔字符;
    • + <起始欄位> - <結束欄位> :以指定的欄位來排序,範圍由起始欄位到結束欄位的前一欄位。
  • 參數:指定待排序的文件列表。
  • 注意:使用-k +<起始欄位>-<結束欄位>這一命令時,若「只」根據本域的第n個字符進行排序,則使用-k n,n

『cut』:cut命令用來顯示行中的指定部分,刪除文件中指定字段。java

  • 語法:`cut(選項)(參數)
  • 經常使用選項:
    • -b:僅顯示行中指定直接範圍的內容;
    • -c:僅顯示行中指定範圍的字符;
    • -d:指定字段的分隔符,默認的字段分隔符爲「TAB」;
    • -f:顯示指定字段的內容;
    • -n:與「-b」選項連用,不分割多字節字符;
    • --complement:補足被選擇的字節、字符或字段;
    • --out-delimiter= <字段分隔符> :指定輸出內容是的字段分割符;
    • --help:顯示指令的幫助信息;
    • --version:顯示指令的版本信息。
  • 參數:指定要進行內容過濾的文件。
  • 注意:cut命令主要是接受三個定位方法:第一,字節(bytes),用選項-b;第二,字符(characters),用選項-c;第三,域(fields),用選項-f。若是須要提取中文,使用-b就會出現亂碼狀況。因此,當遇到多字節字符時,可使用-n選項,-n用於告訴cut不要將多字節字符拆開。

『split』:能夠將一個大文件分割成不少個小文件linux

  • 語法:split (選項)(輸入(前綴))
  • 參數:
    • -b:值爲每一輸出檔案的大小,單位爲 byte。
    • -C:每一輸出檔中,單行的最大 byte 數。
    • -d:使用數字做爲後綴。
    • -l:值爲每一輸出檔的列數大小。
  • 注意:
    • 若是想用數字後綴可以使用-d參數,同時可使用-a length來指定後綴的長度

『join』:用來將兩個文件中,將指定欄位內容相同的行鏈接起來。git

  • 語法:join(選項)(參數1)(參數2)
  • 選項:
    • -a<1或2>:除了顯示原來的輸出內容以外,還顯示指令文件中沒有相同欄位的行;
    • -e <字符串> :若[文件1]與[文件2]中找不到指定的欄位,則在輸出中填入選項中的字符串;
    • -i或--ignore-case:比較欄位內容時,忽略大小寫的差別;
    • -o <格式> :按照指定的格式來顯示結果;
    • -t <字符> :使用欄位的分割字符;
    • -v<1或2>:更-a相同,可是隻顯示文件中沒有相同欄位的行;
    • -1 <欄位> :鏈接[文件1]指定的欄位;
    • -2 <欄位> :鏈接[文件2]指定的欄位。
  • 參數:要進行合併操做的第一個文件參數和第二個文件參數。
  • 注意:若是行內容不匹配,則不能進行該操做,如:

返回目錄
正則表達式

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

  • 『問題一』MySQL支持的SQL語法都有哪些?數據庫

  • 『問題一解決』數組

SQL是結構化查詢語言,主要用於訪問和處理數據庫的計算機語言。架構

(1)MySQL的數據類型ide

MySQL的數據類型大體分爲如下幾類,數值類型、字符串類型、日期和時間類型。oop

(2)建立數據庫

在建立數據庫以前,必須先建立數據庫,在MySQL中,建立數據庫的代碼以下:

create database wuzydb default character set utf8

以上代碼建立了wuzydb數據庫,並設置編碼爲utf8。

(3)建立表

表必須在數據庫中建立,因此在建立表以前,需調用use wuzydb;

建立表:create table 表名(字段 字段類型...)

(4)對錶中數據進行增刪改查

insert插入:insert into 表名(字段1,字段2...)values(值1,值2...)

select查找:select * from 表名(查詢全部數據);select 字段1,字段2...from 表名(查詢某幾個字段的數據)

update修改:update 表名 set 字段1=值1,字段2=值2...

delete刪除:deleta from 表名

返回目錄

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

  • 『問題一』

學習正則表達式的過程當中,運行測試代碼時出現了「Red Bar」,以下:

運行結果顯示,"\"Hello\"".matches("([\"'])[^\"']*\1")爲false。哪裏出錯了呢?

  • 『問題一解決』

把regex複製到正則表達式測試器上運行,結果是匹配的:

那麼,問題只能出在這行代碼上,而不是正則表達式自己。只有一種可能,就是沒有正確使用Java中的轉義字符,致使程序不能正確匹配。

再返回去看程序中的正則表達式,發現忽略了最後一個轉義符。()表示將括號裏的分組,後面的\1表示反向引用第一組,而在Java中,\自己就是轉義符,表示忽略\後面的內容,因此,要想使用「反向引用」這個含義,必須再次使用\進行轉義。再次運行,發現斷言正確,說明咱們的分析是正確的。

  • 『問題二』

在學習命令行時,參考資料常用/etc/passwd文件進行演示,那麼,/etc/passwd以及/etc/shadow是什麼文件呢:

  • 『問題二解決』

查閱相關資料瞭解到,在Linux操做系統中, /etc/passwd文件中的每一個用戶都有一個對應的記錄行,記錄着這個用戶的一下基本屬性。咱們經過命令行cat /etc/passwd查看/etc/passwd文件內容:

咱們能夠看到,/etc/passwd中一行記錄對應着一個用戶,每行記錄又被冒號(:)分隔爲7個字段,其格式和具體含義以下:用戶名:口令:用戶標識號:組標識號:註釋性描述:主目錄:登陸Shell

/etc/shadow文件格式與/etc/passwd文件格式相似,一樣由若干個字段組成,字段之間用「:」隔開。但須要注意的是,/etc/shadow文件只有系統管理員纔可以進行修改和查看:

/etc/shadow文件中的記錄行與/etc/passwd中的一一對應,它由pwconv命令根據/etc/passwd中的數據自動產生。文件中字段主要含義爲:登陸名:加密口令:最後一次修改時間:最小時間間隔:最大時間間隔:警告時間:不活動時間:失效時間:標誌

返回目錄

代碼託管

返回目錄

上週考試錯題總結

  • 『問題一』NIO2中,可使用(D)中的方法取出文件系統根目錄信息。

A .Path

B .DirectoryStream

C .FileStore

D .FileSystem

『考點』:FileSystemgetRootDirectorie方法能夠取出文件系統根目錄信息。對NIO各個方法還不夠熟悉。

  • 『問題二』:正則表達式「(‘|」)(.*?)\1」匹配 「'Hello',"World」」的結果是(BC)

A .不匹配

B .'Hello'

C ."World"

D .'Hello',"World"

『考點』:.*是貪婪量詞,會盡可能匹配更多;而本題中的.*?是懶惰量詞,儘可能匹配少。因此匹配結果爲'Hello'"World"兩個。另外,反向引用 \1 表明第一個()中的匹配內容。

  • 『問題三』:正則表達式「r.t」匹配字符串「rat」的Java 代碼表達式是()

A ."rat".matcher("r.t")

B ."r.t".matcher("rat")

C .Pattern.compile("rat").matcher("r.t")

D .Pattern.compile("r.t").matcher("rat")

『考點』:課本P491提到,java.util.regex.Pattern實例是正則表達式在JVM中的表明對象,需經過compile()方法來取得。在取得Pattern實例後,可使用matcher()方法指定要比較的字符串。

  • 『問題四』:Suppose we have an array of String objects identified by the variable names. Which of the following for loops will not correctly process each element in the array.(假如咱們有一個名爲names的String對象數組,下面哪一個for循環不能遍歷數組中的每個元素?)(C)

A .for(int i = 0; i < names.length; i++)

B .for(String name : names)

C .for(int i = 0; i < names.length(); i++)

D .none of these will correctly process each element(以上都不能遍歷)

E .all of these will correctly process each element(以上都能遍歷)

『考點』:長度length是成員變量,不是方法,因此不能加括號。C錯誤。

返回目錄

結對及互評

結對對象:20145202馬超
結對學習內容:解決對方學習過程當中遇到的問題

返回目錄

學習感悟及思考

本週學習最大的收穫來自於實驗和正則表達式的學習。實驗的內容很豐富,在夯實基礎的同時,也加深咱們對知識的理解和掌握。

學習過程當中遇到很多問題,畏難情緒時常讓我產生退縮的念頭。不過,唾手可得的知識真的有價值嗎?我看未必。

以本週正則表達式的學習爲例,一個很是簡單的正則表達式用Java程序運行起來卻不符合預期,帶着疑惑請教老師,老師建議我先在regextester上跑通再運行程序。但是把程序中的正則表達式複製過去倒是匹配的,仔細想了想,明白出錯的緣由在於忽略了Java中的轉義符。

這個問題本能夠直接回答我錯誤在哪裏,老師卻提供給我一種方法而不只僅是一個答案。摸索的過程雖然比直接獲得答案來的艱難,但授人以魚不如授人以漁,從此再遇到類似的問題,就均可以自行解決了。

墨非定律告訴咱們: 若是你認爲事情會向壞的方向發展,那麼事情必定會那樣。因此,毫不說「不可能」,不斷挑戰自我才能更快地成長。

返回目錄

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 16/16 1/1 18/18 初步認識了Java
第二週 219/235 1/2 28/46 學習了Java的基本語法知識
第三週 766/1001 1/3 23/69 瞭解對象與參考的關係,以及封裝的概念與實現
第四周 984/1985 1/4 18/87 學習了繼承與多態的關係,以及接口的多態操做
第五週 866/2851 1/5 12/99 學習了異常處理,學會使用Collection收集對象
第六週 664/3515 1/6 15/114 認識字節流和字符流的繼承架構,學習線程與並行API
第七週 469/3984 1/7 13/127 認識Date與Calender
第八週 315/4299 1/8 15/142 學習了NIO、日誌、正則表達式等內容,複習第六章「繼承與多態」和「Linux 目錄結構及文件基本操做」
第九周 553/4852 1/9 20/142 學習了數據庫、反射與類加載器、自定義泛型枚舉與註釋等內容,複習經常使用命令join、cut、split和sort

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

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

  • 計劃學習時間:15小時

  • 實際學習時間:20小時

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

返回目錄

參考資料

相關文章
相關標籤/搜索