четверг, 15 декабря 2011 г.

Quartz + Spring

В больших проекта часто бывает необходимо выполнять какой-то участок кода по расписанию. Для этого подойдет популярная библиотека Quarz.
Рассмотрим, как можно интегрировать Quartz (1.x) в Spring.

Для начала подхватим зависимость в maven:

    org.quartz-scheduler
    quartz
    1.8.5   


Создадим бин, отвечающий за выполнение задачи:
@Component
public class SomeWorkBean implements InitializingBean, DisposableBean {
    @Override
    public void afterPropertiesSet() {
    }

    public void doWork() {
        System.out.println("doing some work");
    }

    @Override
    public void destroy() throws Exception {
    }
}

теперь можно конфигурировать Spring:
   





    
    



    
       
      



    
        
            
        
    
    
        
            
        
    


где workJob - обьявление JobDetailBean,
simpleTrigger - триггер, обьявляющий критерии выполнения кода в SomeWorkBean,
schedulerFactoryBean - фабрика для создания шедьюлера

Все, теперь метод SomeWorkBean.doWork() будет выполняться каждую минуту. Для более гибкого задание расписания, можно использовать другие триггеры, например CronTrigger

четверг, 1 декабря 2011 г.

Алгоритмы сортировки

Сортировки сравнением (Comparison sorts)


Сортировки сравнением имеют минимальную сложность O(n*lg n).

Сортировка вставками (Insert sort)


Сложность: O(n2)

На каждом шаге алгоритма выбираем очередной элемент входных данных и сдвигаем его влево до тех пор, пока слева от него не останутся элементы, меньшие чем он. Метод выбора очередного элемента из исходного массива произволен; может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), элементы выбираются по порядку их появления во входном массиве.

Преимущества: практически не требует выделения памяти (всего O(1)); алгоритм эффективен при малом размере входного массива.

Недостатки: неэффективен на большом размере входного массива (более 100).

Алгоритм:
Вход: массив A, состоящий из элементов A[1], A[2], ..., A[n]

for i = 2, 3, ..., n:  
    key = A[i]
    j = i - 1
    while j > 0 and A[j] > key:
        A[j + 1] = A[j]
        j = j - 1
    A[j + 1] = key

Реализация на Java:
//insertion sort
public static void insertionSort(int[] arr) {
    int i, j, tmp;
    //двигаемся вперед по массиву
    for (i = 1; i < arr.length; i++) {
        j = i;
        //двигаем элемент назад, пока он больше предыдущих
        while (j > 0 && arr[j - 1] > arr[j]) {
            tmp = arr[j];
            arr[j] = arr[j - 1];
            arr[j - 1] = tmp;
            j--;
        }
    }
}