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;
}
}
}
}
}