Рубрики
Без рубрики

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

Это было почти как мечта. Я взял 6 месяцев, чтобы пойти на кодировку и переехать в Австралию с моей девушкой, когда я наконец вернулся в Норвегию – и работу. Это почти пошло без сцепки. У меня было все это. Я начну с предоставления вам

Автор оригинала: FreeCodeCamp Community Member.

Это было почти как мечта. Я взял 6 месяцев, чтобы пойти на кодировку и переехать в Австралию с моей девушкой, когда я наконец вернулся в Норвегию – и работу.

Это почти пошло без сцепки. У меня было все это. Я начну, предоставив вам немного моего предпринимательского фона.

Я провел последние 6 месяцев, неустанно работаю над своим портфолио и личным проектами. Больше, в частности, я создал Криптодаш , инструмент для отслеживания криптовых валют и значений портфеля в режиме реального времени. Я также представил запись на Конкурс веб-дизайна Для китайской компании Blockchain под названием LOOPRING Отказ

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

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

Главное событие.

Я нервничал.

Как вы готовитесь к техническому интервью? Я спросил себя. Я спросил вокруг и обыскал интернет, как сумасшедший. Я смотрел интервью для насмешек на YouTube. Вот некоторые из ресурсов, которые я использовал:

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

День интервью прибыл.

Я был дома на 4 дня. После 36 часов полета из Австралии я все еще просыпался в 5 часов утра каждый день.

В тот день я проснулся в 4 утра.

Все еще напуган, но любопытно взволнован.

Я встретил интервьюеру в лобби компании, и мы подошли к их офисам.

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

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

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

Тогда началась техническая часть.

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

Вы знаете, что такое тестирование подразделения? Какая часть кода может быть тестирована единицами?

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

После некоторого обсуждения взад-вперед я пришел к выводу, что могу проверить функцию Pagination, так как она отвечала за большую часть логики в программе.

Как бы вы улучшили программу?

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

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

Вы знаете, что такое БЭМ? Это бему вы используете в своем коде?

Я ответил, что знал, что такое БЭМ. Это Конвенция об именах для работы над проектами CSS и обозначает блок, элемент, модификатор. Я также ответил, что был вдохновлен BEM в моем классе CSS, но это было не совсем БЭМ, так как он не следовал всем правилам БЭМ.

Как бы вы сделали этот сайт для мобильного телефона?

CSS Media roceries. Это главный здесь. Они хотели знать, что я знал, как работать с медиа-запросами, чтобы сделать сайты отзывчивыми.

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

Задача кодирования

Затем они попросили меня продлить функциональность. Меня попросили реализовать механизм сортировки, который потребовал бы набор набора данных и переставить их по имени и цифрам. Мне дали несколько минут, чтобы подумать о проблеме.

Я задал некоторые разъясняющие вопросы, как будь то, должен ли я использовать встроенные функции сортировки JavaScript или построить свои собственные (как посмотрим позже, это была большая ошибка). Пагированные данные существуют как массив объектов, где каждый объект имеет массив данных с 20 объектами, которые представляют каждый элемент в списке. Я придумал следующий алгоритм:

  1. Объедините каждый массив данных объектов Pagination в новый массив.
  2. Сортировать новый массив
  3. Paginate из сортированного массива и установите состояние компонента на вновь отсортированный массив.

Это был хороший алгоритм. И я быстро выяснил, что делать. Единственная проблема теперь реализовала ее. Вот где я сделал ошибки.

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

// What I should have done
const pageData = pages.reduce((startingValue, page) => startingValue.concat(page.data), [])
// What I ended up doing
const pages = this.state.pages;
const pageData = [];
pages.forEach(page => pageData = pageData.concat(page.data));

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

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

После некоторого обсуждения и подталкивания от интервьюеров. Я наконец вспомнил, что строки сортируются по ценностям ASCII. Прописные буквы оцениваются от 65 – 90, а строчные буквы оцениваются от 97 – 122. Лучшие результаты, которые были не отсортированы правильно, имели заглавные буквы, которые имели влияние сначала сортировать их, поскольку их значение ASCII ниже, чем строчные буквы Отказ Это ошибка, которую я никогда не сделаю снова.

Когда проблема была идентифицирована, я сразу же решил его с помощью использования.

Теперь осталось только одно.

Передача отсортированных данных в функцию pagination.

Здесь я тоже ударил ловушку.

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

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

Как только это и некоторые более мелкие изменения были сделаны, код наконец работал. Это заняло некоторое время, но в конце концов я решил его.

В этот момент кодирующая часть технического интервью закончилась.

И я чувствовал себя осушенным.

Мы заключили интервью с более чем в чате. Они рассказали мне больше о своей компании, и я задал несколько вопросов, прежде чем мы расстались.

Однако интервью не остановилось там.

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

На следующий день я провел три часа, улучшая решение, а затем отправил это письмо:

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

Где я ошибся?

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

Часть обратной связи № 1: «Слишком много времени нахожу в том, как объединить массивы. Поиск в Интернете первым вместо проверки документации для JavaScript (например:« Array Doc »JS« дает W3Schools или MDN, где перечислены функции), и неправильно использует примеры (Array.Concat возвращает новый массив). Никто не помнит все в API, поэтому важно комфортно использовать документацию для JS или библиотеки.

На вынос: Интервьюеры хотят видеть, как вы достигли MDN (или другой соответствующей документации). Они хотят видеть, что вы можете найти и читать документацию и реализовать его на основе информации, найденной там.

Кусок обратной связи № 2: «В присвоении сортировки кандидат сначала предполагает странный ручной алгоритм. К счастью, он выбирает встроенную функцию встроенной сортировки в JavaScript, но не уверен в том, как это работает и необходимо проверить документацию неоднократно.

На вынос: Быть абсолютно ясным в вашем общении. В этом случае я попросил интервьюеров о том, следует ли использовать встроенный JavaScript Function или нет, чтобы уточнить границы/ограничения задачи под рукой, и продемонстрировать, что я не прыгнул в кодировку, не зная Термины, под которыми я работал. К сожалению, я думаю, что это было неверно истолковано, что я предлагаю использовать свой собственный алгоритм сортировки, когда я не собирался сделать это, если это не было конкретно то, что они хотели из этой задачи.

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

Часть обратной связи № 3: «Когда код работает, текст сортируется« чувствительным к регистру », классический сценарий.”

К сожалению, кандидат проводит долгое время до того, как проблема понимается, но после того, как она будет идентифицирована, она сразу исправлена.

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

Кусок обратной связи 4: «Потратил некоторое время, чтобы понять, почему FormatData должны были быть перемещены из боязнания под рефактором».

На вынос: Опять же, скорость имеет сущность.

Кусок обратной связи № 5: «Многие из петель FORAECH, где можно было использовать массив. Как можно было использовать.

На вынос: Узнайте Array.map, Array.Filter и Array.reduce и узнайте их хорошо. Я углубляюсь в функциональное программирование на задней части этого, и это сложная задача. Но вам не нужно все это учиться, просто убедитесь, что вы получите основы вниз.

Кусок обратной связи № 6: Я хотел бы, чтобы кандидат будет больше знаний о тестировании подразделения.

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

Остальная часть документа похвала. Я не буду идти в значительную деталь, потому что это не так важно. Но вот суть этого:

  • Он хорошо использует его редактор
  • Он использует отладчик в Chrome (знание расширенных инструментов отладки важно)
  • Он проверяет, что вещи работают перед перемещением (с помощью Console.log)
  • Он пытается разделить код на меньшие логические части
  • Он использует переменные с именами вместо комментариев, это делает код более читабельным.
  • Он знает, хорошо реагирует
  • Более ранние проекты впечатляют
  • Обладает другими положительными качествами, чем программирование (дизайн/визуальный)

Что я мог сделать по-разному в подготовке?

Hindsight 20/20. Но когда вы получаете нет, вы неизбежно проведите некоторое время, думая о том, что вы могли бы сделать по-другому.

Пройдите через код домашнего назначения более тщательно.

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

Сделать более практичные задания JavaScript.

Я сделал много теоретической работы, ведущей к интервью. Теперь я желаю, чтобы я провел больше времени или, по крайней мере, смешанным в практических заданиях. Решить алгоритмы на HackeRrank или Код Wars Отказ Или создайте общие компоненты Frontend, такие как сортированный список, раскрывающиеся меню, пагинация и так далее.

Интервью завернут

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

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

Моя самая большая сила – это то, что я провел много времени, изучающую JavaScript в течение прошлого года, и я могу быстро учиться и принимать новые идеи. К сожалению, я не думаю, что смог продемонстрировать это знание на этот раз. Я не добился:

  • Покажите им свои знания о цепочке прототипов JavaScript и как оно позволяет легко использовать усилительную и память эффективного совместного использования методов между объектами.
  • Разговор о закрытиях и насколько внутренние функции JavaScript имеют возможность закрывать переменные во внешнем объеме и получить доступ к ним позже после возврата внешней функции – и как это предотвращает сбор мусора.
  • Поделитесь своими знаниями о JavaScript Scope, и как JavaScript проверяет каждый уровень локальной массы вплоть до глобального масштаба для поиска переменных.
  • Поделитесь своими знаниями об преобразовании и как для равенства без преобразования типа и для преобразования равенства и типа.
  • Поговорите о подъеме и как функции заявления и переменные (за исключением переменных и Const) поднимаются на вершину в JavaScript, что позволяет использовать предыдущий код для их использования.
  • Поговорим о это ключевое слово, и как ценность этого целиком зависит от вызова (сайта вызова) функции.

Я Сортировать (каламбур) Желаю, чтобы я имел.

Дорога к успеху

Теперь мне было бы легко сказать себе: «Я недостаточно хорош. Мне нужно потратить 3 – 4 месяца, а потом попробуй еще раз».

Я не сделал.

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

Я нацелен на небо.

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

Второй раунд подготовки

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

Экзамены, такие как интервью, неисправен в том, что они не охватывают полный спектр знаний кандидата. Так что ты можешь сделать?

Расширить свой спектр знаний.

Быть пуленепробинным. Быть нео.

Для меня я использовал передовые методы памяти, чтобы запомнить ответы на более чем 100 вопросов интервью на интервью в течение 8 часов. Вопросы можно найти в этом хранилище Отказ

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

Кроме того, я провел время на практических примерах на Код Wars и HackeRrank Отказ А также проводить время на самом деле строить вещи.

Техническое интервью № 2

Богатый на уроках из моего последнего опроса, я сделал мою должную осмотрительность.

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

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

Вот список всех тем, которыми мы покрыли:

  • JS, CSS и HTML широкие удары
  • Структура документов
  • Структура проекта
  • Портить
  • Представление
  • Безопасность
  • Доступность
  • SEO
  • Отзывчивый веб-дизайн

Задача кодирования была основана на ванильном JavaScript. Меня бросили вызов, чтобы добавить простой класс в Div, используя ванильный JavaScript. Теперь, если вы потратили время в JS, используя в основном рамки, вы можете не знакомы с API классов. К счастью, я провел большую часть своего времени, выполняя все проекты FreeCodecamp с ванильными JS. Вот как это выглядит:

const btn = document.querySelector('.btn');
const menu = document.querySelector('.menu');
function addClassNameToDiv() {
 if (!menu.classList.contains('new-class')) {
     menu.classList.add('new-class');
 } else {
     menu.classList.remove('new-class');
 }
}
btn.addEventListener('click', addClassNameToDiv)

В качестве альтернативы вы можете использовать классный список. TOGGLE («Новый класс»), чтобы сделать его в один вкладыш. Мне также попросили продлить его, чтобы закрыть меню, если вы нажмете за пределами выпадающего меню:

window.addEventListener('click', () => menu.classList.remove('new-class'));

На вынос из кодирования Challenge:

  • Короче лучше, до тех пор, пока он всегда читается.
  • Производительность WISE, лучше поставить селекторы запросов за пределами функции обратного вызова слушателей событий (только один раз, а не каждый раз, когда слушатель пожали).
  • Производительность WISE, GETELEMANTYBYID и GETELECTINGBYCASSNAME являются более исполнительными, чем QuerySelector

На следующий день меня вызвали менеджером. Я бы передал интервью, и они хотели продлить мне предложение.

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

Я сделал наоборот.

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

Интервью, а также особенно технические интервью, являются жесткими умственными испытаниями. Вы все время на дисплее, все время ожидаемое выполнение и превышает ожидания. Это сложно. Так почему я это сделал?

Четыре причины.

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

Я смирился за помощью и поддержку, которую я получил от FreeCodeCamp, и я хотел вернуть обратно.

Техническое интервью № 3

После связи с другими компаниями и объяснив, что у меня было предложение на столе от фирмы Top Tier, многие компании стремились бросить меня. Через неделю я провел несколько интервью, и у меня были более технические интервью, чтобы пройти.

Вот раунд некоторых вопросов интервью из моего третьего технического интервью:

  • Как вы попали в реагирование? Почему вы попали в это? Что хорошего в этом?
  • Как работает redux? Из чего состоит API? Что такое неизменность? Что хорошо о неизменности?
  • Как бы вы переделали ваш сайт?
  • Как вы относитесь к работе с более глубокими слоями приложения? Например, Backend?
  • Вы делаете свои собственные тестирования? Что такое тест на единицу?
  • Какой хороший пользовательский опыт для вас?
  • Как вы испытываете пользовательский опыт?

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

 // HTML Element
// CSS Rules
#menu {
   color: black;
}
.dropdown-menu {
   color: green;
}
div {
   color: blue;
}

Моя задача состояла в том, чтобы объяснить, что я видел. Я немедленно определил HTML-элемент и сказал интервьюерам, что идентификатор и класс на элементе могут быть использованы в CSS для выбора элемента HTML. Оттуда я объяснил, что CSS – это каскад, что означает, что нормально последнее правило будет применяться. Однако в этом случае селекторы имеют разные весовые. Порядок взвешивания идет так: ID> класс> элемент.

Что означает, в приведенном выше примере, цвет черный будет применен к HTML-элементу.

Техническое интервью № 4

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

  • Нарисуйте основной веб-сайт. Определите компоненты.
  • Как бы вы сделали это отзывчивым?
  • Как бы вы центрировали текст вертикально и горизонтально?
  • Что такое модель CSS Box? В чем разница между содержимым box и border box?
  • В чем разница между двойными и тройными равными?
  • Что хорошо о реагировании?
  • Какова польза от массива .Foreach над циклом для цикла? Есть ли случаи, когда вам может потребоваться использовать для цикла?

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

Мое оригинальное решение этого вопроса, связанного с расщеплением строки, используя счетчик и оператор модуля, чтобы определить, было ли счетчик 20, затем вставьте символ Newline в массив и присоединиться к строке.

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

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

И этого было достаточно.

Я не мог положить его, хотя, так что если вы заинтересованы, вот решаемая версия:

function wordWrap(str) {
 let totalCount = 0;
 const arr = str.split(' '), formattedStr = [];
 
 arr.forEach((word, index) => {
  totalCount += word.length;
  if (totalCount >= 20) {
     formattedStr.push('\n', word, ' ');
     totalCount = word.length;
  } else {
     formattedStr.push(word, ' ');
  }
 });
 return formattedStr.join('');
}

Заключение

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

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

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

И если вы готовитесь, вы будете готовы к этому.

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

Подать заявку на работу. Подготовьте хорошо. Посещать технические интервью. Учиться на ошибках. Повторить.

Если вы сделаете это, я гарантирую вас, вам удастся.

Я болел за вас.