Библиотека Go для собеса | вопросы с собеседований
6.84K subscribers
235 photos
9 videos
1 file
483 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Объясните, что такое операции P и V в контексте счетного семафора.

P-операция (wait): поток пытается захватить ресурс. Если счет семафора больше нуля, ресурс захватывается, и счет уменьшается. Если счет равен нулю, поток блокируется до освобождения ресурса.

V-операция (signal): поток освобождает ресурс. Счет семафора увеличивается, и если есть заблокированные потоки, один из них может быть разблокирован.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3
😎 Сколько баллов набрали вы?

Голосуйте, какой у вас уровень разработчика:

😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)

Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.

👉 Научим, как быстро прокачаться от стажера до сеньора
🤩4
🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»

⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)


⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»

Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽

☞ Что ждет тебя в этом квесте

— Получение артефактов: портфолио проектов и сертификаты
— Прокачка от новичка до Senior Data Scientist
— Босс-файты с реальными задачами из индустрии
— Доступ к гильдии единомышленников

📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
1🥱1
Как увеличение уровня изоляции транзакций влияет на производительность системы

С повышением уровня изоляции транзакций увеличивается вероятность блокировок и конкуренции за ресурсы.

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

Напротив, на более низких уровнях изоляции (например, Read Uncommitted) транзакции могут работать быстрее, но есть риск несогласованности данных.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
Почему изоляция транзакции Serializable снижает производительность и когда его стоит применять

Serializable заставляет транзакции выполняться логически последовательно, блокируя строки или таблицы. Это повышает задержки и снижает параллелизм. Применять только там, где критична целостность данных.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
⚡️ Будь как этот гений с картинки — предлагай свои условия работодателю, а не наоборот!

Кто нужен?
Senior ML-Engineer с опытом работы более 6 месяцев в FAANG компаниях. Требование: разработать кросс-платформенное приложение-трекер зарплат с AI-распознаванием вакансий по резюме.


Но если вы пока джун — я бы предложил:

- Full-time контракт: 180к/мес после курса + опцион на карьеру в топ-компаниях
- Либо фикс за проект: стань ML-инженером за 39к вместо 44к с промокодом LASTCALL

🔗 Старт 9 сентября
🥱32
Что такое алгоритм Round Robin и где он применяется

Round Robin — это алгоритм планирования процессов в операционных системах, который циклично распределяет процессорное время между всеми задачами в очереди.

Каждый процесс получает фиксированное время (квант времени), после чего он возвращается в конец очереди, если он не завершил выполнение.

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱3👍1
Иногда реально ощущение, что нас держат в Матрице.

Большинство сидит, читает статьи про ML, смотрит ролики «как это работает» — и всё.

Сегодня последний день промокода Lastcall (−5000 ₽).
Уже завтра стартует первый вебинар по Машинному обучению — полный набор для выхода из Матрицы.

Кто готов вырваться из симуляции и ворваться в сезон найма?

👾 — я уже в команде Нео
👍 — хочу красную таблетку
🤔 — пока думаю, но интересно

👉 Забронируй место сейчас
Как вам вопросы прошедшей недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментах.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍84🔥4🥱3
Как зависит производительность алгоритма Round Robin от величины кванта времени

Слишком маленький квант времени приводит к увеличению накладных расходов на переключение контекста, замедлению выполнения задач и снижению пропускной способности, в то время как слишком большой квант времени приближает его к методу первым пришёл — первым обслужен, увеличивая время ожидания для коротких задач и снижая интерактивность системы

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
Что произойдёт при попытке присвоить значение переменной, если она уже была объявлена ранее с использованием оператора :=

Попытка использовать := для переменной, которая уже была объявлена в текущей области видимости, приведёт к ошибке компиляции.

a := 5
a := 10 // Ошибка компиляции: переменная 'a' уже объявлена


Для повторного присваивания значений переменной нужно использовать просто = без :=, если переменная была уже объявлена.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Что такое Starvation в многозадачной системе

Starvation (голодание) — это состояние в многозадачной системе, когда один или несколько процессов или горутин не могут получить доступ к необходимым ресурсам из-за того, что другие процессы имеют более высокий приоритет или постоянно захватывают эти ресурсы.

Это может привести к тому, что заблокированные горутины не выполняются вообще, что снижает эффективность работы системы.

Примеры:

• В системе, где процессы или горутины имеют разные приоритеты, процесс с низким приоритетом может никогда не получить доступ к процессору, если процесс с более высоким приоритетом постоянно использует ресурсы (например, в случае планировщика с фиксированными приоритетами).

• Если несколько горутин постоянно захватывают мьютекс или каналы, а другие горутины не могут их освободить, это может привести к голоданию. Например, одна горутина может блокировать доступ к общим данным, в то время как другие горутины пытаются захватить этот ресурс, но не могут этого сделать.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Как можно получить адреса байтов в строке в Go

Строки в Go неизменяемы, и нельзя получить прямой доступ к их байтам через указатели. Однако можно получить адреса байтов строки через срезы или с использованием пакета unsafe.

Пример с использованием unsafe:
package main

import (
"fmt"
"reflect"
"unsafe"
)

func main() {
s := "hello"
strHeader := (*reflect.StringHeader)(unsafe.Pointer(&s))
ptr := unsafe.Pointer(strHeader.Data)
for i := 0; i < len(s); i++ {
b := *(*byte)(unsafe.Pointer(uintptr(ptr) + uintptr(i)))
fmt.Printf("Byte %d: %c, address = %p\n", i, b, unsafe.Pointer(uintptr(ptr)+uintptr(i)))
}
}


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
2👏1
Что такое волшебное (магическое) число

Волшебное число — это число, которое захардкожено в программе и не имеет комментариев к его использованию.

Пример:
// Плохой вариант с волшебным числом
if statusCode == 200 {
// Выполняем код
}

// Хороший вариант с именованной константой
const OK = 200
if statusCode == OK {
// Выполняем код
}


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4
Объясните разницу между безопасным доступом к байтам строки через срез и использованием unsafe

Когда строку преобразуют в срез байтов, создаётся новая копия данных, и доступ к этим данным безопасен, но это также означает, что данные строки не изменяются.

unsafe позволяет работать с указателями и памятью напрямую, что даёт больше гибкости, но это также приводит к неопределённому поведению, если использовать эти указатели для изменения данных.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Что такое Escape-последовательность

Escape-последовательности обычно начинаются с символа обратной косой черты (\)специальные символы, управляющие символы или символы, имеющие особое значение.

Примеры:
\n — символ новой строки (Line Feed, LF)
\t — символ табуляции (Tab)
\\ — обратная косая черта
\' — одинарная кавычка
\" — двойная кавычка
\r — возврат каретки (Carriage Return, CR)
\b — удаление предыдущего символа (backspace)
\f — сивол перехода на новую страницу (Form Feed)
\u или \U — Unicode символ (например, \u0041 — для 'A')


🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Как вам вопросы прошедшей недели

Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.

Также приветствуется фидбек в комментах.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4🥱4😢2
Что будет, если использовать пакет из _ импорта?

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

Если попытаться обратиться к элементам этого пакета, компилятор Go выдаст ошибку, так как они не были явно экспортированы и доступны для использования.

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

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👏1
Почему структура struct{ int; string } может быть ключом в мапе, а []byte — нет

Go требует, чтобы типы данных, используемые как ключи в map, были сравнимыми. Это означает, что для них должно быть определено сравнение на равенство.

Структуры в Go могут быть использованы в качестве ключей в мапе, если все поля структуры являются сравнимыми.

Срезы не могут быть использованы в качестве ключей в мапе, потому что они не сравнимы по умолчанию. Срезы являются ссылочными типами, и Go не может сравнивать их напрямую на равенство, так как каждый срез может ссылаться на другой массив в памяти, и их содержимое может быть разным, даже если данные в них одинаковые.

🐸 Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🤔2
Почему nil-интерфейс может вести себя неожиданно при сравнении с nil

В Go nil-интерфейс не содержит ни значения, ни типа. Он представлен внутренне как структура с двумя полями: type и value. Если оба поля равны nil, то интерфейс считается nil.

Однако поведение может быть неожиданным, когда интерфейс содержит указатель на nil-объект, который реализует интерфейс. В этом случае сам интерфейс не равен nil, потому что поле type заполнено, хотя поле value равно nil.

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