Pattern Guru. Шаблоны проектирования. Архитектура ПО
3.15K subscribers
194 photos
4 videos
86 links
Патерны программирования.
Архитектура ПО.
Микросервисы

@anothertechrock
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Concurrency vs Параллелизм — БАЗА для каждого разраба

👉 Concurrency → про то, как организовать программу, чтобы она умела работать с несколькими задачами (структура, управление, планирование).

👉 Parallelism → про то, как реально ускорить выполнение, используя больше процессорных ресурсов (ядра, потоки).

Можно иметь concurrency без параллелизма → например, кооперативная многозадачность на одном ядре (таски в Go, async/await в JS, coroutines в Python).

Можно иметь параллелизм без concurrency → например, просто запустить два независимых процесса для расчёта матриц на разных ядрах.

А вместе они дают и удобную структуру, и прирост производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
6👌2
📚 Основы алгоритмов на одной шпаргалке

Хочешь разобраться, чем массив отличается от хеш-таблицы? Этот шпаргалка — для тебя.

✍️ 9 ключевых структур данных:
🟢Массив
🟢 Стек
🟢 Очередь и дек
🟢 Хеш-таблица
🟢 Связанный список
🟢 Двоичное дерево поиска
🟢 Граф

✔️ Для каждой:
🟣 Простое объяснение
🟣 Примеры
🟣 Основные задачи и особенности
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3
Вопрос с собеседования

Назовите поведенческие шаблоны и кратко опишите их.


Ответ:

Поведенческие шаблоны характеризуют способы взаимодействия классов или объектов между собой.

К поведенческим шаблонам относятся:

🔎 Chain of Responsibility (Цепочка Обязанностей). организует независимую от объекта-отправителя цепочку не знающих возможностей друг друга объектов-получателей, которые передают запрос друг другу (object that can fulfill a request).

🔎 Command (Команда). Используется для определения по некоторому признаку объекта конкретного класса, которому будет передан запрос для обработки (when and how a request is fulfilled).

🔎 Iterator (Итератор). Позволяет последовательно обойти все элементы коллекции или другого составного объекта, не зная деталей внутреннего представления данных (how an aggregate's elements are accessed, traversed).

🔎 Mediator (Посредник). Позволяет снизить число связей между классами при большом их количестве, выделяя один класс, знающий все о методах других классов (how and which objects interact with each other).

🔎 Memento (Хранитель). Сохраняет текущее состояние объекта для дальнейшего восстановления (what private information is stored outside an object, and when).

🔎 Observer (Наблюдатель). Позволяет при зависимости между объектами типа «один ко многим» отслеживать изменения объекта (number of objects that depend on another object; how the dependent objects stay up to date).

🔎 State (Состояние). Позволяет объекту изменять свое поведение за счет изменения внутреннего объекта состояния (states of an object).

🔎 Strategy (Стратегия). Задает набор алгоритмов с возможностью выбора одного из классов для выполнения конкретной задачи во время создания объекта (an algorithm).

🔎 Template Method (Шаблонный Метод). Создает родительский класс, использующий несколько методов, реализация которых возложена на производные классы (steps of an algorithm).

🔎 Visitor (Посетитель). Представляет операцию в одном или нескольких связанных классах некоторой структуры, которую вызывает специфичный для каждого такого класса метод в другом классе (operations that can be applied to object(s) without changing their class(es)).

🔎 Interpreter (Интерпретатор). Для определенного способа представления информации определяет правила (grammar and interpretation of a language).

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
5👎1
Оффер на 300к без программирования

До такого уровня можно вырасти примерно за 2 года работы бизнес-аналитиком в  IT. А если ты еще новичок, то стартануть от сотки в месяц.

Если не планируешь заниматься программированием или тестированием, рекомендую посмотреть видос в закрепе канала IT с Юлей

В нем Юля, ведущий бизнес-аналитик простым языком объясняет:
— чем занимается бизнес-аналитик и почему это лучшее направление для входа в IT
— как с нуля зайти в профессию в 2026 году и зарабатывать от 100к
— ее путь и реальные истории трудоустройства новичков в IT

Плюс дает сборник с разбором самых частых вопросов от HR с правильными ответами и разбором логики.

Посмотри, потом будешь рад, что не пролистал: https://t.me/+ZBBh1Ssqc5IwZTEy
🤡13🔥2💊2😁1
Какой паттерн инкапсулирует запрос в виде объекта, позволяя тем самым параметризовывать клиентов типом запроса, устанавливать очередность запросов, протоколировать их и поддерживать отмену выполнения операций?
Anonymous Quiz
34%
Chain of Responsibility (Цепочка обязанностей)
21%
Composite (Компоновщик)
37%
Command (Команда)
8%
Посмотреть результаты
2
Шаблон проектирования Strategy

Стратегия относится к поведенческим шаблонам проектирования. Цель этого паттерна - выделить схожие алгоритмы, решающие конкретную задачу. Реализация алгоритмов выносится в отдельные классы и предоставляется возможность выбирать алгоритмы во время выполнения программы.

Давайте рассмотрим принципы и суть шаблона Стратегия на примерах.

Читать статью
🔥4
Вопрос с собеседования

Что такое Interface segregation principle?


Ответ:

Interface segregation principle
- принцип разделения интерфейса (много специализированных интерфейсов лучше, чем один универсальный).

Иными словами, большие, объемные интерфейсы надо разбивать на мелкие. При этом клиенты маленьких интерфейсов должны знать только о тех методах, которые необходимы им в работе. Также при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.


#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Шаблон проектирования Flyweigth

Приспособленец (также - Легковес) - структурный паттерн проктирования. Он позволяет вместить большее количество объектов в отведенную оперативную память.

Основная идея паттерна — различие между внутренним и внешним состоянием объекта. Внешнее состояние передается клиентом, использующим приспособленца, в некотором контексте. Внутреннее состояние хранится непосредственно в приспособленце и позволяет разделять их. Под разделением понимается возможность одновременной работы нескольких клиентов с одним и тем же приспособленцем.

Смотреть реализацию
🔥4
Вопрос с собеседования

Какие антишаблоны вы знаете?


Ответ:

Например...

🚩 Big ball of mud (Большой Ком Грязи). Термин для системы или просто программы, которая не имеет хоть немного различимой архитектуры. Как правило, включает в себя более одного антишаблона. Этим страдают системы, разработанные людьми без подготовки в области архитектуры ПО.

🚩 Yo-Yo problem (Проблема Йо-Йо). Возникает, когда необходимо разобраться в программе, иерархия наследования и вложенность вызовов методов которой очень длинны и сложны. Программисту вследствие этого необходимо лавировать между множеством различных классов и методов, чтобы контролировать поведение программы. Термин происходит от названия игрушки йо-йо.

🚩 Magic Button. Возникает, когда код обработки формы сконцентрирован в одном месте и, естественно, никак не структурирован.

🚩 Magic Number. Наличие в коде многократно повторяющихся одинаковых чисел или чисел, объяснение происхождения которых отсутствует.

🚩 Gas Factory (Газовый Завод). Необязательный сложный дизайн для простой задачи.

🚩 Analiys paralisys (Паралич анализа). В разработке ПО проявляет себя через чрезвычайно длинные фазы планирования проекта, сбора необходимых для этого артефактов, программного моделирования и дизайна, которые не имеют особого смысла для достижения итоговой цели.

🚩 Interface Bloat (Распухший Интерфейс). Термин, используемый для описания интерфейсов, которые пытаются вместить в себя все возможные операции над данными.

🚩 Accidental complexity (Случайная сложность). Проблема в программировании, которой легко можно было избежать. Возникает вследствие неправильного понимания проблемы или неэффективного планирования.

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Структурные шаблоны проектирования простым языком

Структурные шаблоны — шаблоны проектирования, в которых рассматривается вопрос о том, как из классов и объектов образуются более крупные структуры.

В этой статье рассматриваем на примерах такие шаблоны, как адаптер, мост, компоновщик, декоратор, фасад, приспособленец, заместитель.

Читать статью
👍6
Вопрос с собеседования

Что такое GRASP?


Ответ:

GRASP (аббр. General Responsibility Assignment Software Patterns, русск. - общие шаблоны распределения обязанностей) - шаблоны проектирования, используемые для решения общих задач по назначению обязанностей классам и объектам.

Известно девять GRASP-шаблонов:

1️⃣ Information Expert (Информационный эксперт). Описывает основополагающие принципы назначения обязанностей классам и объектам. Информационным экспертом (объектом, наделенным некоторыми обязанностями) является объект, обладающий максимумом информации, необходимой для выполнения назначенных обязанностей.

2️⃣Creator (Создатель). Суть ответственности такого объекта в том, что он создает другие объекты. Сразу напрашивается аналогия с фабриками.

3️⃣ Controller (Контроллер). Отвечает за обработку входных системных событий, делегируя обязанности по их обработке компетентным классам. В общем случае контроллер реализует один или несколько вариантов использования. Использование контроллеров позволяет отделить логику от представления, тем самым повышая возможность повторного использования кода.

4️⃣ Low Coupling (Слабая связанность). Если объекты в приложении сильно связаны, то любое их изменение приводит к изменениям во всех связанных объектах. А это неудобно и порождает баги. Вот поэтому необходимо, чтобы код был слабо связан и зависел только от абстракций.

5️⃣ High Cohesion (Высокая сцепленность). Этот принцип тесно соотносится со слабой связанностью: одно всегда приводит к другому. И это показатель того, что мы не нарушаем single resposibility principle. Вернее сказать, высокая сцепленность получается в результате соблюдения такого принципа из SOLID, как single resposibility principle (SRP).

6️⃣ Pure Fabrication (Чистая выдумка или чистое синтезирование). Это класс, не отражающий никакого реального объекта предметной области, но специально придуманный для усиления связности, ослабления связанности или увеличения степени повторного использования. Pure Fabrication отражает концепцию сервисов в модели Программирование от предметной области.

7️⃣ Indirection (Посредник). Шаблон перенаправление реализует низкую связность между классами путем назначения обязанностей по их взаимодействию дополнительному объекту - посреднику.

8️⃣ Protected Variations (Сокрытие реализации или защищенные изменения). Защищает элементы от изменения других элементов (объектов или подсистем) с помощью вынесения взаимодействия в фиксированный интерфейс. Всё взвимодействие между элементами должно происходить через него. Поведение может варьироваться лишь с помощью создания другой реализации интерфейса.

9️⃣ Polymorphism (Полиморфизм). Позволяет обрабатывать альтернативные варианты поведения на основе типа и заменять подключаемые компоненты системы. Обязанности распределяются для различных вариантов поведения с помощью полиморфных операций для этого класса. Все альтернативные реализации приводятся к общему интерфейсу.

#interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31
🚩 Шаблон проектирования Абстрактная фабрика

🟣 Подробное описание паттерна

Шаблон Абстрактная фабрика (англ. Abstract Factory) относится к классу порождающих паттернов. Его основное назначение — предоставить интерфейс для создания семейства взаимосвязанных объектов, не указывая конкретные классы этих объектов.

🟪 Этот шаблон стоит использовать, если:

🔎 Ваша система должна быть независимой от способа создания новых объектов

🔎 Создаваемые объекты должны использоваться вместе и быть взаимосвязанными.

Классы абстрактной фабрики часто реализуются фабричными методами, но могут быть реализованы и с помощью паттерна Prototype.

🗂 Код на Python
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4