2024-2025 20241308計算機基礎與程式設計第六週學習總結

babythbreath發表於2024-11-03

這個作業屬於哪個課程 2024-2025-1-計算機基礎與程式設計
這個作業要求在哪裡 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276
這個作業的目標 Polya如何解決問題 簡單型別與組合型別 複合資料結構 查詢與排序演算法 演算法複雜度 遞迴 程式碼安全
作業正文
教材學習內容總結
學習了《計算機基礎與程式設計》中第六章未看完的部分,加深了對於虛擬碼語句和使用方法的理解;瞭解了測試程式的原理。學習了該書第七章的內容,掌握瞭解決問題的流程和方法,能夠學會併成功應用集中排序和檢索元素的方法;瞭解了複雜變數的含義;掌握了遞迴演算法的原理。
教材的學習
1.繼承性

概念:一個類(子類或派生類)能夠繼承另一個類(父類或基類)的屬性(如成員變數)、方法(如函式)等成員。子類會自動擁有父類的這些可繼承特性,就好像子女繼承了父母的某些特質一樣。

優勢:程式碼複用:避免重複編寫相同程式碼。比如有個“圖形”父類有計算面積的方法,“圓形”“矩形”等子類繼承它後,無需重寫該計算面積方法,直接可用,節省開發時間和精力。
層次化和模組化:方便構建類的層次結構,讓程式碼組織更清晰、有條理,易於理解和維護。例如在一個遊戲開發中,“角色”作為父類,“戰士”“法師”等子類繼承它,各自在繼承基礎上擴充特有屬性和方法。

型別:(1)單繼承:子類只能繼承一個父類,如在某些程式語言(像Java在早期版本主要是單繼承模式)中,一個類只能有一個直接的父類。
(2)多繼承:子類可以繼承多個父類,能綜合多個父類的特性。不過多繼承可能會帶來一些如命名衝突等複雜問題,部分程式語言(如Python)支援多繼承並透過特定機制解決可能出現的問題。
2.簡單型別

簡單型別通常指那些基本的、不可再分解的資料型別,常見的有以下幾種:

數值型別:(1)整數型別:用來表示整數,比如在許多程式語言中常見的有 int (一般表示有符號整數,取值範圍依具體語言和平臺而定),還有 long (長整數型別,可表示更大範圍的整數)等。
(2)浮點型別:用於表示帶有小數部分的數值。例如 float (單精度浮點型,精度相對有限)和 double (雙精度浮點型,精度更高)。在C語言中, float 一般佔4個位元組, double 佔8個位元組。

字元型別:主要用來表示單個字元,比如在C語言中常用的 char 型別。在ASCII編碼下, char 型別可以表示0到127的字元值,而在擴充套件ASCII或Unicode編碼下,能表示更多不同語言的字元。
3.組合型別
組合型別是相對於簡單型別而言的,它是由多個簡單型別或其他組合型別按照一定規則組合而成的資料型別,常見的有以下幾種:

陣列:(1)概念:是一種將多個相同型別的元素依次排列在一起的資料結構,這些元素可以是簡單型別(如整數、字元等),也可以是其他組合型別。例如在C語言中, int arr[5]; 就定義了一個能存放5個整數的陣列。
(2)特點:透過下標可以快速訪問陣列中的元素,下標通常從0開始。陣列在記憶體中是連續儲存的,便於進行批次資料處理。

結構體:(1)概念:可以把不同型別的成員(如整數、字元、陣列等)組合在一起,形成一個新的邏輯整體。
(2)特點:它允許將相關的資料集中在一起,方便對一組相關屬性進行統一管理和操作。不同結構體例項可以有不同的值分配給各個成員。
聯合體: 概念:也叫共用體,它允許不同型別的成員共享同一塊記憶體空間。也就是說,在某一時刻,聯合體中只有一個成員的值是有效的。
4。遞迴與迭代
遞迴
概念:在程式設計中,遞迴是指在函式的定義中使用函式自身的方法。也就是說,一個函式直接或間接地呼叫自身來解決問題。
示例:計算階乘的遞迴函式。比如求5的階乘,數學上5! = 5×4×3×2×1。
特點:

  • 思路簡潔:對於一些具有重複子結構的問題,遞迴能以很自然的思路來表述解決方案,比如樹結構的遍歷等問題。
  • 可能導致棧溢位:每次函式呼叫自身都會在棧上開闢新的空間來儲存當前函式的狀態等資訊,如果遞迴層次過深(比如計算很大數的階乘),可能會耗盡棧空間,導致棧溢位錯誤。

迭代
概念:迭代是透過重複執行一系列操作來逐步逼近目標結果的過程。通常使用迴圈結構(如 for 迴圈、 while 迴圈等)來實現。
示例:同樣計算5的階乘

  • 特點:
  • 效率優勢:一般情況下,迭代的執行效率相對遞迴可能更高,尤其是在處理大規模資料或複雜問題時,因為它不需要像遞迴那樣頻繁開闢和管理棧空間。
  • 程式碼邏輯清晰:透過迴圈結構實現迭代,程式碼的邏輯關係通常比較清晰,易於理解和維護,能直觀看到資料是如何逐步變化得到最終結果的。

遞迴和迭代都是解決問題的重要手段,在不同的場景下各有優劣,具體選擇哪種方法要根據問題的特點和需求來決定。
5.查詢與排序
查詢
概念:在一組資料中尋找特定元素的操作。比如在一個整數陣列中找到值為5的元素所在位置。
常見方法:

  • 順序查詢:從資料的第一個元素開始,逐個與要查詢的目標元素進行比較,直到找到匹配元素或遍歷完整個資料集。簡單直接,但效率相對低,尤其資料量很大時。例如在長度為n的陣列中,平均要查詢n/2次。
  • 二分查詢:要求資料必須是有序的(如升序或降序排列)。每次查詢都將資料集分成兩部分,透過比較目標元素和中間元素的大小,確定下一步在哪個部分繼續查詢。效率高,時間複雜度為O(log₂n)。比如在有序陣列中查詢一個數,每次能排除一半的資料。

排序
概念:將一組無序的資料按照特定的規則(如升序、降序)重新排列成有序序列的操作。
常見方法:

  • 氣泡排序:透過反覆比較相鄰的元素,如果順序不對就交換它們的位置。經過多輪比較交換,最終使資料有序。時間複雜度為O(n²),是一種比較簡單但效率不高的排序方法。例如對5個元素的陣列排序,可能需要進行多輪,每輪多次比較交換。
  • 插入排序:將待排序的資料逐個插入到已經有序的部分資料中合適的位置。時間複雜度也是O(n²),但在某些情況下(如資料接近有序)比氣泡排序效率略高。比如有一個有序陣列,新插入一個元素時,透過比較找到合適插入位置。
  • 快速排序:透過選擇一個基準元素,將資料集分成兩部分,小於基準的在左邊,大於基準的在右邊,然後對這兩部分分別進行快速排序。時間複雜度平均為O(nlog₂n),是一種高效的排序方法,但最壞情況(如選擇的基準元素總是極值)下時間複雜度會變為O(n²)。
  • 歸併排序:將資料集分成若干個子集,先對每個子集進行排序,然後再將排好序的子集合併成一個有序的整體。時間複雜度為O(nlog₂n),且效能比較穩定,不管在何種情況下時間複雜度基本不變。

查詢與排序在資料處理、演算法設計等諸多領域都有廣泛應用,不同的方法適用於不同的場景和資料特點。
6.程式碼安全
在計算機領域,程式碼安全涉及多方面要點:

輸入驗證

  • 嚴格檢查使用者輸入資料,確保符合預期格式、型別與範圍。如網頁表單中,預期整數輸入就不能接受非整數內容,防惡意輸入破壞程式邏輯或發動攻擊。

許可權管理

  • 清晰界定不同使用者/角色對程式碼相關資源(檔案、資料庫等)的訪問許可權。普通使用者、管理員等各有其能訪問和操作的範圍,避免越權訪問致資料洩露等問題。

防止注入攻擊

  • SQL隱碼攻擊:與資料庫互動程式碼裡,杜絕使用者輸入惡意拼接成SQL語句。採用引數化查詢等方式處理輸入,而非直接拼接進SQL語句。
  • XSS(跨站指令碼攻擊):對輸出到網頁內容,要防止含惡意指令碼被瀏覽器執行。透過對輸出內容轉義等處理,不讓惡意指令碼原樣展示在網頁上。

加密處理

  • 資料加密:對敏感資料(使用者密碼、重要業務資料等)加密儲存與傳輸。可選用對稱加密演算法(如AES)、非對稱加密演算法(如RSA),即便資料遭竊取,攻擊者也難獲真實內容。
  • 雜湊處理:密碼等敏感資訊常用雜湊函式(如SHA-256)處理,存為固定長度雜湊值。登入驗證時對比輸入密碼雜湊值與儲存值,資料庫洩露時攻擊者也難直接得原始密碼。

程式碼審查

  • 定期安排專業人員審查程式碼,查詢安全漏洞、邏輯錯誤等。不同視角審查人員可發現易被忽略的潛在安全問題,以便及時修復提升安全性。

應急響應與更新

  • 制定應急響應機制,遇安全事件能快速處理。同時關注程式語言、框架、庫等更新,及時安裝補丁,修復已知安全漏洞,維持程式碼安全狀態。

相關文章