Новости программирования

Один совет, чтобы пройти собеседование по кодированию — используйте абстракции!

Краткое описание по статье Один совет, чтобы пройти собеседование по кодированию — используйте абстракции!

Название: Один совет, чтобы пройти собеседование по кодированию — используйте абстракции! . Краткое описание: [ad_1] ⭐ Основано на пятилетнем моем опыте собеседова . Дата публикации: 02.02.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года

[ad_1]

Основано на пятилетнем моем опыте собеседований

Важная заметка: Эта статья изначально была написана на Medium — полную версию можно прочитать здесь.

Отказ от ответственности: этот пост не связан с Google или Microsoft. Это чисто мое мнение.

Я хожу на собеседования в Google и Microsoft около 5 лет, и, на мой взгляд, это, вероятно, одна из самых распространенных ошибок, я вижу несколько многообещающих кандидатов.

Я говорю о типичном собеседовании по программированию, когда вам дают одну или несколько формулировок задачи, и ожидается, что вы найдете оптимальное решение (алгоритм) и напишете для него код в течение 45–60 минут.

Их обычно называют «Структуры данных и алгоритмы интервью» и большинство крупных компаний-разработчиков программного обеспечения используют такого рода собеседования для найма инженеров-программистов от начального до старшего уровня.

После нескольких собеседований с кандидатами от 0 до 12+ лет опыта была одна общая проблема, которая приводила к плохому впечатлению и потенциальному отказу.

Кандидат пытается решить каждую часть вопроса, а не сосредотачивается на том, что важно.

И во многих случаях кандидат не решает поставленную задачу. Иногда кандидат запутывается в неважной части проблемы.

Интервью на младшую роль против старшей роли

Если кандидат проходит собеседование на младшую должность, я не возражаю против этого и обычно возвращаю кандидата к проблеме, пока не стало слишком поздно. Но при найме на средние или старшие должности есть два важных сигнала, которые я люблю анализировать:

  1. Может ли кандидат хорошо разобрать проблему и решить ее самостоятельно.

И в случае, если кандидат перейдет на потенциально длинный путь.

  1. Может ли кандидат сделать шаг назад и мыслить рационально?

Я приведу пример для справки

Как я выгляжу, когда беру интервью у жены!
Как я выгляжу, когда беру интервью у жены!

Возьмем пример задачи LeetCode 165 — Сравните номера версий

Учитывая два номера версии, например «1.4.5» и «1.3.6», верните больший.

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

Пожалуйста, не стесняйтесь использовать столько абстракций, сколько необходимо, если есть что-то конкретное, что меня интересует, я буду копаться в этом.

Один из наиболее распространенных подходов — разделить строку с помощью «.» в качестве разделителя и преобразовать значения в целое число, а затем сравнить слева направо, предполагая, что данные значения являются допустимыми номерами версий.

По этому конкретному вопросу я видел, как несколько кандидатов на C/C++ тратили слишком много времени на первую подзадачу — разбиение и преобразование строки в целочисленный массив.
На C++ многие кандидаты пишут некоторую версию следующего кода.

std::vector<int> VersionStringToIntValues(const std::string& version_string) {
  std::vector<int> version_values;
  int buffer = 0;
  for (int i = 0; i < version_string.length; ++i) {
    if (version_string[i] == '.') {
      version_values.push_back(buffer);
      buffer = 0;
    } else {
      buffer *= 10;
      buffer += (version_string[i] - '0');
    }
  }
  
  // Many candidates just miss this step.
  if (buffer > 0) {
    version_values.push_back(buffer);
  }
  
  return version_values;
}

std::string GetGreater(const std::string& version1, const std::string& version2) {
  // Some validation logic
  
  std::vector<int> version_values1 = VersionStringToIntValues(version1);
  std::vector<int> version_values2 = VersionStringToIntValues(version2);
  
  // Many candidates just implement the function `VersionStringToIntValues()`
  // inline, twice for each version strings.
  
  // Further logic
}

Один из способов решения первой подзадачи вопроса интервью на C++.

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

Я видел, как некоторые кандидаты, наконец, так или иначе справились с этой подзадачей, в то время как некоторые из них застряли в написании кода для этого.

Но это не решает вопрос, который я задал

И у вас есть в общей сложности 45-60 минут

Вопрос состоял в том, чтобы вернуть больший номер версии.

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

Если кандидат проходит собеседование на должности от среднего до старшего — это производит плохое впечатление на меня как на интервьюера. В ходе собеседования мне нужно увидеть достаточно сигналов от кандидата в отношении навыков работы с алгоритмами и структурами данных, навыков кодирования, навыков проектирования и эффективности для решения проблемы, и это может быть красным флагом для последних двух вертикалей.

TL;ДР;

Когда вы начинаете писать код во время собеседования по алгоритмам или структурам данных, попробуйте написать код верхнего уровня и сделать предположения об интерфейсах и вспомогательных методах.

Начните решать ключевую часть проблемы — вы даже можете спросить у интервьюера, ожидается ли от вас решение определенной подзадачи или вы можете предположить, что она реализована. Если интервьюеру нужно больше сигналов, он попросит вас написать код для подкомпонентов.

Всегда лучше закончить код нужного вопроса, чем нет!

Заключительные моменты

Спасибо за чтение, это может быть субъективной областью — рад узнать о других мнениях по этой теме! Разделы ниже являются необязательными для чтения.

Если вам интересно прочитать об идеальном способе решения таких вопросов, я рекомендую — вы можете прочитать полную статью здесь.

Фото Кредиты

  • Фото 傅甬 华 на Unsplash.
  • Фото Пола Ханаока на Unsplash.

Например, во время работы над приложением «Камера» у меня появилась возможность поработать над «Ночным режимом» в приложении «Камера», который требует от нас захвата серии изображений и надежного их объединения для получения хорошо экспонированного изображения с низким уровнем шума. Это очень затратно в вычислительном отношении, и нам нужно, чтобы наши алгоритмы работали на оборудовании с ограниченными ресурсами в рамках определенного бюджета задержки.

Для меня это была очень захватывающая постановка задачи, которая потребовала от меня повторного изучения современного C++, концепций обработки изображений и т. д.

Но это было так весело, что усилия, потраченные на обучение, не казались помехой. Я бы порекомендовал найти такие направления и начать учиться, чего бы это ни стоило.

TL;ДР; Не утруждайте себя поиском одного языка программирования, который станет вашей ставкой на 2022 год.

Хотите связаться с автором?

Подпишитесь на Medium, используя мою членскую ссылку (я получу небольшую комиссию).

  • Мой блог: blog.minhazav.dev для статей по теме
  • Гитхаб: mebjas@
  • Твиттер: минхазав@
  • LinkedIn: минхазав



[ad_2]
Source: codementor.io/community/new

Похожие статьи

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

Ваш адрес email не будет опубликован.

Кнопка «Наверх»