Java, Spring Framework, Oracle, MS SQL, Esper, bash scripting

Наибольший вклад в теги

Все теги (16)

Лучшие ответы пользователя

Все ответы (15)
  • Почему в php и java получаются разные md5?

    @bizon2000
    Java-программист
    Вот здесь: utf8_string.getBytes() не задана явно кодировка UTF-8, поэтому используется дефолтная кодировка платформы. Если нужно, чтобы PHP-скрипт выдавал такую же сумму, как java, задайте в нем соответствующую вашей платформе кодировку, в вашем случае это "ISO-8859-1"
    Ответ написан
    2 комментария
  • Записать условие, которое является истинным?

    @bizon2000
    Java-программист
    Рассмотрим выражение вида
    ((X + 1) % 5) * ((X + 2) % 5) * ((X + 3) % 5) * ((X + 4) % 5)

    Если X кратен 5, то значение выражения будет равно 1*2*3*4 = 24, иначе оно будет равно 0, т.к. один из сомножителей будет равен 0.
    Учитывая эти рассуждения решением будет следующее выражение
    (((X + 1) % 5) * ((X + 2) % 5) * ((X + 3) % 5) * ((X + 4) % 5) +
     ((Y + 1) % 5) * ((Y + 2) % 5) * ((Y + 3) % 5) * ((Y + 4) % 5) +
     ((Z + 1) % 5) * ((Z + 2) % 5) * ((Z + 3) % 5) * ((Z + 4) % 5)
    ) == 24

    Т.к. если все 3 значения не кратны 5, то сумма будет равна 0, если ровно одно значение будет кратно 5, то сумма будет равна 24, а если более, чем одно значение кратно 5, то сумма будет 48 или 72.
    Так что, как видите, достаточно одного оператора сравнения.

    PS: Ваше решение выдает неправильное значение в случае, если все три значения кратны 5.
    Ответ написан
    1 комментарий
  • Как выбрать из таблицы элементы, не содержащиеся во второй?

    @bizon2000
    Java-программист
    Для увеличения общей производительности надо заставить RDBMS использовать merge, а не hash join и не nested loop с использованием индекса.
    Для этого сливаем две таблицы
    SELECT id FROM x
    UNION ALL
    SELECT id FROM x
    UNION ALL
    SELECT x_id FROM y

    В этом наборе каждый id входит 1 раз (если он содержится в y и не содержится в x), 2 раза (если он содержится в x и не содержится в y) и 3 раза (если содержится в обеих таблицах).
    Затем группируем и выбираем те группы, которые содержат ровно две записи
    SELECT id
        FROM (SELECT id FROM x
              UNION ALL
              SELECT id FROM x
              UNION ALL
              SELECT x_id FROM y
             )
        GROUP BY id
        HAVING COUNT(*) = 2

    Такой запрос не требует индексов и будет очень эффективен даже на очень больших таблицах
    Разумеется, решение основано на предположении об уникальности id в таблице x, и уникальности x_id в таблице y. Если же id не уникален в таблице x, то надо выполнять
    SELECT DISTINCT id FROM x
    вместо
    SELECT id FROM x
    Это же касается таблицы колонки x_id колонки y
    Ответ написан
    Комментировать
  • Как сформировать уже повернутую матрицу из массива?

    @bizon2000
    Java-программист
    Формула для преобразования, изображенного на рисунке (т.е., не поворот на 90 градусов, а транспонирование):

    index = 1 + [i / m] + n * (i % m)

    В этой формуле индекс i меняется от 0 до size - 1 (size - размер массива), n - число столбцов (а после преобразования - строк), m - число строк (а после преобразования - столбцов), [i / m] - целая часть от деления i на m, i % m - остаток от деления i на m.

    Очевидно, что m = [ (size - 1) / n ] + 1

    При size = 12, n = 4 (соответственно, m = 3), получим следующую последовательность значений index:
    i     [i / 3]    4 * (i % 3)    index
    0:  1 +  0    +     4 * 0    =    1
    1:  1 +  0    +     4 * 1    =    5
    2:  1 +  0    +     4 * 2    =    9
    3:  1 +  1    +     4 * 0    =    2
    4:  1 +  1    +     4 * 1    =    6
    5:  1 +  1    +     4 * 2    =   10
    6:  1 +  2    +     4 * 0    =    3
    7:  1 +  2    +     4 * 1    =    7
    ...

    , т.е., как в примере работающего варианта
    Ответ написан
    Комментировать
  • Нужно улучшить sql запрос.?

    @bizon2000
    Java-программист
    SELECT g.gid, g.name, (SELECT COUNT(*) FROM groupmembers m WHERE m.gid = g.groupId) AS CoungGM
      FROM groups g, groupmembers gm
      WHERE gm.memberId = 1 AND g.gid = gm.groupId
    Ответ написан
    Комментировать