Библиотека Go для собеса | вопросы с собеседований
6.84K subscribers
219 photos
6 videos
1 file
397 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Для чего используется пакет expvar

Пакет expvar используется для экспорта переменных в формате JSON по HTTP, что позволяет отслеживать внутреннее состояние приложения — например, количество запросов, ошибки, статистику по памяти и другие метрики.

Если запустить код с картинки, то вы увидите переменную «count» и другую информацию.

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔7👍5🔥2😢1
Что выведет %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
🥱9👍5
Чем отличаются 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
👍114
Что выводит %#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
👍15
Что будет, если в пакете net/http зарегистрировано два маршрута и они соответствуют одному запросу

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

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

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

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


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

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

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

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

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

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

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

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

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
😁12👍5🤔5
Какая временная сложность доступа к элементам слайса

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

🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Какие существуют 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
👍5
Чем 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
👍71
Почему функции пакета math принимают только float64

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

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

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

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

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

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

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

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

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

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

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9😁3
Как влияет порядок defer-вызовов на поведение программы

Конструкция defer в Go вызывает функции в обратном порядке, по принципу стека (LIFO — Last In, First Out). То есть последняя отложенная функция будет выполнена первой при выходе из текущей функции.

Пример:
func demo() {
defer fmt.Println("Первый")
defer fmt.Println("Второй")
defer fmt.Println("Третий")
}

Вывод:
Третий  
Второй
Первый


Корректное освобождение ресурсов:
При работе с вложенными ресурсами defer автоматически освобождает их в правильном порядке:
f1, _ := os.Open("a.txt")
defer f1.Close()
f2, _ := os.Open("b.txt")
defer f2.Close()

Сначала закроется b.txt, потом a.txt — что логично.

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

Отладка и читаемость:
Если defer-вызовов много, особенно внутри циклов и функций, легко запутаться в порядке их выполнения. Это стоит учитывать при разработке.


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍4
Как можно использовать анонимную функцию в Go

Анонимная функция — это функция,, которую можно определить прямо там, где она нужна. В Go анонимные функции очень гибкие и применяются в нескольких случаях:

• Присвоение переменной

Анонимную функцию можно присвоить переменной и вызывать её позже. Например:
add := func(a, b int) int {
return a + b
}
result := add(2, 3) // result будет равен 5


• Вызов сразу после определения

Можно объявить анонимную функцию и сразу же вызвать её, обернув в скобки и добавив () в конце:
result := func(a, b int) int {
return a + b
}(2, 3)


• Передача в качестве аргумента

Анонимные функции часто используют для передачи в другие функции, например, для обработки событий, сортировки, или работы с коллекциями:
nums := []int{1, 3, 2}
sort.Slice(nums, func(i, j int) bool {
return nums[i] < nums[j]
})


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