Простые задачи на Java. Слабо решить все?

bba8752c823e4df787cf148b1ff71449.gifПривет! Мы тут собрали тусовку одних из самых крутых русскоязычных Java-практиков и попросили их дать по задаче, чтобы вы сломали зубы, мозг и бились об стену, пытаясь понять, как это работает. Собственно, мы поспорили на бутылку Хеннеси, что за 12 часов после публикации никто не пришлёт все правильные ответы. Я уверен, что кто-то сможет. Поэтому если вы это сделаете первым — с меня бутылка.

Первая задача простая, она от телезрителя Николая Гарбузова, специалиста по скалкам, любящего рекурсию, паттерн-матчинг и магию компиляции:

Скомпилируется ли следующий аспект 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); } }

Пока просто, правда?

Вторая задача от Владимира Ситникова (NetCracker), грязного извращенца во всём, что касается регулярных выражений. Этот нехороший человек даже анонс своего доклада на JPoint написал с их помощью.

В чём подвох удалять Java-комментарии таким выражением? (считаем, что исходник написан нормальными символами) —

Pattern.compile (»/\\*(?:[^*]|\\*[^/])*\\*/»)

И сразу вторая задача — можно ли написать «hello world» на java без единого пробела?

Третью задачу прислал телезритель Николай Алименков из клуба анонимных разработчиков. 10 лет он пилит свои масштабируемые системы, а к нам пришёл отдохнуть, поэтому задача одна из самых простых:

Есть 2 Spring контекста:

1. a.xml с бином

3 4

2. b.xml с бином

6

Что напечатает такой фрагмент кода:

System.out.println (new ClassPathXmlApplicationContext («a.xml», «b.xml»).getBean («myList»));

И как можно заставить его бросить ошибку, не изменяя логику работы кода?

Четвёртая задача предоставлена Никитой Сальников-Тарновским, конкретно упоровшимся по хардкору и написавшим инструмент для поиска утечек памяти — Plumbr. Писал не один, конечно, но прочитать полученный код может только он. Долбанный оптимизатор.

Ниже приведены 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»); } }

Предпоследняя задача от Баруха Садогурского из JFrog и тусовки Bintray/Artifactory

Что выведет этот код?

def back = 'back' def quotes = [«I’ll be $back», «I’ll be ${→ back}», «I’ll be ${back}», «I’ll be »+back] println quotes back = 'bach' println quotes

Последняя — от Евгения Борисова, тренера офицеров израильской армии по Java. Spring:

Есть два бина:

@Component public class Няня { public void closeAll () { while (ребёнокГрязный ()) { купайРебёнка (); } } }

@Component public class Уборщица { public void closeAll () { while (посудаГрязная ()) { мойПосуду (); } } } Как сделать, чтобы при закрытия контекста, оба метода closeAll работали параллельно (и какие есть варианты)?

Ачивки и решения Небольшой сувенир первому, кто запостит три правильных решения под спойлер в комментарии. Бутылка Хеннеси — тому, кто сможет за 12 часов правильно ответить на все вопросы за один раз. Если таких будет несколько — первому, приславшему правильные ответы. Бесплатные билеты для вас и друга на конференцию JPoint в понедельник тому, кто сможет поправить или существенно доуточнить ответы тех, кто задавал задачи. Ответы, пожалуйста, в комментарии под спойлер. Если вы не можете комментировать, то делайте #jpoint в Facebook или ВКонтакте.

Завтра я выложу правильные ответы на первые три вопроса, а в среду — на вопросы jbaruch и EvgenyBorisov.

© Habrahabr.ru