Задачи
Тук са задачите на курса на едно място, по модули. Всяка води към урока, където е обяснено нужното.
Задачите от уроците
Раздел „Задачите от уроците“Шаблони за дизайн
- Защо шаблони
- Strategy
- Observer
- Factory Method и Simple Factory
- Builder
- Singleton и Dependency Injection
- Adapter и Facade
- Decorator
- Composite
- Command
- State
- Template Method и Iterator
- Repository
- Магазинът: кой шаблон къде: Състоянията на поръчката · Отстъпка над 100 € · Хранилище, което помни · Чужд куриер
Чист код и refactoring
- Имена в кода
- Функции: една работа, малко параметри, без скрити странични ефекти
- Коментари, които лъжат, и такива, които помагат
- Миризмите: дълъг метод, голям клас, дублиране, примитиви вместо типове, дълга верига if
- Тестовете като предпазна мрежа
- Refactoring на малки стъпки
- SOLID без догма
- Упражнение: разхвърлян клас, изчистен стъпка по стъпка: Бележката в свой клас · Планът от текста · Нощта от часа · Студентът
Сложност
- Времева сложност: броене на стъпки
- Big-O: как расте работата
- Най-добър, среден и най-лош случай
- Сложност по памет
- Амортизирана сложност
Търсене
Сортиране
- Insertion sort и selection sort
- Merge sort и „разделяй и владей“
- Quick sort и лошият пивот
- Heap и heap sort
- Counting sort и radix sort
- Стабилно сортиране и вграденият sort
Рекурсия
- Стекът от извиквания отвътре
- От рекурсия към цикъл
- Бързо степенуване
- Разделяй и владей и дървото на рекурсията
Структури от данни
- Динамичен масив отвътре
- Свързан списък
- Стек и опашка
- Хеш таблица
- Двоично дърво за търсене
- Приоритетна опашка
- Trie
- Union-find
Графи
- Граф: списък от съседи и матрица
- BFS: най-малко спирки
- DFS: острови и кръгове
- Топологично сортиране
- Dijkstra
- Минимално покриващо дърво
Динамично програмиране
- Припокриващи се подзадачи
- Задачата за монетите
- Задачата за раницата
- Най-дълга обща подредица и diff
- Как да разпознаеш DP задача
Алчни алгоритми
Техники за задачи
Проект: навигация в града
- Навигация в града
- Навигация в града
- Навигация в града
- Навигация в града
- Навигация в града
- Навигация в града
Нишки и race conditions
- Защо нишки
- Race condition
- Заключване
- Атомарни операции и неизменими обекти
- Deadlock
- Производител и потребител
- Пул от нишки и задачи
- async не е нишка
- Как се тества конкурентен код
Сигурност за програмисти
- Недоверен вход
- Инжекции: когато данните станат команда
- XSS: чужд скрипт в твоята страница
- Пароли
- Сесии, бисквитки и CSRF
- JWT и капаните му
- Тайни в кода и в git
- Зависимостите: чужд код, който пуска твоят
- Криптографията, която не пишеш сам
Софтуерни архитектури
- Слоеве
- Hexagonal и clean architecture
- Монолит, модулен монолит, услуги
- Събития и опашки
- Transactional outbox
- Дизайн на API: договор, версии, повторени заявки
- Кеш
- Мащабиране
- ADR: записани архитектурни решения
Архитектът в работа
- Нефункционални изисквания, които се мерят
- Компромиси
- Когато съседът е бавен: timeout, retry, circuit breaker
- Транзакция през няколко услуги (saga)
- Интеграция със стари и чужди системи
- Смяна на жива система (strangler fig, expand–contract)
- Архитектурен преглед
- Enterprise ландшафт и капабилитита
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача
- Твоята първа архитектурна задача