Как стать автором
Обновить
-15
0.5

Пользователь

Отправить сообщение

Пошаговая отладка, inline-методы, JVM

Время на прочтение6 мин
Количество просмотров2.6K


В Java, как известно, inline-методов нет. Но такое понятие существует в других языках, исполняющихся на JVM. Например, в Scala или Kotlin. Во время компиляции вызов такого метода заменяется на его тело, как если бы разработчик написал этот код вручную.

Прекрасный инструмент для добавления синтаксического сахара и создания проблемно-ориентированных языков (DSL) малой ценой, но как это всё отлаживать?

С тем, какие ухищрения помогают не замечать расхождения исходного текста программы и её байткода во время отладки и предлагаю разобраться.
Читать дальше →
Всего голосов 4: ↑3 и ↓1+2
Комментарии4

Атака на String.hashCode: прообразы и коллизии

Время на прочтение8 мин
Количество просмотров12K
Дюк прощупывает сезон Java

Как-то раз мне понадобилось несколько наборов строк с коллизией по хеш-коду. То есть таких, чтобы значение String::hashCode() совпадало для всех строк в наборе.

Блуждание по интернету не дало результатов, примеров было мало и все они довольно однообразны. Поиск по словарям подарил забавную пару "javascript's".hashCode() == "monocle".hashCode(), но практической пользы не принёс. Полный перебор не рассматривался в виду скорой тепловой смерти вселенной.

Тот самый случай, когда проще сделать всё самому. Стандартная хеш-функция строки в Java считается криптографически нестойкой, так что знаний из школьного курса математики должно быть достаточно.

Читать дальше →
Всего голосов 62: ↑62 и ↓0+62
Комментарии23

Сюрпризы конкатенации

Время на прочтение5 мин
Количество просмотров7.6K

Вопрос в стиле головоломок с offline-конференций: Что выведет этот код при запуске?


import java.util.concurrent.atomic.AtomicInteger;

public class Disturbed {

    public static void main(String... args) {
        AtomicInteger counter = new AtomicInteger(1);
        System.out.println(
            "First two positive numbers: " +
            counter + 
            ", " +
            counter.incrementAndGet()
        );
    }

}

Помедитируйте немного над кодом и приходите за ответом под кат.

Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии6

Дальше не читал

Время на прочтение2 мин
Количество просмотров11K
КДПВ: Счётчик комментариев

Счётчик новых комментариев — очень удобная вещь, особенно для статей с оживлённой дискуссией.

Но он не идеален:

Случайно обновив страницу или закрыв вкладку мы теряем информацию о непрочитанных комментариях. Тратить время на ручной поиск новых комментариев вряд ли кто-то согласится.

Да и в статье, которую мы читаем первый раз от одного комментария к другому удобнее переходить по горячим клавишам.
Читать дальше →
Всего голосов 49: ↑48 и ↓1+47
Комментарии16

Максимальное количество значений в enum Часть II

Время на прочтение21 мин
Количество просмотров3.6K
Часть первая, теоретическая | Часть вторая, практическая



Продолжаем поиск максимального возможного количества значений в перечислении.
На этот раз сосредоточимся на практической стороне вопроса и посмотрим, как на наши достижения будут реагировать IDE, компилятор и JVM.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии7

Максимальное количество значений в enum Часть I

Время на прочтение7 мин
Количество просмотров10K
Часть первая, теоретическая | Часть вторая, практическая


По мотивам твита от Evgeny Mandrikov aka godin:


В нём он задаётся вопросом, какое максимальное количество значений может быть определено в перечислении (enum) в Java. После ряда экспериментов и применения чёрной магии ConstantDynamic (JEP 309) автор вопроса приходит к числу 8191.

В серии из двух статей поищем теоретические пределы числа элементов в перечислении, попробуем к ним приблизиться на практике и попутно выясним, чем может помочь JEP 309.
Всего голосов 29: ↑29 и ↓0+29
Комментарии20

Что делает сова в ZeroNights 2017 Crackme №3?

Время на прочтение43 мин
Количество просмотров2.5K


ZeroNights 2017 Crackme №3 — довольно простое задание, но, тем не менее, и в нём есть несколько интересных моментов и сова.


Под катом — дизассемблирование, декомпиляция, pull request в IntelliJ IDEA и ни единого запуска отладчика.

Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии2

Информация

В рейтинге
1 605-й
Зарегистрирован
Активность