uz
Feedback
Библиотека Go для собеса | вопросы с собеседований

Библиотека Go для собеса | вопросы с собеседований

Kanalga Telegram’da o‘tish

Вопросы с собеседований по Go и ответы на них. Покажем, как запустить своего ии-агента: https://clc.to/tvpmD По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197

Ko'proq ko'rsatish
7 429
Obunachilar
-324 soatlar
-167 kunlar
+930 kunlar
Postlar arxiv
Как с помощью тегов json:"..." управлять именами полей, пропуском полей и именами с разным регистром при маршалинге Теги json:"..." — это подсказки для пакетa encoding/json, как именно записывать поля структуры в JSON. Без тегов Go сам придумывает имя поля в JSON из имени поля структуры: Name"Name", UserID"UserID". Изменение имени поля:
type User struct {
    Name  string `json:"name"`
    Email string `json:"email_address"`
}
Полностью скрыть поле («-»):
type User struct {
    Name     string `json:"name"`
    Password string `json:"-"`
}
Password вообще не появится в JSON. Пропускать пустые поля (omitempty):
type User struct {
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}
🎁 Новогодняя акция: 3 курса по цене 1 🤝 Помощь с выбором курса 🐸 Библиотека Go для собеса

Избегай Race Condition в карьере Пока другие учат только синтаксис Go, ты можешь освоить архитектуру высоконагруженных систем
Избегай Race Condition в карьере Пока другие учат только синтаксис Go, ты можешь освоить архитектуру высоконагруженных систем. На собеседованиях в BigTech смотрят не на то, как ты пишешь if err != nil, а на то, как ты строишь взаимодействие сервисов. Оффер 1 + 2: Покупаешь один курс (основной), получаешь доступ к трем. Мастхэв для гофера: — Архитектуры и шаблоны проектирования; — Алгоритмы и структуры данных. Задеплоить знания Таймаут: 31 декабря. Ментор здесь: @manager_proglib

Что делают json.Marshal и json.MarshalIndent, чем они отличаются json.Marshal и json.MarshalIndent оба кодируют значение в JSON, но Marshal выдаёт компактный JSON в одну строку, а MarshalIndentчеловекочитаемый JSON с отступами и переводами строк. 🎁 Новогодняя акция: 3 курса по цене 1 🤝 Помощь с выбором курса 🐸 Библиотека Go для собеса

Как вам вопросы прошедшей недели Оцените их по шкале 🔥,❤️,👍,😢, 🥱, где 🔥 — это супер, а 🥱 — это скучно. Также приветствуется фидбек в комментах. 🐸 Библиотека Go для собеса

В чём разница между errors.Is и errors.As errors.Is(err, target) — проверяет, встречается ли где‑то внутри обёрток ошибка target по значению. errors.As(err, &target) — ищет внутри обёрток ошибку определённого типа и, если находит, кладёт её в target. 🐸 Библиотека Go для собеса

Что делает errors.As errors.As проходит по цепочке обёрнутых ошибок и пытается найти в ней значение, которое можно привести к заданному типу, записывая найденную ошибку в переданный указатель и возвращая true при успехе. Функция вызывается как errors.As(err, &target), где target — указатель на переменную интерфейсного или конкретного типа ошибки, например, *os.PathError. Внутри она разворачивает ошибку через Unwrap, проверяя каждое звено цепочки на возможность присваивания в target по правилу совместимости типов. 🐸 Библиотека Go для собеса

Что делает errors.Is errors.Is разбирает цепочку обёрнутых ошибок и проверяет, эквивалентна ли какая‑то ошибка внутри этой цепочки целевой ошибке. Функция errors.Is вызывает Unwrap у ошибки, если она его реализует и проходит по всей цепочке обёрток, пока не найдёт совпадение по ==, либо через метод Is, если он реализован у ошибки. 🐸 Библиотека Go для собеса

Зачем в появились errors.Is и errors.As, если уже есть сравнение err == someErr errors.Is и errors.As нужны для корректной работы с обёрнутыми ошибками, когда err содержит не просто константу, а стек контекста. Обычное сравнение err == someErr работает только если: • err указывает ровно на ту же ошибку, что и someErr. • ошибка не была обёрнута через fmt.Errorf("%w", err) или аналогичные механизмы. Как только добавляется контекст fmt.Errorf("read config: %w", err), внешнее значение меняется, и == уже не срабатывает, хотя внутри всё ещё лежит исходная ошибка. 🐸 Библиотека Go для собеса

Какая разница между пустым select и пустым for Это два способа создания бесконечного цикла, но они кардинально отличаются по поведению и потреблению ресурсов. select {} — горутина блокируется навсегда, не потребляет CPU потому что горутина паркуется runtime'ом. for {} — это бесконечный цикл, 100% CPU одного ядра потому что постоянно проверяет условие цикла. 🔹 Математика для Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Как ведёт себя select без case В Go выражение select {} без блоков case — это бесконечная блокирующая операция. Это означает, что текущая горутина навсегда застрянет в ожидании какого-либо события, которого при этом нет. Такой вызов часто используется для удержания основной горутины живой, чтобы программа не завершилась, например в серверных приложениях, где запущены другие горутины, и нужно, чтобы главный поток ждал их бесконечно:
func main() {
    go doSomething()
    select {} 
}
🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Расскажите подробнее про работу syncOnce sync.Once в Go обеспечивает выполнение функции ровно один раз даже при конкурентных вызовах из множества горутин, используя атомарное поле done типа atomic.Bool и мьютекс. При вызове Do(f) сначала проверяется o.done.Load() — если флаг true, метод сразу возвращается без выполнения f. Это оптимизировано для горячего пути: поле done размещено первым в структуре для минимизации инструкций на amd64/386. Неправильная реализация только с CompareAndSwap привела бы к гонке данных, где вторая горутина вернулась бы до завершения f первой. Если done равно false, вызывается doSlow(f): захватывается мьютекс o.m.Lock(), повторно проверяется done, и только тогда выполняется f() с отложенной установкой o.done.Store(true). Это гарантирует, что f запустится ровно раз, а все последующие вызовы дождутся завершения. Если f паникует, Do считает задачу выполненной, и будущие вызовы пропускают её. 🔹 Основы IT для непрограммистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Как вам вопросы прошедшей недели Оцените их по шкале 🔥,❤️,👍,😢, 🥱, где 🔥 — это супер, а 🥱 — это скучно. Также приветствуется фидбек в комментах. 🐸 Библиотека Go для собеса

Как поведёт себя go test, если в тестовой функции происходит panic, но не вызываются t.Error() или t.Fail() go test помечает тест как FAILED и выводит информацию об ошибке. Пример:
func TestPanic(t *testing.T) {
    x := 5
    y := 0
    result := x / y  // panic: runtime error: integer divide by zero
    // t.Error() и t.Fail() НЕ вызывались
}
Вывод go test:
--- FAIL: TestPanic (0.00s)
panic: runtime error: integer divide by zero

goroutine 6 [running]:
testing.tRunner.func1()
    /usr/lib/go-1.20/src/testing/testing.go:1526 +0x1c4
panic(...)
    /usr/lib/go-1.20/src/runtime/panic.go:884 +0x212
main.TestPanic(...)
    /path/to/test_test.go:10 +0x34
testing.tRunner(...)
    /usr/lib/go-1.20/src/testing/testing.go:1526 +0x1a4

FAIL
🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Go быстр, но математика быстрее Можно бесконечно оптимизировать горутины, но если ваша ML-модель построена на кривой математи
Go быстр, но математика быстрее Можно бесконечно оптимизировать горутины, но если ваша ML-модель построена на кривой математике, перформанс не спасет. Мы перезапустили курс по матану для тех, кто хочет писать умный софт. Живые вебинары уже идут. Что в меню: 1. Linear Algebra: разбираем свойства векторов, ранги матриц и операции над ними (база для любой нейронки); 2. Regression Analysis: строим линейную регрессию, разбираем МНК и учимся предсказывать значения; 3. SVD: реализуем сингулярное разложение для рекомендательных систем и сжатия данных. Инструментарий — NumPy и scikit-learn , но логика применима везде. ⏳ Вход закрывается 9 декабря. Запрыгивайте в последний вагон: https://clc.to/LojFzw

В чём разница между t.Error(), t.Fail(), t.Fatal() и t.FailNow() в тестах t.Error(), t.Fail(), t.Fatal() и t.FailNow() используются для обозначения неудачи теста, но различаются по поведению после вызова. t.Fail() и t.Error() помечают тест как неудачный, но позволяют коду выполняться дальше, включая subtests через t.Run(). t.Error() дополнительно логирует сообщение об ошибке t.FailNow() и t.Fatal() сначала вызывают Fail(), затем останавливают текущую горутину теста через runtime.Goexit(), выполняя все defer, но не прерывая другие горутины. t.Fatal() логирует сообщение перед остановкой. t.FailNow() вызывается только из горутины основного теста. 🔹 Основы IT для непрограммистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Напишите функцию сортировки массива без использования встроенных методов Сортировка пузырьком:
package main

import "fmt"

func BubbleSort(nums []int) {
    n := len(nums)
    if n < 2 {
        return
    }

    for i := 0; i < n; i++ {
        swapped := false

        for j := 0; j < n-1-i; j++ {
            if nums[j] > nums[j+1] {
                nums[j], nums[j+1] = nums[j+1], nums[j]
                swapped = true
            }
        }

        if !swapped {
            break
        }
    }
}

func main() {
    data := []int{5, 2, 6, 3, 1, 4}
    BubbleSort(data)
    fmt.Println(data)
}
🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Когда между идеей и продом — преград нет! В VK любят решать сложные и масштабные задачи, а ещё — быстро реализовывать идеи. Компания рассказала, каких принципов придерживается команда в работе и какими результатами гордится. Переходите по ссылке, там много интересного!

Как с помощью пакета sort можно проверить, отсортирован ли произвольный слайс по своей кастомной less-функции Для этого есть функция SliceIsSorted, которая принимает слайс и функцию less, аналогичную той, что используется в sort.Slice. Она возвращает true, если слайс уже отсортирован согласно переданному компаратору. 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Как в Go отсортировать слайс структур без явной реализации sort.Interface Для этого есть функции sort.Slice и sort.SliceStable, которые принимают любой слайс и функцию less с сигнатурой func(i, j int) bool. Внутри функции less можно описать логику сравнения элементов слайса по нужным полям. 🔹 Математика для Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

🔬 Вы когда-нибудь смотрели на код и думали: «Работает, но почему?» А теперь представьте, что вы: → понимаете, почему модель
🔬 Вы когда-нибудь смотрели на код и думали: «Работает, но почему?» А теперь представьте, что вы: → понимаете, почему модель учится слишком медленно или слишком быстро; → видите, какие данные реально влияют на предсказание, а какие — шум; → знаете, что происходит внутри нейронки. 4 декабря стартует курс «Математика для разработки AI-моделей». Линал, оптимизация, матан, статистика — всё, что происходит внутри модели между input и output. Практика на Python. Живые разборы с экспертами из SberAI, ВШЭ, Wildberries&Russ. 3 задания + финальный проект. Без теории ради теории — только то, что реально используется в моделях. 🎁 Бонус: курс по школьной математике + тест уровня математики 👉 Записаться