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

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

學習內容總結 引用變量 建設 ase 擁有 項目目錄 對象 解析 aot

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

教材學習內容總結

本周內容主要為Java和Android開發學習指南的23章--26章的內容:

  • 第23章

  • 1.Java是開發Android應用程序的默認語言,但Android應用程序不同於Java應用程序在Java虛擬機上運行。

  • 2.Android4.4是Dalvik和ART的轉折點和分水嶺。

    • Dalvik是Google公司自己設計用於Android平臺的虛擬機。Dalvik虛擬機是Google等廠商合作開發的Android移動設備平臺的核心組成部分之一。它可以支持已轉換為 .dex(即Dalvik Executable)格式的Java應用程序的運行
      .dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。Dalvik 經過優化,允許在有限的內存中同時運行多個虛擬機的實例,並且 每一個Dalvik 應用作為一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉
    • 在ART 環境中,應用在第一次安裝的時候字節碼就會預先編譯成機器碼,使其成為真正的本地應用。這個過程叫做預編譯(AOT,Ahead-Of-Time)。這樣的話,應用的啟動(首次)和執行都會變得更加快速。
  • 3.在Android5.0之前,apk文件運行於Dalvik之上。在Android5.0及其以後的版本中,在安裝應用程序的時候,apk中的dex文件被轉為機器碼。

  • 4.Android是向後兼容的,針對較早的版本編寫的應用程序,總是能夠在新的版本上運行。

  • 5.每個應用程序都必須有一個清單,用於描述該應用程序。清單以XML文件的形式給出,並包含下列幾項:

    • 1.運行該應用程序所需的最小API Level

    • 2.應用程序的名稱

    • 3.當用戶在其手機或平板電腦的主屏幕上觸碰該程序的圖標時,將會打開的第一個活動(窗口)

    • 4.是否允許從其他的應用程序調用你的應用程序組件

    • 5.對於在目標設備上安裝的應用程序,用戶必須保證一組什麽樣的許可。如果用戶不能保證所有的必須的許可,將不會安裝該應用程序。

  • 第24章

  • 1.Project窗口中有兩個主要的節點,app和Gradle Scripts
  • 2.app節點包含了應用程序中所有的組件

    • mainfests.包含了一個AndroidMainfest.xml文件,它描述了應用程序

    • java.包含了所有的java應用程序和測試類
    • res.包含了資源文件,其中還包括了drawable(圖像),layout(布局文件),menu(菜單文件),mipmap(app圖標),values(字符串和其他值)

  • 3.Gradle Scripts節點包含了Gradle構建腳本,供Android Studio構建你的項目
  • 4.在Android Studio運行一個Android應用程序的時候,一個apk文件將會自動構建和簽名。這個文件將會命名為app-debug.apk,並且存儲在項目目錄下的app/build/outputs/apk目錄中。
  • 5.Android Studio中所看不到的,是一個名為R的通用的Java類,可以在項目的app/build/generated/source目錄下找到它。
  • 第25章

  • 活動的生命周期

    7個方法:
    • 1.onCreate()每個活動都會有的方法,在活動第一次被創建的時候調用

    • 2.OnStart這個活動在活動由不可見變為可見的時候調用

    • 3.OnResume這個方法在活動準備好和用戶進行交互的時候調用,此時的活動一定位於返回棧的棧頂,並且處於運行狀態。

    • 4.. onPause()這個方法在系統準備去啟動或者恢復另一個活動的時候調用。 我們通常會在這個方法中將一些消耗 CPU 的資源釋放掉,以及保存一些關鍵數據,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。

    • 5.onStop()這個方法在活動完全不可見的時候調用。它和 onPause()方法的主要區別在於,如果啟動的新活動是一個對話框式的活動,那麽 onPause()方法會得到執行,而 onStop()方法並不會執行。

    • 6.onDestroy()這個方法在活動被銷毀之前調用,之後活動的狀態將變為銷毀狀態。

    • 7.onRestart()這個方法在活動由停止狀態變為運行狀態之前調用,也就是活動被重新啟動了。

    三個階段:

    • 1.開始Activity:在這個階段依次執行3個生命周期的方法,分別是:onCreate、onStart和onResume方法

    • 2.Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個方法,onRestart、onStart和onResume

    • 3.關閉Activity:當Activity被關閉時系統會依次執行3個方法,onPause、onStop和onDestory。

  • 第26章

    • 1.微件,微件(Widget)技術,被用於行業網站建設,是對建站和維護的革命性變化。其拼裝、拽拖、所見即所得的操作方式,大大降低了行業網站建設的成本和門檻。
    • 2.Toast是Android中用來顯示顯示信息的一種機制,Toast是沒有焦點的,而且Toast顯示的時間有限,過一定的時間就會自動消失。而且Toast主要用於向用戶顯示提示消息。
    • 3.通知通知是出現在狀態欄裏的一條消息,通知是持久的,並且保持顯示,直到關閉通知或是關閉設備。

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

  • 問題1:SQL語言
  • 問題1解決方案:SQL語言,是結構化查詢語言(Structured Query Language)的簡稱。SQL語言是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名。SQL語言是一種交互式查詢語言,允許用戶直接查詢存儲數據,但它不是完整的程序語言,如它沒有DO或FOR 類似的循環語句,但它可以嵌入到另一種語言中,也可以借用VB、C、JAVA等語言,通過調用級接口(CALL LEVEL INTERFACE)直接發送到數據庫管理系統。
  • 問題2:Android和IOS的區別
  • 問題2的解決方案:IOS和安卓最大的區別在於本身所應用的設備不同。IOS系統主要是應用在iPhone、IPad、itouch設備上的操作系統,安卓系統主要是應用在安卓智能手機上的操作系統。Android平臺可以做的事情遠遠比iOS多, 可以做電話管理,地址簿,短信管理,可以自己跑後臺service。 替換掉系統的組件也可以,還可以跑其他系統的Runtime。而IOS是被Apple嚴格控制的系統,IOS的每款軟件都是經過蘋果公司的檢測、優化,安全性高。

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

  • 問題1:課堂實踐對數據庫的導入、導出和查詢
  • 問題1解決方案:兩種不同使用jdbc方式鏈接數據庫的,不是很清楚"jdbc:mysql://localhost/" +"test?user=root&password="什麽意思,也就照著做了。

    • getConnection(String url, String user, String password)試圖建立到給定數據庫 URL 的連接。
    Connection conn = null;
    Class.forName("com.mysql.jdbc.Driver");
    conn = DriverManager.getConnection("jdbc:mysql://localhost/" +"test?user=root&password=");
    Connection conn = DriverManager.getConnection(url, user, passwd);
    Statement statement = conn.createStatement()

    對於實踐的操作,也處於還沒有讀懂代碼就開始操作了,看了老師的代碼,感覺這三行有關,所以就把每步的SQL語句寫了進去,用了一堆的Alt+Enter產生了try-catch語句,然後運行就出來了。
    Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM Student"); DatabaseModification.showResults("Student", rset);
    Connection.createStatement() 創建一個 Statement 對象來將 SQL 語句發送到數據庫。
    其中,executeQuery()方法會把數據庫響應的查詢結果存放在ResultSet類對象中供我們使用,然後就在Java環境中實現了調用數據庫中的內容了。

  • 問題2:安裝Android Studio中Hello World在物理機上運行
  • 問題2解決方案:對於這個問題,OPPOr9就可以應用,而我的OPPOr11就不行,找過解決方案,但是毫無作用,好在可以在虛擬手機上使用。不清楚為什麽,而且我在別的Android Studio中也是過,也是同樣的效果。一直在閃退。

代碼托管

無相關代碼

上周考試錯題總結

  • 錯題1:The following method should return true if the int parameter is even and either positive or 0, and false otherwise. Which set of code should you use to replace ... so that the method works appropriately?(如果int參數是偶數或者是正數或0,那麽下面的方法應該返回true,否則返回false。您應該使用哪一組代碼來替換……那麽這個方法是否合適呢?)
    public boolean question3(int x) { ... }
    • A.if (x = = 0) return true;else if (x < 0) return false;else return question3(x - 1);
    • B.if (x = = 0) return false;else if (x < 0) return true;else return question3(x - 1);
    • C.if (x = = 0) return true;else if (x < 0) return false;else return question3(x - 2);
    • D.if (x = = 0) return false;else if (x < 0) return true;else return question3(x - 2);
    • E.return(x = = 0);
  • 錯誤解析:該方法將遞歸調用從x減去2,直到x == 0或x < 0。如果x = 0,那麽x - 2 * i == 0(對於某個int值i)或x == 2 * i,所以x必須是偶數。否則,遞歸會在x < 0時結束,也就是說原來的x是奇數或小於0。

  • 錯題2:Which of the following is considered an Abstract Data Type?(下列哪一種被認為是抽象數據類型?)
    • A.array
    • B.reference variable
    • C.any of the primitive types (e.g., int, double, char)
    • D.vector
    • E.all of the above
  • 錯誤解析:抽象數據類型包括數據結構的操作和訪問數據結構的方法。在這些列表中,只有向量結合了這兩個。數組是一個數據結構,但沒有方法(例如插入方法或搜索方法),而引用變量和基本類型是數據,而不是數據結構。

  • 錯題3:Abstract Data Types have which of the following object-oriented features?(抽象數據類型具有以下哪個面向對象特性?)
    • A.information hiding
    • B.inheritance
    • C.polymorphism
    • D.message passing
    • E.all of the above
  • 錯誤解析:所有這些答案都是面向對象的特性。一個抽象的數據類型封裝了一個數據結構和處理數據結構的方法,這樣信息隱藏就會被保存下來。因此,所有ADT都利用信息隱藏,使得數據結構不能直接從ADT外部進行操作,但是其他面向對象的特性是不需要的。

  • 錯題4:One operation that we might want to implement on a Stack and a Queue is full, which determines if the data structure has room for another item to be added. (我們可能希望在堆棧和隊列上實現的一個操作是full,這決定了數據結構是否有空間來添加另一個項目。) This operation would be useful
    • A.only if the Queue or Stack is implemented using an array
    • B.only if the Queue or Stack is implemented using a linked list
    • C.only for a Queue
    • D.only for a Stack
    • E.none of the above, a full operation is not useful at all
  • 錯誤解析:由於數組是一個靜態大小的對象,如果它被填充,那麽任何添加類型的操作,無論是列表插入、隊列隊列還是堆棧推送,都應該被阻止。這可以通過第一次檢查確定結構是否完整來確定。如果數據結構是使用鏈表實現的,那麽就沒有必要這樣做,因為(我們假設)總是有可用的動態內存來添加新元素。

  • 錯題5:In a linked list in Java(在Java中的鏈表中)
    • A.the link is an object
    • B.the link is a node
    • C.the link is a reference
    • D.the link is an int
    • E.the link is a class
  • 錯誤解析:在鏈表中,鏈接是對下一個節點的引用。一個是通過檢查引用的內容來“取消引用”鏈接。節點對象。對象是類的實例。節點的數據部分很可能是int類型的,也可能是其他類型的數據。

  • 錯題6:An Abstract Data Type is a data structure, that is, it is the listing of the instance data and the visibility modifiers for those instance data.(抽象數據類型是一種數據結構,即實例數據的列表和這些實例數據的可見性修飾符。)
    • A.true
    • B.false
  • 錯誤解析:抽象數據類型包括數據結構,但也包括用於訪問和操作數據結構的方法。

  • 錯題7:The push and enqueue operations are essentially the same operations, push is used for Stacks and enqueue is used for Queues.(push和enqueue操作本質上是相同的操作,push用於棧,enqueue用於隊列)
    • A.true
    • B.false
  • 錯誤解析:雖然這兩個操作都是各自抽象數據類型的 "add"或"insert" 操作,但它們的不同之處在於push總是在堆棧的頂部(或前部)添加,而enqueue總是在隊列的後部添加。

  • 錯題8:An array is a List Abstract Data Type.(數組是一個列表抽象數據類型。)
    • A.true
    • B.false
  • 錯誤解析:這個數組是一個數據結構,可以用來存儲一個值列表,但是數組沒有已經實現的操作來執行列表操作,比如添加到末尾,或者刪除一個給定的值。

  • 錯題9:A linked list that contains 6 Nodes will have 6 reference pointers.(一個包含6個節點的鏈表將有6個引用指針。)
    • A.true
    • B.false
  • 錯誤解析:為了訪問鏈表,至少需要有第7個引用指針,一個引用鏈表中的第一個項的引用指針。

  • 錯題10:Trees and graphs, because they are dynamic in nature, cannot be implemented using Java arrays.(由於樹和圖形本質上是動態的,因此不能使用Java數組實現它們。)
    • A.true
    • B.false
  • 錯誤解析:雖然是事實,任何給定的有一個固定大小的數組,因此最大電流的大小(節點數)的樹或圖僅限於其底層數組的大小,可以分配一個更大的數組,將原始數組中的元素復制到新數組,並繼續以這種方式實現擴張。這種技術之所以成功,是因為Java數組是對象,訪問所有對象的機制是通過引用實現的。在大多數其他語言(如C、c++、c#、Pascal等)中,數組都不是對象,因此這種技術將會失敗。

  • 錯題11:The only difference between a stack and a queue is that stacks operate using FIFO and queues operate using LIFO.(堆棧和隊列之間的唯一區別是堆棧使用FIFO操作,隊列使用LIFO操作。)
    • A.true
    • B.false
  • 錯誤解析:這就是反了。棧使用first-in-last-out (LIFO)操作,隊列使用first-in-first- first-out (FIFO)操作。

  • 錯題12:一個具有執行權限的目錄可以被打開並查看內部文件。
    • A.true
    • B.false
  • 錯誤解析:一個目錄同時具有讀權限和執行權限才可以打開並查看內部文件。

  • 錯題13:Linux Bash中,可以使用chomd 777 pdds命令修改文件pdds的權限,並使得其擁有者、擁有者所在的組和其他用戶都擁有全部權限。
    • A.true
    • B.false
  • 錯誤解析:chmod 777 pdds,不是 chomd 777 pdds

  • 錯題14:Linux Bash中,使用apt-get search tree命令來查找是否系統裝有軟件tree。
    • A.true
    • B.false
  • 錯誤解析:apt-cache search tree

  • 錯題15:Linux Bash中,使用grep查找當前src目錄下所有包含main函數的文件,並要求顯示出現行號的命令是grep –n main /src
    • A.true
    • B.false
  • 錯誤解析:grep –rn main /src

  • 錯題16:在Ubuntu中,使用vim編輯器時,想要移動光標,除方向鍵之外,還可以依次使用hjkl鍵進行上下左右的移動。
    • A.true
    • B.false
  • 錯誤解析:上下左右順序依次是kjhl

  • 考試內容正好都是自己會的內容,才會有26分的成績,但是脫離理論的考試,實際的代碼操作比起來估計自己就不會有這樣的分數了。此外,我把有關第13章&Linux命令的考試題也加入了,由於自己有點著急,錯誤量比較大,關於Linux命令的內容還不是很會,所以就是一個勁的在網上找解析,暴露出我關於Linux命令內容的不足,需要好好復習了。

感悟

終於把那本厚厚的java書給學完了,本周不但要弄那個XAMPP的數據庫,一臉懵逼的弄完全過程,對於操作數據庫的部分,完全借鑒了老師的代碼,僅僅理解了重要的那幾行(就是按要求調數據庫的內容而已),不是很明白,好在以後會學數據庫的內容,也就沒有太大下功夫。此外還要下載Android Studio軟件,下載的過程還是相對順利,只不過費了我好幾個G的流量,莫名的心疼。在下載的過程中,要求下了很多的內容,自己也不知道是什麽,也就按照要求進行。最後,產生了自己的新一代手機,可以打電話(永遠打不通),可以聽音樂,還可以發QQ消息,就是沒有實體的物質感覺,而且運行出了Hello World的語句,但是在物理手機上就莫名的閃推,這是在暗示我要換手機麽?(正合我意。。。),

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 136/136 1/1 15/15
第二周 570/706 1/2 20/35
第三周 613/1319 1/3 23/58
第四周 1249/2568 1/5 30/88
第五周 904/3472 1/6 30/118
第六周 904/3472 1/7 30/118
第七周 904/3472 1/7 30/178
第八周 904/3472 2/9 45/223
第九周 253/6016 2/10 55/278
第十周 958/6974 1/11 55/333
第十一周 0/6974 4/15 50/383

參考資料

  • 藍墨雲班課
  • 微件
  • Android和IOS的區別
  • SQL語言

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