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

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

Открыть в Telegram

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

Больше
7 447
Подписчики
-124 часа
+287 дней
+1230 день
Архив постов
Самые полезные каналы для программистов в одной подборке! Сохраняйте себе, чтобы не потерять 💾 🔥Для всех Библиотека программиста — новости, статьи, досуг, фундаментальные темы Книги для программистов 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:"-" в Go? Данный тег можно использовать для того, чтобы игнорировать поле структуры при сериализации в JSON (маршализации). Это означает, что данное поле не будет включено в итоговый JSON-объект при его создании. Простой пример представлен выше.

💬 Какую функцию Go можно использовать для обработки сигналов операционной системы с использованием контекста? Пакет signal и
💬 Какую функцию Go можно использовать для обработки сигналов операционной системы с использованием контекста? Пакет signal имеет функцию NotifyContext, которую можно использовать для обработки сигналов ОС в Go с использованием контекста. На скриншоте представлен простой пример.

Открытое собеседование на Gо-разработчика в этот четверг 15 августа(уже в этот четверг!) в 19:00 по мск приходи онлайн на Отк
Открытое собеседование на Gо-разработчика в этот четверг 15 августа(уже в этот четверг!) в 19:00 по мск приходи онлайн на Открытое собеседование от Эйч Навыков. Как это будет: 1. Даниил Динько, старший разработчик в Ozon, позадает реальные вопросы и задачи разработчику-добровольцу 2. Потом Даня даст подробную обратную связь — объяснит, зачем задавал тот или иной вопрос, как лучше на него ответить или решить задачу 3. В конце можно будет задать любой вопрос Даня Что узнаешь на Открытом собеседовании: - Чего ждут от кандидатов на мидл-позиции в Gо-разработке - Какие вопросы задают на интервью и зачем - Как подготовиться к собесу, чтобы получить заветный оффер Это бесплатно? Бесплатно Просто зарегистрируйся на открытое собеседование в нашем боте @skills_mentee_bot Реклама: ООО “Эйч Карьера” erid: LjN8KLCvM

🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хо
🧑‍💻 Статьи для 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 обеспечивает стро
🐘🔮 Иллюзия согласованности в 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 автоматически очищает освобожденные элементы.

🌐 9 основных паттернов для проектирования распределенных систем В этой статье мы рассмотрим 9 основных паттернов и области и
🌐 9 основных паттернов для проектирования распределенных систем В этой статье мы рассмотрим 9 основных паттернов и области их применения, что поможет вам в проектировании высоконагруженных приложений. Читать статью

💬 Какие типы оператора defer существуют в Go? 📌 До Go 1.13: heap-allocated defer До версии Go 1.13 все объекты defer выделя
💬 Какие типы оператора 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 может динамически меняться во время выполнения. 👉 Подробнее

🍇 18 основных паттернов микросервисной архитектуры Рассказываем о паттернах, которые представляют собой набор проверенных ре
🍇 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)
}

💬 Назовите основные способы создания среза в Go. Предположим, что тип нового создаваемого среза — это S, а s0 — это нулевое значение литерала типа S. 1. Использование составных литералов:
// или 
var aSlice = S{Len - 1: s0} // длина и емкость равны Len (константа) 
  
Емкость результирующего среза не всегда выравнивается по размеру класса памяти. 2. Использование встроенной функции make:

// или 
var aSlice = make(S, initialLength) // емкость == initialLength 
  
Емкость результирующего среза не всегда выравнивается по размеру класса памяти. 3. Использование встроенных функций append + make):

// или 
var aSlice = append(S(nil), make(S, initialLength)...) 
// или 
var aSlice = append(S{}, make(S, initialLength, capacity)...) 
// или 
var aSlice = append(S(nil), make(S, initialLength, capacity)...) 
  
С официальным Go-инструментарием емкость результирующего среза выравнивается по размеру класса памяти.

🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хо
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.

💬 Перечислите все способы клонирования срезов на Go? 1️⃣ Использование make и copy

cloned := make(SliceType, len(aSlice))
copy(cloned, aSlice)
2️⃣ Более развернутая форма 1 способа

var cloned SliceType
if aSlice != nil {
    cloned = make(SliceType, len(aSlice))
    copy(cloned, aSlice)
}
3️⃣ Использование make и append

append(make(SliceType, 0, len(aSlice)), aSlice...)
4️⃣ Использование append

append(SliceType(nil), aSlice...) // Вариант 1
// или
append(SliceType{}, aSlice...) // Вариант 2
5️⃣ Другой способ использования append

append(aSlice[:0:0], aSlice...)
6️⃣ Использование slices.Clone (Go 1.21+)

import "slices"
slices.Clone(aSlice)