Python | Вопросы собесов
11.2K subscribers
5 photos
1 file
159 links
Разбираем вопросы с собеседований на Python разработчика. Django, Flask, FastApi

Сайт: easyoffer.ru
Реклама: @easyoffer_adv
Download Telegram
Что можно сказать о бинарном дереве ?
Спросят с вероятностью 7%

Бинарное дерево - это структура данных, состоящая из узлов, каждый из которых имеет не более двух потомков: левого и правого. Каждый узел содержит некоторое значение (ключ) и ссылки на его левого и правого потомков (или на None, если потомок отсутствует).

Основные характеристики бинарного дерева:

1️⃣ Корень (Root): Это верхний узел дерева, от которого начинается структура.

2️⃣ Уровень (Level): Каждый узел дерева расположен на определенном уровне. Уровень корня равен 0, уровень его детей равен 1 и так далее.

3️⃣ Листья (Leaves): Это узлы дерева, у которых отсутствуют потомки. То есть они конечные в дереве.

4️⃣ Высота (Height): Это количество уровней в дереве. Максимальная высота бинарного дерева равна максимальному количеству уровней от корня до самого далекого листа.

5️⃣ Балансировка (Balanced): Бинарное дерево называется сбалансированным, если разница в высоте между левым и правым поддеревьями на каждом узле не превышает 1. Такие деревья обеспечивают эффективный поиск, вставку и удаление элементов.

6️⃣ Порядок (Traversal): Существуют различные способы обхода бинарного дерева для выполнения операций с его элементами. Эти методы включают в себя префиксный (pre-order), инфиксный (in-order) и постфиксный (post-order) обходы.

7️⃣ Операции: Бинарное дерево обычно поддерживает операции вставки, удаления и поиска элементов. Эти операции выполняются за время O(log n) в сбалансированных деревьях и до O(n) в худшем случае в несбалансированных.

Бинарные деревья широко применяются в компьютерных науках для построения эффективных структур данных, таких как двоичные поисковые деревья, кучи и многие другие. Они позволяют эффективно хранить, обрабатывать и извлекать данные, делая их незаменимым инструментом в различных алгоритмах и приложениях.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Принципы программирования KISS ?
Спросят с вероятностью 7%

KISS (Keep It Simple, Stupid) - это принцип проектирования ПО, который призывает к тому, чтобы решения были максимально простыми и непритязательными. Имеет следующие ключевые аспекты:

1️⃣ Простота и ясность: ПО должно быть простым и понятным для понимания, как для его создателей, так и для пользователей. Простота снижает сложность, упрощает разработку и обслуживание кода.

2️⃣ Отказ от избыточности: Избегайте излишних деталей и сложных конструкций в коде. Пишите только тот код, который необходим для решения задачи.

3️⃣ Работоспособность и надежность: Простота не должна жертвовать работоспособностью и надежностью программы. ПО должно продолжать работать правильно и стабильно при любых условиях.

4️⃣ Легкость сопровождения и расширения: ПО должно быть легко поддерживаемым и расширяемым. Простой код легче изменить, доработать и адаптировать под новые требования.

Принцип KISS подчеркивает важность обеспечения минимального количества сложности в ПО, что способствует повышению его читаемости, надежности и производительности. Он учитывает тот факт, что чем проще решение, тем менее вероятно наличие ошибок и проблем в будущем.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Какие есть четыре уровня изоляции транзакций ?
Спросят с вероятностью 7%

В стандарте ANSI/ISO SQL определены четыре уровня изоляции транзакций:

1️⃣ READ UNCOMMITTED (Неподтвержденное чтение):
- Это самый низкий уровень изоляции.
- Позволяет одной транзакции видеть изменения, внесенные другой, даже если эти изменения еще не зафиксированы (т.е., транзакция еще не завершена).
- Возможно возникновение проблем с неподтвержденным чтением и потерянными обновлениями.

2️⃣ READ COMMITTED (Подтвержденное чтение):
- Этот уровень гарантирует, что транзакция увидит только изменения, которые были подтверждены другими.
- Избегает проблем с неподтвержденным чтением, но может возникнуть проблема с повторяемым чтением.

3️⃣ REPEATABLE READ (Повторяемое чтение):
- Гарантирует, что каждый раз, когда транзакция читает данные, она видит те же самые данные, что и в начале, даже если другая вносит изменения в эти данные.
- Избегает проблемы с повторяемым чтением, но может привести к проблемам с фантомными записями (phantom reads).

4️⃣ SERIALIZABLE (Сериализуемость):
- Это самый высокий уровень изоляции.
- Гарантирует, что все операции чтения и записи будут видеть состояние данных, как если бы они выполнялись последовательно (одна за другой), даже если фактически они выполняются параллельно.
- Избегает проблем с повторяемым чтением и фантомными записями, но может привести к увеличению блокировок и ухудшению производительности.

Выбор уровня изоляции зависит от конкретных требований вашего приложения к согласованности данных и производительности.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Какие минусы есть у индекса ?
Спросят с вероятностью 7%

Индексы в базах данных - это мощный инструмент для оптимизации запросов и ускорения доступа к данным, но они также имеют некоторые минусы:

1️⃣ Затраты на хранение: Они занимают дополнительное место на диске для хранения дополнительной структуры данных. Это может быть значительным фактором для больших таблиц с множеством индексов.

2️⃣ Затраты на обновление: При вставке, обновлении или удалении записей из таблицы они также должны быть обновлены, чтобы отразить изменения. Это может привести к дополнительным затратам на обслуживание индексов и замедлить операции записи.

3️⃣ Ухудшение производительности при обновлении: Их обновление может потребовать блокировки и увеличить время выполнения операций обновления, особенно для таблиц с большим количеством индексов.

4️⃣ Выбор неоптимальных индексов: Неправильно выбранные или ненужные индексы могут привести к избыточному использованию ресурсов и ухудшению производительности запросов.

5️⃣ Фрагментация индексов: Постоянные операции вставки, обновления и удаления могут привести к их фрагментации, что может уменьшить их эффективность.

6️⃣ Необходимость перестройки: Иногда они требуют перестройки для оптимизации их производительности, особенно если таблица значительно изменилась или индекс стал фрагментированным.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что такое шардирование ?
Спросят с вероятностью 7%

Шардирование (sharding) - это метод горизонтального масштабирования, который позволяет распределить данные по нескольким серверам или узлам (шардам). Этот метод используется для улучшения производительности и масштабируемости баз данных, особенно в случае больших объемов данных или высокой нагрузки.

Как правило, при шардировании данные разбиваются на несколько фрагментов (шардов), и каждый шард хранится на отдельном сервере или узле. Разделение происходит по определенному критерию, например, по значению ключа или хеш-функции. Это позволяет равномерно распределить данные и запросы между различными узлами, уменьшить нагрузку на них и повысить общую производительность системы.

Преимущества:

Масштабируемость: Этот метод позволяет распределить данные по нескольким серверам, что увеличивает общую производительность и способность обрабатывать большие объемы данных.

Устойчивость к отказам: Распределение данных между несколькими узлами делает систему более устойчивой к отказам, так как отказ одного узла не приводит к полной недоступности данных.

Балансировка нагрузки: Равномерное распределение данных между шардами позволяет более эффективно распределять нагрузку между серверами и узлами.

Гибкость: Позволяет настроить базу данных под конкретные требования производительности и нагрузки, выбрав оптимальное количество и конфигурацию шардов.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Ребят, напоминаю, что все вопросы, которые здесь публикуются можно посмотреть списком вместе с видео-ответами на моем сайте easyoffer.ru
В чем разница между Posgres и MySQL ?
Спросят с вероятностью 7%

PostgreSQL и MySQL - это две реляционные базы данных, предоставляющие функциональность SQL и используются в различных приложениях и проектах. Вот основные различия:

1️⃣ Лицензия:
- PostgreSQL распространяется под лицензией, которая является свободной и открытой.
- MySQL распространяется под двумя лицензиями: GNU GPL и коммерческой.

2️⃣ Реализация стандартов SQL:
- PostgreSQL стремится к полной совместимости со стандартами SQL и реализует широкий спектр ее функций, включая более сложные аналитические и поддержку оконных функций.
- MySQL свободно интерпретирует стандарты SQL и может не поддерживать некоторые более продвинутые возможности, предоставляемые PostgreSQL.

3️⃣ Синтаксис и функциональность:
- PostgreSQL обычно считается более мощным и гибким в плане возможностей и функциональности. Он предоставляет богатый набор типов данных, поддержку транзакций, горизонтальное масштабирование и другие продвинутые функции.
- MySQL, с другой стороны, часто используется для более простых задач и может быть более прямым в использовании. Он имеет более ограниченный набор типов данных и функциональность, но при этом может быть проще в настройке и использовании.

4️⃣ Производительность:
- Обе базы данных обеспечивают хорошую производительность для большинства типичных приложений. Однако для конкретных сценариев использования и типов запросов производительность может различаться.
- В целом, MySQL может проявлять себя лучше в некоторых случаях, особенно при использовании кэширования и оптимизаций для конкретных запросов.

5️⃣ Расширяемость и экосистема:
- PostgreSQL имеет богатую экосистему инструментов и расширений, которые могут быть использованы для улучшения и расширения его функциональности.
- MySQL также имеет широкую поддержку и большое сообщество пользователей, но его экосистема может быть не такой обширной.

Обе базы данных имеют свои сильные и слабые стороны, и выбор между ними зависит от конкретных требований и характеристик вашего приложения.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что можно сказать о принципах программирования DRY ?
Спросят с вероятностью 7%

DRY (Don't Repeat Yourself) - это принцип, который подразумевает, что каждая часть знаний или функциональности в программе должна иметь единственное, безошибочное и авторитетное представление в рамках системы. Он бращает внимание на избегание дублирования кода, данных и концепций в программном коде.

Основные идеи, связанные с этим принципом:

1️⃣ Избегайте дублирования кода: Дублирование кода увеличивает сложность кодовой базы, делает ее труднее в поддержке и изменении. Поэтому следует стараться избегать повторения одинаковых или похожих кусков кода.

2️⃣ Разделение кода на модули и функции: Часто используемый код должен быть вынесен в отдельные функции или модули, чтобы он мог быть повторно использован в различных частях программы.

3️⃣ Использование абстракций и шаблонов проектирования: Использование абстракций и шаблонов проектирования позволяет создавать универсальные решения, которые можно использовать повторно в различных контекстах.

4️⃣ Управление данными: Дублирование данных также может привести к проблемам согласованности и целостности. Поэтому следует стремиться к хранению данных в единственном источнике и использованию ссылок на него в других частях программы.

Преимущества применения этого принципа:

Уменьшение объема кода: Избегание дублирования кода приводит к уменьшению объема кода, что облегчает его понимание и поддержку.
Улучшение читаемости кода: Код становится более понятным и читаемым, так как повторяющиеся фрагменты убираются в отдельные функции или модули.
Облегчение обслуживания: Изменения в программе требуют меньше усилий, так как они вносятся в единственном месте, а не в нескольких копиях кода.

Принцип DRY является одним из основных принципов разработки ПО и помогает создавать более эффективный, гибкий и поддерживаемый код.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что такое Docker Compose ?
Спросят с вероятностью 7%

Docker Compose - это инструмент для определения и запуска многоконтейнерных приложений с помощью простого файла конфигурации YAML. Он позволяет вам определить конфигурацию вашего приложения в виде сервисов, каждый из которых может быть запущен в отдельном контейнере, и объединить эти сервисы в единое приложение.

Основные функции:

1️⃣ Определение сервисов: Вы можете определить несколько сервисов, которые составляют ваше приложение, в файле docker-compose.yml. Каждый сервис может быть описан с использованием различных параметров, таких как образ, сетевые настройки, переменные окружения и другие параметры конфигурации.

2️⃣ Запуск и управление приложением: Он позволяет запускать и управлять многоконтейнерными приложениями одной командой. Вы можете использовать команды типа docker-compose up для запуска приложения на основе конфигурации из файла docker-compose.yml.

3️⃣ Сетевая конфигурация: Автоматически настраивает сеть между контейнерами, позволяя им взаимодействовать друг с другом через сеть. Вы также можете определить пользовательские сети и связи между сервисами в файле конфигурации.

4️⃣ Переопределение параметров: Вы можете переопределить параметры конфигурации сервисов из командной строки при запуске приложения, что позволяет настраивать поведение приложения для различных сред или конфигураций.

5️⃣ Управление жизненным циклом контейнеров: Обеспечивает простой способ управления жизненным циклом контейнеров, включая их запуск, остановку, перезапуск и удаление.

Docker Compose упрощает развертывание и управление многоконтейнерными приложениями, делая процесс разработки и тестирования более эффективным и удобным.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что дает poetry ?
Спросят с вероятностью 7%

Poetry - это инструмент для управления зависимостями и пакетами в проектах. Он предоставляет удобный способ управления зависимостями, виртуальными окружениями, сборкой и публикацией пакетов. Вот несколько основных возможностей:

1️⃣ Управление зависимостями: Этот инструмент использует файл pyproject.toml для определения зависимостей проекта. Этот файл содержит информацию о зависимостях вашего проекта, включая название пакета, версию и другие метаданные. Он позволяет легко добавлять, удалять и обновлять зависимости с помощью команды poetry add.

2️⃣ Виртуальные окружения: Автоматически создает виртуальное окружение для вашего проекта и управляет зависимостями внутри этого окружения. Это позволяет изолировать зависимости проекта от других проектов и предотвращает конфликты версий пакетов.

3️⃣ Управление проектом: Предоставляет удобные команды для управления проектом, такие как создание нового проекта, установка зависимостей, управление сценариями (scripts) и т.д.

4️⃣ Сборка и публикация пакетов: С помощью этого инструмента вы можете легко собирать и публиковать свои пакеты на PyPI. Он автоматически создает файлы METADATA и setup.py для вашего пакета и предоставляет удобные команды для сборки и публикации.

5️⃣ Консистентность и предсказуемость: Стремится обеспечить консистентность и предсказуемость в управлении зависимостями и средой выполнения проекта. Он использует блокировку версий для фиксации версий зависимостей и гарантирует, что проект будет воспроизводимым на разных системах.

Poetry предоставляет удобный и современный способ управления зависимостями и проектами, что делает процесс разработки более эффективным и удобным.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👾 Ребят, напоминаю, у нас есть приватные группы где мы делимся реальными собеседованиями и тестовыми заданиями. Чтобы попасть в эти в группы воспользуйтесь ботами:
🤖 Доступ к базе собесов
🤖 Доступ к базе тестовых заданий
Что такое виртуальное окружение ?
Спросят с вероятностью 7%

Виртуальное окружение (virtual environment) - это изолированная среда, в которой устанавливаются зависимости и библиотеки для конкретного проекта, отделенная от системной установки. Эта среда позволяет изолировать проекты друг от друга и от системы, а также управлять зависимостями внутри каждого проекта без вмешательства в системные установки.

Преимущества использования:

Изоляция зависимостей: Это позволяет устанавливать и использовать определенные версии библиотек и зависимостей для каждого проекта, без влияния на другие проекты или системные установки. Позволяет избежать конфликтов между версиями библиотек и обеспечивает надежность и воспроизводимость проекта.

Управление зависимостями: Позволяет устанавливать, обновлять и удалять зависимости для конкретного проекта независимо от других проектов. Это делает управление зависимостями более гибким и удобным.

Изоляция проекта: Использование виртуальных окружений позволяет легко переносить проекты между различными системами или средами разработки, так как все зависимости и настройки окружения хранятся локально внутри проекта.

Безопасность и стабильность: Изоляция проекта от системных установок помогает избежать возможных проблем совместимости или несовместимости зависимостей и обеспечивает стабильность и надежность работы проекта.

Для создания и использования виртуального окружения часто используются инструменты, такие как virtualenv, venv или сторонние инструменты управления зависимостями, такие как Pipenv или Poetry.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Какие инструменты используются для виртуального окружения ?
Спросят с вероятностью 7%

Для создания и управления виртуальными окружениями существует несколько инструментов. Вот некоторые из наиболее распространенных:

1️⃣ virtualenv: Это один из самых популярных инструментов для создания виртуальных окружений. Он позволяет создавать изолированные среды, в которых можно устанавливать и использовать зависимости для конкретных проектов.

2️⃣ venv: Это встроенный инструмент для создания виртуальных окружений, доступный начиная с Python 3.3. Он предоставляет функциональность, аналогичную virtualenv, но является частью стандартной библиотеки.

3️⃣ Pipenv: Это инструмент для управления зависимостями и виртуальными окружениями. Он комбинирует возможности управления зависимостями с помощью pip и создания виртуальных окружений с помощью virtualenv или venv. Pipenv также автоматически создает и активирует виртуальное окружение для каждого проекта.

4️⃣ Poetry: Это современный инструмент для управления зависимостями и виртуальными окружениями. Он предоставляет возможности для управления зависимостями, создания виртуальных окружений, управления сценариями (scripts) и публикации пакетов. Poetry использует файл pyproject.toml для определения зависимостей и настроек проекта.

Эти инструменты предоставляют удобные способы создания и управления виртуальными окружениями, что помогает изолировать зависимости проектов и обеспечить надежность и воспроизводимость работы приложений. Выбор конкретного инструмента зависит от ваших предпочтений и требований проекта.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Как работает хеш-таблица ?
Спросят с вероятностью 7%

Хеш-таблица (hash table) - это структура данных, которая использует хэш-функцию для быстрого поиска, вставки и удаления элементов. В основе ее работы лежит идея преобразования ключей элементов в числовые значения (хэши), которые затем используются для определения местоположения элементов в таблице.

Вот основные шаги работы:

1️⃣ Хэширование ключей: Каждый ключ элемента преобразуется в числовое значение с помощью хэш-функции. Она берет ключ и преобразует его в индекс (хэш), который указывает на ячейку или слот в массиве.

2️⃣ Разрешение коллизий: Поскольку разные ключи могут быть преобразованы в один и тот же хэш (коллизия), необходимо иметь механизм разрешения коллизий. Существуют различные методы разрешения коллизий, такие как метод цепочек (chaining) и метод открытой адресации (open addressing).

- Метод цепочек: В этом методе каждая ячейка представляет собой связный список элементов с одним и тем же хэшем. При коллизии элемент добавляется в соответствующий список.

- Метод открытой адресации: В нем, если возникает коллизия, ищется следующая свободная ячейка в таблице (обычно с помощью другой хэш-функции или последовательного поиска), где элемент может быть помещен.

3️⃣ Доступ к элементам: Для доступа к элементу нужно выполнить следующее:
- Применить хэш-функцию к ключу, чтобы определить индекс в таблице.
- В ячейке таблицы есть элемент(ы), сравнить ключ(и) с искомым.
- Ключ совпадает, элемент найден.
- Ключ не совпадает, применить метод разрешения коллизий для поиска элемента.

4️⃣ Вставка и удаление элементов: Процесс вставки и удаления элементов аналогичен процессу доступа к элементам. Сначала вычисляется хэш ключа, затем используется метод разрешения коллизий для вставки или удаления элемента.

Хеш-таблицы обеспечивают быстрый доступ к элементам в среднем случае за время O(1), что делает их эффективным инструментом для реализации ассоциативных массивов, множеств и других структур данных, требующих эффективного поиска, вставки и удаления элементов.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что такое code cohesion & code coupling ?
Спросят с вероятностью 3%


Особенно в ООП, важные концепции для проектирования хорошего и поддерживаемого кода — это связность (cohesion) и связность (coupling).

Code Cohesion (Связность кода)


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

Высокая связность: Компоненты класса тесно связаны и работают вместе для выполнения одной задачи. Класс или модуль выполняет одну логическую функцию или группу функций, которые естественным образом связаны друг с другом.
Низкая связность: Компоненты класса слабо связаны и выполняют разнородные задачи. Такие классы или модули трудно понимать и поддерживать.

Пример:
class Order:
def __init__(self, items):
self.items = items

def calculate_total(self):
return sum(item.price for item in self.items)

def add_item(self, item):
self.items.append(item)

def remove_item(self, item):
self.items.remove(item)


В этом примере класс Order имеет высокую связность, так как все его методы связаны с управлением заказом.

Code Coupling (Связность кода)

Связность описывает степень зависимости одного модуля или класса от других модулей или классов. Связность бывает высокой (tight coupling) и низкой (loose coupling).

Высокая связность: Модули или классы сильно зависят друг от друга. Изменение в одном модуле требует изменения в других зависимых модулях. Это затрудняет поддержку и тестирование.
Низкая связность: Модули или классы слабо зависят друг от друга. Изменение в одном модуле минимально влияет на другие модули. Это облегчает поддержку и тестирование.

Пример:

class EmailService:
def send_email(self, recipient, subject, body):
print(f"Sending email to {recipient}")

class OrderProcessor:
def __init__(self, email_service):
self.email_service = email_service

def process_order(self, order):
# Логика обработки заказа
self.email_service.send_email(order.customer_email, "Order Confirmation", "Your order has been processed.")


В этом примере OrderProcessor имеет низкую связность с EmailService, так как EmailService передается в конструктор как зависимость и может быть легко заменена.

Преимущества

1️⃣Улучшенная поддерживаемость: Классы и модули с высокой связностью и низкой связностью легче поддерживать и изменять.
2️⃣Повышенная повторная используемость: Компоненты с высокой связностью могут быть повторно использованы в других частях системы.
3️⃣Легкость тестирования: Классы и модули с низкой связностью легче изолировать и тестировать.
4️⃣Упрощение понимания кода: Высокая связность делает классы и модули более понятными, так как все их части работают вместе для выполнения одной задачи.

Связность (Cohesion): Описывает, насколько элементы внутри модуля или класса связаны и работают вместе для выполнения единой задачи. Высокая связность улучшает поддержку и повторное использование кода.
Связность (Coupling): Описывает степень зависимости одного модуля или класса от других. Низкая связность упрощает поддержку и тестирование кода.

Эти принципы помогают создавать более устойчивый, гибкий и поддерживаемый код.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Чем хорош FastAPI ?
Спросят с вероятностью 7%

FastAPI - это фреймворк для создания веб-приложений, который обеспечивает высокую производительность, интуитивно понятный синтаксис и автоматическую генерацию документации API. Вот несколько причин, почему он является хорошим выбором:

1️⃣ Высокая производительность: Основан на Starlette, асинхронном фреймворке для веб-приложений, и использует асинхронные возможности Python 3.7+ для обеспечения высокой производительности. Это позволяет обрабатывать большое количество запросов одновременно и эффективно использовать ресурсы сервера.

2️⃣ Декларативный синтаксис: Предоставляет декларативный синтаксис для определения маршрутов и схем данных с использованием аннотаций. Это делает код более читаемым и понятным, а также упрощает разработку и поддержку приложения.

3️⃣ Автоматическая генерация документации: Автоматически создает интерактивную документацию API на основе аннотаций и типов данных. Это позволяет разработчикам быстро создавать и документировать API без дополнительного кодирования.

4️⃣ Встроенная поддержка асинхронности: Полностью поддерживает асинхронные операции и обработку запросов, что позволяет создавать высокопроизводительные веб-приложения, используя асинхронные возможности.

5️⃣ Встроенная валидация данных: Автоматически выполняет валидацию входных данных на основе аннотаций и схем данных Pydantic. Это позволяет обрабатывать ошибки и неправильные запросы до того, как они достигнут обработчика маршрута, что обеспечивает более надежное и безопасное приложение.

6️⃣ Интеграция с OpenAPI и Swagger UI: Генерирует спецификацию OpenAPI для вашего API автоматически, что позволяет использовать сторонние инструменты и сервисы для автоматической генерации клиентских библиотек и тестирования. Он также включает встроенную поддержку Swagger UI для просмотра и тестирования API через веб-интерфейс.

FastAPI предоставляет простой и эффективный способ создания высокопроизводительных веб-приложений с автоматической генерацией документации API и встроенной поддержкой асинхронности.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что известно о хеш-функции ?
Спросят с вероятностью 7%

Хэш-функция (hash function) - принимает входные данные (например, строку или байтовую последовательность) и преобразует их в фиксированный размерный хэш (хэш-значение), которое обычно представляет собой строку фиксированной длины. Основная цель состоит в том, чтобы быстро и эффективно преобразовывать входные данные в хэш-значения, которые можно использовать для различных целей, таких как проверка целостности данных, поиск и сравнение элементов, хранение паролей и т. д.

Вот несколько ключевых особенностей:

1️⃣ Единообразие (Uniformity): Должна обеспечивать равномерное распределение хэш-значений по всем возможным входным данным. Это означает, что каждое возможное хэш-значение должно иметь одинаковую вероятность быть сгенерированным для любых входных данных.

2️⃣ Однозначность (Deterministic): Для одних и тех же входных данных эта функция всегда должна генерировать одно и то же хэш-значение. Это позволяет использовать ее для проверки целостности данных и сравнения элементов.

3️⃣ Быстродействие (Efficiency): Должна быть эффективной и быстрой, чтобы обеспечить высокую производительность при обработке больших объемов данных.

4️⃣ Равномерное распределение (Uniform distribution): Должна равномерно распределять хэш-значения по всем возможным выходным диапазонам. Это помогает снизить вероятность коллизий.

5️⃣ Необратимость (Irreversibility): Должна быть необратимой, то есть невозможно восстановить исходные данные из хэш-значения. Это обеспечивает безопасность данных, так как злоумышленники не могут получить доступ к исходным данным, имея только хэш-значение.

Примеры широко используемых хэш-функций включают SHA-1, SHA-256, MD5 и другие. В зависимости от конкретных требований и применений, выбирается подходящая хэш-функция.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что такое HTTP и HTTPs ?
Спросят с вероятностью 7%

HTTP - протокол передачи данных, который используется для обмена информацией. Он определяет формат и структуру сообщений, и правила взаимодействия между клиентом и сервером. Является основным протоколом для передачи веб-страниц, изображений, и других ресурсов.

Основные характеристики:

1️⃣ Простота: Использует структуру запросов и ответов, состоящую из заголовков и тела сообщения. Это делает его легким в использовании.

2️⃣ Состояние: Является протоколом без состояния, что означает, что каждый запрос обрабатывается независимо от предыдущих запросов. Сервер не хранит информацию о состоянии клиента между запросами.

3️⃣ Безопасность: Не обеспечивает шифрование данных, передаваемых между клиентом и сервером, что делает передачу не безопасной.

HTTPS - защищенная версия протокола HTTP, которая обеспечивает шифрование данных и безопасную передачу информации между клиентом и сервером. HTTPS использует протокол TLS или его предшественника SSL для шифрования данных и проверки подлинности сервера.

Основные характеристики:

1️⃣ Шифрование данных: Использует шифрование для защиты данных, передаваемых между клиентом и сервером. Это обеспечивает конфиденциальность и целостность данных во время их передачи по сети.

2️⃣ Аутентификация сервера: Обеспечивает аутентификацию сервера, что позволяет клиенту убедиться в том, что он связывается с правильным сервером и предотвращает атаки типа "перехват и подмена".

3️⃣ Доверие и сертификаты: Использует цифровые сертификаты для аутентификации серверов и создания доверия между клиентом и сервером. Сертификаты выдаются доверенными ЦС, которые проверяют подлинность серверов и подтверждают их легитимность.

Использование HTTPS рекомендуется для всех веб-сайтов и веб-приложений, особенно для тех, которые обрабатывают конфиденциальные данные пользователей, такие как пароли, данные кредитных карт и личная информация. HTTPS обеспечивает безопасную и защищенную передачу данных, защищая пользователей от различных видов атак и вмешательства.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что такое async ?
Спросят с вероятностью 7%

"async" - используется для определения асинхронных функций и контекста выполнения. Оно связано с асинхронным программированием, которое позволяет эффективно использовать асинхронные операции ввода-вывода (I/O), такие как сетевые запросы, базы данных и другие блокирующие операции, без блокировки основного потока выполнения.

Основные концепции:

1️⃣ Асинхронные функции (async functions): Функции определяются с помощью ключевого слова "async". Они могут содержать асинхронные операции и выражения, которые могут быть приостановлены и продолжены позже, когда завершится операция ввода-вывода. Для объявления этой функции используется синтаксис:
   async def my_async_function():
# Асинхронные операции


2️⃣ Контекст выполнения асинхронного кода (async context): Код выполняется в асинхронном контексте, который создается с помощью ключевого слова "asyncio". Контекст выполнения обеспечивает механизм управления выполнением асинхронного кода и планирования операций. Для входа в этот контекст используется синтаксис:
   import asyncio

async def main():
# Асинхронный код

asyncio.run(main())


3️⃣ Ожидание асинхронных операций (await): В этих функциях можно использовать ключевое слово "await" для ожидания завершения асинхронных операций ввода-вывода. Оператор "await" блокирует выполнение данной функции до тех пор, пока эта операция не будет завершена. Например:
   async def fetch_data(url):
# Ожидание завершения сетевого запроса
response = await aiohttp.get(url)
return response


Асинхронное программирование позволяет эффективно использовать ресурсы процессора и управлять множеством асинхронных операций ввода-вывода без блокировки основного потока выполнения. Это особенно полезно в веб-приложениях и сервисах, которые часто выполняют большое количество асинхронных операций, таких как сетевые запросы и базы данных.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Как реализуются метод класса ?
Спросят с вероятностью 7%

Метод класса реализуется с помощью декоратора @classmethod. Он преобразует метод в метод класса, что означает, что он принимает класс (cls) в качестве первого аргумента вместо экземпляра класса (self). Могут обращаться к атрибутам класса, но не к атрибутам экземпляра.

Используются для следующего:

Фабричные , создают экземпляры класса, используя параметры начальной установки.
Должны работать с атрибутами класса.

Пример:
class ExampleClass:
class_attribute = "Это атрибут класса"

def init(self, instance_attribute):
self.instance_attribute = instance_attribute

@classmethod
def class_method(cls):
# Метод класса может обращаться к атрибутам класса через cls
print(f"Доступ к атрибуту класса через cls: {cls.class_attribute}")

@classmethod
def create_instance(cls, attribute_value):
# Методы класса могут использоваться для создания экземпляров
return cls(attribute_value)

# Без создания экземпляра класса
ExampleClass.class_method()

# Для создания экземпляра
instance = ExampleClass.create_instance("Значение атрибута экземпляра")
print(instance.instance_attribute)


Здесь class_method - класс работает с атрибутами класса, а не с атрибутами конкретного экземпляра. create_instance — это фабричный, использующийся для создания и возвращения нового экземпляра класса с заданным атрибутом.

Отличия от статических и обычных методов:

- Статические не принимают ни cls, ни self в качестве аргументов. Ведут себя как обычные функции, но принадлежат пространству имен класса.
- Обычные принимают экземпляр (self) как первый аргумент и используются для операций, связанных с ним.

Использование методов класса улучшает структуру кода, позволяя четко разграничивать операции, которые применяются к классу, от операций, специфичных для отдельных экземпляров.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
Что такое модульное программирование ?
Спросят с вероятностью 3%

Модульное программирование — это подход к разработке ПО, который включает разбиение больших и сложных программ на отдельные, независимые части, называемые модулями. Каждый модуль выполняет уникальную функцию и может быть разработан, тестирован и отлажен отдельно от остальной части программы. Затем они могут быть повторно использованы в разных частях программы или даже в разных программах.

Преимущества:
1️⃣Упрощение понимания: Разбивка программы на модули помогает упростить понимание структуры и работы программы, поскольку разработчики могут сосредоточиться на одном модуле за раз.
2️⃣Улучшение управляемости: Модули можно разрабатывать и тестировать независимо, что упрощает управление проектом.
3️⃣Повышение переиспользования кода: Модули, выполняющие общие задачи, могут быть использованы в различных проектах без необходимости их повторного написания.
4️⃣Упрощение тестирования и отладки: Тестирование и отладка меньших модулей гораздо проще, чем больших программ.
5️⃣Гибкость в разработке: Разные модули могут быть разработаны параллельно разными командами или индивидуальными разработчиками.

Пример:
Активно поддерживает его, позволяя разработчикам импортировать и использовать модули в своих программах. Например, если вы разрабатываете веб-приложение, вы можете разделить его на модули: один модуль для работы с базой данных, другой для обработки запросов пользователей, третий для рендеринга HTML-страниц и т.д.
# db.py - модуль для работы с базой данных
def get_user(user_id):
# Код для извлечения пользователя из базы данных
pass

# auth.py - модуль для аутентификации пользователей
def authenticate(username, password):
# Код для аутентификации пользователя
pass

# main.py - основной модуль, использующий другие модули
import db
import auth

user = db.get_user(1)
if auth.authenticate(user['username'], user['password']):
print("Аутентификация прошла успешно")
else:
print("Ошибка аутентификации")


В этом примере, разделяя функциональность на модули, вы упрощаете понимание и поддержку каждой части программы, а также повышаете переиспользование кода.

Модульное программирование — это эффективный способ разработки ПО, который облегчает понимание, тестирование, отладку и поддержку программ, а также способствует переиспользованию кода. Оно предполагает разбиение программы на независимые модули, каждый из которых выполняет определенную функцию.

Модульное программирование — это как строительство из конструктора Лего, где каждый кусочек или блок — это отдельный модуль, который что-то делает. Эти блоки можно сочетать разными способами, чтобы собрать что-то большое и сложное, но при этом легко менять и исправлять маленькие части, не разбирая всю конструкцию.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1096 вопроса на Python разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых