Java基礎集合框架學習(上)

文章目錄

    • 初識基礎框架
    • 為什么使用集合框架
    • 集合框架的繼承關系
    • ArrayList入門案例
    • 單元測試和增刪改查
    • 單元測試的注意事項
    • LinkedList入門案例
    • ArrayList底層是數組
    • LinkedList底層是鏈表
    • ArrayList和LinkedList選型
    • ArrayList存放DOG對象

初識基礎框架

Java基礎集合框架是Java編程語言中用于存儲、管理和處理數據的一組核心接口和類的集合。
它提供了各種不同類型的數據結構,例如列表、集合、映射等,以及與這些數據結構相關的操作方法。
Java基礎集合框架位于`java.util`包中,并在Java的標準庫中提供。

Java基礎集合框架的主要接口和類:

  1. List 接口: 有序集合,可以包含重復元素。常見實現包括ArrayList、LinkedList 和 Vector。

  2. Set 接口: 不包含重復元素的集合。常見實現包括HashSet、LinkedHashSet 和 TreeSet。

  3. Map 接口: 鍵值對的集合,每個鍵映射到一個值。常見實現包括HashMap、LinkedHashMap 和 TreeMap。

  4. Queue 接口: 用于表示隊列數據結構,通常按照先進先出(FIFO)的順序處理元素。常見實現包括LinkedList 和 PriorityQueue。

  5. Deque 接口: 雙端隊列,可以從兩端添加和刪除元素。常見實現包括ArrayDeque 和 LinkedList。

  6. Iterator 接口: 用于遍歷集合中的元素。

  7. Collections 類: 提供了一組靜態方法,用于對集合進行操作,如排序、查找、反轉等。

  8. Arrays 類: 提供了一些靜態方法,用于操作數組,如排序、查找等。

除了上述核心接口和類之外,還有一些其他實用類,如 BitSet、EnumSet、EnumMap 等,用于處理特定類型的數據結構。

基礎集合框架為Java開發人員提供了靈活且高效的數據結構和操作方式,使得在處理不同類型的數據時更加方便和快速。不過需要注意的是,雖然基礎集合框架在大多數情況下足夠使用,但在某些特定場景下,可能需要使用更專門的集合庫或自定義數據結構。

為什么使用集合框架

使用集合框架(Collection Framework)在Java編程中有許多好處,它提供了一種方便、高效、可重用的方式來管理和操作數據。以下是使用集合框架的一些主要理由:

  1. 數據存儲和管理:集合框架提供了多種數據結構,如列表、集合、映射等,使得存儲和管理數據變得更加簡單。開發人員無需自己實現復雜的數據結構,而是可以直接使用標準庫中提供的集合類。

  2. 高效的數據操作:集合框架中的類和方法經過優化,可以高效地執行各種數據操作,如查找、插入、刪除等。這些操作的底層實現通常使用了合適的數據結構,以提供快速的性能。

  3. 代碼重用:通過使用集合框架,可以避免重復編寫數據結構和操作方法,從而提高代碼的重用性。開發人員可以專注于業務邏輯而不必關心底層數據管理。

  4. 類型安全:集合框架在設計時考慮了類型安全性,因此可以確保在編譯時捕獲一些潛在的類型錯誤,減少運行時異常的可能性。

  5. 迭代和遍歷:集合框架提供了統一的迭代和遍歷機制,使得遍歷集合中的元素變得簡單。開發人員可以使用迭代器或增強的 for 循環來遍歷集合。

  6. 線程安全性:在多線程環境下,某些集合類(如 ConcurrentHashMap 和 CopyOnWriteArrayList)提供了線程安全的實現,可以幫助開發人員處理并發訪問的問題。

  7. 標準化接口:Java的集合框架使用了統一的接口和類命名規范,這使得開發人員可以輕松地切換和替換不同的集合實現,從而提高了代碼的靈活性和可維護性。

  8. 算法和操作的封裝:集合框架中提供了許多常用的算法和操作,如排序、查找、過濾等,這些操作可以直接應用于集合,無需開發人員手動實現。

集合框架為Java開發人員提供了一種強大的工具,幫助他們更輕松地處理和管理數據,提高了代碼的效率、可讀性和可維護性。
無論是小規模的項目還是大規模的應用程序,集合框架都是編程中不可或缺的重要組成部分。

集合框架的繼承關系

Java集合框架的類和接口之間存在復雜的繼承關系和層次結構。
以下是Java集合框架中一些主要的類和接口及其繼承關系的概述
  1. Collection 接口:是所有集合類的根接口,它定義了基本的集合操作方法,如添加、刪除、查找、遍歷等。它派生了兩個子接口:List 和 Set。

    • List 接口:表示有序的集合,可以包含重復元素。常見實現有 ArrayList、LinkedList 和 Vector。

    • Set 接口:表示不包含重復元素的集合。常見實現有 HashSet、LinkedHashSet 和 TreeSet。

  2. Map 接口:表示鍵值對的集合,每個鍵映射到一個值。常見實現有 HashMap、LinkedHashMap 和 TreeMap。

  3. Queue 接口:表示隊列數據結構,通常按照先進先出(FIFO)的順序處理元素。常見實現有 LinkedList 和 PriorityQueue。

  4. Deque 接口:表示雙端隊列,可以從兩端添加和刪除元素。常見實現有 ArrayDeque 和 LinkedList。

  5. Iterator 接口:用于遍歷集合中的元素,是 Collection 接口的成員之一。

  6. ListIterator 接口:是 Iterator 的子接口,提供了在 List 中雙向遍歷的能力。

  7. Collections 類:是一個工具類,提供了各種靜態方法用于對集合進行操作,如排序、查找、反轉等。

  8. Arrays 類:是一個工具類,提供了靜態方法用于操作數組,如排序、查找等。

  9. AbstractCollection 抽象類:實現了 Collection 接口中的大部分方法,為其他集合類提供了共享的基本實現。

  10. AbstractList、AbstractSet 和 AbstractMap 抽象類:分別實現了 List、Set 和 Map 接口中的一些通用方法,為具體的實現類提供了基礎。

  11. AbstractSequentialList 抽象類:實現了 List 接口,為線性數據結構提供了基本實現。

  12. AbstractQueue 抽象類:實現了 Queue 接口,為隊列數據結構提供了基本實現。

這只是集合框架中一部分類和接口的繼承關系,實際上還有許多其他類和接口在框架中扮演了重要的角色。

ArrayList入門案例

import java.util.ArrayList;public class ArrayListExample {public static void main(String[] args) {// 創建一個 ArrayList,存儲整數類型的數據ArrayList<Integer> numbers = new ArrayList<>();// 添加元素到 ArrayListnumbers.add(10);numbers.add(20);numbers.add(30);numbers.add(40);numbers.add(50);// 打印 ArrayList 中的元素System.out.println("ArrayList 中的元素: " + numbers);// 使用 for 循環遍歷 ArrayListSystem.out.println("使用 for 循環遍歷 ArrayList:");for (int i = 0; i < numbers.size(); i++) {System.out.println(numbers.get(i));}// 使用增強的 for 循環遍歷 ArrayListSystem.out.println("使用增強的 for 循環遍歷 ArrayList:");for (Integer num : numbers) {System.out.println(num);}// 刪除元素numbers.remove(2); // 刪除索引為2的元素(30)// 打印更新后的 ArrayListSystem.out.println("更新后的 ArrayList: " + numbers);}
}

在這個案例中,我們首先創建了一個存儲整數的ArrayList。然后,我們使用add()方法向列表中添加一些元素。接下來,我們展示了兩種不同的遍歷方式:使用傳統的for循環和增強的for循環。

最后,我們使用remove()方法刪除了列表中索引為2的元素(即30),并打印出更新后的ArrayList。

這個簡單的案例演示了ArrayList的基本用法,包括創建、添加、遍歷和刪除元素。

單元測試和增刪改查

單元測試(Unit Testing)是軟件開發中的一種測試方法,用于測試軟件中的最小可測試單元(通常是函數、方法或類)是否按照預期工作。在數據庫操作中的增加(Create)、刪除(Delete)、更新(Update)和查詢(Retrieve)操作通常也需要進行單元測試,以確保這些操作在各種情況下都能正確地執行。

以下是一個簡單的示例,演示了如何對數據庫操作的增刪改查功能進行單元測試:

假設我們有一個名為UserDao的類,負責與用戶數據進行交互,提供增刪改查操作。我們使用JUnit作為單元測試框架,來編寫測試用例。

import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.List;public class UserDaoTest {private UserDao userDao;@Beforepublic void setUp() {// 在每個測試方法運行之前初始化 UserDaouserDao = new UserDao();}@Testpublic void testCreateUser() {User newUser = new User("John Doe", 25);assertTrue(userDao.createUser(newUser));}@Testpublic void testUpdateUser() {User existingUser = userDao.getUserById(1); // 假設數據庫中已經有一個id為1的用戶assertNotNull(existingUser);existingUser.setName("Jane Smith");assertTrue(userDao.updateUser(existingUser));}@Testpublic void testDeleteUser() {int userIdToDelete = 2; // 假設數據庫中已經有一個id為2的用戶assertTrue(userDao.deleteUser(userIdToDelete));}@Testpublic void testGetUserById() {User retrievedUser = userDao.getUserById(3); // 假設數據庫中已經有一個id為3的用戶assertNotNull(retrievedUser);}@Testpublic void testGetAllUsers() {List<User> users = userDao.getAllUsers();assertNotNull(users);assertTrue(users.size() > 0);}
}

在上述示例中,我們編寫了幾個測試用例來測試UserDao類中的增刪改查功能。每個測試方法使用@Test注解進行標記,表示這是一個測試方法。@Before注解表示在每個測試方法之前執行的代碼,用于初始化測試環境。

在每個測試方法中,我們使用JUnit的斷言方法(如assertTrueassertNotNull等)來驗證操作的結果是否符合預期。如果測試方法中的斷言失敗,則測試將失敗,表明代碼可能存在問題。

通過編寫這些單元測試,我們可以在開發過程中快速發現和解決潛在的問題,確保數據庫操作的增刪改查功能能夠正確地工作。

單元測試的注意事項

單元測試在軟件開發中扮演著重要的角色,可以幫助開發人員快速發現和解決問題,確保代碼的質量和可靠性。以下是一些單元測試的注意事項:

  1. 測試覆蓋率:確保測試用例覆蓋到代碼中的各個分支和情況,以最大程度地減少未測試代碼的存在。使用代碼覆蓋率工具來幫助確定測試覆蓋范圍。

  2. 獨立性:每個測試用例應該是相互獨立的,不應該依賴于其他測試的執行順序或結果。這有助于定位問題和調試失敗的測試。

  3. 可重復性:測試應該是可重復運行的,不受外部環境的影響。避免依賴外部資源或隨機性因素,確保測試結果始終一致。

  4. 清晰明了的命名:給測試用例和測試方法起有意義的名字,以便于理解測試的目的和預期結果。良好的命名可以提高測試代碼的可讀性。

  5. 小而專注的測試:每個測試用例應該專注于測試一個特定功能或場景。避免一個測試方法測試過多的功能,以保持測試的可維護性和清晰性。

  6. 模擬和假設:在測試中,可能需要模擬外部依賴或假設某些條件成立。使用模擬框架或工具來創建虛擬對象,以便進行更有效的測試。

  7. 異常測試:確保測試代碼能夠正確地處理和捕獲預期的異常情況。這有助于驗證代碼在異常情況下的行為是否符合預期。

  8. 持續集成:將單元測試集成到持續集成(CI)流程中,確保每次代碼提交都會自動運行測試,及時發現問題并防止引入新的錯誤。

  9. 定期維護:隨著代碼的演進,確保及時更新和維護測試代碼,以適應代碼的變化和需求的變化。

  10. 性能測試:雖然單元測試主要關注功能的正確性,但在適當的情況下,也可以考慮添加性能測試,以確保代碼在負載和壓力下的表現。

  11. 測試文檔:為每個測試用例編寫清晰的文檔,描述測試的目的、輸入、預期結果以及其他必要信息。這有助于其他開發人員理解和維護測試。

  12. 版本控制:將測試代碼與應用代碼一起放入版本控制系統,確保測試代碼與應用代碼保持同步。

LinkedList入門案例

以下是一個使用簡單的入門案例,演示了如何創建一個LinkedList、添加元素、遍歷列表以及刪除元素的基本操作:

import java.util.LinkedList;public class LinkedListExample {public static void main(String[] args) {// 創建一個 LinkedList,存儲字符串類型的數據LinkedList<String> names = new LinkedList<>();// 添加元素到 LinkedListnames.add("Alice");names.add("Bob");names.add("Charlie");names.add("David");names.add("Eve");// 打印 LinkedList 中的元素System.out.println("LinkedList 中的元素: " + names);// 使用 for 循環遍歷 LinkedListSystem.out.println("使用 for 循環遍歷 LinkedList:");for (int i = 0; i < names.size(); i++) {System.out.println(names.get(i));}// 使用增強的 for 循環遍歷 LinkedListSystem.out.println("使用增強的 for 循環遍歷 LinkedList:");for (String name : names) {System.out.println(name);}// 刪除元素names.remove(2); // 刪除索引為2的元素(Charlie)// 打印更新后的 LinkedListSystem.out.println("更新后的 LinkedList: " + names);}
}

在這個案例中,我們首先創建了一個存儲字符串的LinkedList。然后,我們使用add()方法向列表中添加一些元素。接下來,我們展示了兩種不同的遍歷方式:使用傳統的for循環和增強的for循環。

最后,我們使用remove()方法刪除了列表中索引為2的元素(即"Charlie"),并打印出更新后的LinkedList。

這個簡單的案例演示了LinkedList的基本用法,包括創建、添加、遍歷和刪除元素。LinkedList通常在需要頻繁地在列表中進行插入和刪除操作時比較有用,因為它支持高效的插入和刪除操作。

ArrayList底層是數組

ArrayList的底層實現確實是一個數組(Array)。

ArrayList是基于數組實現的動態數組,它提供了自動擴容的功能,使得在添加或刪除元素時能夠高效地調整數組的大小。

當你創建一個ArrayList時,實際上是創建了一個對象,該對象內部包含了一個數組來存儲元素。當添加元素時,如果數組已滿,ArrayList會自動創建一個更大的數組,并將舊數組中的元素復制到新數組中,從而實現自動擴容。這種機制使得ArrayList能夠靈活地處理不同大小的數據集合。

盡管ArrayList的底層是數組,但它隱藏了數組的很多細節,提供了一組方便的方法來進行元素的添加、刪除、查找等操作。ArrayList還提供了動態調整數組大小的功能,使得開發人員無需手動管理數組的大小和內存分配。

由于底層是數組,ArrayList在進行插入和刪除操作時可能涉及元素的移動,這可能會影響性能。
在需要頻繁進行插入和刪除操作的場景中,可能需要考慮其他數據結構,如LinkedList,以獲得更好的性能。

LinkedList底層是鏈表

LinkedList的底層實現確實是一個鏈表(Linked List)。

LinkedList是一種雙向鏈表的數據結構,它由一系列的節點組成,每個節點包含了元素本身以及指向前一個節點和后一個節點的引用。

當你創建一個LinkedList時,實際上是創建了一個鏈表對象,該對象內部維護了鏈表的頭節點和尾節點以及其他必要的信息。在LinkedList中,添加和刪除元素的操作非常高效,因為只需要修改節點之間的引用關系,而不需要像數組那樣進行元素的移動。

LinkedList適用于需要頻繁在中間位置插入和刪除元素的場景,因為它的插入和刪除操作在平均情況下是O(1)的時間復雜度。然而,需要注意的是,由于每個節點都需要額外的內存空間來存儲引用,所以在內存使用方面可能會比ArrayList更高一些。

LinkedList的底層實現是一個雙向鏈表,它提供了高效的插入和刪除操作,適用于特定的使用場景。在選擇使用ArrayList還是LinkedList時,需要根據具體的需求和性能要求進行權衡。

ArrayList和LinkedList選型

在選擇使用ArrayList還是LinkedList時,需要根據你的具體需求和使用場景進行權衡。以下是ArrayList和LinkedList的一些特點和適用場景,可以幫助你做出選擇:

ArrayList:

  1. 隨機訪問效率高:ArrayList基于數組實現,因此支持隨機訪問(通過索引訪問元素)非常高效,時間復雜度為O(1)。

  2. 讀取操作效率高:對于頻繁讀取元素的場景,ArrayList通常比LinkedList更快,因為不涉及節點間的引用操作。

  3. 內存使用較少:由于不需要存儲額外的引用節點,ArrayList在內存使用上通常比LinkedList更少。

  4. 元素迭代效率高:對ArrayList進行迭代操作時(如使用增強的for循環),由于數據在內存中是連續存儲的,效率較高。

使用ArrayList進行頻繁的讀取操作和隨機訪問:

import java.util.ArrayList;
import java.util.List;public class ArrayListExample {public static void main(String[] args) {List<String> names = new ArrayList<>();names.add("Alice");names.add("Bob");names.add("Charlie");names.add("David");names.add("Eve");// 頻繁讀取和隨機訪問System.out.println("第二個名字:" + names.get(1));System.out.println("名字列表:" + names);}
}

在這兩個示例中,ArrayList適用于頻繁的讀取操作和隨機訪問,因為它可以通過索引高效地訪問元素。而LinkedList適用于頻繁的插入和刪除操作,因為它能夠高效地在列表中插入和刪除元素。

請注意,這只是簡單的示例,實際情況可能更加復雜。在選擇ArrayList還是LinkedList時,需要根據實際需求和數據操作的特點來權衡利弊。

LinkedList:

  1. 插入和刪除效率高:LinkedList在插入和刪除操作(尤其是在列表中間位置)上非常高效,時間復雜度為O(1)。這使得LinkedList在頻繁進行插入和刪除操作的場景中更有優勢。

  2. 內存分配靈活:由于LinkedList是基于鏈表實現的,它可以動態調整內存分配,不需要像ArrayList那樣提前指定容量。

  3. 迭代器操作效率高:在使用迭代器遍歷列表時,LinkedList由于直接操作節點引用,可以在某些情況下比ArrayList更快。

  4. 不適合隨機訪問:LinkedList的隨機訪問效率較低,因為需要通過節點引用逐個訪問,時間復雜度為O(n)。

使用LinkedList進行頻繁的插入和刪除操作:

import java.util.LinkedList;
import java.util.List;public class LinkedListExample {public static void main(String[] args) {List<String> names = new LinkedList<>();names.add("Alice");names.add("Bob");names.add("David");// 在第二個位置插入元素names.add(1, "Charlie");System.out.println("插入后的名字列表:" + names);// 刪除第一個元素names.remove(0);System.out.println("刪除后的名字列表:" + names);}
}

綜上所述,如果你需要頻繁進行隨機訪問、讀取操作或迭代操作,而且內存使用較為關鍵,那么ArrayList可能更適合。

如果你需要頻繁進行插入和刪除操作,或者希望內存分配更靈活,那么LinkedList可能更合適。

需要根據具體的場景和需求進行選擇,有時也可以結合使用不同的集合類來充分發揮各自的優勢。

ArrayList存放DOG對象

下面是一個簡單的示例代碼,展示了如何使用ArrayList存放四條狗(Dog對象):

import java.util.ArrayList;
import java.util.List;class Dog {private String name;public Dog(String name) {this.name = name;}public String getName() {return name;}@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +'}';}
}public class ArrayListDogExample {public static void main(String[] args) {// 創建一個存放Dog對象的ArrayListList<Dog> dogs = new ArrayList<>();// 添加四條狗dogs.add(new Dog("Buddy"));dogs.add(new Dog("Max"));dogs.add(new Dog("Charlie"));dogs.add(new Dog("Lucy"));// 遍歷并打印狗的名字System.out.println("存放的狗的名字:");for (Dog dog : dogs) {System.out.println(dog.getName());}}
}

在這個示例中,我們首先定義了一個簡單的Dog類,它具有一個name屬性和相關的構造方法和方法。
然后,我們創建了一個ArrayList來存放Dog對象,并向其中添加了四條狗。
最后,我們遍歷ArrayList,打印出每條狗的名字。
這個示例展示了如何使用ArrayList存放自定義對象,以后可以根據需要進行修改和擴展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35737.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jvm里的內存溢出

目錄 堆溢出 虛擬機棧和本地方法棧溢出&#xff08;棧溢出很少出現&#xff09; 方法區和運行時常量池溢出 本機內存直接溢出&#xff08;實際中很少出現、了解即可&#xff09; 堆溢出 堆溢出&#xff1a;最常見的是大list&#xff0c;list里面有很多元素 堆溢出該怎么解決…

ArcGIS入門操作手冊

一.ArcGIS安裝過程 參考本人博客&#xff1a;保姆級Arcgis安裝圖文安裝教程_追憶苔上雪的博客-CSDN博客 二.ArcGIS植被指數計算 (1)使用工具&#xff1a;柵格計算器 打開軟件&#xff0c;右側搜索柵格計算器打開&#xff0c;要是搜索欄不小心叉掉找不到了&#xff0c;可以通…

docker-desktop數據目錄遷移

1.退出docker-desktop后執行 wsl --list -v 如下 NAME STATE VERSION * docker-desktop Stopped 2docker-desktop-data Stopped 22.執行以下命令進行數據導出&#xff1a;&#xff08;需要等待命令執行完成&#xff09…

SpringCache的介紹和入門案例

文章目錄 概述常用注解入門案例 概述 Spring Cache是Spring框架提供的一個緩存抽象層&#xff0c;用于在應用程序中實現緩存的功能。它通過在方法執行前檢查緩存中是否已經存在所需數據&#xff0c;如果存在則直接返回緩存中的數據&#xff0c;如果不存在則執行方法體&#xf…

定義行業新標準?谷歌:折疊屏手機可承受20萬次折疊

根據Patreon賬戶上的消息&#xff0c;Android專家Mishaal Rahman透露&#xff0c;谷歌計劃推出新的硬件質量標準&#xff0c;以滿足可折疊手機市場的需求。Android原始設備制造商&#xff08;OEM&#xff09;將需要完成谷歌提供的問卷調查&#xff0c;并提交樣品設備進行嚴格審…

MySQL慢查詢日志常用參數配置

慢查詢日志 slow log&#xff1a;指query time減去lock time的時間&#xff0c;超過設置的閾值的查詢SQL。 常用配置 #通用配置需配置在mysqld標簽先&#xff0c;版本獨有配置在mysqld-version標簽下 [mysqld] #是否開啟慢日志,Type:Boolean Default Value:OFF slow_log0/1…

基于 JMeter API 開發性能測試平臺

目錄 背景&#xff1a; 常用的 JMeter 類和功能的解釋&#xff1a; JMeter 編寫性能測試腳本的大致流程示意圖&#xff1a; 源碼實現方式&#xff1a; (1) 環境初始化 (2) 環境初始化 (3) 創建測試計劃 (4) 創建 ThreadGroup (5) 創建循環控制器 (6) 創建 Sampler (…

【編碼魔法師系列_六大原則5】迪米特原則(Law of Demeter Principle)

學會設計模式&#xff0c;你就可以像擁有魔法一樣&#xff0c;在開發過程中解決一些復雜的問題。設計模式是由經驗豐富的開發者們&#xff08;GoF&#xff09;凝聚出來的最佳實踐&#xff0c;可以提高代碼的可讀性、可維護性和可重用性&#xff0c;從而讓我們的開發效率更高。通…

每日一題——旋轉數組的最小數字(II)

旋轉數組的最小數字——II 題目鏈接 注&#xff1a;此題是昨天旋轉數組的最小數字——I的拓展延伸&#xff0c;昨天題目數組的條件是不會存在重復元素&#xff0c;而本題數組的元素可以重復&#xff0c;因此建議先做前面一題&#xff0c;進行思考&#xff0c;這樣求解這一題的…

【單片機畢業設計3-基于stm32c8t6的智能家居系統】

【單片機畢業設計3-基于stm32c8t6的智能家居系統】 前言一、功能介紹二、硬件部分三、軟件部分總結 前言 &#x1f525;這里是小殷學長&#xff0c;單片機畢業設計篇3 基于stm32的智能家居控制系統 &#x1f9ff;創作不易&#xff0c;拒絕白嫖&#xff08;有需可點擊最后鏈接&a…

Python自動化測試框架:Pytest和Unittest的區別

pytest和unittest是Python中常用的兩種測試框架&#xff0c;它們都可以用來編寫和執行測試用例&#xff0c;但兩者在很多方面都有所不同。本文將從不同的角度來論述這些區別&#xff0c;以幫助大家更好地理解pytest和unittest。 1. 原理 pytest是基于Python的assert語句和Pytho…

consul安裝啟動流程

普通軟件包安裝 首先cd /opt &#xff0c;將安裝包放到該目錄下 下載consul安裝包 進入consul官網找到自己開發平臺對應的安裝包下載 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

vue3 table動態合并,自定義參數合并單元格

<template><div><el-table :data"tableData" :span-method"objectSpanMethod" border:header-cell-style"{ textAlign: center}"><el-table-column prop"area" label"區域" align"center"&g…

HW樣本《關于“XXXX”微信視頻號發布短視頻的信息說明.exe》的逆向分析

一、概述 樣本運行后會釋放《關于“XXXX”微信視頻號發布短視頻的信息說明.doc》并打開&#xff1b;同時釋放ncloud.exe惡意文件并啟動&#xff1b;調用cmd命令刪除樣本母體&#xff1b;其中ncloud.exe會從互聯網下載類似字母表的數據解密出CS木馬&#xff0c;在內存加載并運行…

《玩轉Python數據分析專欄》大綱

歡迎來到《玩轉Python數據分析分類專欄》&#xff01;在這個專欄中&#xff0c;我們將帶您深入探索數據分析的世界&#xff0c;以Python為工具&#xff0c;解析各個領域的實際應用場景。通過100篇教程&#xff0c;我們將逐步引領您從入門級到高級&#xff0c;從基礎知識到實戰技…

前端安全:探秘安全 HTTP 頭的設置

在當今數字化時代&#xff0c;前端安全至關重要。除了應對常見的攻擊方式外&#xff0c;通過設置安全 HTTP 頭&#xff0c;我們可以加強網站的安全性&#xff0c;減少潛在的威脅。本文將為您詳細解釋什么是安全 HTTP 頭&#xff0c;以及如何通過設置它們來保護您的前端應用。 1…

真就逮住23屆了使勁薅唄,24屆笑了

作者&#xff1a;阿秀 InterviewGuide大廠面試真題網站&#xff1a;https://top.interviewguide.cn 小伙伴們大家好&#xff0c;我是阿秀。 最近在朋友圈看到不少動態說"24屆明顯好轉"的消息&#xff0c;也收到不少私信問是不是24屆的相比于23屆好多了&#xff0c;更…

深度學習階段性回顧

本文針對過去兩周的深度學習理論做階段性回顧&#xff0c;學習資料來自吳恩達老師的2021版deeplearning.ai課程&#xff0c;內容涵蓋深度神經網絡改善一直到ML策略的章節。視頻鏈接如下&#xff1a;吳恩達深度學習視頻鏈接 &#xff08;注&#xff1a;本文出自深度學習初學者&a…

Vue中如何更好地封裝組件?

子組件接受父組件傳遞的事件 1.子組件使用事件名"$emit(父組件中傳遞的事件名,想給父組件傳遞的參數(可選))" click"$emit(click)" 2.子組件使用 v-on"$listeners" 父組件&#xff1a; <template><div id"app"><myCo…

MyBatis的XML映射文件

Mybatis的開發有兩種方式&#xff1a; 注解 XML配置文件 通過XML配置文件的形式來配置SQL語句&#xff0c;這份兒XML配置文件在MyBatis當中也稱為XML映射文件。 導學&#xff1a;在MyBatis當中如何來定義一份兒XML映射文件&#xff1f; 在MyBatis當中&#xff0c;定義XML…