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

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

前往频道在 Telegram

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

显示更多
7 423
订阅者
+224 小时
-77
+730
吸引订阅者
六月 '26
六月 '26
+89
在1个频道中
五月 '26
+135
在1个频道中
Get PRO
四月 '26
+143
在1个频道中
Get PRO
三月 '26
+153
在0个频道中
Get PRO
二月 '26
+307
在3个频道中
Get PRO
一月 '26
+154
在0个频道中
Get PRO
十二月 '25
+139
在3个频道中
Get PRO
十一月 '25
+125
在2个频道中
Get PRO
十月 '25
+117
在1个频道中
Get PRO
九月 '25
+77
在0个频道中
Get PRO
八月 '25
+150
在2个频道中
Get PRO
七月 '25
+144
在0个频道中
Get PRO
六月 '25
+147
在3个频道中
Get PRO
五月 '25
+148
在0个频道中
Get PRO
四月 '25
+165
在1个频道中
Get PRO
三月 '25
+352
在52个频道中
Get PRO
二月 '25
+214
在31个频道中
Get PRO
一月 '25
+339
在35个频道中
Get PRO
十二月 '24
+361
在35个频道中
Get PRO
十一月 '24
+305
在37个频道中
Get PRO
十月 '24
+287
在35个频道中
Get PRO
九月 '24
+317
在35个频道中
Get PRO
八月 '24
+309
在35个频道中
Get PRO
七月 '24
+355
在36个频道中
Get PRO
六月 '24
+293
在29个频道中
Get PRO
五月 '24
+314
在35个频道中
Get PRO
四月 '24
+355
在35个频道中
Get PRO
三月 '24
+437
在29个频道中
Get PRO
二月 '24
+395
在29个频道中
Get PRO
一月 '24
+545
在24个频道中
Get PRO
十二月 '23
+627
在28个频道中
Get PRO
十一月 '23
+488
在7个频道中
Get PRO
十月 '23
+1 507
在22个频道中
日期
订阅者增长
提及
频道
25 六月0
24 六月+4
23 六月+4
22 六月+5
21 六月+1
20 六月+3
19 六月+1
18 六月+2
17 六月+3
16 六月+2
15 六月+5
14 六月0
13 六月+1
12 六月+1
11 六月+4
10 六月0
09 六月+18
08 六月+2
07 六月+5
06 六月+2
05 六月+4
04 六月+7
03 六月+2
02 六月+6
01 六月+7
频道帖子
Какие основные отличия горутины от потока ➡️ Поток создаёт и планирует операционная система через своё ядро. Горутиной управляет рантайм Go. Его планировщик работает в пользовательском пространстве и не дёргает ядро на каждое переключение. ➡️ Поток получает фиксированный стек, обычно от 1 до 8 МБ. Горутина стартует со стеком примерно в 2 КБ, и этот стек растёт и сжимается по мере надобности. Поэтому горутин можно держать сотни тысяч, а потоков столько вы не создадите.   ➡️ Создание потока дорогое, оно идёт через системный вызов. Горутина создаётся дёшево, это по сути структура в памяти рантайма. Отсюда и разница в количестве. ➡️ Переключение потоков делает ядро, это полноценный контекстный свич с заметными затратами. Переключение горутин происходит в пользовательском пространстве и стоит дешевле. ➡️ Потоки чаще общаются через разделяемую память и примитивы синхронизации вроде мьютексов. В Go принят другой подход, общение через каналы. Формулируют это так, не разделяйте память ради общения, общайтесь, чтобы разделять данные. 🐸 Библиотека Go для собеса

2
❓ Как получить действительную и мнимую части обратно из комплексного числа Встроенными функциями real и imag. Первая возвращает действительную часть, вторая мнимую. Тип результата совпадает с базовым типом числа, то есть float32 для complex64 и float64 для complex128: n := complex(2.0, 3.0) fmt.Println(real(n), imag(n)) // 2 3 🐸 Библиотека Go для собеса
641
3
🔍Тестовое собеседование с Go TeamLead из американского FinTech в этот четверг 25 июня(в четверг!) в 19:00 по мск приходи онл
🔍Тестовое собеседование с Go TeamLead из американского FinTech в этот четверг 25 июня(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика. Как это будет: 📂 Дмитрий Дорофеев, Go TeamLead в американском FitTech Truv Inc, ex-VK, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Дмитрий будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Дмитрию Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot Реклама. О рекламодателе.
679
4
❓ Что будет, если тело функции в Go — пустые фигурные скобки Функция с пустым телом компилируется без ошибок. Она ничего не делает, ничего не возвращает: func doNothing() {} Вызов такой функции просто ничего не произведёт. Это не ошибка компилятора, не паника в рантайме. Полезно, например, как заглушка при разработке или для реализации интерфейса, где конкретный метод намеренно не нужен. 🐸 Библиотека Go для собеса
733
5
🤖 Какие задачи можно действительно доверить ИИ? Уже завтра разберём это на открытом уроке «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов». Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft от Яндекса. После урока вы: 🔹 поймёте, какие задачи стоит делегировать AI уже сегодня; 🔹 научитесь быстрее разбираться в новых проектах и кодовой базе; 🔹 увидите, как выглядит современный workflow разработки с AI; 🔹 узнаете, где AI помогает экономить время, а где всё ещё нужен контроль разработчика. На практике разберём путь от получения задачи до готового Pull Request с использованием AI-инструментов и AI-ревью. 🗓️ 23 июня, 19:00 (МСК) ⏱️ 90 минут 👉 Зарегистрироваться и получить рабочий AI-workflow для своих задач
777
6
❓ Как Go работает с комплексными числами В Go комплексные числа встроены прямо в язык, отдельный пакет для базовой работы не нужен. Два встроенных типа Есть complex64 и complex128. У complex64 действительная и мнимая части это float32, у complex128 это float64. По умолчанию нетипизированная комплексная константа имеет тип complex128, поэтому в большинстве случаев работают именно с ним. Как создать комплексное число Двумя способами. Через литерал с суффиксом i для мнимой части: z := 2 + 3i Либо через встроенную функцию complex, которая собирает число из двух вещественных частей одного типа: re := 2.0 im := 3.0 z := complex(re, im) // complex128 🐸 Библиотека Go для собеса
799
7
🤖 AI пишет код за вас? Это самое скучное, что он умеет Основное время разработчик тратит на другое: разобраться в чужой кодо
🤖 AI пишет код за вас? Это самое скучное, что он умеет Основное время разработчик тратит на другое: разобраться в чужой кодовой базе, найти нужный участок проекта, проверить решение, собрать Pull Request. Вот где AI реально экономит часы — если знать, как им пользоваться. 23 июня Ольга Лукьянова покажет это на практике: как с помощью современных AI-инструментов быстро погружаться в незнакомый проект, находить нужный код, реализовывать задачи и проверять результат до ревью коллег. В итоге вы увидите не отдельные приёмы и промпты, а целостный workflow, который можно встроить в свою работу уже на следующий день 🔥 Чтобы лучше погрузиться в тему: 📺 Выступление про SourceCraft 📖 Статья на Хабре 🗓️ Когда: 23 июня, 19:00 (МСК) 👉 Занять место на открытом уроке
824
8
❓ Что возвращает copy и сколько элементов он копирует copy копирует элементы из исходного слайса в целевой и возвращает число скопированных элементов. Это число равно минимуму из len(dst) и len(src). Лишние элементы источника просто игнорируются, ошибки не будет. src := []int{1, 2, 3, 4} dst := make([]int, 2) n := copy(dst, src) fmt.Println(n, dst) // 2 [1 2] 🐸 Библиотека Go для собеса
868
9
❓ Что возвращает append append добавляет элементы в конец слайса и возвращает обновлённый слайс. Сам аргумент он менять не обязан, потому что при нехватке места выделяется новый базовый массив, и старая переменная продолжит указывать на старые данные. Поэтому пишут так. Если результат не присвоить, вы рискуете потерять добавленные элементы или работать с устаревшим слайсом. 🐸 Библиотека Go для собеса
937
10
❓ Вам нужно итерироваться по map[string]int и получать элементы всегда в одном и том же порядке. Какой подход использовать Порядок итерации по map в Go намеренно рандомизирован с версии 1.0. Это сделано специально, чтобы разработчики не полагались на порядок как на гарантию.   Надёжный способ: keys := make([]string, 0, len(m)) → заполнить ключами → sort.Strings(keys) → итерироваться по слайсу, читая значения из map.   Отдельный вопрос со звёздочкой: если ключи — числа, а не строки, тип ключа влияет на аллокации при сортировке. []int с sort.Ints не аллоцирует лишнего, тогда как конвертация в []interface{} для универсальной сортировки создаёт нагрузку на GC при большом количестве элементов. 🐸 Библиотека Go для собеса
1 034
11
⏰ Уже сегодня в 19:00 (МСК) стартует открытый урок! Тема: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥 За 90 минут разберёмся, когда действительно стоит строить мультиагентную систему, а когда она только добавляет сложность, расходы и новые точки отказа. Поговорим о критериях выбора архитектуры, типичных ошибках и ограничениях современных ИИ-агентов, которые важно учитывать ещё до внедрения в продукт. 🎙️ Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru. 🎁 Для всех участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов». 👉 Успей присоединиться к уроку
1 034
12
❓ Чем io.EOF отличается от io.ErrUnexpectedEOF? В каком случае Read должен возвращать EOF, а в каком — ErrUnexpectedEOF io.EOF — сигнал о штатном конце данных. Read возвращает его когда источник исчерпан и больше нечего читать. Это не ошибка в смысле «что-то пошло не так» — это нормальное завершение потока. По спецификации io.Reader, EOF может прийти либо вместе с последними байтами (n > 0, err == io.EOF), либо отдельным вызовом (n == 0, err == io.EOF). Оба варианта корректны — поэтому правильный код всегда сначала обрабатывает прочитанные байты, потом проверяет ошибку. io.ErrUnexpectedEOF — сигнал о том, что поток закончился в неожиданном месте. Источник данных иссяк раньше, чем ожидалось по протоколу или по запросу. Типичный пример — io.ReadFull. Функция просит ровно len(buf) байт. Если источник вернул EOF до того, как буфер заполнен, ReadFull транслирует это в ErrUnexpectedEOF. 🐸 Библиотека Go для собеса
991
13
🔥 Чем больше агентов — тем лучше? Не всегда. Уже завтра поговорим о реальных ограничениях на открытом уроке «Мультиагентные
🔥 Чем больше агентов — тем лучше? Не всегда. Уже завтра поговорим о реальных ограничениях на открытом уроке «Мультиагентные системы: почему большинство архитектур переусложнены». Спикер — Дмитрий Юдин, руководитель AI/ML-направления в Сloud․ru. После урока вы: 🔹 будете лучше ориентироваться в выборе между одним агентом и мультиагентной системой; 🔹 поймёте, какие архитектурные ошибки встречаются чаще всего; 🔹 получите практические ориентиры для проектирования и внедрения агентных систем; 🔹 будете лучше понимать возможности и ограничения современных ИИ-агентов. 🗓️ 18 июня, 19:00 (МСК) ⏱️ 90 минут 👉 Зарегистрироваться и получить промокод на 10 000 ₽
1 023
14
❓ Разработчик создаёт time.NewTicker внутри цикла и забывает вызвать ticker.Stop(). Что произойдёт time.NewTicker регистрирует таймер в runtime heap таймеров. Раньше GC не собирал тикеры автоматически — они жили, пока не будет вызван Stop(). Начиная с Go 1.23 ситуация изменилась: garbage collector теперь может собирать неиспользуемые тикеры, если на них больше нет ссылок. То есть забытый Stop() больше не гарантирует утечку памяти. ⚠️ Важно Если на тикер всё ещё есть ссылка, например, в цикле или замыкании, он продолжит срабатывать по расписанию, занимать ресурсы и слать значения в канал, который никто не читает. Это по-прежнему может проявляться как постепенный рост потребления памяти и деградация производительности под нагрузкой — просто теперь причина не всегда в самом факте отсутствия Stop(), а в удержании ссылок. Как это поймать go tool pprof с профилем goroutines покажет горутины, заблокированные на чтении из каналов тикеров. Heap-профиль может показать рост объектов, связанных с таймерами. 🐸 Библиотека Go для собеса
1 044
15
❓ У вас есть map[int]Record.Несколько горутин читают и пишут в него одновременно. Что произойдёт Go рантайм с версии 1.6 содержит детектор конкурентных записей в map. При одновременной записи из нескольких горутин программа завершится с паникой concurrent map writes — намеренно, чтобы не допустить повреждения данных.   Но детектор срабатывает не всегда: он вероятностный. Поэтому полагаться на него как на защиту нельзя.   Правильные решения в зависимости от нагрузки: sync.RWMutex вокруг map, sync.Map для случаев с редкими записями и частыми чтениями, или шардирование — несколько map с отдельными мьютексами. 🐸 Библиотека Go для собеса
1 135
16
🤖 Большинство материалов по ИИ-агентам устаревают быстрее, чем многие курсы успевают обновить программу Инструменты, подходы
🤖 Большинство материалов по ИИ-агентам устаревают быстрее, чем многие курсы успевают обновить программу Инструменты, подходы и фреймворки меняются постоянно. Поэтому важно не просто собрать демо-агента, а понимать архитектуру, ограничения и практики, которые используются в продакшене. 🚀 30 июня стартует курс «Разработка ИИ-агентов». ⏳ До 20 июня действует сниженная цена. За 8 недель под руководством практиков из бигтеха вы соберёте собственного AI-агента, который работает с API, использует память, подключается к внешним сервисам и решает реальную задачу. Что разберём: 🔹 архитектуру AI-агентов и надёжный вывод; 🔹 LangGraph и оркестрацию workflow; 🔹 MCP и работу с внешними инструментами; 🔹 RAG-системы; 🔹 AgentOps, observability и evals; 🔹 безопасность и защиту от prompt injection; 🔹 мультиагентные системы и A2A. На курсе отдельно разбираем вопросы надёжности, безопасности и контроля агентных систем. 👉 Узнать программу и забронировать место со скидкой
1 161
17
❓ Какого типа результат len и можно ли индексировать срез значением int64 len и cap возвращают int, индексы тоже имеют тип int. Индексировать срез значением int64 напрямую нельзя, нужна конверсия к int. Из-за этого длина среза ограничена размером int на платформе. 🐸 Библиотека Go для собеса
1 103
18
❓ Как объединить два отсортированных среза в один Классическая операция из mergesort. Заводим три указателя: i для a, j для b, k для результата. Сравниваем текущие элементы обоих срезов и берём меньший. После того как один из срезов закончился, дописываем остаток другого. func mergeSorted(a, b []int) []int { res := make([]int, 0, len(a)+len(b)) i, j := 0, 0 for i < len(a) && j < len(b) { if a[i] <= b[j] { res = append(res, a[i]) i++ } else { res = append(res, b[j]) j++ } } res = append(res, a[i:]...) res = append(res, b[j:]...) return res } a[i:]... добавляет хвост одной операцией без лишнего цикла. Сложность O(n + m) по времени, O(n + m) по памяти на результат. 🐸 Библиотека Go для собеса
1 208
19
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию Для следующего карьерного шага мало писать код. Рабо
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем. Одно направление закрывает только часть задачи. Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥 Собери стек навыков под свою цель: 🔹 подготовка к сильным компаниям (алгоритмы, архитектура); 🔹 переход в AI-направление (ИИ-агенты, AgentOps); 🔹 развитие в ML и Data Science (математика, основы ML); 🔹 новый оффер и рост дохода. Полученные знания применяешь в работе уже во время обучения. ⏳ Акция действует 48 часов — 13 и 14 июня. 👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
1 074
20
❓ Почему большой int64 может исказиться при разборе JSON JSON по спецификации не имеет строгих типов int32/int64 — там есть только number, а в Go при разборе encoding/json число сначала парсится в float64, если не указан конкретный тип. Есть несколько решений: Использовать строки для больших чисел: {"id": "9223372036854775807"} Использовать json.Decoder.UseNumber(): dec := json.NewDecoder(r) dec.UseNumber() Кастомный Unmarshal Читать как json.Number и вручную конвертировать в int64 🐸 Библиотека Go для собеса
1 131