Python | Вопросы собесов
12.5K subscribers
45 photos
5 videos
1 file
1.72K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Download Telegram
🤔 Назовите основные команды Docker?

- Запуск, остановка, удаление контейнера.
- Сборка образа.
- Просмотр логов, ресурсов.
- Работа с томами, сетями. Эти команды позволяют управлять жизненным циклом контейнеров и инфраструктурой на основе образов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Для чего нужны static method?

Статические методы (static methods) в Python используются для создания методов, которые связаны с классом, но не требуют доступа к экземпляру этого класса или к самим данным класса. Это методы, которые выполняют функции, связанные с классом, но не изменяют и не используют состояние экземпляра (атрибуты объекта) или состояние самого класса (атрибуты класса). Они могут быть вызваны на уровне класса, а не на уровне экземпляра класса.

🚩Как создать статический метод

Для создания статического метода в Python используется декоратор @staticmethod. Давайте рассмотрим пример:
class MyClass:
@staticmethod
def static_method(arg1, arg2):
return arg1 + arg2


🚩Пример использования статического метода

Вы можете вызывать статический метод как через сам класс, так и через его экземпляр:
result = MyClass.static_method(5, 10)
print(result) # Вывод: 15

my_instance = MyClass()
result = my_instance.static_method(3, 7)
print(result) # Вывод: 10


🚩Зачем нужны статические методы

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

🟠Удобство вызова
Иногда полезно вызывать метод, не создавая экземпляр класса. Например, если метод выполняет какую-то утилитарную функцию или обрабатывает данные, не связанные с объектом.

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

🚩Сравнение с методами класса и экземпляра

🟠Методы экземпляра
Методы экземпляра (instance methods) принимают первым аргументом self, что позволяет им изменять состояние конкретного экземпляра класса.
  class MyClass:
def instance_method(self, value):
self.value = value


🟠Методы класса
Методы класса (class methods) принимают первым аргументом cls, что позволяет им изменять состояние самого класса.
  class MyClass:
class_variable = 0

@classmethod
def class_method(cls, value):
cls.class_variable = value


🟠Статические методы
Статические методы не принимают self или cls в качестве первого аргумента и не могут изменять состояние экземпляра или класса.
  class MyClass:
@staticmethod
def static_method(arg1, arg2):
return arg1 + arg2


Ставь 👍 и забирай 📚 Базу знаний
🤔 I - Interface Segregation Principle - принцип разделения интерфейсов

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1🔥1
🔥 Скрытые вакансии с удаленной работой для Python разработчика, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров.

🔹 Python Jobs | Вакансии
🔹 Data Science ML | Вакансии
🔹 Golang Go Jobs | Вакансии

🔸 Все каналы с вакансиями
🤔 Как избежать конфликтов при импорте файлов?

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

🚩Способы избежать конфликтов при импорте

🟠Используйте явные пути импорта
Вместо
import mymodule  # Может вызвать конфликт, если есть несколько файлов с таким именем


Лучше указывать полный путь в пакетах
from myproject.utils.mymodule import my_function


🟠Избегайте конфликтов имён файлов
Если у вас есть файл math.py, импорт import math будет загружать ваш файл, а не стандартный модуль math из Python.
- Не называйте файлы именами стандартных модулей: math.py, sys.py, json.py.
- Проверьте, какой именно модуль загружается:

  import math
print(math.__file__) # Путь к загруженному модулю


🟠Добавьте `__init__.py` в пакеты
Если у вас есть структура
/myproject
/utils
mymodule.py


Решение
Добавьте пустой __init__.py в utils/:
/myproject
/utils
__init__.py # Делаем utils пакетом
mymodule.py


Теперь импорт будет работать
from utils import mymodule


🟠Используйте `sys.path.append()` для указания путей
Иногда Python не находит модуль, если он находится вне стандартных путей. Решение
Добавьте путь вручную:
import sys
sys.path.append("/path/to/directory")

import mymodule # Теперь импорт будет работать


🟠Используйте `absolute` и `relative` импорт в пакетах
Абсолютный импорт (рекомендуется)
from myproject.utils.mymodule import my_function


Относительный импорт (используется внутри пакетов):
from .mymodule import my_function


🟠Проверяйте `sys.modules` и `sys.path`
Если импорт не работает, проверьте, какие модули загружены и где Python ищет файлы
import sys
print(sys.modules.keys()) # Список загруженных модулей
print(sys.path) # Пути, где Python ищет модули


Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое JWT?

JWT (JSON Web Token) — это токен, содержащий зашифрованную информацию о пользователе или сессии. Обычно включает три части: заголовок, полезную нагрузку (например, ID пользователя) и подпись. Используется для безопасной авторизации — клиент хранит токен и передаёт его при каждом запросе.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего можно использовать celery?

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

🚩Вот некоторые типичные сценарии использования Celery:

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

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

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

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

🟠Распределенные вычисления
Позволяет распределенно выполнять задачи на различных узлах или рабочих процессах, что позволяет обрабатывать большие объемы данных и операций параллельно.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Что известно про строки?

Строки в Python — это неизменяемый (immutable) тип данных, представленный типом str. Они хранят Unicode-символы и поддерживают операции индексации, срезов, конкатенации, форматирования и множества встроенных методов. Поскольку строки неизменяемы, любые изменения приводят к созданию нового строкового объекта. Это делает строки безопасными для многопоточности и позволяет использовать их как ключи в словарях.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего нужен счетчик ссылок Python?

В Python счетчик ссылок (reference count) используется для управления памятью. Он показывает, сколько раз объект используется в программе. Когда счетчик ссылок падает до нуля, Python автоматически удаляет объект, освобождая память.

🚩Как работает счетчик ссылок?

Python использует автоматическое управление памятью, основанное на подсчёте ссылок. Когда создаётся объект, Python хранит специальное число — количество ссылок на этот объект. Это число увеличивается, когда мы создаём новую ссылку на объект, и уменьшается, когда удаляем или перезаписываем переменную.
import sys

a = [1, 2, 3] # Создаём список
print(sys.getrefcount(a)) # Выведет 2 (одна ссылка 'a' + вызов getrefcount)

b = a # Новая ссылка на тот же объект
print(sys.getrefcount(a)) # Теперь 3 (a, b и сам getrefcount)

del a # Удаляем одну ссылку
print(sys.getrefcount(b)) # Теперь 2

del b # Удаляем последнюю ссылку, объект будет удалён из памяти


🚩Почему это важно?

🟠Эффективное управление памятью
Python сам удаляет ненужные объекты, не давая памяти переполняться.
🟠Понимание утечек памяти
Если объект имеет циклические ссылки (например, список ссылается сам на себя), Python не может освободить его сразу, поэтому дополнительно используется сборщик мусора (Garbage Collector, GC).
import gc

class Node:
def __init__(self):
self.ref = self # Циклическая ссылка!

n = Node()
del n # Обычный подсчёт ссылок не сработает, объект останется в памяти
gc.collect() # Явный вызов сборщика мусора удалит его


Ставь 👍 и забирай 📚 Базу знаний
Что такое вложенные транзакции?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний