Go собеседования В этом коротком ролике перечислены все темы, которые так или иначе всплывают на собеседеваниях по go Открытое собеседование на Middle Go-разработчика в WB Из интересного Go-интерфейсы и nil. Тонкости ? L из SOLID в Go. Какие особенности ? Пустой интерфейс. Для чего нужен, как используется ? Почему не можем заменить везде на "any"? Может ли функция быть интерфейсом? Асинхронность vs параллельность Можно ли на Go реализовать чистую параллельность (например на 4 ядра) GOMAXPROC=1 что будет? 1 очередь, 1 процессор, 1 горутина выполняется в моменте GMP GRPC. Концепция, преимущества? В чем плюсы относительно REST-а? Преимущества HTTP2 перед HTTP Схема работы HTTPS/TLS Симметричное и асимметричное шифрование Паттерны Transaction outbox и Transaction inbox Идемпотентность консьюмеров Circuit breaker и Rate Limit Балансировщики трафика L4 L7 Mock-собеседование со студентом курса Golang Из интересного/в заметки/запомнить/повторить: Как устроены строки в Go. Как аппендить/менять строку ? strings.Builder Как работает метод Grow ? Copy On Write Как устроены мапы ? В чем отличие слайса от массива ? Можно ли массиву из 5 элементов присвоить массив из 6 ? Нет, это разные типы данных Где аллоцируется слайс ? Или в стеке или в куче. Когда аппендим слайс - на куче. Почему append возвращает слайс? Переприсвоить нужно если была новая аллокация. Динамический массив. Какая сложность удаления из начала? Асимптотическая сложность - линейная. Как за константное время удалить первый элемент массива при этом порядок элементов не важен ? Свопнуть первый с последним и удалить последний. Как хранить деньги в Go ? Структура: рубли и копейки отдельно Целочисленно: хранить в копейках Побайтово: 2 байта рубли, 2 байта копейки Float не берем так как могут быть аномалии при вычислениях из-за потери точности Runtime Go и горутины GO_MAX_PROCS - на что влияет ? Горутина в бесконечном цикле и main. Что будет? Прервется. Процессы, потоки, горутины - в чем разница? Когда горутина вызывает сискол - горутина откладывается в специальный поток, на отдельный процессор. У горутины маленький стек (2Кб), потоки шарят кучу Каналы. Как устроены внутри. Разделяемая память, мьютексы - в основе каналов. 4 горутины читают, приходит писатель - дождется пока все прочитают и возьмет лок на запись Разница между new и make ? Утиная типизация в Go. Если, что-то крякает как утка - то это утка. Внутри интерфейса есть указатель на мета-информацию. С ней сравнивается реализация.