From d7fae1b7c1a45661311e91b7ee68b10958ea4481 Mon Sep 17 00:00:00 2001 From: liver Date: Fri, 23 May 2025 07:54:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BC=D0=B0=D1=88=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework/01.md | 11 ++++++++ homework/02.md | 33 +++++++++++++++++++++++ homework/03.md | 32 +++++++++++++++++++++++ homework/04.md | 35 +++++++++++++++++++++++++ homework/05.md | 20 ++++++++++++++ homework/06.md | 56 ++++++++++++++++++++++++++++++++++++++++ homework/07.md | 27 +++++++++++++++++++ homework/08.md | 27 +++++++++++++++++++ homework/09.md | 28 ++++++++++++++++++++ homework/10.md | 16 ++++++++++++ homework/image-02-1.png | Bin 0 -> 45179 bytes 11 files changed, 285 insertions(+) create mode 100644 homework/01.md create mode 100644 homework/02.md create mode 100644 homework/03.md create mode 100644 homework/04.md create mode 100644 homework/05.md create mode 100644 homework/06.md create mode 100644 homework/07.md create mode 100644 homework/08.md create mode 100644 homework/09.md create mode 100644 homework/10.md create mode 100644 homework/image-02-1.png diff --git a/homework/01.md b/homework/01.md new file mode 100644 index 0000000..35e2d1c --- /dev/null +++ b/homework/01.md @@ -0,0 +1,11 @@ +# Домашнее задание №1 + +📗 В домашнем задании нужно реализовать функцию по конвертации числа из прямого порядка следования байт (Big Endian) в обратный порядок следования байт (Little Endian). + +Например, число 0x01020304 при вызове функции должно быть сконвертировано в число 0x04030201, а число 0x0000FFFF в 0xFFFF0000. Поподробнее про порядки следования байт можно прочитать здесь. + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + +### Задание со звездочкой + +Выполнять необязательно, но если вы уже знакомы с дженериками в Go, то попробуйте реализовать обобщенную функцию конвертации, которая сможет работать не только с uint32, но еще и с uint16 и uint64 типами данных. \ No newline at end of file diff --git a/homework/02.md b/homework/02.md new file mode 100644 index 0000000..d48b672 --- /dev/null +++ b/homework/02.md @@ -0,0 +1,33 @@ +# Домашнее задание №2 + +📗 В домашнем задании нужно реализовать кольцевую очередь (Circular Queue). + +Кольцевая очередь (Circular Queue) — это структура данных, которая представляет собой очередь (FIFO) фиксированного размера. Кольцевая очередь использует буфер фиксированного размера таким образом, как будто бы после последнего элемента сразу же снова идет первый (как представлено на картинке справа). Подробнее можно прочитать здесь. + +Такая структура много где используется, например для организации различных очередей сообщений и а также буффер в буфферезированных каналах Go реализован в виде кольцевой очереди. + +![alt text](image-02-1.png) + +API для кольцевой очереди будет выглядеть следующим образом: + +```go +// Предположим, что эта очередь будет оперировать только положительными +// числами (отрицательные числа ей никогда не поступят на вход) +type CircularQueue struct { ... } + +func NewCircularQueue(size int) // создать очередь с определенным размером буффера +func (q *CircularQueue) Push(value int) bool // добавить значение в конец очереди (false, если очередь заполнена) +func (q *CircularQueue) Pop() bool // удалить значение из начала очереди (false, если очередь пустая) +func (q *CircularQueue) Front() int // получить значение из начала очереди (-1, если очередь пустая) +func (q *CircularQueue) Back() int // получить значение из конца очереди (-1, если очередь пустая) +func (q *CircularQueue) Empty() bool // проверить пустая ли очередь +func (q *CircularQueue) Full() bool // проверить заполнена ли очередь +``` + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы уже знакомы с дженериками в Go, то попробуйте реализовать обобщенную CircularQueue, которая сможет работать не только с int, но еще и с int8, int16, int32 и int64 типами данных. + diff --git a/homework/03.md b/homework/03.md new file mode 100644 index 0000000..e42494b --- /dev/null +++ b/homework/03.md @@ -0,0 +1,32 @@ +# Домашнее задание №3 + +📗 В домашнем задании нужно реализовать COW (Copy-On-Write) буффер. + + +Идея подхода copy-on-write заключается в том, что при чтении данных используется общая копия данных буффера, но в случае изменения данных — создается новая копия данных буффера. Для реализации такого подхода можно использовать разделяемый счетчик ссылок - если при изменении данных буффера кто-то еще ссылается на этот буффер, то нужно будет сначала произвести копию данных буффера, изменить счетчик ссылок и только затем произвести изменение (если никто не ссылается на буффер, то копировать данные буффера не нужно при изменении данных). + +Дополнительно еще нужно реализовать метод конвертации данных буффера в строку без копирования и дополнительного выделения памяти. + + + +API для COW буффера будет выглядеть следующим образом: + + +```go +// Предположим, что все будут производить копирование +// буффера только с использованием метода Clone() +type COWBuffer struct { ... } + +func NewCOWBuffer(data []byte) // создать буффер с определенными данными +func (b *COWBuffer) Clone() COWBuffer // создать новую копию буфера +func (b *COWBuffer) Close() // перестать использовать копию буффера +func (b *COWBuffer) Update(index int, value byte) bool // изменить определенный байт в буффере +func (b *COWBuffer) String() string // сконвертировать буффер в строку +``` + +📌 Для выполнения домашнего задания подготовлен шаблон кодаи основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы уже знакомы c финализатора в Go, то попробуйте реализовать дополнительный вызов метода Close() - на случай того, если вдруг какой-то программист забудет его вызвать явно в коде (в такой реализаци множественный вызов Close() должен отрабатывать корректно). diff --git a/homework/04.md b/homework/04.md new file mode 100644 index 0000000..cf416a4 --- /dev/null +++ b/homework/04.md @@ -0,0 +1,35 @@ +# Домашнее задание №4 + +📗 В домашнем задании нужно реализовать упорядоченный словарь. + + + +Идея упорядоченного словаря заключается в том, что он будет реализован на основе бинарного дерева поиска (BST). Дерево будет строиться только по ключам элементов, значения элементов при построении дерева не учитываются. Элементы с одинаковыми ключами в упорядоченном словаре хранить нельзя. + + + +Поподробнее с бинарными деревьями поиска можно познакомиться здесь. + + + +API для упорядоченного словаря будет выглядеть следующим образом: + + +```go +type OrderedMap struct { ... } + +func NewOrderedMap() OrderedMap // создать упорядоченный словарь +func (m *OrderedMap) Insert(key, value int) // добавить элемент в словарь +func (m *OrderedMap) Erase(key int) // удалить элемент из словари +func (m *OrderedMap) Contains(key int) bool // проверить существование элемента в словаре +func (m *OrderedMap) Size() int // получить количество элементов в словаре +func (m *OrderedMap) ForEach(action func(int, int)) // применить функцию к каждому элементу словаря от меньшего к большему +``` + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы уже знакомы c дженериками в Go, то попробуйте реализовать обобщенную OrderedMap, которая сможет работать с любыми comparable типами данных в качестве ключей и абсолютно любыми типами данных в качестве значений. + diff --git a/homework/05.md b/homework/05.md new file mode 100644 index 0000000..59fbbe7 --- /dev/null +++ b/homework/05.md @@ -0,0 +1,20 @@ +# Домашнее задание №5 + +📗 В домашнем задании нужно реализовать функции `Map`, `Filter` и `Reduce`. + + + +1. Реализуйте функцию `func Map(data []int, action func(int) int) []int`, которая принимает функцию `action` и срез данных `data`. Функция `Map` должна применить функцию `action` к каждому элементу среза `data` и вернуть новый срез с результатами. + +2. Реализуйте функцию `func Filter(data []int, action func(int) bool) []int`, которая принимает функцию `action` и срез данных `data`. Функция `Filter` должна вернуть новый срез, содержащий только те элементы `data`, для которых функция `action` возвращает `true`. + +3. Реализуйте функцию `func Reduce(data []int, initial int, action func(int, int) int) int`, которая принимает функцию `action` (функцию двух аргументов), срез данных `data` и начальное значение `initial`. Функция `Reduce` должна применить функцию `action` к каждому элементу `data` и начальному значению `initial`, накапливая результат. + + + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы уже знакомы c дженериками в Go, то попробуйте реализовать обобщенные функции Map, Filter и Reduce. \ No newline at end of file diff --git a/homework/06.md b/homework/06.md new file mode 100644 index 0000000..e5383da --- /dev/null +++ b/homework/06.md @@ -0,0 +1,56 @@ +# Домашнее задание №6 + +📗 В домашнем задании нужно упаковать данные игрока в структуру таким образом, чтобы ее размер был не более, чем 64 байта. + + + +Представим, что мы разрабатываем игру и наша задача упаковать данные игрока в структуру таким образом, чтобы ее размер был не более, чем 64 байта (представим, что размер кэш линии на компьютерах будет 64 байта). + + + +Данные пользователя: + +Имя пользователя [0…42] символов латиницы + + нельзя ссылаться на символы строки по указателю (нужно мапить символы строки в объект структуры, чтобы они находились рядом с другими данными) + +Координата по оси X [-2_000_000_000…2_000_000_000] значений + +Координата по оси Y [-2_000_000_000…2_000_000_000] значений + +Координата по оси Z [-2_000_000_000…2_000_000_000] значений + +Золото [0…2_000_000_000] значений + +Магическая сила (мана) [0…1000] значений + +Здоровье [0…1000] значений + +Уважение [0…10] значений + +Сила [0…10] значений + +Опыт [0…10] значений + +Уровень [0…10] значений + +Есть ли у игрока дом [true/false] значения + +Есть ли у игрока оружие [true/false] значения + +Есть ли у игрока семья [true/false] значения + +Тип игрока [строитель/кузнец/воин] значения + + + +Чтобы успешно справиться с заданием - вам потребуется вспомнить темы выравнивания структур данных и побитовых операций. + + + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +###Задание со звездочкой +Выполнять необязательно, но если вы уже знакомы c рефлексией в Go, то попробуйте реализовать сериализацию этой структуры данных в YAML, XML или JSON формат с использованием тегов структур. \ No newline at end of file diff --git a/homework/07.md b/homework/07.md new file mode 100644 index 0000000..e1c6121 --- /dev/null +++ b/homework/07.md @@ -0,0 +1,27 @@ +# Домашнее задание №7 + +📗 В домашнем задании нужно реализовать простой Dependency Injection (DI) контейнер. + + + +DI-контейнер (контейнер внедрения зависимостей) представляет собой шаблон проектирования, который помогает управлять зависимостями в программном приложении. Поподробнее с DI контейнерами можно познакомиться здесь, а также можно посмотреть реализации уже готовых DI контейнеров на Go. + + + +API для DI контейнера будет выглядеть следующим образом: + + +```go +type Container struct { ... } + +func NewContainer() *Container // создать DI контейнер +func (c *Container) RegisterType(name string, constructor interface{}) // зарегистрировать конструктор по созданию типа +func (c *Container) Resolve(name string) (interface{}, error) // создать объект с использованием конструктора +``` + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы хотите, можете попробовать дополнительно реализовать метод RegisterSingletonType, который будет возвращать объекты одиночки, а также, если вы уже знакомы c рефлексией и дженериками в Go, то можете их тоже использовать в реализации. \ No newline at end of file diff --git a/homework/08.md b/homework/08.md new file mode 100644 index 0000000..e6fa77b --- /dev/null +++ b/homework/08.md @@ -0,0 +1,27 @@ +# Домашнее задание №8 + +📗 В домашнем задании нужно реализовать собственный тип ошибки MultiError. + + + +Это позволяет функции возвращать ошибку, которая на самом деле может быть списком ошибок. Если вызывающая сторона знает это, она может развернуть список и получить доступ к ошибкам. Если вызывающая сторона не знает, ошибка преобразуется в удобный для чтения человеком формат. Поподробнее с таким типом ошибок можно ознакомиться здесь. + + + +API для собственного типа ошибки будет выглядеть следующим образом: + + +```go +type MultiError struct { ... } + +func (e *MultiError) Error() string // вернуть текст ошибки +func Append(err error, errs ...error) *MultiError // добавить ошибку к существующей +``` + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы хотите, можете попробовать дополнительно сделать собственный тип ошибки совместимым с функциями errors.Is, errors.As и errors.Unwrap из стандартной библиотеки. + diff --git a/homework/09.md b/homework/09.md new file mode 100644 index 0000000..0e90105 --- /dev/null +++ b/homework/09.md @@ -0,0 +1,28 @@ +# Домашнее задание №9 + +📗 В домашнем задании нужно реализовать сериализацию объекта структуры данных в .properties формат с использованием тегов структур и рефлексии. + + + +При сериализации данных в некоторых случаях могут возникнуть проблемы с пустыми значениями. Например, если у вас есть структура, в которой некоторые поля могут быть не заполнены, и вы сериализуете, то в результате получится объект с пустыми полями. Если это не является ожидаемым поведением, то в нашей реализации можно будет использовать тег omitempty, чтобы пропустить пустые поля при сериализации. + + + +Стуктура для сериализации в .properties формат (поподробнее с .properties форматом можно ознакомиться здесь): + + +```go +type Person struct { + Name string `properties:"name"` + Address string `properties:"address,omitempty"` + Age int `properties:"age"` + Married bool `properties:"married"` +} +``` + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но если вы хотите, можете попробовать реализовать обощенную функцию сериализации, которая сможет работать не только со структорой Person. \ No newline at end of file diff --git a/homework/10.md b/homework/10.md new file mode 100644 index 0000000..3bb04ee --- /dev/null +++ b/homework/10.md @@ -0,0 +1,16 @@ +# Домашнее задание №10 + +📗 В домашнем задании нужно реализовать функцию дефрагментации памяти. + + + +Дефрагментацию нужно будет проводить in-place (без копирования в новое место), а также вместе с обновлением указателей, которые уже ссылаются на фрагментированные участки памяти. Указатели будут указывать только на однобайтовые значения в памяти, а различать свободные и занятые участки памяти нужно будет при помощи указателей, но не при помощи значений в памяти. Поподробнее о дефрагментации можно прочитать здесь. + + + +📌 Для выполнения домашнего задания подготовлен шаблон кода и основные тесты, которую помогут проверить корректность реализации конвертации. Шаблона доступен по ссылке. + + + +### Задание со звездочкой +Выполнять необязательно, но можно попробовать реализовать функцию дефрагментации, которая будет уметь работать не только с однобайтовыми значениями в памяти, но еще и с 2-4-8 байтовыми значениями. \ No newline at end of file diff --git a/homework/image-02-1.png b/homework/image-02-1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d71ab07c8c6f051344ced2e7a74c0a51f541cd GIT binary patch literal 45179 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 literal 0 HcmV?d00001