Вопросы для интервью Scala-разработчиков

За последние несколько лет мы провели достаточно много интервью кандидатов на позицию Scala-разработчика. Несмотря на то, что scala уже набрала нешуточные обороты на беларуском рынке, и количество компаний, которые ее используют в mission-critical проектах, перевалило за дюжину, когда мы приглашаем человека в нашу команду, это, в первую очередь, специалист с отличными soft-skills, хорошим знанием JVM, пониманием принципов дизайна распределенных, высоконагруженных систем, и только базовыми знаниями Scala.

По первым трем областям, я предполагаю, вы знаете не хуже нас, в каком ключе общаться с кандидатами. Что касается интервью по Scala - короткий список вопросов, на который мы полагаемся, может оказаться вам полезным. Мы совершенно не боимся сделать его публичным, т.к., хорошая подготовка по этому списку повлечет за собой серьезный рост уровня владения языком.

  • Объясните простыми словами следующие концепции: actor, sueprvisor, location transparency. Опишите, как реализованы actor’ы в Scala (Akka)
  • В каких случаях вы предпочтете trait абстрактному классу?
  • Какие есть альтернативы enum в Scala?
  • Какие преимущества получит Scala, если будет использовать фичи Java 8?
  • В чем преимущества и органичения case-классов?
  • В какой код трансформируются for-comprehensions?
  • Что такое “макрос”? Для каких задач вы (бы) их использовали?
  • Что такое “монада”? Приведите пример монад, которые вы используете
  • Что такое “хвостовая рекурсия”? Что представляет из себя ее оптимизация?
  • Объясните, как реализован “lazy val”?
  • Как работает stream?
  • Объясните паттерн “type class”
  • Объясните паттерн “pimp-my-library”
  • Объясните паттерн “cake”. Что такое self-type annotation?
  • В чем вы видите преимущества системы типов Scala над системой типов Java?
  • В чем разница между “context bound” и “view bound”?
  • Используете ли вы “scalaz”? Если да, какие компоненты?
  • Что такое “тип высшего порядка” (higher-kinded type)? Приведите пример их применения
  • Что такое “union type”? Поддерживаются ли они в Scala?
  • Что такое “гетерогенный список”? Поддерживаются ли они в Scala?

Коллеги из других компаний! Призываю вас безжалостно критиковать этот список, и дополнить его вопросами, которые кажутся вам интересными. Будет здорово, если вы расскажете, как вы проводите собеседования Scala-разработчиков в ваших компаниях.