Библиотека Go для собеса | вопросы с собеседований
Open in Telegram
Вопросы с собеседований по Go и ответы на них. Учиться у нас: https://proglib.io/w/0b524a15 По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot Наши каналы: https://t.me/proglibrary/9197
Show more7 425
Subscribers
-524 hours
-77 days
+630 days
Posts Archive
💬 Для чего предназначена переменная окружения GOEXPERIMENT?
Она позволяет включать экспериментальные функции и возможности в компиляторе, runtime или стандартной библиотеке Go. Эти функции обычно находятся в процессе разработки или тестирования и могут не быть включены в финальный релиз, но доступны для тестирования разработчиками.
📌 Например, Go 1.23 добавляет экспериментальную функцию: generic type aliases. Активировать ее можно с помощью добавления переменной окружения
GOEXPERIMENT=aliastypeparams.
type G[A any, B ~bool, C comparable] = struct {
a A
b B
c C
}🤔 Как меняется математика в разных индустриях: от мобильных игр к фондовым рынкам
🗓 22 августа в прямом эфире разберем как математика применяется в разных отраслях бизнеса. И какие математические навыки необходимы для успешной работы в каждой из них.
Приглашенный спикер: Павел Запольский – Senior Quantitative Researcher at Exness и Co-founder GrowLytics. Запустивший более 10 проектов по машинному обучению и анализу данных для ведущих компаний.
😮 На вебинаре узнаете:
🔵 Математика в бизнесе: Чем отличаются разные сферы друг от друга. Почему стоит понимать специфику сферы
🔵 ML и продуктовое IT: Чем различается математическая сложность от индустрии к индустрии. Какие к ним необходимы уровни подготовки
🔵 Баевская математика в GameDev. Баевская математика как альтернатива AB тестированию. Как математические методы применяются в разработке игр
🔵 Finance: Что такое количественные финансы и математическое моделирование. Обсудим текущие индустриальные тренды в отрасли
🔵 Backtest: Как знания математики делают ваши активы более надежными
🔵 На практике подробно разберем два математических кейса по GameDev и Backtest.
➡️ Зарегистрироваться: https://proglib.io/w/cd799396
💬 Чем версия Go отличается от Go toolchain?
Версия Go — это номер версии языка программирования Go, который указывает на конкретный релиз языка и его стандартной библиотеки. Версия Go определяет синтаксис языка, доступные стандартные библиотеки, и базовые инструменты, входящие в комплект поставки языка.
Go Toolchain — это набор инструментов, предоставляемый с Go, который включает в себя компилятор (
go build), менеджер пакетов (go mod), инструмент тестирования (go test), анализатор кода (go vet) и другие утилиты, необходимые для разработки, сборки и отладки Go программ. Go toolchain обновляется с каждым новым релизом Go, и его версия соответствует версии языка Go.Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
💬 Для чего можно использовать тег структуры json:"-" в Go?
Данный тег можно использовать для того, чтобы игнорировать поле структуры при сериализации в JSON (маршализации).
Это означает, что данное поле не будет включено в итоговый JSON-объект при его создании. Простой пример представлен выше.
💬 Какую функцию Go можно использовать для обработки сигналов операционной системы с использованием контекста?
Пакет
signal имеет функцию NotifyContext, которую можно использовать для обработки сигналов ОС в Go с использованием контекста. На скриншоте представлен простой пример.Открытое собеседование на Gо-разработчика в этот четверг
15 августа(уже в этот четверг!) в 19:00 по мск приходи онлайн на Открытое собеседование от Эйч Навыков.
Как это будет:
1. Даниил Динько, старший разработчик в Ozon, позадает реальные вопросы и задачи разработчику-добровольцу
2. Потом Даня даст подробную обратную связь — объяснит, зачем задавал тот или иной вопрос, как лучше на него ответить или решить задачу
3. В конце можно будет задать любой вопрос Даня
Что узнаешь на Открытом собеседовании:
- Чего ждут от кандидатов на мидл-позиции в Gо-разработке
- Какие вопросы задают на интервью и зачем
- Как подготовиться к собесу, чтобы получить заветный оффер
Это бесплатно?
Бесплатно
Просто зарегистрируйся на открытое собеседование в нашем боте @skills_mentee_bot
Реклама: ООО “Эйч Карьера” erid: LjN8KLCvM
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
💬 Какой основной юзкейс функции TryLock?
В Go 1.18 была введена новая функция TryLock для мьютексов (
sync.Mutex и sync.RWMutex), которая позволяет попытаться захватить блокировку в неблокирующем режиме. Это означает, что если блокировка уже занята, функция просто вернет значение false, вместо того чтобы ждать освобождения блокировки.
Она может быть полезна в ситуациях, когда требуется неблокирующая попытка захватить ресурс. Например, если очередь может быть очищена любой горутиной и не нужно очищать ее несколько раз подряд, первая горутина, которая захватит блокировку, выполнит эту задачу, а остальные могут продолжить работу.💬 В каких режимах может работать мьютекс в Go?
Мьютекс может работать в одном из двух режимов: нормальный и starvation.
В нормальном режиме горутины, ожидающие мьютекса, организованы в очередь по принципу FIFO. Однако, когда горутина пробуждается и пытается захватить мьютекс, она не получает управление сразу. Вместо этого она вынуждена конкурировать с новыми горутинами, которые также хотят захватить мьютекс в этот момент.
Эта конкуренция складывается не в пользу ожидающей горутины, так как новые горутины могут быстро попытаться захватить мьютекс, в то время как горутина из очереди еще только пробуждается.
📌 Пример сценария в нормальном режиме: допустим, горутина, которая только что проснулась, часто проигрывает эту гонку новым претендентам и снова попадает в начало очереди. Если горутине не везет, она может каждый раз просыпаться именно тогда, когда приходит новая горутина, что приводит к тому, что она никогда не захватывает мьютекс. Именно для таких случаев предусмотрен переход мьютекса в режим starvation.
Режим starvation включается, если горутина не может захватить мьютекс более 1 миллисекунды. Этот режим гарантирует, что ожидающие горутины получат справедливый шанс на захват мьютекса.
В режиме starvation, когда горутина освобождает мьютекс, управление передается непосредственно горутине, которая находится в начале очереди. Это означает, что никакой конкуренции и гонки с новыми горутинами нет — они просто присоединяются к концу очереди.
📌 Пример сценария в режиме starvation: мьютекс последовательно предоставляет доступ горутинам G1, G2 и так далее. Каждая ожидающая горутина получает управление и проверяет два условия: является ли она последней горутиной в очереди; ожидала ли она менее одной миллисекунды.
Если выполняется хотя бы одно из этих условий, мьютекс переключается обратно в нормальный режим.
Такое поведение мьютекса в Go помогает сбалансировать конкурентный доступ к общим ресурсам, обеспечивая справедливость и предотвращая бесконечное ожидание горутин в очереди.
👉 Подробнее
💬 Какими свойствами должны обладать ключи в map'е?
Ключи должны поддерживать операции сравнения
== и != (comparable). Это необходимо, чтобы Go мог эффективно выполнять операции поиска, вставки и удаления элементов из мапы.🐘🔮 Иллюзия согласованности в PostgreSQL: как избежать неприятных сюрпризов
Несмотря на то, что PostgreSQL обеспечивает строгую согласованность данных благодаря использованию многоверсионного параллельного контроля (MVCC), порядок выполнения транзакций может быть неожиданным для клиента. Это может привести к ситуации, когда записи появляются в неправильном порядке. Рассказываем, как и почему это происходит, и что делать для минимизации подобных проблем.
Читать статью
💬 Как эффективно удалять смежные элементы среза, сохраняя порядок элементов?
Предположим:
1. Задействованный срез обозначен как
s, и его тип — []E, где E — тип элементов среза.
2. Мы хотим удалить элементы в s[from:to], где from <= to.
📌 Способы удаления элементов:
1️⃣
s = s[:from + copy(s[from:], s[to:])]
2️⃣
s = append(s[:from], s[to:]...)
3️⃣ С использованием пакета slices:
import "slices"
s = slices.Delete(s, from, to)
Если используется Go toolchain 1.21, то после вызова функции slices.Delete мы должны самостоятельно очистить освобожденные элементы. Начиная с Go 1.22, функция slices.Delete автоматически очищает освобожденные элементы.💬 Как эффективно удалять смежные элементы среза, сохраняя порядок элементов?
Предположим:
1. Задействованный срез обозначен как
s, и его тип — []E, где E — тип элементов среза.
2. Мы хотим удалить элементы в s[from:to], где from <= to.
📌 Способы удаления элементов:
1️⃣
s = s[:from + copy(s[from:], s[to:])]2️⃣ к эффективно удалять смежные элементы сре 3️⃣ С использованием пакета
slices:
менты среза, сохраняя порядок элементов?
Предположим:
1
Если используется Go toolchain 1.21, то после вызова функции slices.Delete мы должны самостоятельно очистить освобожденные элементы. Начиная с Go 1.22, функция slices.Delete автоматически очищает освобожденные элементы.Repost from Библиотека девопса | DevOps, SRE, Sysadmin
🌐 9 основных паттернов для проектирования распределенных систем
В этой статье мы рассмотрим 9 основных паттернов и области их применения, что поможет вам в проектировании высоконагруженных приложений.
Читать статью
💬 Какие типы оператора defer существуют в Go?
📌 До Go 1.13: heap-allocated defer
До версии Go 1.13 все объекты
defer выделялись в куче. Это могло приводить к снижению производительности из-за затрат на выделение памяти в куче.
📌 Go 1.13: stack-allocated defer
С версии Go 1.13 была введена возможность выделения объектов defer в стеке. Это позволило улучшить производительность за счет уменьшения затрат на выделение памяти.
📌 Go 1.13+: open-coded defer
Также с версии Go 1.13 была введена оптимизация для встраивания defer в конец функции и перед каждым оператором return. Это значительно улучшило производительность, но применимо только в ограниченных кейсах, например, когда количество defer-операторов невелико (не более 8) и нет динамических конструкций, таких как циклы.
📌 Go 1.22: heap-allocated defer в циклах
В Go 1.22, если defer используется внутри цикла, он по-прежнему выделяется в куче, поскольку количество объектов defer может динамически меняться во время выполнения.
👉 ПодробнееRepost from Библиотека девопса | DevOps, SRE, Sysadmin
🍇 18 основных паттернов микросервисной архитектуры
Рассказываем о паттернах, которые представляют собой набор проверенных решений типичных проблем и задач в микросервисной архитектуре. Их правильное применение может значительно улучшить масштабируемость и надежность системы.
Читать статью
💬 Назовите основные функции и механизмы, которые могут остановить или приостановить выполнение текущей горутины в Go.
1.
time.Sleep(d time.Duration): приостанавливает горутину на указанный период времени.
2. runtime.Gosched(): уступает выполнение другим горутинам, временно приостанавливая текущую.
3. runtime.Goexit(): немедленно завершает текущую горутину, выполняя все отложенные вызовы.
4. Блокировка в канале: горутина приостанавливается, ожидая отправки или получения данных через канал.
5. sync.Mutex: горутина блокируется при вызове Lock(), ожидая освобождения мьютекса.
6. context.Context: приостанавливает горутину, слушающую канал Done(), когда контекст отменяется.💬 Как создать байтовый срез на Go, не обнуляя его байтовые элементы?
До версии Go 1.21 этого добиться было невозможно, даже небезопасными способами. Начиная с Go 1.21, реализация
strings.Builder.Grow вызывает внутреннюю функцию bytealg.MakeNoZero вместо встроенной функции make, которую вызывала старая реализация.
В большинстве случаев встроенная функция make обнуляет элементы результирующего среза, поэтому она часто сравнительно медленнее.
С реализацией версии 1.21+ у нас появилась возможность создавать байтовые срезы без инициализации их элементов нулем (хотя для достижения этой функциональности требуется использование функций unsafe)
import (
"strings"
"unsafe"
)
func MakeDirtyByteSlice(n int) []byte {
var b strings.Builder
b.Grow(n)
var p = unsafe.StringData(b.String())
return unsafe.Slice(p, n)
}
Available now! Telegram Research 2025 — the year's key insights 
