Библиотека Go для собеса | вопросы с собеседований
6.79K subscribers
216 photos
5 videos
1 file
366 links
Вопросы с собеседований по Go и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/0b524a15

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Можно ли добиться от быстрой сортировки времени выполнения O(n log n)

Классическая быстрая сортировка выбирает опорный элемент. Если выбор плохой — например, всегда крайний элемент массива — и массив уже отсортирован (или почти), происходит деградация: один подмассив получает почти все элементы, а другой — почти пустой. Это приводит к дереву рекурсии глубиной n, и итоговая сложность становится O(n²).

Если опорный элемент выбирается случайно, то с высокой вероятностью дерево рекурсии будет сбалансированным. Это даёт среднюю сложность O(n log n), даже на почти отсортированных данных.

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает fmt.Sprintf и чем он отличается от fmt.Printf

fmt.Sprintf форматирует строку и возвращает её как результат, не выводя на экран.

fmt.Printf форматирует строку и сразу выводит её на экран.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🧱 7 архитектурных паттернов, которые должен знать каждый программист

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

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

В статье собрали и разобрали 7 архитектурных паттернов, которые сегодня стоит знать каждому разработчику — будь то разработка микросервисов, проектирование API или работа с распределёнными транзакциями.

➡️ Узнать паттерны

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет %v в fmt.Printf

Выводит значение в читаемой форме без дополнительной информации.

u := User{"Alice", 30}
fmt.Printf("%v\n", u)
// Вывод: {Alice 30}


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем отличаются compress/gzip и compress/zlib

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

compress/gzip реализует стандарт GZIP (RFC 1952), который оборачивает данные в формат с более «тяжёлой» заголовочной частью: туда могут входить имя исходного файла, дата модификации, флаг CRC и другое. Этот формат часто используется при передаче данных в HTTP (например, сжатие HTTP-ответов) и в Unix-среде — с утилитами gzip, gunzip.

compress/zlib реализует формат ZLIB (RFC 1950), но имеет более лёгкую обёртку: минимальный заголовок и контрольную сумму Adler-32 вместо CRC32. Он чаще применяется в бинарных форматах, таких как PNG, PDF, а также в сетевых протоколах.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выводит %#v в fmt.Printf

Показывает значение в виде Go-кода.

fmt.Printf("%#v\n", u)
// Вывод: main.User{Name:"Alice", Age:30}


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Что будет, если в пакете net/http зарегистрировано два маршрута и они соответствуют одному запросу

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выводит %T в fmt.Printf

Выводит тип переменной.

fmt.Printf("%T\n", u)
// Вывод: main.User


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Смешные новости про IT теперь в одном канале

Мы запустили @hahacker_news — наш новый юмористический IT-канал.

Туда будем постить лучшие шутки до 19го мая, которые вы присылали на конкурс.

👉 @hahacker_news — голосование уже идёт, переходите, читайте, угарайте и оставляйте реакции
Что означает методология TDD (Test-Driven Development) и какие ее основные этапы

TDD — это методология разработки, при которой разработчик сначала пишет тесты, а затем реализует код, чтобы эти тесты прошли.

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

TDD помогает разработчику уверенно двигаться вперед, зная, что код покрыт тестами.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие типы взаимодействия могут быть при парном программировании

1. Driver-Navigator:
Один разработчик пишет код (driver), а второй анализирует процесс, следит за архитектурой и помогает находить решения (navigator).

2. Ping-Pong Programming:
Один разработчик пишет тесты, второй — код, чтобы пройти тесты. Когда тесты проходят, роли меняются.

3. Strong Style:
В этой модели navigator диктует все решения, а driver лишь выполняет действия, следуя указаниям. Это часто используется для более опытных разработчиков, чтобы ускорить обучение новичков.

4. Remote Pairing:
Один из разработчиков работает удаленно, используя инструменты для совместного редактирования кода, такие как Visual Studio Code Live Share или Teletype.


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Какая временная сложность доступа к элементам слайса

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие существуют HTTP-статусы из диапазона 300-399

300 Multiple Choices - несколько вариантов ресурса, пользователь должен выбрать.

301 Moved Permanently - ресурс перемещён навсегда, клиент должен использовать новый URL.

302 Found - ресурс временно перемещён, клиент должен использовать старый URL в будущем.

303 See Other - перенаправление на другой ресурс, обычно с использованием GET-запроса.

304 Not Modified - ресурс не изменился с момента последнего запроса, можно использовать кэш.

305 Use Proxy - запрашиваемый ресурс доступен только через прокси (редко используется).

307 Temporary Redirect - временное перенаправление, метод запроса не меняется.

308 Permanent Redirect - постоянное перенаправление, метод запроса сохраняется

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем math.mod отличается от оператора %

math.Mod работает с числами типа float64 и возвращает остаток с тем же знаком, что и делимое. Оператор % применяется только к целым числам и возвращает остаток с тем же знаком, что и делитель. Они также отличаются типом результата: math.Mod возвращает float64, а %целое число.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Что делает math.Nextafter и где он может быть полезен

math.Nextafter возвращает ближайшее число типа float64 к x в направлении y. Это позволяет точно двигаться по числовой прямой, учитывая минимальные различия между представимыми значениями. Если x == y, функция возвращает y.

Где может быть полезно:

— В численных алгоритмах, где важна точность на уровне машинного эпсилона.

— Для обхода проблем с погрешностью округления при сравнении или генерации диапазонов.

— При вычислении границ или шагов с максимальной точностью (например, в научных расчетах или графиках).

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему функции пакета math принимают только float64

Тип float64 обеспечивает достаточную точность (около 15 десятичных цифр) и диапазон значений для большинства математических задач. Также float64 соответствует стандарту IEEE-754 по представлению чисел с плавающей точкой.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥵 Устали от статей, где эйчары рассказывают, как на самом деле выглядит рынок труда в ИТ?

Мы тоже! Поэтому решили узнать правду и представить ее всем айтишникам — но нам нужен ваш голос. Опрос займет 3 минуты, а пользы — вагон для всего сообщества.

Результаты этого исследования помогут понять, как специалистам искать работу в 2025-м (а компаниям — специалистов).

👉 Если вы готовы сделать свой вклад в исследование — велком: https://clc.to/VGgyNA
Чем отличается method value от method expression

Method value — это метод, уже связанный с конкретным экземпляром типа, и его можно вызывать без передачи получателя, потому что он зафиксирован внутри функции.

Method expression — это самостоятельная функция, которая требует явной передачи получателя как первого аргумента при вызове.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Как компилятор Go обрабатывает константы во время компиляции

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

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

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM