Giter Site home page Giter Site logo

go_path's Introduction

Это путь go разработчика

Начала

  1. Если хочется математики
  1. Введение. Общая CS теория. Обзор go на практике и первая книга по go
  1. Практика и ввередние в алгоритмы
  1. Git - системы управления версиями

Середина

  1. Продолжение практики. Практику делать в репозитории и на него надо сделать travis CI(билд, тесты, покрытие). Принятие упражнений через пул реквесты.

4.1. Статьи в поддержку практики. Читать с п4 и п5. Подключить travis в телеграмм https://testdriven.io/blog/getting-telegram-notifications-from-travis-ci/## Основы go

Интерфейсы

Стандартная библиотека

Тестирование

Конкурентность

Кодогенерация

Пакеты, модули, структура

  1. Ещё практика
  1. SQL
  1. Конкурентность. Основы

Завершение

  1. Практика конкурентного кода
  1. Продвинутая теория и практика по конкурентному коду
  1. Контейнеры
  1. CS 50

*Все упражнения набираем на машине, запускаем и смотрим, что получается. После освоения третьей части все упражнения и примеры из книг выкладываем в свой репозиторий github. После освоения https://quii.gitbook.io/learn-go-with-tests/ - пишем на код тесты. Пробуем сначала писать тесты, а потом код.

  1. Ethereum

slice

Вот на слайсы упражнения

  1. К каждому элементу []int прибавить 1

  2. Добавить в конец слайса число 5

  3. Добавить в начало слайса число 5

  4. Взять последнее число слайса, вернуть его пользователю, а из слайса этот элемент удалить

  5. Взять первое число слайса, вернуть его пользователю, а из слайса этот элемент удалить

  6. Взять i-е число слайса, вернуть его пользователю, а из слайса этот элемент удалить. Число i передает пользователь в функцию

  7. Объединить два слайса и вернуть новый со всеми элементами первого и второго

  8. Из первого слайса удалить все числа, которые есть во втором

  9. Сдвинуть все элементы слайса на 1 влево. Нулевой становится последним, первый - нулевым, последний - предпоследним.

  10. Тоже, но сдвиг на заданное пользователем i

  11. Тоже, что 9, но сдвиг вправо

  12. Тоже, но сдвиг на i

  13. Вернуть пользователю копию переданного слайса

  14. В слайсе поменять все четные с ближайшими нечетными индексами. 0 и 1, 2 и 3, 4 и 5...

  15. Упорядочить слайс в порядке: прямом, обратном, лексикографическом.

map

Часть 1
  1. Есть текст, надо посчитать сколько раз каждое слова встречается.
  2. Есть очень большой массив(слайс) целых чисел, надо сказать какие числа в нем упоминаются хоть по разу.
  3. Есть два больших массива чисел, надо найти, какие числа упоминаются в обоих
  4. Сделать Фибоначчи с мемоизацией
Часть 2
  1. Пользователь даёт список заказа, программа должна по мапе с наименованиями товаров и ценами, посчитать сумму заказа. И сделать метод добавления новых товаров в мапу, и метод обновления цены уже существующего товара
  2. Сделать 1е, но у нас приходит несколько сотен таких списков заказов и мы хотим запоминать уже посчитанные заказы, чтобы если встречается такой же, то сразу говорить его цену без рассчёта.
  3. К 2 добавить, чтобы хранились пользовательские аккаунты со счетом типа "вася: 300р, петя: 30000000р". И перед оформлением заказа, но после его рассчёта мы проверяли, а есть ли деньги у пользователя, и если есть, то списывали сумму заказа.
  4. Есть мапа аккаунтов и счетов, как описано в 3. Надо вывести ее в отсортированном виде с сортировкой: по имени в алфавитном порядке, по имени в обратном порядке, по количеству денег по убыванию.

struct

Часть 1
  1. Взять код из задачи части 2 на map и сделать на структурах: пользователь, счет, товар, прейскурант, магазин, заказ. Без глобальных объектов. Использовать: struct, конструкторы и методы.
Часть 2
  1. Взять код из части 1 и сделать разные виды товаров и пользователей: premium пользователи у которых 5% скидка на обычные товары и 20% на premium товары; premium товары, которые продаются обычным пользователям с 50% наценкой.
  2. Взять код из 1 и добавить наборы товаров в магазин: обычный или premium товар становится основным в наборе и к нему добавляется еще один только обычный товар. На набор предоставляется любая скидка от 1 до 99%, размер скидки выставляется при создании набора. Нужен списоб изменения размера скидки после создания набора.
  3. Новый вид наборов: товар+один бесплатный пробник. Новый вид товаров - пробник. Цены не имеет, нельзя пукить отдельно, без набора.
  4. Сделать экспорт и импорт данных магазина в файл и из файла. Чтобы можно было выгрузить все данные по товарам, пользователям в файл или файлы, а потом восстановить состояние магазина, прочитав этот или эти файлы.

concurrency

Часть 1
  1. Сделать все методы магазина (создание пользователя, добавление баланса, добавление товара, изменение товара, импорт, экспорт, методы бандлов) конкурентными - надо исходить из того, что пользователь магазина может вызывать методы магазина во множестве потоков и с разными значениями одновременно, и пользователей, делающих это неизвестное число.
  2. На все методы добавить timeout. Для начала константный для всех, скажем, в секунду.
  3. Сделать методы ImportProductsCSV([]byte) error, ExportProdcuctsCSV() []byte, ImportAccountsCSV([]byte) error, ExportAccountsCSV() []byte. Прочитайте про формат csv и его пакет https://golang.org/pkg/encoding/csv/
  4. Сделать обработку import пачками в горутинах по N=1000 товаров и M=100 пользователей, то есть должно быть множество горутин, каждая из которых обрабатывает свою порцию товаров для импорта или свою порцию пользователей для импорта. Для импорта есть несколько условий:
  • При первой ошибке должен останавливаться весь текущий импорт.
  • Пользователь в ответ должен получать ошибку, содержащую информацию о товарах или пользователях, вызвавших ошибку и сведения об ошибке. То есть что-то вроде []importError{p Product; err error}
  • В случае ошибки, данные из импорта НЕ должны применяться к данным магазина. То есть в результате импорта с ошибкой данные магазина должны остаться неизменными.
  1. Попробовать запустить тесты с флагом -race
Часть 2
  1. Сделать запрос отменяющий все текущие операции испорта и экспорта: CancelImportExport() error. В итоге его работы данные магазина должны остаться такие же, как были до начала импортов, в пользователи, вызвавшие импорты и экспорты, должны получить соответствующее сообщение об ошибке, что их операция была отменена.
  2. Сделать ограничение на количество запросов: на просмотр товаров 5k rps, на добавление/изменение 1k rps, на заказ 4k rps, на импорт 1 одновременный запрос, на экспорт - 10 rps, экспорт должен блоктроваться импортом. Если превысили лимит, то ждём. Это soft limit. Надо еще hard limit, если достигаем его, то сразу отдаем ошибку пользователю. Hard limits: на просмотр товаров 10k rps, на добавление/изменение 5k rps, на заказ 10k rps, на импорт 100, на экспорт - 1000 rps
  3. Добавить таймауты на запросы: на просмотр товаров 1ms, на добавление/изменение 1s, на заказ 10ms, на импорт 1h, на экспорт 5m.

go_path's People

Contributors

jekamas avatar

Stargazers

mrrva avatar

Watchers

James Cloos avatar Alexandr avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.