Открытый вебинар «Проверка и получение прав администратора при выполнении программы» 19.04.2018 в 20:00 | OTUS >
🔥 Учись выгодно в Отус!
-10% на все курсы июня и июля до 15.07 ! →
Выбрать курс
+7 499 938-92-02
Проходил 19 апреля 2018 года в 20:00

Открытый вебинар C#
Проверка и получение прав администратора при выполнении программы

Открытый вебинар онлайн

Зачастую программе бывают необходимы права администратора для выполнения тех или иных действий. Как узнать об их наличии, мы расскажем на открытом вебинаре по курсу "C# для носорогов". Присоединяйтесь.
Преподаватель
Антон Малиновский

Запись

О курсе

C# Developer. Professional
104 000 ₽ 93 600 ₽
6 месяцев
Начало 31 июля

Вы сможете разрабатывать на C# сложные клиент-серверные приложения, используя паттерны проектирования и возможности CLR (многопоточность, асинхронность, рефлексия, сериализация) и LINQ.

Навыки, которые вы освоите, позволят претендовать на позиции уровня начинающего Senior / крепкого Middle. Вы узнаете во что разворачиваются различные конструкции и их представления в промежуточном языке (IL). Поработаете с SQL и NoSQL базами данных, кэшированием, Unit-тестами, CI/CD и другими …

Программа курса
Модуль 1
Архитектура проекта и Базы данных
Модуль 2
Многопоточность и шаблоны проектирования
Модуль 3
Клиент-серверная архитектура и микросервисы
Модуль 4
С# Advanced
Модуль 5
Процессы и подходы
Модуль 6
Проектная работа
Архитектура проекта и Базы данных
В этом модуле вы узнаете как граммотно выстраивать архитектуру проекта и в рамках трёх занятий научитесь эффективному взаимодействию как с SQL, так и NoSQL базами данных.
Знакомство, рассказ о формате Scrum, краткий обзор курса // ДЗ
познакомиться.
31 июля, 20:00 — 21:30
Лектор: Алексей Ягур
Домашние задания: 1
ДЗ
Знакомимся с командой и гит репозиторием. Для всех:
0) Написать результат прохождения теста https://testograd.com/test/test-belbina-komandnye-roli/ или любого другого онлайн теста Белбина на определение своей командной роли.
1) Зарегистрироваться на Гитлабе/Гитхабе/Azure Devops/etc. и сделать коммит в общий проект, при сдаче ДЗ необходимо приложить ссылку на коммит в репозитории;
Если присоединились к курсу после первого занятия, то нужно написать в telegram-канал потока о том, что начали заниматься на курсе после первого занятия и хотели бы присоединиться к scrum-команде, можно продублировать сообщение руководителю программы Алексею Ягур (@Alex_Yagur), он с радостью поможет найти подходящую команду.
2) Написать “о себе” в закрытой группе команды, при сдаче ДЗ также приложить скриншот сообщения в TG;
3) Написать три способа траты баллов, помимо озвученных на уроке.

Для SCRUM-мастеров:
4) Выбрать название для команды;
5) Создать закрытый чат команды в telegram и добавить ссылку-инвайт в него в таблицу команды;
6) Создать репозиторий для проекта;
7) Выбрать проект для команды;
8) Создать доски задач: беклог, в работе, сделано;
9) Наполнить верхнеуровневый беклог.
Domain Driven Development: Основы
изучить теоретическую часть подхода Domain Driven Development.
7 августа, 20:00 — 21:30
Лектор: Виктор Дзицкий
Domain Driven Development: Практикум
научиться применять подход самостоятельно на практике.
11 августа, 20:00 — 21:30
Лектор: Виктор Дзицкий
Архитектура проекта
формировать архитектуру приложения;
разделять код на слои и звенья;
принимать более взвешенные решения о структуре проекта.
14 августа, 20:00 — 21:30
Лектор: Елена Сычева
Базы данных: организация работы с потоками данных
объяснить основы работы с базами данных.
18 августа, 20:00 — 21:30
Лектор: Екатерина Меттус
Базы данных: реляционные базы и работа с ними // ДЗ
научиться работать с реляционными базами данных.
21 августа, 20:00 — 21:30
Лектор: Екатерина Меттус
Домашние задания: 1
ДЗ
Создание виртуальной базы данных магазина в PostgreSQL. Спроектируйте и создайте структуру базы данных для виртуального магазина, следуя этому плану:

1. Таблица "Products" (Продукты):

- ProductID (Основной ключ)
- ProductName (Название продукта)
- Description (Описание)
- Price (Цена)
- QuantityInStock (Количество на складе)




2. Таблица "Users" (Пользователи):

- UserID (Основной ключ)
- UserName (Имя пользователя)
- Email (Электронная почта)
- RegistrationDate (Дата регистрации)




3. Таблица "Orders" (Заказы):

- OrderID (Основной ключ)
- UserID (Внешний ключ)
- OrderDate (Дата заказа)
- Status (Статус)




4. Таблица "OrderDetails" (Детали заказа):

- OrderDetailID (Основной ключ)
- OrderID (Внешний ключ)
- ProductID (Внешний ключ)
- Quantity (Количество)
- TotalCost (Общая стоимость)




5. Установление связей:

- Связь между "Users" и "Orders"
- Связь между "Orders" и "OrderDetails"
- Связь между "Products" и "OrderDetails"




6. SQL запросы:

- Добавление нового продукта
- Обновление цены продукта
- Выбор всех заказов определенного пользователя
- Расчет общей стоимости заказа
- Подсчет количества товаров на складе
- Получение 5 самых дорогих товаров
- Список товаров с низким запасом (менее 5 штук)
Базы данных: Entity Framework Core
научиться взаимодействовать с базой данных при помощи фреймворка EF Core.
25 августа, 20:00 — 21:30
Лектор: Дмитрий Гурьянов
Базы данных: NoSQL базы и их особенности
- понять, как выбирать между реляционными и NoSQL СУБД в своих проектах;
- уметь проектировать оптимальную для хранения в NoSQL СУБД модель данных;
- освоить базовые приемы работы с одной из NoSQL СУБД: Redis, MongoDb, или Cassandra(по выбору преподавателя)
28 августа, 20:00 — 21:30
Лектор: Дмитрий Гурьянов
Ретроспектива и планирование
1 сентября, 20:00 — 21:30
Лектор: Виктор Дзицкий
Многопоточность и шаблоны проектирования
После этого модуля вы сможете писать быстрый многопоточный и эффективный асинхронный код, обмениваться данными между разными приложениями, а также познакомитесь с порождающими, структурными и поведенческими шаблонами проектирования.
Введение в параллелизм в .NET. Отличия процесса, потока, домена и таска // ДЗ
дать описание разным примитивам параллелизма для лучшего понимания их назначения и отличий;
получить примеры практического использования инструментов параллелизма на практической задаче.
4 сентября, 20:00 — 21:30
Лектор: Виктор Дзицкий
Домашние задания: 1
ДЗ
Task: Параллельное считывание файлов. 1. Прочитать 3 файла параллельно и вычислить количество пробелов в них (через `Task`).
2. Написать функцию, принимающую в качестве аргумента путь к папке. Из этой папки параллельно прочитать все файлы и вычислить количество пробелов в них.
3. Замерьте время выполнения кода (класс `Stopwatch`).




* 7 баллов: за выполненное 1-е задание
* +2 балла: за выполненное 2-е задание
* +1 балл: за выполненное 3-е задание
* Минимальное количество баллов: 7
Асинхронные операции
писать асинхронный код.
8 сентября, 20:00 — 21:30
Лектор: Елена Сычева
Магические слова async / await
изучить механизм, скрытый под ключевыми словами async/await;
научиться правильному использованию этих ключевых слов.
11 сентября, 20:00 — 21:30
Лектор: Михаил Дмитриев
Синхронизация доступа к общему ресурсу
познакомиться с примитивными и гибридными средствами управления доступа к общим ресурсам;
рассмотреть дополнительные инструменты для упрощения организации многопоточной работы;
применить полученные знания в практическом занятии.
15 сентября, 20:00 — 21:30
Лектор: Михаил Дмитриев
Взаимодействие потоков
познакомиться с примитивами управления потоков;
понять в каких моментах использовать эти примитивы;
применить примитивы на практике.
18 сентября, 20:00 — 21:30
Лектор: Антон Герасименко
Внутрипроцессное взаимодействие // ДЗ
применять потоки, задачи, Parallel LINQ;
распараллеливать расчёты для ускорения вычислений;
оценивать целесообразность применения механизмов;
параллельной обработки данных.
22 сентября, 20:00 — 21:30
Лектор: Антон Герасименко
Домашние задания: 1
ДЗ
Многопоточный проект. 1. Напишите вычисление суммы элементов массива интов:

- Обычное
- Параллельное (для реализации использовать Thread, например List)
- Параллельное с помощью LINQ


2. Замерьте время выполнения для 100 000, 1 000 000 и 10 000 000

3. Укажите в таблице результаты замеров, указав:

- Окружение (характеристики компьютера и ОС)
- Время выполнения последовательного вычисления
- Время выполнения параллельного вычисления
- Время выполнения LINQ


Пришлите в чат с преподавателем помимо ссылки на репозиторий номера своих строк в таблице.
Межпроцессное взаимодействие
изучить способы взаимодействия процессов/программ друг с другом.
25 сентября, 20:00 — 21:30
Лектор: Елена Сычева
Порождающие шаблоны проектирования // ДЗ
объяснить назначение изученных шаблонов проектирования;
применять их в своих проектах.
29 сентября, 20:00 — 21:30
Лектор: Роман Приходько
Домашние задания: 1
ДЗ
Реализуем паттерн "Прототип". 0. Придумать и создать 3-4 класса, которые как минимум дважды наследуются и написать краткое описание текстом.
1. Создать свой дженерик интерфейс IMyCloneable для реализации шаблона "Прототип".
2. Сделать возможность клонирования объекта для каждого из этих классов, используя вызовы родительских конструкторов.
3. Составить тесты или написать программу для демонстрации функции клонирования.
4. Добавить к каждому классу реализацию стандартного интерфейса ICloneable и реализовать его функционал через уже созданные методы.
5. Написать вывод: какие преимущества и недостатки у каждого из интерфейсов: IMyCloneable и ICloneable.
Структурные шаблоны проектирования
объяснить назначение изученных шаблонов проектирования и применять их в своих проектах.
2 октября, 20:00 — 21:30
Лектор: Роман Приходько
Поведенческие шаблоны проектирования
объяснить назначение изученных шаблонов проектирования и применять их в своих проектах.
6 октября, 20:00 — 21:30
Лектор: Михаил Дмитриев
Ретроспектива и планирование
уверенно участвовать в ретроспективах;
планировать объём работ на будущее.
9 октября, 20:00 — 21:30
Лектор: Антон Герасименко
Клиент-серверная архитектура и микросервисы
Здесь вы разберётесь с тем, как выстроить правильную архитектуру проекта, чем авторизация отличается от аутентификации, какие бывают паттерны корпоративных приложений и зачем их использовать. Также, вам наверняка пригодится понимание таких аббревиатур как WCF, ASMX, REST, SOLID и CI/CD.
Интеграция приложений
сформулировать основные причины интеграции корпоративных систем и способы их интеграции;
сформулировать какой способ взаимодействия предпочтителен для различных типов задач и в чем причина популярности микросервисов.
20 октября, 20:00 — 21:30
Лектор: Дмитрий Гурьянов
Принципы SOLID // ДЗ
изучить значение каждой буквы акронима;
узнать как применять эти принципы на практике.
23 октября, 20:00 — 21:30
Лектор: Антон Герасименко
Домашние задания: 1
ДЗ
Демонстрация SOLID принципов. На примере реализации игры «Угадай число» продемонстрировать практическое применение SOLID принципов.
Программа рандомно генерирует число, пользователь должен угадать это число. При каждом вводе числа программа пишет больше или меньше отгадываемого. Кол-во попыток отгадывания и диапазон чисел должен задаваться из настроек.
В отчёте написать, что именно сделано по каждому принципу.
Приложить ссылку на проект и написать, сколько времени ушло на выполнение задачи.
Брокеры сообщений
разобраться в сходствах и отличиях четырёх наиболее популярных брокеров сообщений;
научиться писать код, получающий сообщения из очереди.
27 октября, 20:00 — 21:30
Лектор: Роман Приходько
CI/CD
разобраться в принципах CI/CD;
понимать как организовать правильный CI/CD;
сформулировать основные инструменты для CI и CD, их отличия;
настроить собственный CI/CD.
30 октября, 20:00 — 21:30
Лектор: Виктор Дзицкий
Ретроспектива и планирование
уверенно участвовать в ретроспективах;
планировать объём работ на будущее.
6 ноября, 20:00 — 21:30
Лектор: Антон Герасименко
С# Advanced
В этом модуле вы научитесь правильно использовать такие мощные инструменты языка как рефлексия, атрибуты, исключения, дженерики, делегаты и события. Также, разберёмся в том, как внутри и снаружи работает Сборщик мусора, как писать и использовать финализаторы. Напоследок, рассмотрим дополнительные возможности языка и возможности, добавленные в последних версиях.
Отражение (Reflection) // ДЗ
обрабатывать экземпляры разных или неизвестных заранее классов;
создавать универсальные тесты;
писать свои компоненты.
10 ноября, 20:00 — 21:30
Лектор: Сергей Мусатов
Домашние задания: 1
ДЗ
Рефлексия и её применение. Основное задание:
1. Написать сериализацию свойств или полей класса в строку
2. Проверить на классе: class F { int i1, i2, i3, i4, i5; Get() => new F(){ i1 = 1, i2 = 2, i3 = 3, i4 = 4, i5 = 5 }; }
3. Замерить время до и после вызова функции (для большей точности можно сериализацию сделать в цикле 100-100000 раз)
4. Вывести в консоль полученную строку и разницу времен
5. Отправить в чат полученное время с указанием среды разработки и количества итераций
6. Замерить время еще раз и вывести в консоль сколько потребовалось времени на вывод текста в консоль
7. Провести сериализацию с помощью каких-нибудь стандартных механизмов (например в JSON)
8. И тоже посчитать время и прислать результат сравнения
9. Написать десериализацию/загрузку данных из строки (ini/csv-файла) в экземпляр любого класса
10. Замерить время на десериализацию
11. Общий результат прислать в чат с преподавателем в системе в таком виде:

Сериализуемый класс: class F { int i1, i2, i3, i4, i5;}
код сериализации-десериализации: ...
количество замеров: 1000 итераций
мой рефлекшен:
Время на сериализацию = 100 мс
Время на десериализацию = 100 мс
стандартный механизм (NewtonsoftJson):
Время на сериализацию = 100 мс
Время на десериализацию = 100 мс
Сериализация
использовать механизмы сериализации и результирующие форматы сериализации;
применять стандартные способы сериализации.
13 ноября, 20:00 — 21:30
Лектор: Эдгар Пилипсон
Атрибуты
использовать существующие атрибуты;
проверять наличие атрибутов на классах, функциях, полях, и т.д.;
создавать свои собственные атрибуты.
17 ноября, 20:00 — 21:30
Лектор: Эдгар Пилипсон
Исключения и нюансы работы с ними
объяснить, что из себя представляет исключение;
разобраться как исключение устроено "под капотом";
научиться бросать и перехватывать исключения;
познакомиться с Best Practice в работе с исключениями.
20 ноября, 20:00 — 21:30
Лектор: Елена Сычева
Работа с методами как с переменными (delegates, events) // ДЗ
создавать делегаты для передачи методов в функции;
создавать события и подписки на них;
писать менее связный код и упростить расширение функционала ПО.
24 ноября, 20:00 — 21:30
Лектор: Елена Сычева
Домашние задания: 1
ДЗ
Делегаты и события. 1. Написать обобщённую функцию расширения, находящую и возвращающую максимальный элемент коллекции.
Функция должна принимать на вход делегат, преобразующий входной тип в число для возможности поиска максимального значения.
public static T GetMax<T>(this IEnumerable<T> collection, Func<T, float> convertToNumber) where T : class;
2. Написать класс, обходящий каталог файлов и выдающий событие при нахождении каждого файла;
3. Оформить событие и его аргументы с использованием .NET соглашений:
public event EventHandler<FileArgs> FileFound;
FileArgs – будет содержать имя файла и наследоваться от EventArgs
4. Добавить возможность отмены дальнейшего поиска из обработчика;
5. Вывести в консоль сообщения, возникающие при срабатывании событий и результат поиска максимального элемента.
Дженерики, их реализация и ограничения
работать с обобщениями.
27 ноября, 20:00 — 21:30
Лектор: Эдгар Пилипсон
Сборщик мусора, деструкторы и финализаторы, Disposable Pattern
разобраться с тем, как хранятся объекты в памяти в .NET;
познакомиться с алгоритмом выделения физической памяти для приложений;
понять алгоритм работы Сборщика Мусора (поколения, стратегии, карточный стол);
начать отличать Деструкторы от Финализаторов;
научиться использовать Disposable Pattern.
8 декабря, 20:00 — 21:30
Лектор: Эдгар Пилипсон
Дополнительные возможности языка: от директив препроцессора до указателей
писать небезопасный код и создавать указатели, если, столкнётесь с тем, что это понадобится;
использовать механизмы условной компиляции, чтобы обеспечить зависимость поведения проекта от окружения или обеспечить большее удобство работы с кодом;
применять динамические объекты и заготовки кода,
чтобы ускорить написание проектов.
11 декабря, 20:00 — 21:30
Лектор: Михаил Дмитриев
Что полезного в новых версиях C#?
проанализировать нововведения в новых стандартах.
15 декабря, 20:00 — 21:30
Лектор: Сергей Мусатов
Ретроспектива и планирование
уверенно участвовать в ретроспективах.
18 декабря, 20:00 — 21:30
Лектор: Антон Герасименко
Процессы и подходы
Этот модуль даст вам понимание современных и не очень методологий с более подробным рассмотрением DDD. А из более технических вещей, будут рассмотрены различные подходы в тестировании, журналировании, документации и трассировке
Waterfall, Scrum, Kanban и прочие методологии
разобраться в современных методологиях, необходимости и особенностям их применения.
22 декабря, 20:00 — 21:30
Лектор: Дмитрий Гурьянов
Unit, Sandbox, Blackbox, Whitebox, Integration tests
разбираться во всём этом многообразии типов тестов;
понимать когда и какие нужно применять.
25 декабря, 20:00 — 21:30
Лектор: Екатерина Меттус
Логирование, метрики, трассировка и ведение документации
разбираться в инструментах исследования и анализа работы программ;
выбирать и настраивать подходящую систему логирования;
объяснять что из себя представляют метрики и как устроена трассировка;
перечислить минимум три системы для ведения программной документации.
29 декабря, 20:00 — 21:30
Лектор: Михаил Дмитриев
Реактивное программирование
изучить основные паттерны работы с последовательностями данных в режимах pull и push;
проанализировать интерфейс IObservable<T> и связанные с ним соглашения;
изучить основные возможности LINQ для IObservable<T>;
получить пример работы с подписками на данные в .net-приложении.
12 января, 20:00 — 21:30
Лектор: Елена Сычева
Функциональное программирование
понимать принципы функционального программирования и их отличия от других парадигм;
применять основные техники функционального программирования;
эффективно использовать лямбда-выражения и LINQ для обработки коллекций;
разрабатывать функции высших порядков и использовать их для обработки данных.
15 января, 20:00 — 21:30
Лектор: Антон Герасименко
Проектная работа
Заключительный модуль курса посвящен проектной работе. Проект — это отличная возможность объединить все полученные на курсе знания в одной системе.
Консультация по проектам и домашним заданиям
получить ответы на вопросы по проекту, ДЗ и по курсу.
19 января, 20:00 — 21:30
Лектор: Алексей Ягур
Домашние задания: 1
ДЗ
Проектная работа. **Основные требования к проектным работам**
- База Данных
- Асинхронность
- Многопоточность (примитивы синхронизации)
- Шаблоны проектирования (3+)




**Общие шаги по проекту**
- Определиться со списком функций и ролей, которые будут в финальном варианте системе в конце курса и нарисовать это.
- Сделать копию первой картинки и удалить всё, без чего система не сможет выполнять самые-самые базовые функции.
- По получившемуся варианту сделать скелет проекта в IDE.
- Создать в таск-трекере верхнеуровневые задачи для разработки проекта до минимально рабочего варианта.
- Выбрать что из этих задач получится реализовать за первую итерацию.
- Реализовать и продемонстрировать на занятии по Ретроспективе и Планированию.
- Доработать проект до состояния прототипа (MVP).
- Создать в таск-трекере верхнеуровневые задачи для доработки проекта до итогового варианта.
- Выполнить задачи из таск-трекера.
Защита проектных работ
защитить проект и получить рекомендации экспертов.
9 февраля, 20:00 — 21:30
Лектор: Алексей Ягур

Преподаватель

Антон Малиновский
Занимается разработкой с 1995 года. С 2002 года выполняет научные, а с 2008 коммерческие разработки. Платформу .NET использует для своих разработок с 2009 года. Специализируется на промышленной автоматизации.
В настоящее время сотрудничает с корпорацией Takata (Подразделение Nissan Group), выполняет модернизацию участков производства ульяновского завода.
Закончил МГТУ СТАНКИН по специальности "автоматизация машиностроительных производств и вычислительных систем"