Найти в Дзене
Практика

Практика

практикуемся решать задачи на Go
подборка · 9 материалов
908 читали · 1 год назад
#22 Когда использовать sync.Map в Go
map в Go не потокобезопасны и требуют защиты через мьютексы при конкурентном доступе. В отличие от них, sync.Map обеспечивает безопасность при конкурентном доступе без необходимости явно использовать мьютексы. Основные методы sync.Map Delete(key any): удаляет элемент по ключу; Load(key any) (value any, ok bool): извлекает значение по ключу; LoadAndDelete(key any) (value any, loaded bool): извлекает и одновременно удаляет элемент; LoadOrStore(key, value any) (actual any, loaded bool): извлекает значение...
836 читали · 1 год назад
#20 Как слить n каналов в один в Go
Одна из самых популярных задач на каналы. Условие Даны n каналов типа int. Нужно написать функцию, которая сольет (смержит) все данные из этих каналов в один и вернет его. Решение Напишем сигнатуру функции merge, которая принимает любое количество каналов типа int на вход и возвращает результирующий канал того же типа. resultChannel сделаем с буфером 1, не обязательно, но так мы уменьшим количество переключений между горутинами. Чтобы не забыть, сразу закроем результирующий канал в отдельной горутине...
845 читали · 1 год назад
#19 Решаем задачи на слайсы в Go
Примерно в 100% случаях на собеседованиях на Go разработчика попадаются задачи, где дан какой-то кусок кода, в котором производятся операции над слайсом. Такие задачи обычно идут в начале и их нужно решать без ошибок, так как это показывает ваше знание основ языка. Для начала немного теории. Структура слайса включает в себя: array unsafe.Pointer: указатель на массив, содержащий элементы слайса. len int: длина слайса, т.е. количество элементов в слайсе. cap int: емкость слайса, т.е. максимальное количество элементов, которое слайс может вместить без перевыделения памяти​​...
811 читали · 1 год назад
#14 Скользящее окно
Основная идея метода скользящего окна или sliding window заключается в поддержании диапазона или "окна" элементов, которое "скользит" по массиву или строке. Метод скользящего окна позволяет улучшить вычислительную сложность до линейной, а по памяти — до константной. Как работает Представим, что у нас есть массив и нужно найти в нем подмассив, который удовлетворяет определенным условиям. Вместо того чтобы рассматривать каждый возможный подмассив отдельно, мы создаем окно фиксированной или переменной длины, которое перемещается по массиву...
330 читали · 1 год назад
#12 Конкурентная обработка http-запросов
Подобную задачу в разных вариациях любят давать на собеседованиях: Поочередно выполнить http-запросы по предложенному списку урлов. В случае получения http статус кода 200 на запрос печатаем "<url> - ok". В случае получения http статус кода отличного от 200, либо в случае ошибки печатаем "<url> - not ok". Ссылок может быть очень много, поэтому нужно обрабатывать запросы конкурентно. Например, через рассмотренный ранее паттерн fan-out / fan-in. Решение Добавим функцию, которая будет обрабатывать http-запрос и в зависимости от статус кода записывать нужный результат в канал results...
164 читали · 1 год назад
#10 Сложение в столбик
Задача с таким, на первый взгляд, простым условием встречается на собеседовании в одной известной компании: Даны два целых неотрицательных числа. Они слишком большие для представления в виде стандартных числовых типов, выходят за пределы int64. Числа даны в виде двух слайсов. Требуется вывести результат их сложения. Решение Складывать будем столбиком, как в начальных классах на уроках математики. Для простоты возьмем слайсы небольшой длины, так как общий алгоритм подойдет для любых входных значений...