Новый Суперблиц На Java-Хардкоре

Итак, вчера мы с тобой Давайте играть в Java-версии «Интеллектуального казино против знатоков», и при этом, при всем уважении к хабровцам, победили зрители! Победителем этого этапа стал Сергей СерЦе Целовальникова, решившего три задачи.

Как и обещали, мы дарим ему небольшой приз: VIP-билет на JPoint! Но радости в сторону.

Вчера нас с телезрителями обвинили в том, что большинство вчерашних задач были связаны с Java весьма косвенным образом.

Мы принимаем эту плату, и поэтому сегодня у нас есть вариант на чистом Java! никаких пружин, электронных писем или шаблонов.

Это будет настоящее испытание для настоящих фанатов хардкора! Ниже — ответы на вчерашний тур и суперблиц! Телезритель из Санкт-Петербурга сегодня играет против экспертов Андрей апангин Пангин .



Новый Суперблиц На Java-Хардкоре

Но сначала ответы на вчерашние задачи .

Разные аспекты от Николая Гарбузова

Будет ли компилятор компилировать следующий аспект AJC? Если да, то что он выведет на консоль при компиляции?
 
 
 
 
 
 
 
 
 
  public aspect QuizAspect {

public static int count(int i) {

return i++;

}

before (int n) : execution(public int QuizAspect.count(int)) 

&& args(n) && if(QuizAspect.count(1)>1) {

System.out.println("QuizAspect " + n);

}

}

 
Правильный ответ. Он скомпилируется успешно, но при компиляции ничего не выведет на консоль.

В этом случае вызов метода Quiz.count во время выполнения приведет к ошибке StackOverflowError!

Вы можете подумать, что выражение в if() начнет вычисляться при компиляции кода, но это не так.

(не путайте аспекты с метапрограммированием) Этот аспект будет вставлять код рекомендации только внутри метода count, добавьте если() этому коду.

Высказывания Владимира Ситникова
В чем подвох удаления комментариев Java с этим выражением? Назовите 3 причины, почему этого делать не следует. (мы предполагаем, что исходник написан обычными буквами) - Pattern.compile("/\\*(?:[^*]|\\*[^/])*\\*/") Отвечать
  1. Если это Java-строка и она якобы содержит комментарий, то она работать не будет.
  2. Если комментарий заканчивается двумя звездочками и косой чертой, он не сработает.
  3. Если комментарий большой, мы получим StackOverflowError, поскольку регулярные выражения Java используют возврат.
Исправить это можно двумя способами:
  • Притяжательный квантификатор: Pattern.compile("/\\*(?:[^*]|\\*(?!/))*+\\*/")
  • Независимая группа: Pattern.compile("/\\*(?>,[^*]|\\*(?!/))*\\*/")
Весенние контексты от Николая Алименкова
Есть 2 контекста Spring: 1. XML с компонентом <util:list id="myList"> <value>3</value> <value>4</value> </util:list> 2. b.xml с корзиной <util:list id="myList"> <value>6</value> </util:list> Что печатает этот фрагмент кода: System.out.println(new ClassPathXmlApplicationContext("a.xml", "b.xml").

getBean("myList"));

И как заставить его выдавать ошибку, не меняя логику кода? Отвечать Отобразит 6 , и вы можете принудительно выдать ошибку, установив разрешитьBeanDefinitionOverriding для контекста установлено значение false.
А теперь самое хардкор задача вчерашнего дня, по словам президента, премьер-министра и министра обороны элитного клуба.

ООМ от Никиты Сальникова-Тарновского

Ниже представлены 2 программы.

Каждый из них пытается выделить общую память, превышающую размер кучи.

Но один из них выбрасывает java.lang.OutOfMemoryError, а второй нет. Почему? public class OOM1 { private static final int SIZE = (int) (Runtime.getRuntime().



maxMemory() * 0.55);

public static void main(String[] args) {

{

byte[] bytes = new byte[SIZE];

System.out.println(bytes.length);

}

byte[] bytes1 = new byte[SIZE];

System.out.println(bytes1.length);

System.out.println("I allocated memory successfully");

}

}

public class OOM2 {

private static final int SIZE = (int) (Runtime.getRuntime().



maxMemory() * 0.35);

public static void main(String[] args) {

{

byte[] bytes = new byte[SIZE];

System.out.println(bytes.length);

}

byte[] bytes1 = new byte[SIZE];

System.out.println(bytes1.length);

byte[] bytes2 = new byte[SIZE];

System.out.println(bytes2.length);

System.out.println("I allocated memory successfully");

}

}

Отвечать В обоих случаях javac понимает, что переменная bytes не будет использоваться после окончания внутреннего блока.



Поэтому второй созданный массив, который мы поместили в переменную bytes1, будет занимать тот же слот, что и переменная bytes.

Как следствие, после выполнения присваивания байт1 < - new bytes[SIZE], the value that was in the bytes variable becomes unavailable and the GC can delete it. Thus, OOM2 requires only 70% of the heap, and not 105%.

Обновление 1 Здесь интересный анализ от Черемин по теме этого задания.

Обновление 2 Для тех у кого есть оба варианта киньте OOM: для воспроизведения ошибки запустите свою JVM с опцией -server Groovy от Баруха Садогурского и Весна от Жени Борисова Но здесь нас ждет облом.

Джбарух И Евгений Борисов попросил меня сохранить интригу и не публиковать ответы на свои проблемы до тех пор, пока не появится JPoint. Они сказали, что каждый, кто хочет узнать ответы, должен прийти к ним.

отчеты .

Если вы хотите узнать ответы, попробуйте написать им личное сообщение.

Может, они тебя пожалеют! Суперблиц от Андрея Пангина Пришло время настоящего хардкора! Знатоки поднимают глаза, и на их экранах появляется улыбающийся мужчина.

апангин .

Он кагбе машет всем экспертам и осыпает их тысячами поцелуев.

Вопрос первый

Что не так с этим кодом? Как это исправить? public static double[] getRandomVector(int size) { double[] vector = new double[size]; Arrays.parallelSetAll(vector, i -> Math.random()); return vector; }
Вопрос второй
Как может быть, что публичный метод работает заметно быстрее, чем идентичный приватный?

public class Modifiers {

static final Inner inner = new Inner();

static class Inner {

int x = 1;

int getX1() { return x; }

int getX2() { return getX1(); }

int getX3() { return getX2(); }

int getX4() { return getX3(); }

int getX5() { return getX4(); }

int getX6() { return getX5(); }

int getX7() { return getX6(); }

int getX8() { return getX7(); }

int getX9() { return getX8(); }

private int getPrivate() { return getX9(); }

public int getPublic() { return getX9(); }

}

@Benchmark

public int testGetPrivate() {

return inner.getPrivate();

}

@Benchmark

public int testGetPublic() {

return inner.getPublic();

}

}

Вопрос третий
Можно ли создать класс в Java (именно класс, а не интерфейс) без единого конструктора, пусть даже приватного?
Такие вот дела! Напишите свои ответы ниже в комментариях.

под спойлером .

У вас есть 12 часов.

Первый, кто решит все три задачи, получит специальный приз от Андрея и Одноклассников.

Остальные, решившие все три задачи, получат памятные призы от JUG.ru. Удачи! ОБНОВЛЯТЬ: Выиграл Лэни .

Его ответы вы можете найти в комментариях ниже! Вот как его наградили:

Новый Суперблиц На Java-Хардкоре

Теги: #java #спортивное программирование #Ненормальное программирование #задачи #пятница #пятница #хардкор #телезрители против экспертов #телезрители против экспертов #не давать работать вообще

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2009-11-11 23:36:39
Баллов опыта: 636
Всего постов на сайте: 4
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.