TGViewer
Channel Public Channel
Python | Вопросы собесов

Python | Вопросы собесов

@python_easy_ru

Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Subscribers
12.7K
Photos
50
Videos
5
Links
1.7K

Showing posts older than #2785 · Back to latest

Older Posts 20 shown
Post #2784 752
🤔 Как в питоне реализуется многопоточность. Какими модулями?

Многопоточность в Python реализуется с помощью модуля threading, но из-за GIL (Global Interpreter Lock) потоки не могут выполняться параллельно на нескольких ядрах.

🟠Модуль `threading` (многопоточность, но с GIL)
Модуль threading позволяет запускать несколько потоков (threads) в одном процессе.
import threading
import time

def task(name):
print(f"{name} начал работу")
time.sleep(2) # Имитация задержки
print(f"{name} завершил работу")

# Создаём два потока
t1 = threading.Thread(target=task, args=("Поток 1",))
t2 = threading.Thread(target=task, args=("Поток 2",))

t1.start()
t2.start()

t1.join()
t2.join()
print("Все потоки завершены")


Вывод
Поток 1 начал работу
Поток 2 начал работу
(пауза 2 секунды)
Поток 1 завершил работу
Поток 2 завершил работу
Все потоки завершены


🟠Модуль `multiprocessing` (настоящая параллельность)
В отличие от threading, модуль multiprocessing создаёт отдельные процессы, которые могут выполняться на разных ядрах процессора.
import multiprocessing
import time

def task(name):
print(f"{name} начал работу")
time.sleep(2)
print(f"{name} завершил работу")

if __name__ == "__main__":
p1 = multiprocessing.Process(target=task, args=("Процесс 1",))
p2 = multiprocessing.Process(target=task, args=("Процесс 2",))

p1.start()
p2.start()

p1.join()
p2.join()
print("Все процессы завершены")


🟠Модуль `concurrent.futures` (более удобный API)
Этот модуль позволяет легко управлять потоками (ThreadPoolExecutor) и процессами (ProcessPoolExecutor).
from concurrent.futures import ThreadPoolExecutor
import time

def task(n):
time.sleep(2)
return f"Готово: {n}"

with ThreadPoolExecutor(max_workers=2) as executor:
results = executor.map(task, [1, 2, 3])

for result in results:
print(result)


Пример ProcessPoolExecutor (процессы)
from concurrent.futures import ProcessPoolExecutor

def square(n):
return n * n

with ProcessPoolExecutor() as executor:
results = executor.map(square, [1, 2, 3, 4])

print(list(results)) # [1, 4, 9, 16]


🟠Модуль `asyncio` (асинхронность, не потоки!)
Модуль asyncio не создаёт потоки или процессы, а работает через "корутины" и цикл событий (event loop).
import asyncio

async def task():
print("Начало")
await asyncio.sleep(2) # Не блокирует другие задачи
print("Конец")

async def main():
await asyncio.gather(task(), task())

asyncio.run(main())


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
Post #2782 780
🤔 Как соединить список строк в одну?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2781 910
🤔 Что такое класс baseview?

BaseView — это базовый класс представления (view) в Django, который предоставляет основу для создания представлений без жёсткой привязки к HTTP-методам (GET, POST и др.). Он является родительским классом для всех классов-представлений (CBV, Class-Based Views) в Django.

🚩Зачем нужен `BaseView`?

Обеспечивает общую структуру для классов-представлений.
Разделяет логику обработки запроса и рендеринг.
Позволяет переопределять логику обработки запросов через dispatch().
Является родительским классом для View, TemplateView, ListView и других CBV.

🚩Как работает `BaseView`?

Этот класс сам по себе не обрабатывает запросы. Он лишь задаёт каркас для представлений.
from django.views import View

class BaseView:
def dispatch(self, request, *args, **kwargs):
"""Определяет, какой метод (GET, POST и т. д.) вызывать"""
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
return handler(request, *args, **kwargs)

def http_method_not_allowed(self, request, *args, **kwargs):
"""Обработчик для неподдерживаемых HTTP-методов"""
return HttpResponseNotAllowed(self._allowed_methods())


🚩Использование `BaseView`

Обычно мы используем View, который наследуется от BaseView.
from django.http import HttpResponse
from django.views import View

class MyView(View):
def get(self, request):
return HttpResponse("Это GET-запрос")

def post(self, request):
return HttpResponse("Это POST-запрос")


Ставь 👍 и забирай 📚 Базу знаний
Post #2779 856
🤔 Чем массивы отличаются от списков?

- Массивы (например, в array или C) — это однородные структуры, где все элементы одного типа и известны по размеру;
- Списки в Python — это динамические массивы произвольных объектов, могут содержать разные типы данных, и автоматически расширяются при необходимости.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 🔥 2
  • 👍 1
Post #2778 915
🤔 Как происходит наследование моделей в Django?

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

🟠Абстрактные модели
Абстрактные модели используются, когда нужно создать базовый класс с полями и методами, которые должны быть унаследованы, но сам класс не должен создавать таблицу в базе данных.
Создается базовый класс с abstract = True в Meta.
Дочерние классы наследуют его поля и методы, но не его саму в виде отдельной таблицы.
from django.db import models

class BaseModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)

class Meta:
abstract = True # Указывает, что это абстрактная модель

class Post(BaseModel):
title = models.CharField(max_length=255)
content = models.TextField()

class Comment(BaseModel):
text = models.TextField()


🟠Многоуровневое (конкретное) наследование
Этот тип наследования создаёт отдельные таблицы для каждой модели. Используется, когда дочерний класс должен представлять отдельную сущность, но при этом иметь доступ к полям родительского класса.
Django создаёт отдельные таблицы в БД для родительской и дочерней модели.
Дочерняя модель автоматически получает OneToOneField на родительскую.
class Person(models.Model):
name = models.CharField(max_length=255)

class Employee(Person): # Отдельная таблица employee
salary = models.DecimalField(max_digits=10, decimal_places=2)


🟠Прокси-модели (Proxy Models)
Используются, когда нужно изменить поведение модели без изменения структуры базы данных.
Прокси-модель наследует поля родительской модели.
В Meta указывается proxy = True.
Можно переопределять методы, добавлять новые, но не менять поля.
class Person(models.Model):
name = models.CharField(max_length=255)

class Manager(Person):
class Meta:
proxy = True # Указываем, что это прокси-модель

def get_uppercase_name(self):
return self.name.upper()


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 5
Post #2776 876
🤔 Как можно сделать копию словаря?

Существует несколько способов создать копию словаря:
1. Метод copy()
2. Через dict()
3. С использованием copy.deepcopy() — если словарь вложенный
Обычная копия (copy()) создаёт поверхностную копию, то есть вложенные объекты по-прежнему ссылаются на те же структуры.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 3
Post #2774 790
🤔 Что такое пакет?

Пакет (package) в Python — это набор модулей, объединённых в одну директорию. Главное отличие от обычной папки — наличие файла __init__.py, который делает директорию пакетом.

🚩Как создать пакет?

Допустим, мы хотим создать пакет math_utils с модулями для работы с числами.
/my_project
/math_utils ← Это пакет
__init__.py ← Делаем директорию пакетом
arithmetic.py ← Модуль с функциями сложения/вычитания
geometry.py ← Модуль с функциями для работы с фигурами
main.py ← Основной файл программы


Код в arithmetic.py
def add(a, b):
return a + b

def subtract(a, b):
return a - b


Код в geometry.py
def square_area(side):
return side * side


Код в __init__.py
from .arithmetic import add, subtract
from .geometry import square_area


Теперь можно импортировать функции прямо из пакета:
from math_utils import add, square_area

print(add(2, 3)) # 5
print(square_area(4)) # 16


🚩Импорт модулей из пакета

Импортируем весь пакет (с __init__.py)
from math_utils import add, square_area


Импортируем конкретный модуль
from math_utils import arithmetic
print(arithmetic.add(3, 5))


Импортируем конкретную функцию из модуля
from math_utils.arithmetic import add
print(add(3, 5))


🚩Как работают пакеты в Python?

Python ищет пакеты по sys.path
import sys
print(sys.path) # Пути, где Python ищет модули


Если Python не находит пакет, можно добавить путь вручную:
import sys
sys.path.append("/path/to/my_project")


Можно создавать вложенные пакеты
/my_project
/math_utils
__init__.py
/advanced
__init__.py
calculus.py


Импорт:
from math_utils.advanced.calculus import derivative


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2772 834
🤔 Откуда берётся O(n) и почему это лучше, чем O(n²)?

O(n) означает, что время выполнения пропорционально количеству элементов. O(n²) — значит, число операций растёт квадратично. Например, при 1 000 элементах:
- O(n) ≈ 1 000 операций;
- O(n²) ≈ 1 000 000 операций.
Поэтому линейная сложность значительно быстрее при больших объёмах данных.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 3
  • 💊 2
Post #2771 918
🤔 Что такое объект первого класса?

Объект первого класса (или сущность первого класса) — это концепция из программирования, которая означает, что объект обладает всеми следующими свойствами:

🟠Хранение в переменной или структуре данных
объект можно присвоить переменной или сохранить в структуре данных (например, списке, словаре).
🟠Передача в функцию в качестве аргумента
объект можно передавать как параметр функции.
🟠Возврат из функции как результата
функция может возвращать объект.
🟠Динамическое создание
объект можно создавать во время выполнения программы (не только на этапе компиляции).

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

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

🚩Пример на Python

Присваивание функции переменной
def say_hello():
return "Hello!"

# Функция присваивается переменной
greet = say_hello
print(greet()) # Вывод: Hello!


Передача функции как аргумента
def apply_function(func, value):
return func(value)

def square(x):
return x * x

result = apply_function(square, 5)
print(result) # Вывод: 25


Возврат функции из функции
def multiplier(n):
def multiply(x):
return x * n
return multiply

double = multiplier(2)
print(double(10)) # Вывод: 20


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
Post #2769 964
🤔 Как устроен список?

Список (list)— это изменяемая упорядоченная коллекция объектов любого типа.
Особенности устройства:
- Реализован как динамический массив, который автоматически расширяется при добавлении элементов.
- Элементы хранятся по ссылкам, что позволяет хранить смешанные типы.
- Обеспечивает быстрый доступ по индексу (O(1)), но вставка и удаление из середины — медленные (O(n)).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
  • 🔥 1
Post #2768 921
🤔 Для чего нужны 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


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2766 928
🤔 Какие есть коды ответов HTTP?

Коды делятся на группы: 1xx (информационные), 2xx (успешные, например, 200 OK), 3xx (перенаправления, например, 301 Moved Permanently), 4xx (ошибки клиента, например, 404 Not Found), 5xx (ошибки сервера, например, 500 Internal Server Error). Эти коды информируют о статусе запроса.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 3
Post #2764 916
🤔 Какие есть особенности исключения в Python?

В Python исключения (exceptions) — это специальные объекты, которые возникают при ошибках и прерывают выполнение программы, если их не обработать.

Все исключения в Python — это объекты, унаследованные от BaseException.
try:
1 / 0
except ZeroDivisionError as e:
print(type(e)) # <class 'ZeroDivisionError'>
print(e) # division by zero


Все исключения унаследованы от BaseException:
BaseException
├── Exception
│ ├── ArithmeticError
│ │ ├── ZeroDivisionError
│ │ ├── OverflowError
│ ├── ValueError
│ ├── IndexError
│ ├── KeyError
│ ├── TypeError
├── SystemExit
├── KeyboardInterrupt


Можно перехватывать несколько исключений
try:
x = int("abc") # Ошибка ValueError
except (ValueError, TypeError) as e:
print(f"Ошибка: {e}")


Если не знаем, какая ошибка может произойти:
try:
x = 1 / 0
except Exception as e:
print(f"Ошибка: {e}") # division by zero


finally выполняется всегда
try:
1 / 0
except ZeroDivisionError:
print("Ошибка!")
finally:
print("Этот код выполнится всегда")


raise позволяет выбрасывать исключения вручную
raise ValueError("Ошибка: неверное значение!")


Можно создать свой класс ошибки, унаследованный от Exception:
class MyError(Exception):
pass

raise MyError("Это моя ошибка!")


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 4
Post #2762 912
🤔 Как создать свой тип исключения?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 2
Post #2761 985
🤔 Что такое cookie?

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

🚩Зачем нужны куки?

Куки помогают веб-сайтам «запоминать» данные о пользователе. Вот основные цели их использования:
🟠Аутентификация
Например, после входа в аккаунт куки сохраняют ваш статус (авторизован вы или нет).
🟠Сохранение предпочтений
Куки могут хранить ваши настройки, например, выбранный язык или тему сайта.
🟠Сессии и корзины
Если вы добавляете товары в корзину в интернет-магазине, эта информация может храниться в куки.
🟠Отслеживание действий
Куки используются для аналитики и рекламы, чтобы понять, как вы взаимодействуете с сайтом, или показать персонализированные объявления.

🚩Как работают куки?

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

🚩Пример использования куки

Создание куки на сервере (Python, Flask)
from flask import Flask, request, make_response

app = Flask(__name__)

@app.route('/set_cookie')
def set_cookie():
response = make_response("Cookie установлена!")
response.set_cookie('username', 'JohnDoe') # Устанавливаем куки с именем "username"
return response

@app.route('/get_cookie')
def get_cookie():
username = request.cookies.get('username') # Получаем значение куки
return f'Привет, {username}!' if username else 'Куки не найдены.'

if __name__ == '__main__':
app.run(debug=True)


🚩Типы куки

🟠Сессионные куки (Session Cookies)
Хранятся только во время работы браузера и удаляются после его закрытия.
🟠Постоянные куки (Persistent Cookies)
Сохраняются на устройстве пользователя до истечения срока действия.
🟠Безопасные куки (Secure Cookies)
Передаются только через HTTPS для обеспечения безопасности.
🟠HttpOnly куки
Не доступны через JavaScript, используются для защиты от XSS-атак.

🚩Плюсы и минусы

➕Помогают сохранять пользовательские данные для упрощения работы с сайтом.
➕Могут улучшить пользовательский опыт за счёт персонализации.
➖Могут использоваться для отслеживания активности (privacy concerns).
➖Неправильное управление куки может привести к утечкам данных.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2759 854
🤔 Какие данные валидируют с помощью Pydantic?

Библиотека Pydantic валидирует и преобразует данные согласно типам:
- Примитивы (str, int, float, bool)
- Коллекции (List, Dict, Tuple, Set)
- Даты и UUID
- Вложенные модели
Pydantic полезен при создании API (например, с FastAPI), где входящие данные из запросов должны быть проверены и типизированы.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 1
Post #2757 801
🤔 Чем отличаются методы сокрытия?

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

🚩Публичные методы и атрибуты


Доступны из любого места, как внутри класса, так и за его пределами. Их имена не начинаются с подчеркиваний.
class MyClass:
def __init__(self):
self.public_attribute = "I am public"

def public_method(self):
return "This is a public method"

obj = MyClass()
print(obj.public_attribute) # Вывод: I am public
print(obj.public_method()) # Вывод: This is a public method


🚩Защищенные методы и атрибуты

Не предназначены для использования за пределами класса и его подклассов. Они обозначаются одним подчеркиванием в начале имени. Это всего лишь соглашение, сигнализирующее другим разработчикам, что такие методы и атрибуты не следует использовать вне класса или его подклассов.
class MyClass:
def __init__(self):
self._protected_attribute = "I am protected"

def _protected_method(self):
return "This is a protected method"

class SubClass(MyClass):
def access_protected(self):
return self._protected_method()

obj = MyClass()
sub_obj = SubClass()

print(sub_obj.access_protected()) # Вывод: This is a protected method


🚩Приватные методы и атрибуты

Скрыты от внешнего доступа и доступны только внутри самого класса. Они обозначаются двумя подчеркиваниями в начале имени. Python реализует это с помощью механизма именования, который изменяет имя метода или атрибута, добавляя к нему имя класса, чтобы затруднить доступ извне.
class MyClass:
def __init__(self):
self.__private_attribute = "I am private"

def __private_method(self):
return "This is a private method"

def access_private(self):
return self.__private_method()

obj = MyClass()

try:
print(obj.__private_attribute)
except AttributeError as e:
print(e) # Вывод: 'MyClass' object has no attribute '__private_attribute'

try:
print(obj.__private_method())
except AttributeError as e:
print(e) # Вывод: 'MyClass' object has no attribute '__private_method'

# Доступ к приватным методам через публичный метод класса
print(obj.access_private()) # Вывод: This is a private method


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #2755 841
🤔 Как избежать конфликтов при импорте файлов?

– Не использовать import *,
– Явно указывать имена,
– Избегать одинаковых имён в разных модулях,
– Использовать пространства имён и псевдонимы.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Post #2753 997
🤔 Что такое GET?

GET — это HTTP-метод, который используется для запроса данных с сервера.
Когда ты открываешь веб-сайт или вводишь URL в браузере — это GET-запрос. Браузер запрашивает страницу у сервера, и сервер возвращает данные.

🚩Как работает GET-запрос?

1⃣Клиент (браузер, программа) отправляет GET-запрос на сервер.
2⃣Сервер обрабатывает запрос и возвращает ответ (HTML-страницу, JSON-данные, картинку и т. д.).
3⃣Данные отображаются пользователю.

🚩Пример GET-запроса

Когда ты заходишь на https://example.com/users, браузер отправляет:
GET /users HTTP/1.1
Host: example.com


Ответ сервера
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]


🚩Особенности GET-запроса

🟠Читаемый URL
параметры передаются в строке запроса (например, ?id=123).
🟠Безопасен
GET не изменяет данные на сервере.
🟠Можно кэшировать
браузеры и серверы могут сохранять результаты GET-запросов.
🟠Ограниченная длина URL
слишком длинные запросы могут не работать.
🟠Не подходит для конфиденциальных данных
передача пароля в URL (?password=123) небезопасна.

🚩GET-запрос с параметрами

Если нужно передать параметры, они добавляются в URL:
GET /search?q=python&page=2


В Python можно отправить GET-запрос с помощью библиотеки requests
import requests

response = requests.get("https://api.example.com/users", params={"id": 123})
print(response.json()) # Получаем ответ в JSON


Ставь 👍 и забирай 📚 Базу знаний
Post #2751 925
🤔 Что такое функция?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
  • 👍 3
  • 🔥 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →