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

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

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

И действительно, было несколько требований, которые я не знал, как выполнить. (1) Мне нужно было сохранить данные при обновлении страницы без какого-либо бэкэнда. Я был уверен, что использование localStorage — это ответ, но я не был уверен, как лучше всего реализовать эту функциональность. (2) В то время как перемещение задач между сегментами с помощью нажатия на стрелки удовлетворяло минимальным требованиям, функциональность перетаскивания была явно упомянута и, очевидно, была бы более впечатляющей. Раньше я никогда не реализовывал функцию перетаскивания и не совсем понимал, как это сделать.

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

Это не оставило мне достаточно времени для исследования и реализации функции перетаскивания. Но функциональность перетаскивания была чем-то, что я мог использовать довольно часто. Итак, несмотря на то, что это собеседование помогло мне решить, что я не хочу эту работу, я все же хотел попробовать функцию перетаскивания. Придя домой и перекусив, я нашел несколько хороших интернет-ресурсов и смог реализовать функцию перетаскивания (см. GIF выше) после не слишком большой работы.

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

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