Библиотека Go для собеса | вопросы с собеседований
6.84K subscribers
219 photos
6 videos
1 file
396 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
🤔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
Что такое IIFE Immediately Invoked Function Expression

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

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

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

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

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

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

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

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

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

⚡️Пройдите опрос и помогите всему сообществу: https://clc.to/yJ5krg
1
Какой файл является обязательным в корне директории, чтобы Go проект считался модулем

Обязательным файлом в корне директории, чтобы Go проект считался модулем, является файл go.mod.

Наличие файла go.mod позволяет инструментам Go понимать, что данный каталог — корень модуля, и использовать его для поиска зависимостей, разрешения импортов и управления версиями пакетов. Без этого файла Go не сможет правильно определить границы модуля и будет рассматривать проект как GOPATH-проект или не модуль вовсе.

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