## Вопросы от Данила Подольского на позицию Senior Golang Backend Developer в компанию Evrone ### Go — императивный или декларативный? А в чем разница? В основном Императивный. Разница в подходе: - императивный - как сделать (прямо пошагово); - декларативный - что сделать (итоговый результат). ### Что такое type switch? Сравнение типов переменной, а не ее значений. ### Как сообщить компилятору, что наш тип реализует интерфейс? Если наш тип реализует все методы интерфейса, значит он реализует этот интерфейс. ### Как работает append? Если capacity исходного массива достаточно, он используется повторно. В противном случае выделяется новый базовый массив достаточной длины и данные копируются ### Какое у slice zero value? Какие операции над ним возможны? Zero value у slice == nil Возможные операции: len, cap, append. ### Как устроен тип map? Map в Go это хэш таблица, позволяющая хранить пары ключ-значение и обладающая следующими функциями: маппинг, вставка, удаление, поиск. Map in Go не упорядоченная. Место поиска определяется рандомно. Когда мы пытаемся получить значение из мапы, а его там нет, получаем «нулевое значение типа», что в случае числа 0. Map — ссылочный тип и мало объявить переменную, надо ее проинициализировать. ### Каков порядок перебора map? Случайным образом. ### Что будет, если читать из закрытого канала? Вернется нулевое значение. ### Что будет, если писать в закрытый канал? Произойдет вызов panic. ### Как вы отсортируете массив структур по алфавиту по полю Name? С помощью функции sort.SliceStable. Для этого сначала конвертируем массив в слайс. ```go slice := array[:] ``` ### Что такое сериализация? Зачем она нужна? ### Сколько времени в минутах займет у вас написание процедуры обращения односвязного списка? ### Где следует поместить описание интерфейса: в пакете с реализацией или в пакете, где этот интерфейс используется? Почему? ### Предположим, ваша функция должна возвращать детализированные Recoverable и Fatal ошибки. Как это реализовано в пакете net? Как это надо делать в современном Go? ### Главный недостаток стандартного логгера? ### Есть ли для Go хороший orm? Ответ обоснуйте. ### Какой у вас любимый линтер? ### Можно ли использовать один и тот же буфер []byte в нескольких горутинах? ### Какие типы мьютексов предоставляет stdlib? ### Что такое lock-free структуры данных, и есть ли в Go такие? ### Способы поиска проблем производительности на проде? ### Стандартный набор метрик prometheus в Go -программе? ### Как встроить стандартный профайлер в свое приложение? ### Overhead от стандартного профайлера? ### Почему встраивание — не наследование? ### Какие средства обобщенного программирования есть в Go? ### Какие технологические преимущества языка Go вы можете назвать? ### Какие технологические недостатки языка Go вы можете назвать?