UML 定義了多種圖形化的符號來描述軟件系統部分或全部的靜態結構和動態結
構,包括:用例圖(use case diagram)、類圖(class diagram)、時序圖(sequence
diagram)、協作圖(collaboration diagram)、狀態圖(statechart diagram)、
活動圖(activity diagram)、構件圖(component diagram)、部署圖(deployment
diagram)等。在這些圖形化符號中,有三種圖最為重要,分別是:用例圖(用來
捕獲需求,描述系統的功能,通過該圖可以迅速的了解系統的功能模塊及其關系)、
類圖(描述類以及類與類之間的關系,通過該圖可以快速了解系統)、時序圖(描
述執行特定任務時對象之間的交互關系以及執行順序,通過該圖可以了解對象能
接收的消息也就是說對象能夠向外界提供的服務)。
時序圖:
用 Java 寫一個冒泡排序。
答:
冒泡排序幾乎是個程序員都寫得出來,但是面試的時候如何寫一個逼格高的冒泡
排序卻不是每個人都能做到,下面提供一個參考代碼:
import java.util.Comparator;
/**
* 排序器接口(策略模式: 將算法封裝到具有共同接口的獨立的類中使得它們可
以相互替換)
* @author 駱昊
*
*/
public interface Sorter {
/**
* 排序
第 322 頁 共 485 頁* @param list 待排序的數組
*/
public <T extends Comparable<T>> void sort(T[] list);
/**
* 排序
* @param list 待排序的數組
* @param comp 比較兩個對象的比較器
*/
public <T> void sort(T[] list, Comparator<T> comp);
}
import java.util.Comparator;
/**
* 冒泡排序
*
* @author 駱昊
*
*/
public class BubbleSorter implements Sorter {
@Override
public <T extends Comparable<T>> void sort(T[] list) {
boolean swapped = true;
for (int i = 1, len = list.length; i < len && swapped; ++i) {
swapped = false;
for (int j = 0; j < len - i; ++j) {
if (list[j].compareTo(list[j + 1]) > 0) {
T temp = list[j];
list[j] = list[j + 1];
第 323 頁 共 485 頁list[j + 1] = temp;
swapped = true;
}
}
}
}
@Override
public <T> void sort(T[] list, Comparator<T> comp) {
boolean swapped = true;
for (int i = 1, len = list.length; i < len && swapped; ++i) {
swapped = false;
for (int j = 0; j < len - i; ++j) {
if (comp.compare(list[j], list[j + 1]) > 0) {
T temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
swapped = true;
}
}
}
}
}
