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

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

Ir al canal en Telegram

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

Mostrar más
7 421
Suscriptores
-224 horas
-107 días
+530 días
Archivo de publicaciones
💬 Можно ли утверждать, что после уменьшения размера среза в Go память, занимаемая оставшимися элементами, будет освобождена? Срез состоит из трех компонентов: указателя на начало среза в массиве, длины среза и его емкости. Емкость среза указывает на максимальное количество элементов, которое срез может вместить, не требуя перераспределения памяти. Когда мы уменьшаем размер среза, (например, s[:n], где n меньше текущей длины среза s), мы изменяем только длину среза, но не его емкость. Память, связанная с емкостью среза, остается выделенной, поскольку базовый массив, к которому срез имеет доступ, остается неизменным. Это означает, что элементы, которые находятся за пределами новой длины, но в пределах емкости среза, технически все еще занимают память и могут быть доступны при расширении среза до его первоначальной емкости. Таким образом, GC очистит память старого массива (если на него не будут указывать другие срезы) только после реалокации памяти и переноса значений в новый срез.

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

Яндекс Практикум ищет наставников на курс «Go-разработчик» Наставник ведет вебинары и отвечает на вопросы студентов в чате, м
Яндекс Практикум ищет наставников на курс «Go-разработчик» Наставник ведет вебинары и отвечает на вопросы студентов в чате, мотивирует, помогает с трудностями во время обучения. Мы ждем, что вы: • знаете Go на уровне Senior; • имеете опыт лидирования командой и менторства. Что мы предлагаем: → удалёнка, частичная занятость от 15 часов в неделю, дополнительный доход; → статус эксперта в edtech-проекте известной технологичной компании; → развитие soft skills, прокачка тайм-менеджмента, лидерства, портфолио; → профессиональное комьюнити и нетворкинг, возможность развивать свой личный бренд; → образовательная миссия, возможность делиться своими знаниями со студентами. 📩 Узнать подробности и откликнуться: https://practicum.yandex.ru/job/vacancy-58

💬 Какие особенности необходимо учитывать при использовании встраивания типов в Go? В Go поле структуры называется встроенным, если оно объявлено без имени. Например,

type Foo struct {
    Bar // Встроенное поле
}

type Bar struct {
    Baz int
}
В структуре Foo тип Bar объявлен без связанного с ним имени; следовательно, это встроенное поле. Поскольку Bar содержит поле Baz, это поле «продвигается» в Foo. Таким образом, Baz становится доступным из Foo. 📌 Основные особенности, которые необходимо учитывать: 1. Встраивание типов не должно использоваться только как синтаксический сахар для упрощения доступа к полю (например, Foo.Baz() вместо Foo.Bar.Baz()). 2. Встраивание типов не должно «продвигать» данные (поля) или поведение (методы), которые мы хотим скрыть от внешнего мира: например, если это позволяет клиентам получить доступ к поведению блокировки, которое должно оставаться приватным для структуры.

💬 Для чего предназначена директория internal в Go-проекте? Директория internal в структуре Go-проекта используется для ограничения доступности кода. Код, помещенный в эту директорию, может быть импортирован и использован только внутри того же Go-модуля. Это предотвращает доступ к внутреннему коду из других модулей, что позволяет скрыть реализацию деталей, которые не предназначены для общедоступного API. Такой подход помогает управлять зависимостями в больших проектах. Это особенно полезно в крупных проектах и при разработке библиотек, когда нужно чётко разграничить внутреннюю логику от API, который предоставляется пользователям. Директория internal гарантирует, что внутренние компоненты не будут случайно использованы в других частях программы или в сторонних проектах, что способствует безопасности и стабильности кода.

💬 Как работает WithCancel из пакета context в Go? Функция WithCancel из пакета context в Go позволяет создать новый контекст, который можно отменить, на основе существующего родительского контекста. Она возвращает производный контекст (`ctx`) и функцию отмены (`cancel`), которая может быть вызвана для отмены этого контекста. Пример использования:
ctx, cancel := context.WithCancel(parentCtx)
Здесь ctx является новым контекстом, который наследует все характеристики и значения из parentCtx. cancel — это функция, вызов которой отменяет ctx и все связанные с ним дочерние контексты, если таковые имеются. При вызове cancel(): 🔹 Канал Done() для контекста ctx будет закрыт. Это сигнализирует всем потребителям контекста, что операции должны быть прекращены как можно скорее. 🔹 Все горутины или операции, которые «слушают» канал Done() контекста, могут реагировать на его закрытие, чтобы корректно остановить свою работу и освободить ресурсы.

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

💬 Чем отличается hard link от symbolic link в Linux? Что будет с файлом, если удалить hard link или symlink? 🔹 Жёсткая ссылка — это дополнительное имя для существующего файла на диске. Она указывает на те же самые блоки данных на диске, что и оригинальный файл, и имеет тот же номер inode. 🔹 Жёсткая ссылка фактически не отличается от оригинального файла. Изменения, сделанные через жёсткую ссылку, будут отражаться в оригинальном файле, так как они оба указывают на одни и те же данные. 🔹 Удаление жёсткой ссылки не приводит к удалению данных файла, пока существует хотя бы одна ссылка (имя файла) указывающая на эти данные. Файл будет физически удалён с диска только тогда, когда последняя жёсткая ссылка на него будет удалена. 🔸 Символическая ссылка — это отдельный файл, который содержит путь к другому файлу или другой директории. В отличие от жёсткой ссылки, она имеет свой собственный inode и блоки данных, которые хранят этот путь. 🔸 Если оригинальный файл, на который указывает символическая ссылка, будет перемещён или удалён, ссылка «сломается» и больше не сможет обеспечить доступ к файлу, потому что она указывает на конкретный путь. 🔸 Удаление символической ссылки не оказывает никакого влияния на оригинальный файл. Символическая ссылка просто перестаёт существовать, а оригинальный файл остаётся на месте, т. к. ссылка на сам файл и его данные не затрагиваются.

Ответьте на 3 вопроса, чтобы получить вводные занятия к курсу «Алгоритмы и структуры данных» 🔥Получите вводные занятия, отве
Ответьте на 3 вопроса, чтобы получить вводные занятия к курсу «Алгоритмы и структуры данных» 🔥Получите вводные занятия, ответив на 3 вопроса – https://proglib.io/w/c2161ff4 На вводной части вас ждут: 1. Лекция «Производительность алгоритмов» от руководителя разработки Яндекс.Самокатов 2. Лекция «Итеративные сортировки и линейные сортировки» от аспирант департамента искусственного интеллекта ВШЭ 3. Практические задания после лекций 4. Ссылки на дополнительные материалы для самостоятельного изучения ⚡️Переходите и начинайте учиться уже сегодня – https://proglib.io/w/c2161ff4

💬 Что из себя представляет Pub/Sub модель обмена сообщениями? Это архитектурный шаблон, используемый в распределённых системах для асинхронного обмена сообщениями между компонентами системы через посредника, известного как брокер сообщений. 🔹 Издатели отправляют сообщения в определённые каналы или темы, управляемые брокером. Они не имеют информации о подписчиках и их количестве, что позволяет легко добавлять новые источники данных без изменения общей системы. 🔹 Подписчики регистрируются для получения сообщений из одной или нескольких тем. Они получают сообщения автоматически от брокера, когда издатели отправляют данные в те темы, на которые они подписаны. Это позволяет им реагировать на новые данные в реальном времени. 🔹 Брокер действует как посредник между издателями и подписчиками, управляя подписками и обеспечивая доставку сообщений к подписчикам. Брокер обеспечивает децентрализацию, масштабируемость и устойчивость системы, отвечая за буферизацию сообщений, управление трафиком и обработку ошибок.

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

💬 Когда процесс может не реагировать на SIGKILL в Unix-подобных операционных системах, включая Linux? Сигнал SIGKILL (`kill -9`) предназначен для немедленного принудительного завершения процесса и не может быть перехвачен или обработан программно, что обеспечивает его высокую надежность. Однако существуют особые случаи, когда процесс может не реагировать на SIGKILL: 1. Зомби-процессы: если процесс уже завершил выполнение и находится в состоянии "зомби", он не будет реагировать на SIGKILL, так как фактически уже завершен и ждет очистки из таблицы процессов. 2. Процессы, ожидающие завершения ввода-вывода на уровне ядра: если процесс застрял в незавершенной операции ввода-вывода в ядре, SIGKILL может не остановить процесс до тех пор, пока системный вызов не вернется из ядра. 3. Процессы в непрерывном взаимодействии с аппаратным обеспечением: аналогично предыдущему пункту, если процесс находится в состоянии ожидания аппаратного события, которое не происходит, ядро может не суметь прервать эту блокировку, и процесс продолжит висеть. 4. Процесс является процессом init, не получающим от ОС сигналов, которые он не хочет обрабатывать. Процесс init может игнорировать SIGKILL, так как он является особым процессом, который отвечает за запуск и завершение других процессов.

Самые полезные каналы для программистов в одной подборке! Сохраняйте себе, чтобы не потерять 💾 🔥Для всех Библиотека программиста — новости, статьи, досуг, фундаментальные темы Книги для программистов 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++ 💻Другие каналы Библиотека фронтендера Библиотека мобильного разработчика Библиотека хакера Библиотека тестировщика Вакансии по фронтенду, джаваскрипт, React, Angular, Vue Вакансии для мобильных разработчиков Вакансии по QA тестированию InfoSec Jobs — вакансии по информационной безопасности 📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈 Также у нас есть боты: Бот с IT-вакансиями Бот с мероприятиями в сфере IT Мы в других соцсетях: 🔸VK 🔸YouTube 🔸Дзен 🔸Facebook * 🔸Instagram * * Организация Meta запрещена на территории РФ

💬 Гарантирует ли порядок выполнения конструкция select-case в Go? Конструкция select-case в Go не гарантирует порядок выполнения своих веток. Если в нескольких кейсах операции готовы к выполнению одновременно, выбор конкретного кейса для выполнения происходит случайным образом. Это помогает предотвратить блокировку и гарантировать, что все горутины имеют равные шансы на выполнение. Если ни один из кейсов не готов, программа будет ждать, пока хотя бы один кейс не станет доступен, если только не предоставлен кейс default, который выполняется немедленно, когда другие кейсы не готовы.

💬 Что из себя представляют термины "zombie" и "orphan" в контексте операционной системы Linux? Они описывают два различных состояния процессов: 1. Zombie process (зомби-процесс) — процесс, который завершил свое выполнение, но все еще присутствует в системе в качестве записи в таблице процессов. Это происходит потому, что процесс завершился, но его родительский процесс еще не вызвал системный вызов wait(), который "собирает" статус завершения процесса-потомка. Пока родитель не вызовет wait(), зомби-процесс будет оставаться в системе с освобожденными ресурсами, но сохранившейся записью в таблице процессов. Это состояние позволяет родителю получить информацию о статусе завершения процесса-потомка. 2. Orphan Process (процесс-сирота) — процесс, чей родительский процесс завершился, оставив процесс без непосредственного предка в системе. В Linux и других UNIX-подобных системах, когда родительский процесс завершается, все его «сиротские» дочерние процессы автоматически «усыновляются» процессом с PID 1, который обычно является процессом init или его современной заменой, например, systemd. Этот процесс становится новым родителем процессов-сирот и отвечает за их завершение и очистку ресурсов.

💬 Имеет ли значение порядок полей в структуре Go? Да, порядок полей в структуре в Go имеет значение, особенно когда речь идет о выравнивании памяти и оптимизации использования памяти. В Go, компилятор учитывает выравнивание памяти, чтобы обеспечить более эффективный доступ к данным и уменьшить объем занимаемой памяти. 📌 Несколько аспектов, по которым порядок полей может быть важен: 1. Каждый тип данных имеет требования к выравниванию, что значит, что данные этого типа должны начинаться с определенного адреса в памяти. Например, тип int64 в Go обычно требует выравнивания по 8-байтной границе. Если поля в структуре расположены таким образом, что между полями образуются "дыры" из-за выравнивания, это может привести к неэффективному использованию памяти. 2. Порядок полей может влиять на общий размер структуры из-за вышеупомянутых "дыр". Путем рационального упорядочивания полей можно минимизировать эти "дыры" и сделать размер структуры меньше. 3. Эффективное выравнивание памяти может улучшить производительность приложения, так как процессоры обращаются к выровненной памяти быстрее. Неправильное выравнивание может привести к дополнительным затратам циклов процессора для доступа к данным.

💬 В каких кейсах используется указатель на структуру в Go? 1. Когда структура передается в функцию по значению, Go создаёт её копию. Чтобы изменения внутри функции отражались на самой структуре, следует передавать указатель на неё. 2. Передача структур через указатели эффективнее по памяти, особенно для больших структур, потому что передается только адрес памяти, а не вся структура. 3. Использование указателей может улучшить производительность программы, снижая накладные расходы на копирование больших структур данных при передаче их между функциями. 4. Указатели на структуры могут быть nil, что позволяет использовать их для реализации опциональных полей или для указания на отсутствие конкретного значения. 5. Структуры могут реализовывать интерфейсы, и указатели на эти структуры могут быть переданы функциям, ожидающим интерфейс. Это позволяет работать с разными типами данных через общий интерфейс.

Ищем Middle и Senior Гоферов, чтобы проводить собесы и менторить Ищем в Эйч Навыки — это менторская программа от гоферов для гоферов. Мы уже провели 200+ мок-интервью, но желающих пройти собес всё больше и больше, а нас, если честно, уже тупо не хватает на всех. Поэтому пришли сюда — чтобы найти новых классных коллег-менторов, которые хотят внести вклад в комьюнити и вырасти, обучая других. И готовы на доп занятость, пару часов в день. Надо будет проводить тестовые интервью с другими Go-разработчиками → оценивать уровень этих ребят → помогать им расти дальше. Для этого всего мы разработали систему грейдов и форму обратной связи. Если ты до этого никого не менторил, вообще не переживай — всему научим. Что взамен: 🔘 От 40К за 5-7 часов работы в неделю 🔘 Доступ к обучению и комьюнити других сильных менторов из Яндекса, Авито, Uber, Tinkoff и других 🔘 Возможность выступать на нашем YouTube-канале (у нас в среднем 5000 просмотров на видео) — так станешь заметнее на рынке 🔘 Жесткая прокачка софтов + классная строчка в резюме. «Провел(а) 100+ собеседований» — звучит круто, работодатели точно оценят. Если хочешь попробовать себя в роли ментора, заполни форму — мы свяжемся с тобой ➡️ https://forms.gle/EBe9EMrcj8ew1t5H6 Реклама: ООО “Эйч Карьера” erid: LjN8KJ75Q

💬 Как в Go преобразовать строку в число и обратно, и как обрабатывать возможные ошибки при этих преобразованиях? В Go для преобразования строки в число и обратно используются функции из пакета strconv. При преобразовании строки в число необходимо учитывать возможные ошибки, так как входная строка может не быть корректно преобразована в числовой формат. 🔹 Преобразование строки в число Чтобы преобразовать строку в число, можно использовать функции как strconv.Atoi для целых чисел или strconv.ParseFloat для чисел с плавающей точкой.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Преобразование строки в целое число
    strInt := "123"
    intValue, err := strconv.Atoi(strInt)
    if err != nil {
        fmt.Println("Ошибка преобразования:", err)
    } else {
        fmt.Println("Целое число:", intValue)
}

    // Преобразование строки в число с плавающей точкой
    strFloat := "123.45"
    floatValue, err := strconv.ParseFloat(strFloat, 64) // 64 указывает на то, что результат будет float64
    if err != nil {
        fmt.Println("Ошибка преобразования:", err)
    } else {
        fmt.Println("Число с плавающей точкой:", floatValue)
    }
}
🔹 Преобразование числа в строку Для преобразования числа в строку используется функция strconv.Itoa для целых чисел или fmt.Sprintf для чисел с плавающей точкой или других форматов. Например:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Преобразование целого числа в строку
    intValue := 123
    strInt := strconv.Itoa(intValue)
    fmt.Println("Строка:", strInt)

    // Преобразование числа с плавающей точкой в строку
    floatValue := 123.45
    strFloat := fmt.Sprintf("%f", floatValue)
    fmt.Println("Строка:", strFloat)
}

💬 Как удалить элемент из среза в Go без использования стандартной библиотеки? 👉 Если порядок важен Чтобы удалить элемент из середины среза и сохранить порядок оставшихся элементов, можно использовать append:

newSlice := append(slice[:index], slice[index+1:]...)
Это объединяет часть среза до удаляемого элемента с частью среза после удаляемого элемента, исключая сам удаляемый элемент, но сохраняя порядок оставшихся элементов. 👉 Если порядок не важен В случае, когда сохранение исходного порядка элементов не является приоритетом, можно выполнить удаление элемента, заменив его последним элементом среза, а затем уменьшить длину среза. Это эффективнее, так как не требует перемещения элементов:

slice[index] = slice[len(slice)-1]
newSlice := slice[:len(slice)-1]
Этот метод эффективно удаляет элемент, заменяя его последним элементом среза, и уменьшает размер среза, исключая последний элемент. 👉 Удаление из начала или конца Если элемент для удаления находится в начале или в конце среза, можно просто использовать срезы: 📌 Для удаления первого элемента:

newSlice := slice[1:]
📌 Для удаления последнего элемента:

newSlice := slice[:len(slice)-1]