284 подписчика

#58. Подготовка и первое собеседование на Go-разработчика: оформление резюме и профиля GitHub, ПО для видеозаписи с дисплея, вопросы-ответы

Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.

Хой, джедаи и амазонки!

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

1. Оформление артефактов

Изучать golang я начал 3 января 2022 года. На текущий момент (4 июня 2024 года) я изучаю язык и смежные дисциплины 2 года и 5 месяцев, хотя и с перерывами - особенно в первый год были большие перерывы по 2-3 месяца.

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

1.1. Резюме

https://ru.freepik.com/free-vector/choice-worker-concept_9540551.htm
https://ru.freepik.com/free-vector/choice-worker-concept_9540551.htm

Резюме своё не буду приводить по двум причинам: не факт, что оно хорошо, т.к. я ещё не устроился на работу. Ключевое здесь - несколько факторов:

  • Если вы учились на платных курсах, как я - ни слова о курсах во время собесов. Говорим - учился сам. От разных людей слышал, что курсы как красная тряпка на быка: сложилось мнение, будто после курса выходят люди без особых знаний но с огромными амбициями.
  • Если у вас нет коммерческого опыта, как у большинства людей - пишите в опыте работы "Проектная работа", и перечисляйте ваши пет-проекты с ссылками на репозиторий.
  • Первой по списку должна идти ваша проектная работа как go-разработчик. Остальные работы не по профилю должны идти за ней.
  • В разделе "соцсети" напишите ваш гитхаб (или другой репозиторий). Не пишите ВК или другие соцсети для обычного общения.
  • Проверьте текст на опечатки. Например, сервис главред помогает улучшить читаемость текста и проверить на грамматику.

1.2. GitHub (или другой репозиторий)

Фрагмент Readme моего проекта на GitHub
Фрагмент Readme моего проекта на GitHub

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

  • Оформите личную страницу гитхаба. За образец, думаю, можете взять мой профиль или профиль известных вам опытных программистов. Навскидку, что должно быть на личной странице обязательно: ваше фото, ваши контакты, описание технологий с которыми работаете, закреплённые лучшие проекты. Для оформления вспомнил немного язык разметки html.
  • Сделайте качественные файлы Readme.MD в ваших лучших (закреплённых на личной странице гитхаба) проектах. Опять же за образец можете взять мои закреплённые Readme, но они на мой взгляд сделаны по минимальной приличной схеме. Я видел настолько классные файлы Readme, что закачаетесь. Например, здесь целый раздел с примерами оформления опенсорс-проектов и файлов Readme.
  • Число подписчиков. Говорят, рекрутеры смотрят на их количество. Будет неплохо, если их будет хотя бы 10-20 человек.
  • Обеспечьте визуальную активность на гитхабе в течение длительного времени.
Пример визуального отображения хорошей активности на Гитхаб
Пример визуального отображения хорошей активности на Гитхаб

Здесь можно взять образцы логотипов для технологий.

Фрагмент ГитХаба по ссылке выше
Фрагмент ГитХаба по ссылке выше

Резюме на hh.ru не открывал в общий доступ, а вот в Хабр.Карьере разместил с тегом "ищу работу". За две недели поступило два отклика. Дальше пока глухо. А по одному отклику договорились на собес. Перед собесом кратенько прошёлся по основным темам Golang.

2. Подготовка к первому собеседованию

Первое, что сделал для подготовки - установил и настроил программу OBS Studio для записи собесов и последующего разбора ошибок. Под настройкой понимаю - перепроверил, куда сохраняются файлы и в каком расширении, устройства захвата аудио и другие интуитивно-понятные вещи.

Интерфейс OBS-студии
Интерфейс OBS-студии

С HR'ом договорились провести встречу в Zoom. Установил программу Zoom, сохранил пароли и поставил галочку "запомнить меня", проверил настройки микрофонов и видеокамеры, настроил фон. На всякий случай настроил отображение если расшарить экран - скрыл нижнюю строку, где отображаются запущенные программы, в т.ч. OBS - вряд ли люди будут рады, что их записывают.

Настройка отображения при расшаривании экрана в Zoom
Настройка отображения при расшаривании экрана в Zoom

Будет хорошо, если у вас будет внешняя камера и микрофон, да ещё местное освещение типа светильника.

Далее освежил в памяти матчасть Go.

2.1. Что такое строка

https://ru.freepik.com/free-vector/abstract-binary-code-techno-background_9819789.htm
https://ru.freepik.com/free-vector/abstract-binary-code-techno-background_9819789.htm

Строка - базовый и неизменяемый тип данных в виде последовательностей от 1 до 4 байт, где каждая последовательность представляет символ Unicode в кодировке UTF-8.

Помимо базовых типов данных есть агрегатные данные, ссылочный тип и интерфейсный тип данных.
1. Базовые типы помимо строк - числа, логика.
2. Агрегатные типы - массивы, пользовательские структуры данных.
3. Ссылочный тип - указатели, слайсы, карты, каналы и функции (обычные функции, горутины, методы, замыкания).
4. Интерфейсный тип - интерфейсы.

2.2. Что такое массив

https://ru.freepik.com/free-photo/hex-textured-background-networking_36718614.htm
https://ru.freepik.com/free-photo/hex-textured-background-networking_36718614.htm

Массив - это пронумерованная последовательность элементов одного типа. Количество элементов в массиве - это его длина. Длина массива фиксируется во время создания и всегда или равна нулю, или больше нуля.

При передаче массива в функцию происходит копирование значений всего массива. Только если не передавать массив в функцию по-указателю.

2.3. Что такое слайс

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

  • Указатель на базовый массив;
  • Длина нумерованной последовательности элементов базового массива, на которую указывает слайс (длина фрагмента);
  • Ёмкость базового массива.

При передаче в функцию слайса, каждое поле требует по 8 байт. Т.е. всего копируется 24 байта при передачи слайса в функцию.

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

2.4. Что такое карта и как она устроена

Карта - это структура данных в виде неупорядоченной группы элементов типа ключ-значение.

Длина карты - количество элементов карты. Ключи в карте всегда уникальны.

Карты в Go реализованы с помощью хэш-таблиц и обеспечивают три эффективные операции: добавление пары ключ-значение, получение значения по ключу и удаления значения по ключу.

Выбор ключей из карты происходит случайным образом.

https://ru.freepik.com/free-photo/young-woman-with-short-hair-wearing-grey-jacket-holding-wall-clock-looking-aside-worried-standing-orange-wall_13099014.htm
https://ru.freepik.com/free-photo/young-woman-with-short-hair-wearing-grey-jacket-holding-wall-clock-looking-aside-worried-standing-orange-wall_13099014.htm

Из карты ключ извлекается за константное время выполнения алгоритмов О(1), произносится "о-один". Это означает, что время выполнения алгоритма не зависит от размера входных данных. Т.е. если в карте двадцать ключей или двадцать миллионов, ключ извлекается из карты за одинаковое время.

В программировании существуют следующие виды сложностей, в порядке увеличения: O(1), O(log n), O(n), O(n log n), O(n^2), O(2^n), и O(n!). Например, логарифмическая сложность O(log n) часто встречается при оценке производительности алгоритмов, которые делят данные пополам на каждой итерации.

Но если быть точнее, ключ из карты извлекается за амортизированное время выполнения алгоритмов О(1). Это связано с бакетами, эвакуацией данных и коллизиями.

В реальности данные из карты извлекаются не за константное время, а примерно за константное.

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

2.5. Интерфейс

https://ru.freepik.com/free-photo/woman-touching-smart-technology-holographic-interface_13463053.htm
https://ru.freepik.com/free-photo/woman-touching-smart-technology-holographic-interface_13463053.htm

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

Для чего это нужно. С помощью интерфейсов можно:

  • Разрабатывать архитектурный стиль приложения. Например, одну часть кода делает один человек, а вторую - другой человек. Обе эти части кода общаются через интерфейсы. А люди могут писать свои фрагменты кода, не дожидаясь полноценного решения другого специалиста, пользуясь интерфейсами как "заглушками". Т.е. мы ускоряем разработку приложения за счёт использования интерфейсов.
  • С помощью интерфейсов удобно избегать громоздких действий при тестировании за счёт создания "заглушек" (например, не "ходить" в облако);
  • Ещё интерфейсы способствуют уменьшению дублирования кода.

Подробнее можно почитать на Хабре.

2.6. Встречные вопросы

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

  • Как происходит ввод человека в должность?
  • Как организовано сопровождение на испытательном сроке?
  • Какую вилку по з/п можете предложить?
  • Какая есть социалка, ДМС?
  • Есть ли компенсация связи?
  • Выдаётся ли техника?
  • Какие есть варианты команд?
  • Какой KPI считается, что работа выполнена?
  • Возможна ли полная удалённая работа?

3. Собеседование

Перед самим собесом пол часика отдохнул, поставил телефон на вибро и поехали. Без трёх минут подключился к Zoom, затем начался собес. Сперва рассказал о себе и почему решил сменить сферу деятельности.

Собеседование было с двумя HR'ами - сотрудником по подбору и руководителем отдела подбора; как выразился коллега-программист с которым обсудил итоги - собес был "на адекватность".

Технических вопросов было немного, и я ответил не на все. Вот что за вопросы:

  1. Расскажите об ООП простыми словами. Спросили уточнение, есть ли классы в голанг. //Частично ответил
  2. Расскажите о замыкании в функциях. //Ничего не смог ответить
  3. Может ли функция возвращать несколько значений. Как это выглядит? //Вопрос по-видимому на проверку - вообще, можешь ли программировать
  4. Тестируете ли вы код и как это делаете. //Рассказал немного о пакете testify
  5. Какие типы данных есть в голанг. //Рассказал про инты, слайсы, каналы и т.д.
  6. Как можно проверить тип переменной в среде выполнения. //Рассказал про спецификатор %T
  7. Ещё вопрос был полутехнического плана - когда я делал пет-проекты, был ли у меня ментор, друг с опытом программирования и т.д.
  8. По ожиданиям з/п поговорили.

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

https://ru.freepik.com/free-photo/colleagues-discussing-business-plan-office_3952569.htm
https://ru.freepik.com/free-photo/colleagues-discussing-business-plan-office_3952569.htm

Бро, ты уже здесь? 👉 Подпишись на канал для новичков «Войти в IT» в Telegram, будем изучать IT вместе 👨‍💻👩‍💻👨‍💻