Java 7新特性深度解析:提升效率與功能

在這里插入圖片描述

文章目錄

  • Java 7新特性深度解析:提升效率與功能
    • 一、Switch中添加對String類型的支持
    • 二、數字字面量的改進
    • 三、異常處理(捕獲多個異常)
    • 四、增強泛型推斷
    • 五、NIO2.0(AIO)新IO的支持
    • 六、SR292與InvokeDynamic
    • 七、Path接口
    • 八、fork/join計算框架

Java 7新特性深度解析:提升效率與功能

一、Switch中添加對String類型的支持

Switch語句可以使用原始類型或枚舉類型。

Java引入了另一種類型,可以在switch語句中使用:字符串類型。

public class switchAddString {public static void main(String[] args) {String s = "a";switch (s) {case "a":System.out.println("a");break; case "b":System.out.println("b");break;default:System.out.println("default");}}
}

編譯器在編譯時的處理情形

  1. 僅有一個casedefault,則直接轉換為if…else…
  2. 有多個case。先將String轉換為hashCode,然后相應的進行處理。

二、數字字面量的改進

  1. 數字中可加入分隔符
    • Java7中支持在數字量中間添加’_’作為分隔符。
    • 下劃線僅僅能在數字中間。
    • 編譯時編譯器自己主動刪除數字中的下劃線。
  2. Java7添加二進制表示。
public static void main(String[] args) {int i = 10;System.out.println("i=" + i);// 二進制int j = 0b1010;// 十六進制int k = 0x1234;// 1,000,000int l = 1_000_000;// 1,000,000int m = 1__000_000;System.out.println("j=" + j);System.out.println("k=" + k);System.out.println("l=" + l);System.out.println("m=" + m);}

三、異常處理(捕獲多個異常)

  1. catch子句能夠同一時候捕獲多個異常
    • 使用’|'切割,多個類型,一個對象e 。
  2. try-with-resources語句
    • Java7之前須要在finally中關閉socket、文件、數據庫連接等資源。
    • Java7引入try-with-resources,用于確保資源在使用后能夠正確地關閉。
    • 在使用try-with-resources時,你可以在 try 關鍵字后面的括號中聲明一個或多個資源。
    • 這些資源必須實現 AutoCloseable 接口(Java 7引入的接口,它具有一個 close() 方法用于釋放資源)。
public static void main(String[] args) {// 捕獲多個異常try {int a = 10;int b = 0;System.out.println("a/b=" + (a / b));} catch (ArithmeticException | NullPointerException e) {e.printStackTrace();}// try-with-resources,在 try 關鍵字后面的括號中聲明一個或多個資源,每個資源用逗號分隔String fileName = "example.txt";try (// 使用try-with-resources聲明BufferedReader資源BufferedReader reader = new BufferedReader(new FileReader(fileName));// 需要聲明多個資源,我們只需在括號中用逗號分隔BufferedReader reader1 = new BufferedReader(new FileReader("file1.txt"));BufferedReader reader2 = new BufferedReader(new FileReader("file2.txt"))) {// 讀取文件內容String line;while ((line = reader.readLine()) != null) {System.out.println(line);}// 這里不需要顯式調用reader.close(),因為try-with-resources會自動處理} catch (IOException e) {// 處理可能發生的IOExceptione.printStackTrace();}// 在try代碼塊執行完畢后,reader會被自動關閉}

四、增強泛型推斷

  1. 菱形操作符
    • 在實例化泛型類時,可以使用菱形操作符 <> 來省略類型參數。
    • 編譯器會根據上下文推斷類型參數。
    • 簡化代碼,減少冗余,提高代碼的可讀性。
  2. 泛型實例化類型推斷
    • 當泛型類的構造函數的參數包含泛型類型時,Java 7 能夠推斷泛型的類型。
    • 這允許你在實例化泛型類時省略類型參數,只在構造函數參數中指定類型即可。
public static void main(String[] args) {// Java7之前ArrayList<String> arrayList = new ArrayList<String>();// Java7之后ArrayList<String> arrayList2 = new ArrayList<>();// 泛型類class Generic<T> {// 構造函數參數為泛型類型public Generic(T t) {}}// 使用泛型實例化類型推斷Generic<String> generic = new Generic<>("abc");}

五、NIO2.0(AIO)新IO的支持

Java 7 引入了 NIO 2.0(New I/O),其中包含對異步 I/O(AIO)的支持,這是一個顯著的新特性,特別是在處理非阻塞 I/O 操作時非常有用。具體來說,NIO 2.0 的 AIO 支持通過引入 AsynchronousFileChannel 類來實現異步文件 I/O 操作。

  1. AsynchronousFileChannel 類:
    • 允許進行異步文件讀取和寫入操作。
    • 相比于傳統的阻塞 I/O,異步 I/O 可以在讀寫數據的同時執行其他操作,從而提高系統的效率和性能。
public static void main(String[] args) throws Exception {// 異步讀取文件Path path = Paths.get("file.txt");AsynchronousFileChannel fileChannel = AsynchronousFileChannel.open(path, StandardOpenOption.READ);// 分配緩沖區ByteBuffer buffer = ByteBuffer.allocate(1024);// 讀取文件long position = 0;// 異步讀取數據,用于檢查讀取操作的狀態和獲取讀取的結果Future<Integer> operation = fileChannel.read(buffer, position);while (!operation.isDone()) {// 等待讀取完成Thread.sleep(1000);}// 讀取完成,將緩沖區數據翻轉buffer.flip();// 讀取數據byte[] data = new byte[buffer.limit()];// 將緩沖區數據復制到data中buffer.get(data);System.out.println(new String(data));// 關閉文件fileChannel.close();}
  1. AsynchronousServerSocketChannel 和 AsynchronousSocketChannel:
    • 用于支持異步的網絡編程。
    • 這些類允許你創建異步服務器端和客戶端,并進行異步的網絡數據讀取和寫入操作。
    • 在高并發環境下處理 I/O 操作變得更為高效和靈活。
public static void main(String[] args) throws Exception {// 創建異步通道AsynchronousServerSocketChannel serverChannel =AsynchronousServerSocketChannel.open().bind(new InetSocketAddress(8080));// 接受連接serverChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {/*** 接受連接完成時調用此方法。* @param clientChannel* @param attachment*/@Overridepublic void completed(AsynchronousSocketChannel clientChannel, Void attachment) {// 繼續接受連接serverChannel.accept(null, this);// 讀取數據ByteBuffer buffer = ByteBuffer.allocate(1024);// 異步讀取數據clientChannel.read(buffer, buffer, new CompletionHandler<Integer, ByteBuffer>() {/*** 當讀取操作完成時調用此方法。** @param result 讀取操作的結果,通常為讀取的字節數,但在此處未使用* @param attachment 包含讀取數據的ByteBuffer對象*/@Overridepublic void completed(Integer result, ByteBuffer attachment) {// 處理讀取完成attachment.flip();// 讀取數據byte[] data = new byte[attachment.limit()];// 將數據復制到數組中attachment.get(data);System.out.println(new String(data));}/*** 讀取操作失敗時調用此方法。* @param exc* @param attachment*/@Overridepublic void failed(Throwable exc, ByteBuffer attachment) {// 處理讀取失敗}});}/*** 接受連接失敗時調用此方法。* @param exc* @param attachment*/@Overridepublic void failed(Throwable exc, Void attachment) {// 處理接受連接失敗}});// 程序繼續執行其他操作Thread.sleep(Long.MAX_VALUE);}

六、SR292與InvokeDynamic

  1. SR-292(Small Ranges):
    • SR-292 是 Java 7 中引入的一個改進,主要針對 switch 語句的性能優化。
    • 在早期的 Java 版本中,switch 語句的效率問題在于它通過逐個比較每個 case 條件來確定執行的分支,如果分支很多,這個過程可能會很慢。
    • SR-292 引入了一種優化,即當 switch 語句的 case 常量之間的距離非常小(稱為 “small ranges”),Java 編譯器會使用一種更有效的查找方式,而不是簡單的逐個比較。
    • 這種方式可以顯著提高 switch 語句的執行速度,特別是在處理密集的條件分支時。
public static void main(String[] args) {int month = 3;String monthName;// Java 7 的 SR-292 特性可以在一些情況下優化這樣的 switch 語句,尤其是在 case 常量的范圍較小時switch (month) {case 1:monthName = "January";break;case 2:monthName = "February";break;case 3:monthName = "March";break;case 4:monthName = "April";break;case 5:monthName = "May";break;case 6:monthName = "June";break;default:monthName = "Unknown";break;}System.out.println("Month: " + monthName);}
  1. InvokeDynamic(動態方法調用):
    • InvokeDynamicJava 7 引入的另一個重要特性,它是 Java 虛擬機(JVM)層面的改進,旨在支持更靈活和高效的動態語言實現。
    • 允許 Java 代碼中的方法調用在運行時動態解析,并且可以綁定到相應的方法實現。
    • 用來優化字節碼生成和方法調用的性能。
    • Java 8Lambda 表達式依賴于 InvokeDynamic 來生成相應的字節碼。
public static void main(String[] args) throws Throwable {// 創建動態調用MethodHandles.Lookup lookup = MethodHandles.lookup();// 創建方法句柄,使用lookup對象來查找Math.class中的靜態方法sqrt,該方法接受一個double參數并返回一個dou* 第一個參數是`lookup`對象。MethodHandle mh = lookup.findStatic(Math.class, "sqrt",MethodType.methodType(double.class, double.class));// 創建動態調用// 第一個參數是`lookup`對象// 第二個參數是方法名,這里使用`"apply"`,因為它是`Function`接口中唯一的方法。// 第三個參數是`Function`接口的簽名(即`Function.class`的類型)。// 第四個參數是`mh`的泛型類型簽名。// 第五個參數是我們要調用的方法句柄(即`mh`)。// 第六個參數是`mh`的類型簽名,表示我們要調用的方法的實際類型。CallSite sqrt = LambdaMetafactory.metafactory(lookup, "apply",MethodType.methodType(Function.class),mh.type().generic(),mh,mh.type());// 調用動態調用MethodHandle factory = sqrt.getTarget();// 調用工廠方法,得到一個Function對象,使用了強制類型轉換,因為factory.invoke()返回的是一個ObjectFunction<Double, Double> sqrtFunc = (Function<Double, Double>) factory.invoke();double result = sqrtFunc.apply(16.0);System.out.println("Square root of 16: " + result);}

七、Path接口

在 Java 7 之前,通常使用 java.io.File 類來處理文件路徑,Java 7 引入了 java.nio.file.Path 接口,它是 Java 中操作文件和目錄路徑的抽象表示。 Path 接口提供了更多功能和更強大的操作能力。

Path 接口的一些主要特性和用法

  1. 路徑表示

    • Path 接口可以表示文件系統中的路徑,可以是文件或目錄。它不僅僅是一個字符串,而是一個真正的對象,提供了豐富的方法來操作路徑。
  2. 創建路徑

    • 可以使用Paths 類的靜態方法來創建 Path 對象

      Path path = Paths.get("/path/to/file.txt");
      
  3. 路徑操作

    • Path 接口提供了多種方法來獲取路徑的信息
      • toString():將路徑轉換為字符串表示。
      • getFileName():獲取路徑中的文件名部分。
      • getParent():獲取路徑中的父路徑。
      • getRoot():獲取路徑的根部分。
      • getNameCount():獲取路徑中的名稱元素的數量。
      • subpath(int beginIndex, int endIndex):獲取指定范圍內的子路徑。
  4. 路徑解析

    • resolve() 方法可以用于解析相對路徑或者連接兩個路徑,返回一個新的路徑對象。
  5. 檢查路徑屬性

    • 可以使用 Files 類的靜態方法來檢查文件或目錄的屬性,例如是否存在、是否可讀、是否可寫等。
  6. 文件操作

    • Files 類結合 Path 接口提供了豐富的文件操作功能,包括讀取文件內容、寫入文件、復制、移動、刪除等。
  7. 路徑迭代

    • Path接口支持迭代,可以方便地遍歷路徑的各個部分。

      for (Path element : path) {System.out.println(element);
      }
      
  8. 相對路徑和絕對路徑

    • Path 接口可以表示相對路徑和絕對路徑,并提供了方法來轉換和處理這兩種路徑。
public static void main(String[] args) {// 創建一個 Path 對象Path path = Paths.get("/path/to/file.txt");// 獲取文件名Path fileName = path.getFileName();System.out.println("File Name: " + fileName);// 獲取父路徑Path parent = path.getParent();System.out.println("Parent Path: " + parent);// 獲取路徑的根部分Path root = path.getRoot();System.out.println("Root of the path: " + root);// 獲取路徑的元素數量int nameCount = path.getNameCount();System.out.println("Number of elements in the path: " + nameCount);// 遍歷路徑的每個元素System.out.println("Elements in the path:");for (int i = 0; i < nameCount; i++) {System.out.println("Element " + i + ": " + path.getName(i));}// 路徑解析示例Path resolvedPath = path.resolve("subdir");System.out.println("Resolved Path: " + resolvedPath);// 檢查文件或目錄的屬性// 判斷文件是否存在boolean exists = Files.exists(path);System.out.println("Exists: " + exists);// 判斷文件是否是目錄boolean isReadable = Files.isReadable(path);System.out.println("Readable: " + isReadable);// 判斷文件是否是可寫boolean isWritable = Files.isWritable(path);System.out.println("Writable: " + isWritable);// 讀取文件內容Path filePath = Paths.get("/path/to/file.txt");List<String> lines = null;try {lines = Files.readAllLines(filePath, StandardCharsets.UTF_8);} catch (IOException e) {throw new RuntimeException(e);}for (String line : lines) {System.out.println(line);}// 寫入文件內容Path newFilePath = Paths.get("/path/to/newfile.txt");String content = "Hello, Java 7!";try {Files.write(newFilePath, content.getBytes());} catch (IOException e) {throw new RuntimeException(e);}// 復制文件Path copiedFilePath = Paths.get("/path/to/copiedfile.txt");try {Files.copy(filePath, copiedFilePath, StandardCopyOption.REPLACE_EXISTING);} catch (IOException e) {throw new RuntimeException(e);}// 移動文件Path targetPath = Paths.get("/path/to/targetdir/movedfile.txt");try {Files.move(filePath, targetPath, StandardCopyOption.REPLACE_EXISTING);} catch (IOException e) {throw new RuntimeException(e);}// 刪除文件try {Files.delete(filePath);} catch (IOException e) {throw new RuntimeException(e);}}

八、fork/join計算框架

Java 7 引入了 Fork/Join 框架,是一種并行計算框架,專門用于解決分而治之的問題。主要用于執行遞歸式地將問題劃分為更小子問題,并行執行這些子問題的計算,然后合并結果的任務。

使用 Fork/Join 框架的基本步驟:

  1. 定義任務類 (RecursiveTaskRecursiveAction):
    • RecursiveTask: 用于有返回值的任務。
    • RecursiveAction: 用于無返回值的任務。
  2. 重寫 compute() 方法:
    • 在任務類中,需要實現 compute() 方法來定義任務的具體執行邏輯。
    • 通常會判斷是否需要進一步拆分任務,執行子任務的計算,最終將子任務的結果合并或處理。
  3. 創建 Fork/Join 池:
    • 使用 ForkJoinPool 類來管理并發執行的任務。
    • 通常可以通過 ForkJoinPool.commonPool() 方法來獲取默認的線程池,也可以根據需要創建自定義的線程池。
  4. 提交任務:
    • 將任務提交給 ForkJoinPool 來執行。

使用 Fork/Join 框架來計算數組的總和Demo

import java.util.concurrent.*;// 繼承 RecursiveTask 來實現有返回值的任務
class SumTask extends RecursiveTask<Long> {// 閾值,控制任務拆分的粒度private static final int THRESHOLD = 10;private int[] array;private int start;private int end;public SumTask(int[] array, int start, int end) {this.array = array;this.start = start;this.end = end;}@Overrideprotected Long compute() {if (end - start <= THRESHOLD) {// 如果任務足夠小,直接計算結果long sum = 0;for (int i = start; i < end; i++) {sum += array[i];}return sum;} else {// 否則,拆分任務為更小的子任務int mid = (start + end) / 2;SumTask leftTask = new SumTask(array, start, mid);SumTask rightTask = new SumTask(array, mid, end);// 異步執行左邊的子任務leftTask.fork();// 同步執行右邊的子任務long rightResult = rightTask.compute(); // 獲取左邊子任務的結果long leftResult = leftTask.join(); // 合并子任務的結果return leftResult + rightResult;}}
}public class ForkJoinDemo {public static void main(String[] args) {int[] array = new int[100];for (int i = 0; i < array.length; i++) {array[i] = i;}// 創建 Fork/Join 線程池ForkJoinPool forkJoinPool = ForkJoinPool.commonPool();// 創建任務并提交給 Fork/Join 線程池SumTask task = new SumTask(array, 0, array.length);long result = forkJoinPool.invoke(task);// 輸出計算結果System.out.println("Sum: " + result);}
}

如果你累了,學會休息,而不是放棄

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

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

相關文章

64.ThreadLocal造成的內存泄漏

內存泄漏 程序中已動態分配的堆內存,由于某種原因程序為釋放和無法釋放,造成系統內存的浪費,導致程序運行速度減慢甚至系統崩潰等嚴重后果。內存泄漏的堆積終將導致內存溢出。 內存溢出 沒有足夠的內存提供申請者使用。 ThreadLocal出現內存泄漏的真實原因 內存泄漏的發…

Java中的多線程與并發編程詳解

Java中的多線程與并發編程詳解 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在當今軟件開發中&#xff0c;利用多核處理器的能力并行執行任務已成為提高應用…

Transformer拆積木

文章目錄 ConceptsEmbeddingEncoderDecoderSelf-Attention matric calculationFinal Linear and Softmax LayerLoss function 參考 學一下已經問鼎中原七年之久的Transformer Concepts 開始拆積木&#xff01; Embedding Encoder Decoder Self-Attention matric calculati…

【文檔+源碼+調試講解】科研經費管理系統

目 錄 目 錄 摘 要 ABSTRACT 1 緒論 1.1 課題背景 1.2 研究現狀 1.3 研究內容 2 系統開發環境 2.1 vue技術 2.2 JAVA技術 2.3 MYSQL數據庫 2.4 B/S結構 2.5 SSM框架技術 3 系統分析 3.1 可行性分析 3.1.1 技術可行性 3.1.2 操作可行性 3.1.3 經濟可行性 3.1…

解析服務器地址異常的原因和解決方法

在網絡利用開發和運維進程中&#xff0c;解析服務器地址異常是常見的問題之一。特別是在觸及到跨境業務和國際網絡傳輸時&#xff0c;由于網絡環境的復雜性&#xff0c;解析服務器地址異常可能會致使用戶沒法正常訪問網站或利用程序。 解析服務器地址異常可能由多種緣由引發&am…

虛擬機的網絡配置

&#x1f4d1;打牌 &#xff1a; da pai ge的個人主頁 &#x1f324;?個人專欄 &#xff1a; da pai ge的博客專欄 ?? 每一步都向著夢想靠近&#xff0c;堅持就是勝利的序曲 一 …

手機系統設置選項

通用設置選項 1. 忽略電池優化選項 參考 https://blog.csdn.net/dodod2012/article/details/132045963 <uses-permission android:name"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>public static boolean isIgnoreBatteryOption(Context c…

俄羅斯ozon運費計算工具,跨境電商ozon物流運費計算工具

OZON平臺服裝類目賣家而言&#xff0c;如何快速、準確地為產品定價&#xff0c;并有效管理運費成本&#xff0c;直接關系到市場競爭力與利潤空間。接下來我們看看俄羅斯ozon運費計算工具&#xff0c;跨境電商ozon物流運費計算工具。 萌啦Ozon定價工具&#xff1a;智能模擬&…

Cesium----加載SuperMap的S3M地形

在原生Cesium中加載S3M地形&#xff0c;需要用到Supermap發布的一個插件&#xff1a;iClient3D-for-WebGL&#xff0c; 在vite vure3&#xff0c;cesium 1.119中進行了實現&#xff0c;注意的點在于需要把SuperMap3D 放置在cesium的Build路徑下 然后在代碼中直接調用SuperMap3…

windows重裝系統

一、下載Ventoy工具&#xff0c;制作啟動盤 官網地址&#xff1a;https://www.ventoy.net/cn/download.html 電腦插入用來制作系統盤的U盤&#xff0c;建議大小在8G以上。 雙擊打開剛解壓出來的Ventoy2Disk.exe文件。打開界面如圖&#xff1a; 確認U盤&#xff0c;如圖&am…

【HICE】基于httpd下的web服務器搭建

1.下載httpd&#xff1a; dnf install httpd -y 2.進入httpd中&#xff1a; cd /etc/httpd cd conf.d 3.編輯一個新的vhost.conf 4.重啟httpd服務 systemctl restart httpd 5.關閉防火墻 systemctl stop firewalld setenforce 0 6.文本寫入&#xff08;網頁編輯&…

8年經驗之談!自動化測試框架該如何搭建?

前言 最近好多小伙伴都在說接口自動化測試&#xff0c;那么究竟什么是接口自動化測試呢&#xff1f;讓我們一起往下看就知道了&#xff0c;首先我們得先弄清楚下面這個問題。 為什么要做&#xff08;自動化&#xff09;接口測試&#xff1f; 1、由于現在各個系統的復雜度不斷…

springboot的MultipartFile轉File讀取

在Spring Boot中&#xff0c;處理文件上傳時&#xff0c;MultipartFile接口被用來封裝上傳的文件信息。 如果需要將MultipartFile轉換為Java標準的File對象進行讀取。 以下是具體的操作流程&#xff1a; 1. 創建臨時文件 首先&#xff0c;需要將接收到的MultipartFile對象轉…

準化 | 水系統碳中和標準體系初見成效

2024年5月31日&#xff0c;中華環保聯合會發布《團體標準公告 2024年第10號&#xff08;總第78號&#xff09;》&#xff0c;批準發布了由中華環保聯合會提出并歸口的《廢水處理溫室氣體監測技術規程》(T/ACEF 142-2024)、《工業水系統碳排放核算方法與報告指南》(T/ACEF143-20…

yarn不同操作系統的安裝與配置

Yarn 是一個快速、可靠且安全的依賴包管理工具&#xff0c;用于替代 npm。以下是在不同操作系統上安裝和配置 Yarn 的步驟。 1. 安裝 Node.js 在安裝 Yarn 之前&#xff0c;請確保已經安裝了 Node.js&#xff0c;因為 Yarn 需要 Node.js 環境。你可以在 Node.js — Run JavaSc…

昇思25天學習打卡營第十五天|基于MobileNetv2的垃圾分類

基于MobileNetv2的垃圾分類 MobileNetv2模型原理介紹 MobileNet網絡是由Google團隊于2017年提出的專注于移動端、嵌入式或IoT設備的輕量級CNN網絡&#xff0c;相比于傳統的卷積神經網絡&#xff0c;MobileNet網絡使用深度可分離卷積&#xff08;Depthwise Separable Convolut…

Zabbix 6.0 案例

自定義監控內容 案列&#xff1a;自定義監控客戶端服務器登錄的人數 需求&#xff1a;限制登錄人數不超過 3 個&#xff0c;超過 3 個就發出報警信息 1.在客戶端創建自定義 key 明確需要執行的 linux 命令 who | wc -l 2.在被監控主機的配置文件目錄中&#xff08;/etc/za…

港大推出XRec:「會說話」的推薦系統大模型, 從黑盒預測到可解釋

代碼鏈接: https://github.com/HKUDS/XRec 論文鏈接: https://arxiv.org/pdf/2406.02377 實驗室鏈接: https://sites.google.com/view/chaoh 最近,香港大學數據智能實驗室推出了一款名為 XRec 的全新智能大模型,旨在為傳統推薦系統注入可解釋性的新動力。XRec 利用大語言模型…

PyTorch入門筆記

學習參考&#xff1a; PyTorch簡單入門視頻 深入淺出PyTorch 小土堆筆記 前置知識 AI vs ML vs DL AI&#xff08;Artificial Intelligence&#xff09;&#xff1a;通過讓機器模仿人類進而超越人類ML&#xff08;Machine Learning&#xff09;&#xff1a;讓機器模仿人類的一…

【AI原理解析】—支持向量機原理

目錄 1. 支持向量機&#xff08;SVM&#xff09;概述 2. 超平面與支持向量 3. 間隔最大化 4. 優化問題 5. 核函數 6. 總結 1. 支持向量機&#xff08;SVM&#xff09;概述 定義&#xff1a;支持向量機是一種監督學習模型&#xff0c;主要用于數據分類問題。其基本思想是…