Ответы пользователя по тегу Программирование
  • Как помешать декомпилировать клиентскую программу?

    xappymah
    @xappymah
    Возможно, вам стоит посмотреть на проект Excelsior JET.

    Он позволяет статически скомпилировать Java-приложение из байткода в оптимизированный нативный (машинный) код.
    Иными словами, на входе подаете свое Java-приложение, на выходе получаете бинарник, как если бы вы скомпилировали бы какой-нибудь сишный код.
    При этом, для работы скомпилированного приложения уже не нужны class-файлы (за исключением некоторых случаев), таким образом декомпилировать уже нечего.
    Конечно, бинарник можно дизассемблировать и понять логику каких-нибудь локальных кусков, но восстановить из этого исходный код - это непосильная задача.

    Собственно, прямых ссылок не буду давать, чтобы совсем не наглеть, учитывая, что я один из инженеров, работающих над этим проектом :)
    Вместо этого дам ссылку на доклад моего коллеги на JavaZone на тему JET'а и AOT-компиляции Java-приложений в целом:
    https://vimeo.com/181905276
    Ответ написан
    Комментировать
  • Какую книгу по java купить для новичка?

    xappymah
    @xappymah
    В целом, на мой взгляд, чтобы вникнуть в основы языка при наличии минимального опыта программирования, подходят все трое (Эккель, Хортсмэн, Шилдт).

    Однако, если английский язык не проблема, то я бы рекомендовал в качестве рефернса также обратить на официальный онлайн туториал от Оракла:

    docs.oracle.com/javase/tutorial/

    И, конечно же, с определенного момента положить себе в закладки и Javadoc Java SE API:

    docs.oracle.com/javase/7/docs/api/
    Ответ написан
    Комментировать
  • Интерестная задачка, спортивное программирование, разобраться?

    xappymah
    @xappymah
    После размышления понял оптимальный способ умножения. Немного похоже на способ с логарифмами выше, но более точный (без плавающих запятых и прочего).

    Сначала посчитать примерный суммарный порядок числа, который получится после умножения, складывая количество цифр в каждом числе после самой первой (для 1000 -> 3, для 32132 -> 4. В сумме — 7).

    После этого сразу отсечется часть.
    Далее следует перемножить эти самые первые цифры и опять сравнить порядок.
    Если еще останется кто-то, то опять перемножать, но уже следующий разряд.

    И так далее.
    В худшем случае, конечно, получится полное перемножение, но это будет fallback :)
    Ответ написан
    Комментировать
  • Интерестная задачка, спортивное программирование, разобраться?

    xappymah
    @xappymah
    Могу предложить альтернативный вариант: быстрая сортировка всех столбцов по убыванию, а потом последовательное сравнение элементов. Соответственно, те столбцы, у которых в i-м ряду число меньше максимального для данного ряда, отпадают.
    Ответ написан