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

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

前往频道在 Telegram

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

显示更多
7 429
订阅者
-324 小时
-167
+930
帖子存档
🔬 Вы когда-нибудь смотрели на код и думали: «Работает, но почему?» А теперь представьте, что вы: → понимаете, почему модель
🔬 Вы когда-нибудь смотрели на код и думали: «Работает, но почему?» А теперь представьте, что вы: → понимаете, почему модель учится слишком медленно или слишком быстро; → видите, какие данные реально влияют на предсказание, а какие — шум; → знаете, что происходит внутри нейронки. 4 декабря стартует курс «Математика для разработки AI-моделей». Линал, оптимизация, матан, статистика — всё, что происходит внутри модели между input и output. Практика на Python. Живые разборы с экспертами из SberAI, ВШЭ, Wildberries&Russ. 3 задания + финальный проект. Без теории ради теории — только то, что реально используется в моделях. 🎁 Бонус: курс по школьной математике + тест уровня математики 👉 Записаться

Когда стоит использовать sort.Sort, а когда sort.Stable sort.Sort не гарантирует сохранение относительного порядка равных элементов и обычно быстрее за счёт менее строгих требований. sort.Stable обеспечивает стабильную сортировку, то есть элементы с одинаковым ключом остаются в исходном порядке, что важно при многократной сортировке по разным полям. 🔹 Математика для Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Какие методы нужно реализовать, чтобы тип удовлетворял sort.Interface Нужно три метода: Len() intколичество элементов в коллекции, Less(i, j int) bool — должен ли элемент i идти перед j, и Swap(i, j int) — как поменять местами элементы по индексам i и j. После этого такой тип можно передавать в sort.Sort или sort.Stable. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

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

Что использовать, если нужно сортировать не только числа и строки, а пользовательские структуры Для сортировки кастомных типов используется интерфейс sort.Interface, который можно реализовать для собственного типа коллекции. Это позволяет описать произвольный порядок элементов, например по полю или по нескольким полям подряд. 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

🤖 Раньше в AI мог попасть любой, кто осилил пару туториалов. Теперь нужны те, кто может объяснить: → почему эта архитектура
🤖 Раньше в AI мог попасть любой, кто осилил пару туториалов. Теперь нужны те, кто может объяснить: → почему эта архитектура сработает, а та — нет; → что происходит внутри модели, когда она не сходится; → как найти решение, а не перебирать гиперпараметры наугад. Все эти навыки требуют понимания того, как и почему работают модели. А это чистая математика. 🔥 Proglib Academy запускает курс «Математика для разработки AI-моделей». Ведут эксперты из SberAI, ВШЭ, Т-Банк, Wildberries. 📝 Что внутри? → 2 месяца живых занятий с возможностью задавать вопросы напрямую. → Практика на Python. Не теория в вакууме, а применение. → 3 домашних задания + финальный проект с детальным разбором. ⏰ Старт 4 декабря ⌛ Только до конца ноября: → Скидка 40%; → Курс «Школьная математика» в подарок; → Тест на определение уровня математики. 🎄 Сделай себе подарок на Новый год

Какие стандартные инструменты для сортировки есть в пакете sort в Go Пакет sort предоставляет готовые функции для базовых типов: sort.Ints для слайсов целых чисел, sort.Strings для слайсов строк и sort.Float64s для слайсов чисел с плавающей запятой. Для проверки, отсортирован ли слайс, есть функции IntsAreSorted, StringsAreSorted и Float64sAreSorted, которые возвращают bool. 🔹 AI-агенты для DS-специалистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Нужно ли как‑то очищать объект перед возвратом в пул и почему это важно с точки зрения безопасности и багов При реюзе можно получить грязное состояние: старые поля структуры, неочищенный bytes.Buffer, кусок старого JSON в []byte и т.д. Это может привести к трудноотлавливаемым багам. Если в объекте были чувствительные данные, возврат объекта без очистки даёт риск утечки: другой код может прочитать их при следующем Get. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Что произойдёт, если класть в один и тот же sync.Pool объекты разных типов Пул примет значения разных типов: Put не проверяет тип, а Get вернёт any, который вы потом приведёте к конкретному типу через type assertion. Если из пула вернётся объект не того типа, type assertion даст panic в рантайме, причём воспроизвести и отладить это будет сложно из‑за конкуренции и недетерминизма. 🔹 Основы IT для непрограммистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Расскажите про поля и методы sync.Pool. Для чего используется поле New, как ведёт себя Get, если пул пуст Поле New — это функция func() any, которую можно задать, чтобы пул умел сам создавать новые объекты, когда внутри ничего нет. Если New не задано и пул пуст, то Get вернёт nil, и код, который этим пользуется, обязан это корректно обработать. 🔹 AI-агенты для DS-специалистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

🎄 С Нового года начну учиться — знакомо? А потом январь — освоюсь после праздников, февраль — доделаю текущие дела... Не отк
🎄 С Нового года начну учиться — знакомо? А потом январь — освоюсь после праздников, февраль — доделаю текущие дела... Не откладывай на следующий год то, что можно начать уже в этом. 🗓️ 4 декабря стартует экспресс-курс «Математика для Data Science»— всё, что нужно для уверенных ответов на собесах: → 2 месяца без воды; → обновлённая программа (ноябрь 2025); → живые вебинары с экспертами; → записи всех занятий; → практика на Python + финальный проект с фидбэком. Формат: 2 месяца интенсива и к началу следующего года ты готов к собесам. Пока другие будут собираться с мыслями после НГ, ты уже будешь на полпути к офферу мечты. 🎁 Только до 30 ноября: → скидка 40% на курс; → курс «Базовая математика» в подарок; → бесплатный тест уровня математики. 👉🏻 Хочешь на курс → пиши менеджеру

В каких случаях применение sync.Pool будет неэффективным или даже вредным для производительности Когда sync.Pool не нужен • Объекты создаются редко или их создание дешёвое: накладные расходы на Get/Put и внутреннюю механику пула могут оказаться дороже, чем простая новая аллокация. • Объектов мало и они живут долго: в этом случае они и так нормально переживаются в heap, а пул только усложняет код и увеличивает удерживаемый объём памяти. Когда sync.Pool вредит производительности: • Высокая конкуренция, но мало реюза: если горутин много, а «хитов» по пулу мало, вы платите за синхронизацию и усложнение GC, почти не снижая количество аллокаций. • Объекты большие: удерживание крупных структур в пуле раздувает память и увеличивает нагрузку на GC, иногда сильнее, чем выгода от экономии аллокаций. 🔹 Математика для Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

В чём разница между sync.Pool и ручной реализацией object pool через chan или []T + sync.Mutex sync.Pool ничего не гарантирует: объект, который положили в пул, может быть в любой момент выкинут GC и никогда не вернуться из Get. Это «лучше есть, чем хранить», а не кэш с гарантией. Пул на chan или []T+Mutex ведёт себя как обычная очередь/стек: пока вы сами не выбросите объект, он будет там лежать и обязательно вернётся, если его взять. 🔹 Экспресс-курс «Математика для Data Science» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

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

Как регулируется сборка мусора в Go В Go управление запуском сборщика мусора задаётся параметром GOGC. Этот параметр определяет, насколько увеличится используемая память с момента последней очистки, прежде чем запустится следующий процесс сборки мусора. Что означают разные значения GOGC: • Значение по умолчанию — 100 — запускает сборку, когда память удваивается по сравнению с после-очисточным состоянием. • Если поставить 0, автосборка мусора отключается полностью. • Числа меньше 100 заставляют сборщик работать чаще, сокращая использование памяти, но увеличивая нагрузку на процессор. • Значения больше 100 — запускают сборку реже, что снижает нагрузку CPU, но увеличивает объём занятой памяти. 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Какой подход использовать, если нужно модифицировать данные так, чтобы другие срезы не видели изменений Нужно сделать новый срез с нужной длиной и емкостью, затем скопировать в него данные из исходного среза через copy. После этого изменения будут вноситься только в копию, и исходный срез и другие срезы на те же данные останутся без изменений. Пример:
func modifyLocal(s []int) []int {
    copySlice := make([]int, len(s))
    copy(copySlice, s)
    // изменения только в copySlice
    copySlice[0] = 100
    return copySlice
}
🔹 Основы IT для непрограммистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

В чем разница между context.Background() и context.TODO() context.Background() — это корневой контекст для вашего приложения. Используйте его как точку отсчета в главной функции или верхнем уровне обработки запросов. Это полностью независимый контекст без родителя:
func main() {
    ctx := context.Background()
    // начало всей программы
}
context.TODO() — заглушка для тех случаев, когда вы еще не определились, какой контекст передавать. Это временное решение: код работает, но вы планируете заменить его на правильный контекст, когда уточните требования:
func processData() {
    ctx := context.TODO()  // TODO: заменить на нужный контекст
    // временный вариант
}
Оба создают не имеющий родителя контекст, но семантически они разные. 🔹 Алгоритмы и структуры данных 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Почему nil-срез и пустой срез через []int{} — разные значения, но ведут себя одинаково Оба имеют длину 0 и ёмкость 0. Но nil-срез — это буквально nil, а []int{} — это выделенная память нулевого размера.
var nilSlice []int
emptySlice := []int{}

fmt.Println(nilSlice == nil)   // true
fmt.Println(emptySlice == nil) // false

// Но в большинстве операций ведут себя одинаково
for range nilSlice { }
for range emptySlice { }

s := append(nilSlice, 1)   // работает
s = append(emptySlice, 1)  // работает
Различие заметно только при прямом сравнении с nil. В остальном — функционально эквивалентны. 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸 Библиотека Go для собеса

Почему append на nil-срезе работает, а добавление в nil-мапу ломается В Go срезы и мапы ведут себя по-разному, когда не инициализированы: nil-срез — это жизнеспособный срез с длиной и ёмкостью равными нулю. Когда используется append к nil-срезу, Go автоматически выделяет новую память и создаёт срез нужного размера. Поэтому добавлять элементы в nil-срез можно без проблем.
var a []int
a = append(a, 4, 5, 6) // Go создал новый срез под эти значения
fmt.Println(a)         // [4 5 6]
nil-мапа — это просто пустой указатель без выделенной памяти. Если попытаться добавить ключ в такую мапу, Go выдаст панику, потому что для хранения данных места нет. Чтобы использовать мапу, её надо сначала инициализировать через make.
var m map[int]int
// m[1] = 1 // вызовет панику
m = make(map[int]int)
m[1] = 1 // теперь работает
🐸 Библиотека Go для собеса

🔥 Закрой пробелы в математике за 8 недель Валишься на вопросах про математику на собесах? Proglib Academy запускает курс «Математика для Data Science», чтобы помочь тебе получить вакансию мечты! 🔎 Тебя ждут: → топовые эксперты, один из них на видео — Мария Тихонова. Мария — кандидат компьютерных наук, руководитель исследовательского направления SberAI, доцент факультета компьютерных наук и преподаватель НИУ ВШЭ; → живые вебинары, на которых можно задать вопросы спикерам; → доступ к материалам в записи, если не успели на лекцию и чат; → 3 задания с практикой на Python и финальный проект с подробной обратной связью от экспертов курса; → актуальные знания: программа разработана в ноябре 2025г; → программа без воды — 2 месяца только самого нужного для старта. 👉 Пройди короткий тест и узнай свой уровень математики. Приятные бонусы: 🎁 скидка 40% до 30 ноября; 🎁 оплати до конца ноября → курс «Школьная математика» в подарок. 🔗 Подробнее о курсе