HR-блог про IT рекрутинг от ИТ Кадрового агентства

20 базовых и продвинутых вопросов на собеседовании для Elixir программистов, чтобы нанять лучших разработчиков в вашу команду

Вопросы для собеседования
Хотя Elixir не самый популярный язык среди разработчиков, он по-прежнему широко используется для разработки масштабируемых приложений. Используя синтаксис Erlang и функции Ruby, Elixir известен своей высокой производительностью и возможностью повторного использования кода. Хотя эта технология удобна для шаблонов и относительно проста в освоении, при поиске разработчика Elixir владельцы бизнеса должны убедиться, что кандидат, которого они выбирают, хорошо владеет языком теоретически и на практике. Чтобы убедиться, что вы подходите правильно, найдите время, чтобы составить список всесторонних вопросов для собеседования о вакансиях эликсира. В этом посте мы делимся 25 вопросами, которые проверяют как теоретические, так и практические знания Эликсира.

15 основных вопросов на собеседовании по Эликсиру

Вопрос 1. Каковы преимущества Elixir по сравнению с другими языками веб-разработки?

Ответ : как правило, опытный кандидат перечисляет и уточняет следующие преимущества языка:
  • Параллелизм — приложения Elixir поддерживают многопоточность без снижения производительности продукта. Эффективность языка проявляется в безупречной работе платформ в саппортах — Pinterest, Moz и других.
  • Высокий потенциал масштабируемости. Поскольку Elixir основан на синтаксисе Erlang, этот язык удовлетворяет потребности сложных приложений искусственного интеллекта и Интернета вещей. Руководители групп, выбравшие язык, могут запускать приложения на нескольких виртуальных серверах одновременно.
  • Высокая отказоустойчивость. Elixir любим разработчиками за его механизмы безопасности — надежную систему оповещения о сбоях и независимость элементов приложения. Даже в случае системного сбоя компоненты приложения, размещенного на другом сервере, будут работать без ошибок.

  • Высокая читабельность. Эликсир использует простые выражения и интуитивно понятные методы для выполнения команд. Синтаксис языка лаконичен и прост для понимания, поэтому разработчикам Elixir не требуется много времени для адаптации.
  • Фреймворк Феникс. Эта технология упрощает переход с Rails на Elixir. Помимо этого, фреймворк поддерживает обработку в реальном времени как на стороне сервера, так и на стороне клиента (последний запускает JS в фоновом режиме).

Вопрос 2. Какие категории типов данных есть в Elixir?

Ответ : разработчики делят данные Elixir на две широкие категории:
  • Постоянные типы данных: числа и атомы.
  • Составные данные, которые позволяют подключать постоянные данные. Это, например, кортежи или списки.

Вопрос №3. Каковы некоторые из лучших вопросов об обработке ошибок Elixir?

Ответ : хотя этот вопрос допускает интерпретацию, он полезен, когда вы хотите нанять разработчика. Это четко продемонстрирует готовность кандидата придерживаться четко определенных соглашений, а также стремление к постоянному совершенствованию.
Вот несколько полезных практик, которые разработчики могут упомянуть во время интервью:
  • Предпочтение двухэлементных кортежей над кортежами с переменными элементами.
  • Избегайте строк для обработки ошибок.
  • Разработчик может рассмотреть возможность использования некоторых структур без ошибок для обработки ошибок. %Ecto.Changeset{}, например, подходит, так как он содержит ошибки и действителен? характеристики.

Вопрос №4. Определить модули Эликсира

Ответ : В идеале разработчик должен давать на собеседовании определение, максимально похожее на определение из официальной документации.
Модуль — это часть кода Erlang, состоящая из объявлений функций и атрибутов. Каждое объявление модуля завершается символом точки (.).
Атрибуты модуля также имеют четко определенную структуру. Каждый из них имеет значение и тег. Значение атрибута может быть только буквальным элементом, а тег — атомом. Значения атрибута могут быть либо предопределены, либо определены пользователем.

Вопрос №5. Описать последовательности guard() в Elixir.

Ответ : в Elixir последовательности guard() происходят от предложений when() в Erlang. Их основная функция — увеличение соответствия шаблону. Охранники позволяют разработчикам указывать предикаты для данного типа аргумента, как показано в примере ниже:
defmodule Sum do

  def to(1), do: 1

  def to(n) when n > 0, do: n + to(n-1) # only nonzero positive numbers
Стоит отметить, что большинство выражений не поддерживают защитное тестирование.
Разработчики в основном используют охранники при работе в ядре. В и не только в логических значениях и операторах сравнения, а также в функциях типов данных и проверки типов поддерживаются защитные выражения.

Вопрос №6. Объясните разницу между Spawn_link 1|3/ и Spawn/ 1|3

Ответ : Spawn_link/1|3 создает на одну ссылку больше, чем Spawn/1|3. Новая ссылка создается между процессом порождения и вызывающим.
Spawn/ 1|3, с другой стороны, создает одну ссылку для нового процесса. После добавления в очередь в планировщике новый процесс запустится, не мешая работе приложения. Spawn/ 1|3 возвращает pid.

Вопрос №7. Что такое записи в Erlang

Ответ : Записи — это структуры данных с фиксированным количеством хранимых элементов. Когда компилятор запускает код, он переводит записи в кортежи. Это деталь, о которой стоит помнить, поскольку она означает, что запись как есть не будет понята оболочкой.
Вот наиболее распространенные операции с записями в Erlang:
  • Определение имени и полей записи. Оба элемента должны состоять только из атомов. Если внутри записи нет значения, оно будет помечено как неопределенное. Вот пример определения записи Erlang:
-record(Name, {Field1 [= Value1],

               ...

               FieldN [= ValueN]}).
  • Возврат позиции поля записи и обновление записей с помощью Expr#Name.field. Это действие помогает разработчикам быстро и эффективно перемещаться по записям. Вот пример записи оценки поля.
  • Создание записей в шаблонах и вложенных элементах.

Вопрос №8. Какие предопределенные макросы Elixir вы используете?

Ответ : в ответ на этот вопрос старшие разработчики обычно ожидают, что младшие назовут несколько предопределенных макросов и подробно расскажут об их преимуществах. Большинство ответов кандидатов на получение эликсира включают следующее:
  • Что касается модулей или Module_Strings, они возвращают имя модуля как есть или в синтаксисе строки.
  • Возврат имени файла для файла.
  • Строки возвращают номера строк.
  • Машины возвращают свои существующие имена.

Вопрос №9. Объясните интерполяцию строк в Elixir

Ответ : по определению интерполяция строк — это практика, используемая для объединения двух строк в новом объекте. Интерполированная строка заключена в функцию #, а также фигурные скобки.
Вот пример интерполяции строк Elixir:
x = "Apocalypse"

y = "X-men #{x}"

IO.puts(y)

x = "Apocalypse"

y = "X-men #{x}"

IO.puts(y)

Вопрос №10. Какие типы операторов поддерживает Elixir?

Ответ : В Эликсире операторы в основном используются для создания арифметических выражений и управления ими. Вот типы операторов, которые поддерживает язык:
  • Логические операторы
  • Арифметические операторы
  • Разные операторы
  • Операторы сравнения.

Вопрос №11. Объясните, как Эликсир обрабатывает параллелизм

Ответ : поскольку поддержка параллелизма является одним из преимуществ языка, поиск разработчика на вакансиях веб-разработки Elixir, который понимает и чувствует себя комфортно при реализации концепции, имеет смысл.
Вот примерное объяснение того, как кандидат на должность эликсира должен объяснять обработку параллелизма на собеседовании:
Параллелизм Elixir основан на модели акторов, согласно которой отдельный процесс является независимым актором. Элементы системы могут обмениваться данными, но управляются виртуальной машиной.
Память каждого процесса полностью изолирована от других, что позволяет разработчикам обеспечить независимость элементов. Для связи процессы используют почтовый ящик и команды, такие как отправка и получение. Разработчикам также необходимо использовать циклы для обеспечения стабильности долго работающих акторов.

Вопрос №12. В чем разница между параллелизмом и распараллеливанием?

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

Вопрос №13. Определение демона сопоставления портов

Ответ : в Elixir Port Mapper Daemon — это сервер, который поддерживает распределенные коммуникации. Это помогает отображать имена узлов для конкретного адреса машины. Стоит отметить, что Port Mapper Daemon использует порт 4369 — команда разработчиков должна держать его открытым.
Количество целевых меток должно соответствовать количеству узлов в данной группе безопасности.

Вопрос №14. Описать процесс отправки и получения сообщений в Эликсире

Ответ : чтобы отправлять сообщения в Elixir, разработчику нужно знать ID процесса. Общий синтаксис выглядит следующим образом.
iex > send(id(), :text)

:text
Текст после «:» — это то, что возвращает система.
Разработчик должен отметить, что после того, как система отправила сообщение от одного процесса к другому, оно не будет получено до тех пор, пока не будет вызвана функция «получить». Пока он будет храниться в почтовом ящике.
Чтобы увидеть, какие сообщения находятся в папке «Входящие» каждого процесса, вызовите Process.info/
iex > Process.info(self(), :messages)

{:messages, [:hi]}
Чтобы передать сообщение от одного процесса другому, разработчики запускают макрос receive/1.
iex > receive do :text -> IO.puts "Hello." end

Hello.

:ok

iex > Process.info(self(), :messages)

{:messages, []}
Важно убедиться, что функция соответствует атому сообщения.

Вопрос №15. Что такое OTP в Эликсире

Ответ: OTP (сокращение от Open Telecom Platform) — это набор библиотек, инструментов и технологий промежуточного программного обеспечения, изначально написанных на Erlang и широко используемых Elixir. Несмотря на свое название, OTP предназначен не только для телекоммуникационных проектов.
Некоторые из элементов, которые содержит OTP:
  • Интерпретатор (для Эликсира это BEAM)
  • Компилятор
  • Протокол связи узла (сервера)
  • Dialyzer — инструмент статического анализа.
  • Брокер объектных запросов — CORBA
  • Mnesia — сервер баз данных (распределенный).
Это не полный список промежуточного программного обеспечения OTP — есть много других конкретных библиотек, которые разработчики используют в зависимости от поставленных задач.

5 практических вопросов для оценки навыков разработчика Elixir

Теперь, когда разработчик продемонстрировал твердое понимание теоретических концепций, лежащих в основе Elixir, пришло время посмотреть, как умело кандидаты на работу в Elixir Programming решают практические задачи. Помимо проверки ответов на вопросы, обязательно понаблюдайте за будущим сотрудником, чтобы проверить его стрессоустойчивость, концентрацию и внимание к деталям.
Вот несколько интересных практических задач Elixir, которые используют старшие разработчики.
Задача №1 . Вычислите угол между стрелками часов, используя текстовые данные по вашему выбору.
Задача №2 . Создайте программу, которая анализирует диапазон точек и возвращает точки, расположенные ближе всего к началу координатной плоскости.
Входные точки: (2,1), (0,2), (0,1), , (5, 5)
Желаемое количество баллов в выводе – 3.
Выходные точки: (0,1), (0, 2), (2, 1)
Задача №3 . Создайте программу, которая возвращает все числа от 1 до 100. Однако вместо чисел, кратных трем, возвращайте «шипение».
Убедитесь, что число, кратное 5, возвращает «Buzz». Числа, кратные как 3, так и 5, должны печатать «FizzBuzz».
Задача №4 . Создайте два набора данных и создайте процедуру, которая возвращает симметричную разницу между ними.
Примечание: симметричная разница между элементами — это диапазон значений, которые не повторяются ни в одном наборе.
Этот вопрос собеседования проверяет способность кандидата анализировать командную строку и создавать наборы, которые могут использоваться функциями.
Задача №5. Создайте подпрограмму, которая одновременно кодирует и декодирует две строки. Интервью может использовать следующие строки для ввода и вывода:
Input: abbcccddddeeeeeffffff

Output:a1b2c3d4e4f6
Наше ИТ кадровое агентство предлагает вам найти разработчиков менее чем за 2 недели. Свяжитесь с нами сегодня, чтобы узнать больше о том, как мы можем помочь масштабировать ваш следующий проект до новых высот. Мы гарантируем поиск самого сильного, а не самого дорого кандидата. За 10 лет в подборе it специалистов, мы закрыли 5500+ вакансий и собрали 25+ команд с нуля. Убедитесь сами и ознакомьтесь с отзывами клиентов о нашем рекрутинговом агентстве! Нужно больше референсов? Напишите нам в телеграмм.