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

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download 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
Как влияет порядок 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
Как можно использовать анонимную функцию в 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
Что такое IIFE Immediately Invoked Function Expression

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
Что будет выводится в таком цикле
for first, second := range str

, если str это строка

В
цикле такого вида first это индекс символа в строке, а second это руна

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
😱 Вся правда об увольнениях в IT в 2025-м

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

Но для этого нам нужна ваша помощь! Мы собираем данные от разработчиков, тестировщиков, менеджеров и всех, кто работает в ИТ, чтобы создать честное исследование о:

— реальных причинах массовых увольнений
— судьбе тех, кто остался за бортом IT-рынка
— том, сколько времени сейчас нужно на поиск работы

Почему это важно? Потому что сила в правде. Зная реальную ситуацию, вы сможете лучше понимать тренды рынка и планировать карьеру.

⚡️Пройдите опрос и помогите всему сообществу: https://clc.to/yJ5krg