最常見的單例模式和冒泡算法

2024年2月6日 20点热度 0人点赞
  • 前言
  • 一. 冒泡算法:
  • 二.單例模式:
  • 結尾

前言

java中如果考算法,最基礎的是冒泡算法,必須手寫出來,設計模式的話就是單例模式,本文來講講這兩個知識點希望能幫助到正在面試的java後端開發。

一. 冒泡算法:

冒泡排序(Bubble Sort)確實是Java中最基礎的排序算法之一。它是簡單的排序算法,通過重復地遍歷待排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。遍歷數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。

以下是冒泡排序的Java實現:

 @Test
    public void testBubble() {
        int[] arrNum = new int[]{11, 9, 10, 2, 3, 1, 5, 6};
        handleBubbleSort(arrNum);
    }
    //處理冒泡排序
    private void handleBubbleSort(int[] arrNum) {
        int len = arrNum.length;
        if (len < 1) {
            return;
        }
        for (int i = 0; i < len - 1; i  ) {
            for (int j = 0; j < len - 1 - i; j  ) {
                if (arrNum[j   1] < arrNum[j]) {
                    //進行交換
                    int temp = arrNum[j   1];
                    arrNum[j   1] = arrNum[j];
                    arrNum[j] = temp;
                }
            }
        }
        for (int num : arrNum) {
            System.out.println(num);
        }
        return;
    }

需要註意的是,盡管冒泡排序在理論上是可行的,但在實際應用中,由於其效率低下,通常會被更高效的排序算法(如快速排序、歸並排序或堆排序)所取代。

二.單例模式:

在 Java 面試中,單例模式(Singleton Pattern)常常被用來討論 volatile 和 synchronized 關鍵字的原因有以下幾點:

理解難度:單例模式是 Java 編程中一個常見的模式,而且由於其實現方式和線程安全問題,它是一個很好的工具來考察面試者對並發編程的理解 。 多線程中的問題:單例模式在多線程環境下很容易出現線程安全問題,例如雙重檢查鎖定(Double-Checked Locking)問題。正確地使用 volatile 和 synchronized 可以解決這個問題。

實際應用:在實際的 Java 應用中,許多類庫和框架都使用了單例模式,例如 Java 的 java.lang.Runtime 類。因此,理解如何正確地實現和保證單例模式的線程安全是非常重要的。

深入探討:通過單例模式來討論 volatile 和 synchronized 可以深入探討這兩個關鍵字的工作原理和使用場景。例如,volatile 關鍵字可以保證變量的可見性和有序性,而 synchronized 關鍵字則提供了更強的線程同步機制。

考察設計能力:單例模式是一種設計模式,正確地實現單例模式不僅需要理解並發編程,還需要考慮如何在不同的場景下設計出符合要求的單例實現。

以下是代碼實現:

public class Singleton {
    private static volatile Singleton singleton;
    public Singleton() {
        System.out.println("對象初始化");
    }
    //獲取單例對象
    //雙重檢測
    public static Singleton findSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
    public static void main(String[] args) {
        Singleton.findSingleton();
    }
}

綜上所述,由於單例模式的特性和其在並發編程中的重要性,它常常被用來在 Java 面試中討論 volatile 和 synchronized 這兩個關鍵字的用法和作用。

結尾

上面就是我理解的基礎的單例模式和冒泡算法,希望能幫助大傢理解好這兩個知識點,也希望能幫助到正在找工作的java同僚。如果有問題,歡迎隨時交流。#精品長文創作季#

#精品長文創作季#