Итак, вчера мы с тобой Давайте играть в Java-версии «Интеллектуального казино против знатоков», и при этом, при всем уважении к хабровцам, победили зрители! Победителем этого этапа стал Сергей СерЦе Целовальникова, решившего три задачи.
Как и обещали, мы дарим ему небольшой приз: VIP-билет на JPoint! Но радости в сторону.
Вчера нас с телезрителями обвинили в том, что большинство вчерашних задач были связаны с 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("/\\*(?:[^*]|\\*[^/])*\\*/")
ОтвечатьИсправить это можно двумя способами:
- Если это Java-строка и она якобы содержит комментарий, то она работать не будет.
- Если комментарий заканчивается двумя звездочками и косой чертой, он не сработает.
- Если комментарий большой, мы получим 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 программы.Отвечать В обоих случаях javac понимает, что переменная bytes не будет использоваться после окончания внутреннего блока.Каждый из них пытается выделить общую память, превышающую размер кучи.
Но один из них выбрасывает 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");
}
}
Поэтому второй созданный массив, который мы поместили в переменную 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 #спортивное программирование #Ненормальное программирование #задачи #пятница #пятница #хардкор #телезрители против экспертов #телезрители против экспертов #не давать работать вообще
-
Итальянские Языки
19 Dec, 24 -
Все Еще Не Нравится Javascript?
19 Dec, 24 -
Российский 3G И Тарифы.
19 Dec, 24