Библиотека Go для собеса | вопросы с собеседований
6.87K subscribers
225 photos
8 videos
1 file
438 links
Вопросы с собеседований по Go и ответы на них.

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

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

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

Наши каналы: https://t.iss.one/proglibrary/9197
Download Telegram
👨‍💻Мок-собеседование на позицию сеньор Go-разработчика

Даниил Подольский и Владимир Балун проводят собес сеньор Go-разработчика Антона Зиновьева. Вас ждут две части: общие вопросы и лайв-кодинг.

📺 Смотреть
🥱3👍21
💬 Что такое транзакции и какие бывают уровни изоляции транзакций в контексте баз данных?

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

👉 Выбор уровня изоляции зависит от требований к консистентности данных и допустимости параллелизма транзакций.

📌 Уровни изоляции транзакций определяют, как данные видны другим транзакциям и как они защищены от одновременных изменений. Уровни включают:

1. Read uncommitted: наименьший уровень изоляции, позволяет читать незафиксированные данные, что может привести «грязному» чтению.
2. Read committed: позволяет избежать «грязного» чтения, но не устраняет феномены неповторяемого чтения и фантомного чтения.
3. Repeatable read: предотвращает неповторяемые чтения, но может не предотвратить фантомное чтение.
4. Serializable: самый высокий уровень изоляции, который предотвращает фантомное чтение, но может снижать производительность из-за блокировок.

🔗 Подробнее на Хабре или в Википедии
👍131
🚀System Design 101

Готовитесь к собеседованию по проектированию систем или просто хотите понять принцип работы сложных систем? Тогда репозиторий ByteByteGo точно для вас.

👉 GitHub
👍53
💬 Что такое эвакуация данных в контексте типа map в Go?

Увеличение количества бакетов в Go и распределение существующих пар ключ-значение называется эвакуацией данных.

Принятие решения о выполнении эвакуации зависит от значения load factor (среднее заполнение бакетов). В Go значение loadFactor равно 6.5, то есть процесс эвакуации начинается, когда средняя заполняемость бакетов достигает 6.5 или 80% для бакета с размером 8.

Также на выполнение эвакуации в Go влияет количество связанных бакетов.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👍1
💬 Для чего предназначена директива //go:generate?

//go:generate — это директива в Go, используемая для генерации кода перед компиляцией. Она вставляется в комментарии и указывает инструменту go generate, что и как должно быть сгенерировано.

Когда мы запускаем go generate в директории нашего пакета, Go ищет все директивы //go:generate в исходных файлах и выполняет указанные команды.

📌 Вот как это работает:

1. Директива //go:generate размещается в комментарии внутри исходника Go. Обычно это делается в начале файла, но она может быть расположена где угодно в коде.

2. Стандартный формат директивы — //go:generate за которым следует команда, которую нужно выполнить. Например: //go:generate go run generator.go.

3. Когда мы запускаем go generate в директории пакета, Go перебирает все файлы в директории, ищет директивы //go:generate и выполняет соответствующие команды. Это может включать запуск скриптов генерации кода, инструментов для автоматизации и т. д.

💡 go:generate часто используется для автоматизации повторяющихся задач, таких как генерация дополнительного кода из шаблонов или интерфейсов, автоматическое создание моков для тестирования, обновление документации и т. д.
👍10🙏1
💬 Что такое индексы и составные индексы в контексте баз данных (например, MySQL)? Для чего используется инструкция EXPLAIN?

Индексы являются инструментом для оптимизации SQL-запросов. Они ускоряют доступ к данным, сокращая количество операций чтения и сравнения.

🔸 Индексы — это отсортированные наборы значений для конкретных колонок. Они позволяют базе данных быстрее находить строки, соответствующие условиям запроса, особенно в больших таблицах.

🔸 Составные индексы — это индексы, построенные на нескольких колонках. Они полезны для запросов, которые используют несколько колонок в условиях WHERE, JOIN или ORDER BY. Порядок колонок в составном индексе важен, так как он влияет на эффективность индекса.

🔸 Инструкция EXPLAIN в MySQL используется для анализа того, как выполняются SQL-запросы. Она показывает, какие индексы используются, сколько строк должно быть прочитано, и помогает определить, как можно оптимизировать запросы. EXPLAIN особенно полезна для понимания работы составных индексов и для проверки, использует ли запрос индекс эффективно.

👉 Подробнее
5❤‍🔥1👍1
💬 В чем ключевые различия между HTTP/1.1, HTTP/2 и HTTP/3?

🔹 HTTP/1.1 — текстовый протокол, который использует одно соединение для каждого запроса, что может вызывать задержки из-за очередей запросов (Head-of-Line Blocking) и неэффективно использовать сетевые ресурсы.

🔹 HTTP/2 — бинарный протокол, поддерживающий мультиплексирование запросов через одно соединение для уменьшения задержек, приоритизацию потоков для оптимизации загрузки и сжатие заголовков для сокращения объёма передаваемых данных.

🔹 HTTP/3 использует протокол QUIC вместо TCP, улучшая скорость установления соединений, уменьшая задержки благодаря независимой передаче данных в разных потоках и повышая эффективность восстановления после потерь пакетов.
🔥18👏1
🏃 Самоучитель по Go для начинающих. Часть 10. Введение в ООП. Наследование, абстракция, полиморфизм, инкапсуляция

В этой части самоучителя разберем основные понятия и принципы объектно-ориентированного программирования, а также рассмотрим примеры их реализации в языке Go. В конце статьи применим изученный материал на практике, решив 2 интересные задачи.

👉 Читать гайд

📌 Остальные части в серии:

1. Особенности и сфера применения Go, установка, настройка
2. Ресурсы для изучения Go с нуля
3. Организация кода. Пакеты, импорты, модули. Ввод-вывод текста.
4. Переменные. Типы данных и их преобразования. Основные операторы
5. Условные конструкции if-else и switch-case. Цикл for. Вложенные и бесконечные циклы
6. Функции и аргументы. Области видимости. Рекурсия. Defer
7. Массивы и слайсы. Append и сopy. Пакет slices
8. Строки, руны, байты. Пакет strings. Хеш-таблица (map)
9. Структуры и методы. Интерфейсы. Указатели. Основы ООП
👍5
Ответьте на 3 вопроса, чтобы получить вводные занятия к курсу «Алгоритмы и структуры данных»

🔥Получите вводные занятия, ответив на 3 вопроса – https://proglib.io/w/10107764

На вводной части вас ждут:

1. Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов

2. Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ

3. Практические задания после лекций

4. Ссылки на дополнительные материалы для самостоятельного изучения

⚡️Переходите и начинайте учиться уже сегодня – https://proglib.io/w/10107764
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 В какой момент выполняется defer в Go?

В Go, оператор defer используется для гарантии выполнения определённого кода непосредственно перед выходом из функции, независимо от того, как происходит выход: из-за return, достижения конца тела функции или в результате возникновения паники.

Иструкции внутри блока defer выполняются после того, как функция вычислит возвращаемые значения, но до момента фактического возвращения управления вызывающему коду.

Это означает, что хотя возвращаемые значения функции уже определены к моменту выполнения defer, defer позволяет модифицировать эти возвращаемые значения, если они определены как именованные возвращаемые параметры в сигнатуре функции.
👍11
Самые полезные каналы для программистов в одной подборке!

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

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣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-разработчиков

👾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++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
💡 Одной из идиоматических практик Go является концепция

return early, return often


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

Это делает код более читабельным и простым в сопровождении.

#go #tip by Matt Boyle
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🥱3
💬 Каков минимальный и максимальный вес горутин?

Минимальный вес горутины в Go составляет ~2 КБ, что является начальным размером стека для каждой горутины. Этот размер может динамически увеличиваться и уменьшаться в зависимости от потребностей программы.

Максимальный размер стека горутины зависит от архитектуры системы: 1 ГБ для 64-разрядной архитектуры, 250 МБ — для 32-разрядной.
🔥19
🤔 Где искать библиотеки и инструменты для своих проектов?

🧰 Подборка для Go-разработчика:

🔗 pkg.go.dev

Здесь вы можете найдете пакеты по различным критериям и получите информацию о версии, лицензии и многом другом.

🔗 GitHub

Вводите в поисковую строку language:go + свой запрос и анализируете результаты.

🔗 Awesome Go

Один из самых старых и самых поддерживаемых кураторских списков по Go.

🔗 Libhunt.com

Коллекция Go-проектов, отфильтрованных по количеству упоминаний, звезд или другим критериям.

🔗 go-recipes

Тщательно подобранный список полезных Go-инструментов, разделенных на категориям.

#tip
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥732👍2
💬 Как получить из среза массив и для чего это может быть нужно?


1. С использованием unsafe:

package main

import (
"fmt"
"unsafe"
)

func main() {
slice := []int{1, 2, 3}
arrayPtr := (*[3]int)(unsafe.Pointer(&slice[0]))
fmt.Println(*arrayPtr)
}


2. С использованием copy:

package main

import "fmt"

func main() {
slice := []int{1, 2, 3}
var array [3]int
copy(array[:], slice)
fmt.Println(array)
}


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

Поскольку в Go ключи мапы должны быть comparable, мы можем использовать массив с фиксированным размером вместо среза.
🤔9👍3
💬 Что такое inode в Linux?

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

🔸 Директории — это тоже inode типа директория, в которых вместо содержимого файла содержится список имён файлов и номера их inode. Корневая директория в Ext4 имеет номер inode — 2.

🔸 Inode имеют ограниченный размер, поэтому количество файлов или каталогов, которые могут быть созданы в файловой системе, ограничено.
6🥱5🔥3👍2
💬 Что такое шардирование и для чего оно предназначено?

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

🔹 Виды шардинга: вертикальное и горизонтальное.

🔹 Методы шардинга: хешированное, диапазонное, круговое и динамическое.

🔹 Способы шардирования: средствами БД, надстройками к БД и клиентскими средствами.
👍5