Библиотека Go для собеса | вопросы с собеседований
6.86K subscribers
218 photos
6 videos
1 file
413 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
Поддерживает ли Go объединённые типы?

Go не поддерживает объединённые типы напрямую, как это делают другие языки (например, TypeScript или Rust). В Go переменные всегда имеют фиксированный тип. Однако, с помощью интерфейсов и пустого интерфейса (interface{}), можно реализовать функциональность, схожую с объединёнными типами.
👍8
Как в Go можно реализовать работу с объединёнными типами, если язык не поддерживает их напрямую?
В Go для реализации работы с объединёнными типами используется пустой интерфейс (interface{}), который может хранить значения любого типа. Для извлечения значения используется type assertion. Пример на скриншоте.
Здесь переменная x может быть любым типом, и с помощью type assertion проверяется, является ли она строкой.
👍9
В чем разница между context.Background() и context.TODO()?

context.Background() используется для создания базового контекста, который не имеет родительского контекста. Он подходит для корневых вызовов в программе, например, в функции main().

context.TODO() применяется, когда контекст должен быть задан, но решение о его правильности или необходимости еще не принято. Это временный контекст, который можно позже заменить на более специфичный, когда появится необходимая информация.
👍6🔥2
🗃️ Анатомия SQL-запроса: как работают запросы к базе данных

Как разработчику эффективно работать с базами данных?
Один из ключевых навыков — понимание, как именно выполняются SQL-запросы. В этой статье разобраны все этапы работы запросов с базой данных: от парсинга до оптимизации.
Это поможет не только улучшить производительность приложений, но и избежать частых ошибок при взаимодействии с БД.

📎 Погружаемся в анатомию SQL-запросов по ссылке!
👍1
Как контексты используются для отмены операций в многозадачных приложениях?

Контексты в Go предоставляют механизм для отмены операций в многозадачных приложениях за счет передачи сигнала отмены через объект context.Context. Это особенно полезно в сценариях, где горутины выполняют связанные задачи, такие как обработка HTTP-запросов или долгие вычисления.

Принцип работы:
1. Создаётся контекст с функцией отмены (context.WithCancel или context.WithTimeout).
2. Все горутины получают этот контекст и периодически проверяют ctx.Done().
3. Когда вызвана отмена (например, через cancel()), канал ctx.Done() закрывается.
4. Каждая горутина обрабатывает сигнал отмены, например, освобождая ресурсы и завершая выполнение.
👍8
Что такое uintptr, когда его следует использовать?

uintptr — это тип в Go, который представляет собой целое число, используемое для хранения значений указателей как чисел, то есть для представления адресов памяти в виде целых чисел. Он позволяет выполнять низкоуровневые операции с указателями, такие как арифметика указателей или преобразование указателя в числовое значение и обратно

Когда следует использовать uintptr:
🛠️ Низкоуровневые операции: uintptr используется, когда необходимо работать с указателями на уровне адресов, например, для выполнения арифметики указателей (сдвиг по памяти) или для взаимодействия с C-библиотеками через cgo, где указатели часто обрабатываются как целые числа.

🛠️ Преобразование указателя в целое число: иногда необходимо преобразовать указатель в целочисленное значение (например, для передачи в системные вызовы или манипуляции с памятью). В таких случаях uintptr может быть полезен для хранения числового представления указателя.

🛠️ Взаимодействие с аппаратным обеспечением: в некоторых случаях работы с аппаратным обеспечением или низкоуровневыми системами можно использовать uintptr для работы с памятью напрямую.
👍7
Подготовься к собеседованию на позицию Data Scientist!

Профессия Data Scientist становится все более востребованной, и компании ищут специалистов, способных превращать данные в ценные инсайты. Но как успешно пройти техническое собеседование?

Мы собрали 10 типичных задач, которые могут встретиться на собеседовании, и эффективные подходы к их решению:

1. Внешнее и тензорное произведение

2. One-hot кодировка

3. Мониторинг осадков

4. Симуляция бросков кубиков в «Монополии»

5. Бурение скважин для добычи золота

6. Вычисление свертки

7. Бэктестинг торговой стратегии

8. Прогноз оттока клиентов с помощью логистической регрессии

9. Обнаружение спама с использованием дерева решений

10. Предсказание цен на квартиры с помощью линейной регрессии

Чтобы начать решать задачи, достаточно ответить на четыре простых вопроса по этой ссылке и получить доступ к вводным занятиям курса Математика для Data Science и 10 задачам.
👍1
⚡️Самые полезные каналы по Go в одной папке

В ней:
канал для подготовки к собеседованиям
интересные задачи
основной канал (этот)
книги по Go
лучшие вакансии из сферы
и наш чат, в котором можно общаться и задавать вопросы

Добавляйте 👉 тык сюда
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему использование uintptr может быть опасным?

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

Сборщик мусора: go использует сборщик мусора, который не отслеживает указатели, преобразованные в uintptr. Это может привести к ошибкам, если память была освобождена или перемещена.

Низкоуровневый доступ: uintptr представляет собой «сырой» адрес памяти, что делает операции с ним небезопасными, так как компилятор не может проверять правильность обращения к памяти.

Гонки данных: в многозадачных приложениях использование uintptr может привести к гонкам данных, поскольку не обеспечивается синхронизация или безопасность типов.
👍3
Что такое defer в Go и какие варианты использования существуют?

defer в Go — это ключевое слово, которое используется для отложенного выполнения функции. Функция, указанная в defer, будет выполнена непосредственно перед тем, как функция, содержащая defer, завершит свое выполнение

Как его можно использовать?
🎯 defer часто используется для освобождения ресурсов, таких как закрытие файлов, соединений с базой данных или освобождение памяти.
🎯 defer полезен для выполнения кода, который должен быть выполнен независимо от того, произошла ли ошибка в функции или нет.
👍6🥱1
💾 CDC vs Outbox: как решить проблему двойной записи в распределенной системе

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

Как избежать проблем двойной записи? Современные подходы, такие как захват изменений данных (CDC) и паттерн Outbox, предлагают интересные решения. Эти методики позволяют поддерживать целостность данных, избегать сбоев и минимизировать риски.

Хотите узнать, как внедрить такие подходы и выбрать оптимальный для своей системы? Загляните в захватывающее руководство, чтобы разобраться в тонкостях.

🔗 Читать статью
🔗 Зеркало
Как slice устроен под капотом?

В Go slice — это структура данных, представляющая собой динамически изменяемый массив. Slice строится на основе массива, но в отличие от массива, его размер может изменяться в процессе работы программы. Под капотом slice включает три основных компонента:

Указатель (pointer):
Это указатель на первый элемент массива, на основе которого создаётся slice. Это может быть любой внутренний массив или часть массива.

Длина (length):
Длина slice определяет количество элементов, доступных для работы в slice. Эта длина может изменяться в процессе добавления или удаления элементов.

Ёмкость (capacity):
Ёмкость slice — это максимальное количество элементов, которые могут быть размещены в текущем выделенном массиве без перераспределения памяти.

Когда slice расширяется (например, при добавлении новых элементов), если ёмкость превышена, Go автоматически увеличивает ёмкость, выделяя новый массив и копируя туда элементы старого массива.
😁6👍4
Что происходит, если между пакетами есть циклические зависимости?

Циклические зависимости возникают, когда два или более пакета зависят друг от друга напрямую или косвенно. Например, пакет A импортирует пакет B, а пакет B импортирует обратно пакет A.

Циклические зависимости недопустимы в Go. Компилятор обнаружит их и выдаст ошибку. Это сделано для упрощения структуры кода и предотвращения сложных проблем с порядком инициализации.
👍13😁1🥱1
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
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 запрещена на территории РФ
Что делает _ — импорт?

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

Таким образом, компилятор не будет требовать обращения к пакетным функциям или переменным, но все действия в init() будут выполнены. Этот подход часто используется для регистрации драйверов, плагинов или настройки глобальных зависимостей.
👍131
Что будет, если использовать пакет из _ импорта?

Если попытаться использовать функции, переменные или типы из пакета, который импортирован с помощью _, это вызовет ошибку компиляции.
Пустой идентификатор (_) означает, что пакет подключён исключительно для выполнения побочных эффектов (например, init()). Сам пакет становится «неактивным» для остального кода программы.
👍2
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Что выведет следующий код и почему?
package main

import "fmt"

func main() {
i := 0
defer fmt.Println("Result:", i)
i++
}

Выведется 0, потому что defer захватывает значение переменных на момент объявления, а не на момент выполнения отложенной функции.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍4
🦫 Самоучитель по Go для начинающих. Часть 18. Протокол HTTP. Создание HTTP-сервера и клиента. Пакет net/http

Погружаемся в мир сетевых технологий с Go! В этой части самоучителя рассматриваются основы работы с HTTP в Go: устройство HTTP-запросов и ответов, ключевые способы взаимодействия клиента и сервера. Также подробно разбираются возможности пакета net/http, включая отправку запросов, обработку ответов и настройку параметров HTTP-сервера для веб-приложений.

📎 Читать новую часть самоучителя
👍4
Как вы будете ждать завершения нескольких горутин, чтобы продолжить выполнение основного потока?

Для ожидания завершения нескольких горутин и продолжения выполнения основного потока в Go можно использовать sync.WaitGroup. Этот инструмент позволяет координировать выполнение горутин и гарантировать, что основной поток дождётся завершения всех задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8