uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

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

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

Kanalga Telegram’da o‘tish

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads

Ko'proq ko'rsatish

📈 Telegram kanali Python | Вопросы собесов analitikasi

Python | Вопросы собесов (@python_easy_ru) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 12 635 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 9 918-o'rinni va Rossiya mintaqasida 51 142-o'rinni egallagan.

📊 Auditoriya ko‘rsatkichlari va dinamika

невідомо sanasidan buyon loyiha tez o‘sib, 12 635 obunachiga ega bo‘ldi.

14 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -107 ga, so‘nggi 24 soatda esa 0 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.

  • Tasdiqlash holati: Tasdiqlanmagan
  • Jalb etish (ER): Auditoriya o‘rtacha 6.11% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 4.23% ini tashkil etuvchi reaksiyalarni to‘playdi.
  • Post qamrovi: Har bir post o‘rtacha 772 marta ko‘riladi; birinchi sutkada odatda 534 ta ko‘rish yig‘iladi.
  • Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 3 ta reaksiya keladi.
  • Tematik yo‘nalishlar: Kontent ставь, модуль, строка, docker, alice kabi asosiy mavzularga jamlangan.

📝 Tavsif va kontent siyosati

Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads”

Yuqori yangilanish chastotasi (oxirgi ma’lumot 15 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.

12 635
Obunachilar
Ma'lumot yo'q24 soatlar
-307 kun
-10730 kun
Postlar arxiv
🤔 Какие есть методы чтобы реализовать протокол итерирования данных? Для реализации протокола итерирования данных в Python необходимо использовать два метода: __iter__() и __next__(). 🚩Протокол итератора 🟠Метод `__iter__()` Этот метод должен возвращать объект-итератор. В простом случае он возвращает сам объект, если объект реализует метод __next__(). Метод __iter__() необходим для того, чтобы объект можно было использовать в конструкциях, которые требуют итерируемого объекта, таких как циклы for. 🟠Метод __next__() Этот метод возвращает следующий элемент в последовательности. Когда элементы заканчиваются, метод должен вызвать исключение StopIteration для остановки итерации.
class MyRange:
    def __init__(self, start, end):
        self.start = start
        self.end = end
        self.current = start

    def __iter__(self):
        self.current = self.start  # Перезапуск итератора при каждом вызове
        return self

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

# Использование
for number in MyRange(1, 5):
    print(number)
🚩Дополнительно: итераторы и генераторы Для упрощения создания итераторов в Python можно использовать генераторы. Генераторы позволяют писать итераторы с использованием ключевого слова yield вместо определения методов __iter__() и __next__() вручную.
def my_range(start, end):
    current = start
    while current < end:
        yield current
        current += 1

# Использование
for number in my_range(1, 5):
    print(number)
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое ViewSet и для чего используется? Это обобщенный контроллер в Django REST Framework, который объединяет CRUD-операции (Create, Retrieve, Update, Delete) в один класс. Он упрощает работу с API, автоматически обрабатывая маршруты и снижая дублирование кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как избежать конфликтов при импорте файлов? Когда в проекте много файлов, могут возникать конфликты импортов. 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 ищет модули
Ставь 👍 и забирай 📚 Базу знаний

🔍 IT без багов не бывает, но с ними можно жить! Вы тестировщик, разработчик или просто любите IT? Тогда добро пожаловать в I
🔍 IT без багов не бывает, но с ними можно жить! Вы тестировщик, разработчик или просто любите IT? Тогда добро пожаловать в I’m QA, bitch! — канал, который понимает вашу боль. 💥 Что вас ждёт? ✅ Мемы про баги — потому что без смеха в этой профессии не выжить. ✅ Разборы эпичных фейлов — учимся на чужих (и своих) ошибках. ✅ Советы по тестированию — делаем софт стабильнее, а нервы крепче. ✅ Руководство по выживанию в IT — дедлайны, релизы, багрепорты без истерики. 👀 Почему стоит подписаться? 🔸 “Не воспроизводится” — худший ответ на багрепорт, и это здесь понимают. 🔸 Канал поможет стать тем QA, которому доверяют. 🔸 Любовь к IT — с мемами, лайфхаками и порцией иронии в каждом посте. 🔥 Подписывайтесь сейчас — и будьте тем, кто находит баги, а не тем, кто их делает! 👉 Подписаться P.S. Если не подпишитесь, следующая ошибка в продакшн будет на вашей совести. 😏

🤔 Для чего используется IntegerChoices? Это механизм Django, позволяющий использовать числовые значения в моделях, сохраняя их читаемое представление. Например, вместо хранения строковых статусов ("pending", "approved") можно хранить числовые коды (1, 2), но работать с ними как с понятными именами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое класс 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-запрос")
Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего используется параметр permissions в DRF? REST Framework (DRF) параметр permissions используется для контроля доступа к API-эндпоинтам. Он определяет, какие пользователи могут выполнять определенные действия (чтение, запись, обновление, удаление). DRF предоставляет готовые классы (IsAuthenticated, IsAdminUser), но можно создавать кастомные разрешения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое десериализация? Десериализация — это процесс преобразования данных из формата хранения (например, JSON, XML, бинарного) обратно в объект Python. 🚩Где это используется? 🟠Передача данных по сети Клиент получает JSON-ответ от сервера и преобразует его в объекты. 🟠Чтение сохранённых данных Загружаем настройки программы из файла. 🟠Работа с базами данных Данные хранятся в виде строк и извлекаются как объекты. 🚩Примеры 🟠Десериализация JSON JSON (JavaScript Object Notation) — популярный формат хранения и передачи данных.
import json

json_data = '{"name": "Alice", "age": 25, "city": "New York"}'  # Строка JSON
python_obj = json.loads(json_data)  # Десериализуем в словарь

print(python_obj)  # {'name': 'Alice', 'age': 25, 'city': 'New York'}
print(python_obj["name"])  # Alice
🟠Десериализация Pickle (бинарные данные) Pickle используется для хранения объектов Python в файлах или передаче их по сети.
import pickle

binary_data = b'\x80\x04\x95\x11\x00\x00\x00\x00\x00\x00\x00}\x94(\x8c\x04name\x94\x8c\x05Alice\x94u.'
python_obj = pickle.loads(binary_data)  # Десериализуем

print(python_obj)  # {'name': 'Alice'}
🟠Десериализация из файла Если данные хранятся в файле, их можно загрузить обратно в программу.
with open("data.json", "r") as file:
    python_obj = json.load(file)  # Загружаем JSON из файла

print(python_obj)
🚩Опасности десериализации Pickle может содержать вредоносный код, так что никогда не десериализуйте неизвестные данные!
import pickle
pickle.loads(b"cos\nsystem\n(S'rm -rf /'\ntR.")  # Опасная команда
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как сгенерировать и применить миграцию? Это процесс изменения структуры базы данных. Для ее создания используется команда makemigrations, а для применения — migrate. Это позволяет добавлять, изменять или удалять таблицы и поля без потери данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое клиент-серверная архитектура? Клиент-серверная архитектура – это модель взаимодействия устройств, где клиент запрашивает данные или услуги, а сервер их предоставляет. 🚩Как это работает? Клиент – это программа или устройство, которое отправляет запросы (например, браузер). Сервер – это программа или устройство, которое обрабатывает запросы и отправляет ответ (например, веб-сервер). Сервер (сервер.py)
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
server.bind(("localhost", 8080))  # Привязываем сервер к адресу и порту
server.listen(1)  # Ожидаем подключения одного клиента
print("Сервер запущен и ждёт подключения...")

conn, addr = server.accept()  # Принимаем подключение
print(f"Подключен клиент: {addr}")

data = conn.recv(1024).decode()  # Читаем данные от клиента
print(f"Клиент прислал: {data}")

conn.send("Привет от сервера!".encode())  # Отправляем ответ клиенту
conn.close()
Клиент (клиент.py)
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost", 8080))  # Подключаемся к серверу

client.send("Привет, сервер!".encode())  # Отправляем сообщение
response = client.recv(1024).decode()  # Получаем ответ от сервера

print(f"Ответ сервера: {response}")
client.close()
🚩Как это работает? 1⃣Запускаем сервер.py. Он ждёт подключения. 2⃣Запускаем клиент.py. Клиент подключается к серверу и отправляет сообщение. 3⃣Сервер получает сообщение, отвечает клиенту и закрывает соединение. 4⃣Клиент принимает ответ и завершает работу. 🚩Типы клиент-серверных архитектур Одноуровневая – клиент общается напрямую с сервером. Двухуровневая – классическая схема "клиент сервер" (например, браузер веб-сервер). Трёхуровневая – добавляется база данных (например, клиент сервер БД). Многоуровневая – сложные распределённые системы с несколькими серверами (например, микросервисы). Ставь 👍 и забирай 📚 Базу знаний

🤔 Когда нужно написать плохой код? Плохой код может быть оправдан в случае крайней необходимости, например, для быстрого исправления критической ошибки. Однако его следует документировать и устранить в ближайшее время. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Для чего нужен счетчик ссылок 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()  # Явный вызов сборщика мусора удалит его
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как найти баланс между соблюдением KISS и DRY? Баланс достигается через минимизацию сложности (KISS), но не за счёт повторяющегося кода (DRY). Это требует анализа контекста и компромиссов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Два способа создания класса В Python можно создать класс двумя основными способами: Через class (обычный способ) Через type() (динамическое создание класса) 🚩Обычное создание класса через `class` Это стандартный способ, который мы используем чаще всего.
class Person:
    def __init__(self, name):
        self.name = name

    def say_hello(self):
        return f"Привет, я {self.name}!"

p = Person("Алиса")
print(p.say_hello())  # Привет, я Алиса!
🚩Динамическое создание класса через `type()` Функция type() позволяет создать класс "на лету".
Person = type("Person", (object,), {
    "__init__": lambda self, name: setattr(self, "name", name),
    "say_hello": lambda self: f"Привет, я {self.name}!"
})

p = Person("Боб")
print(p.say_hello())  # Привет, я Боб!
Ставь 👍 и забирай 📚 Базу знаний

Сервисы Яндекс 360 для бизнеса — всего 1 ₽ за сотрудника Защита данных и быстрая миграция без пауз для бизнеса. Попробуйте за 1 ₽ в первый месяц Узнать больше #реклама 16+ 360.yandex.ru О рекламодателе

🤔 Как понять, когда нужно избавляться от дублирования? Избавляться от дублирования стоит, если оно приводит к сложностям в поддержке, увеличению ошибок или нарушению принципа DRY. Однако если это уменьшает ясность, дублирование допустимо. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Основы математики в Machine Learning / Deep Learning 🗓 6 марта приглашаем вас на прямой эфир, где мы подробно разберем ря
🤔 Основы математики в Machine Learning / Deep Learning 🗓 6 марта приглашаем вас на прямой эфир, где мы подробно разберем ряд Тейлора, собственные векторы и другие ключевые понятия в ML. (ссылка) 🌟 Спикер: *Мария Горденко* – Старший преподаватель ФКН НИУ ВШЭ, НИТУ МИСИС, аспирант департамента анализа данных и искусственного интеллекта ФКН НИУ ВШЭ, а также преподаватель на курсе Алгоритмы и структуры данных в proglib academy. Место работы: Инженер-программист, ведущий эксперт НИУ ВШЭ, цифровой ассистент и цифровой консультант НИУ ВШЭ. 😮 На вебинаре вы узнаете: 🔵 Теорию вероятностей: обсудим случайные величины, вероятность, математическое ожидание и дисперсию. 🔵 Линейную алгебру: изучим векторы, матрицы, собственные векторы и собственные значения. 🔵 Математический анализ: разберем производные и разложение функций в ряд Тейлора. 🔵 Практику: применим полученные знания на реальных кейсах из области Machine Learning и Deep Learning. 🎯 Почему это важно? Понимание математических основ помогает глубже разобраться в работающих под капотом алгоритмах ML/DL и эффективно применять их на практике. 👉 Присоединяйтесь к нам и совершенствуйте свои навыки в машинном обучении! 📌 Регистрация по ссылке: https://proglib.io/w/e5d0e53b

🤔 Как разбить список? Разбить список (list) можно разными способами в зависимости от задачи: На части фиксированной длины На N частей По условию 🚩Разбить список на части фиксированного размера Если нужно разделить список на подсписки длиной n, можно использовать list comprehension
def split_list(lst, size):
    return [lst[i:i + size] for i in range(0, len(lst), size)]

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(split_list(data, 3))  
Вывод
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
🚩Разбить список на N частей (равных или почти равных) Если нужно разделить список на N частей, можно использовать numpy или itertools
import numpy as np

def split_into_n_parts(lst, n):
    return np.array_split(lst, n)

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(split_into_n_parts(data, 4))  
Вывод
[array([1, 2, 3]), array([4, 5]), array([6, 7]), array([8, 9])]
🚩Разбить список по условию Если нужно разделить список по какому-то критерию, например, на чётные и нечётные числа
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]

even = [x for x in data if x % 2 == 0]
odd = [x for x in data if x % 2 != 0]

print(even, odd)
Вывод
[2, 4, 6, 8] [1, 3, 5, 7, 9]
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое блокировки (локи) в БД? Блокировка (lock) — это механизм, который предотвращает одновременный доступ к данным разными транзакциями, чтобы избежать конфликтов, повреждения данных или "гонки" процессов. Представь, что два человека редактируют один и тот же документ. Если они начнут менять его одновременно, файл может испортиться. Блокировки в БД работают так же — если один процесс изменяет данные, другой должен подождать, пока первый закончит. 🚩Почему нужны блокировки? 🟠Гарантия целостности данных предотвращает одновременные изменения одних и тех же строк. 🟠Избегание гонки данных (race condition) когда два запроса пытаются изменить одно и то же значение. 🟠Изоляция транзакций разные операции не мешают друг другу. 🚩Виды блокировок в БД 🟠По уровню охвата данных Строчная (Row Lock) – блокирует только одну строку таблицы. Табличная (Table Lock) – блокирует всю таблицу целиком. Блокировка всей базы (Database Lock) – редко используется, но блокирует всю БД.
BEGIN;
SELECT * FROM users WHERE id = 1 FOR UPDATE; -- Блокирует строку, пока транзакция не завершится
🟠По типу блокировки Эксклюзивная (Exclusive, X-Lock) – блокирует запись для всех (никакие другие операции её не изменят). Разделяемая (Shared, S-Lock) – блокирует только на запись (чтение возможно).
BEGIN;
UPDATE users SET balance = balance - 100 WHERE id = 1;
-- Пока транзакция не завершится, другая транзакция не сможет изменить balance пользователя 1.
🟠Явные и неявные блокировки Явные (ручные) – задаются программистом (SELECT ... FOR UPDATE). Неявные (автоматические) – создаются СУБД при INSERT, UPDATE, DELETE. 🚩Проблемы с блокировками 🟠Deadlock (взаимная блокировка) Если два запроса ждут друг друга, система "зависает". Решение: правильный порядок выполнения транзакций. 🟠Долгие блокировки Если транзакция не закрывается (COMMIT/ROLLBACK), другие запросы ждут бесконечно. Решение: короткие транзакции, автоматическое завершение. 🟠Снижение производительности Чем больше блокировок, тем медленнее работа БД. Ставь 👍 и забирай 📚 Базу знаний