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

от автора

Привет! Мы тут собрали тусовку одних из самых крутых русскоязычных 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 с бином

<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")); 

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

Четвёртая задача предоставлена Никитой Сальников-Тарновским, конкретно упоровшимся по хардкору и написавшим инструмент для поиска утечек памяти – 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 в понедельник тому, кто сможет поправить или существенно доуточнить ответы тех, кто задавал задачи.

Ответы, пожалуйста, в комментарии под спойлер. Если вы не можете комментировать, то делайте #javapoint в Facebook или ВКонтакте.

Завтра я выложу правильные ответы.

ссылка на оригинал статьи http://habrahabr.ru/post/255869/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *