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

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 Что такое хешируемые типы данных?

Это типы данных, которые имеют постоянное значение хеша и неизменяемы. Только такие типы можно использовать как ключи в словарях или элементы во множествах. Примеры: строки, числа, кортежи (если внутри только хешируемые элементы).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое IP адрес и доменное имя?

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

🚩IP-адрес (Internet Protocol Address)

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

🟠IPv4 (Internet Protocol version 4)
Формат: 32-битные числа, записанные в виде четырех десятичных чисел, разделенных точками (например, 192.168.1.1). Пример: 192.168.0.1, 8.8.8.8

🟠IPv6 (Internet Protocol version 6)
Формат: 128-битные числа, записанные в виде восьми групп шестнадцатеричных чисел, разделенных двоеточиями (например, 2001:0db8:85a3:0000:0000:8a2e:0370:7334). Пример: 2001:0db8:85a3:0000:0000:8a2e:0370:7334, ::1 (loopback адрес)

🚩Доменное имя

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

🟠Top-Level Domain (TLD)
Верхний уровень, например, .com, .org, .net.
🟠Second-Level Domain (SLD)
Основная часть доменного имени, например, example в example.com.
🟠Subdomain
Дополнительные уровни, например, www в www.example.com.

🚩Преобразование доменных имен в IP-адреса

Для преобразования доменных имен в IP-адреса используется система доменных имен (DNS, Domain Name System). DNS-серверы выполняют роль "телефонной книги" интернета, переводя доменные имена в соответствующие им IP-адреса.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие преимущества использования функций?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Какие бывают виды тестов?

Существует несколько видов тестов, каждый из которых имеет свою цель и особенности.

🚩Виды

🟠Юнит-тесты (Unit Tests)
Проверка работы отдельных модулей или функций в изоляции от других частей системы.
Ориентированы на минимальные части кода (функции, методы, классы).
Высокая скорость выполнения.
Простота написания и отладки.
Обычно пишутся разработчиками.
def add(a, b):
return a + b

def test_add():
assert add(1, 2) == 3


🟠Интеграционные тесты (Integration Tests)

Проверка взаимодействия между различными модулями или компонентами системы.
Тестируют комбинации модулей и их взаимодействие.
Более сложные и медленные по сравнению с юнит-тестами.
Могут выявить проблемы в интерфейсах между модулями.
def fetch_data_from_api():
response = requests.get('https://api.example.com/data')
return response.json()

def test_fetch_data_from_api():
data = fetch_data_from_api()
assert 'key' in data


🟠Системные тесты (System Tests)
Проверка всей системы целиком на соответствие требованиям.
Тестируют систему в рабочей среде.
Включают проверку всех функциональных и нефункциональных требований.
Могут включать пользовательские сценарии.
Тестирование веб-приложения на основе реальных пользовательских сценариев, включая проверку интерфейса, баз данных и API.

🟠Приемочные тесты (Acceptance Tests)
Проверка соответствия системы требованиям и ожиданиям заказчика или конечного пользователя.
Часто выполняются вместе с заказчиком или пользователем.
Фокусируются на бизнес-требованиях и пользовательских сценариях.
Успешное прохождение приемочных тестов является критерием готовности системы к выпуску.
Тестирование нового функционала с участием конечных пользователей для проверки его удобства и соответствия их ожиданиям.

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

🟠Нефункциональные тесты (Non-functional Tests)
Проверка нефункциональных аспектов системы, таких как производительность, безопасность, удобство использования и др.

🚩Основные виды:

🟠Тесты производительности
Измеряют скорость выполнения, пропускную способность и время отклика системы.
🟠Тесты безопасности
Оценивают защищенность системы от угроз и атак.
🟠Тесты удобства использования
Проверяют удобство и интуитивность пользовательского интерфейса.

Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Когда выполняется файл __init__.py?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое type?

В Python type — это встроенная функция и метакласс, который:
Определяет тип объекта (type(obj)).
Создаёт новые классы динамически (type(name, bases, attrs)).

🟠1. `type(obj)`: Определение типа объекта
Функция type(obj) возвращает класс (тип) объекта.
print(type(42))         # <class 'int'>
print(type("hello")) # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>

if type(42) is int:
print("Это целое число!")


🟠`type(name, bases, attrs)`: Создание класса динамически
Функция type может создавать новые классы "на лету".
MyClass = type("MyClass", (object,), {"x": 10, "hello": lambda self: "Hello!"})

obj = MyClass()
print(obj.x) # 10
print(obj.hello()) # Hello!


🟠`type` как метакласс
В Python type — это метакласс для всех классов, то есть классы тоже являются объектами type.
class A:
pass

print(type(A)) # <class 'type'>


Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Где лучше хранить хеш запроса — в Redis или PostgreSQL?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥1
🤔 Что такое Host?

Host (хост) — это устройство или сервер, подключённый к сети, который может предоставлять или запрашивать данные.
GET /index.html HTTP/1.1
Host: example.com


🚩Где используется `Host`?

🟠В HTTP-запросах (заголовок `Host`)
Когда браузер запрашивает сайт, он отправляет заголовок Host, чтобы сервер знал, какой сайт нужно отдать.
GET / HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0


🟠В настройке DNS и доменных имён
Host — это доменное имя, привязанное к IP-адресу.
- example.com192.168.1.100
- mail.example.com192.168.1.101
127.0.0.1 mysite.local


🟠3. В локальной сети (локальные хосты)
Внутри сети устройства тоже считаются хостами (192.168.1.10, 192.168.1.20). localhost (127.0.0.1) — это всегда локальный компьютер.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Чем отличается асинхронный контекстный менеджер от синхронного?

Асинхронный контекстный менеджер (async with) работает с асинхронными ресурсами: подключениями, файлами и т.д. Он должен реализовывать методы aenter и aexit. В отличие от синхронного (with), он не блокирует event loop и позволяет выполнять I/O без задержек.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чем отличия pytz от datetime?

🟠`datetime` – встроенный модуль Python
Модуль datetime позволяет работать с датами и временем, но по умолчанию он не поддерживает часовые пояса.
from datetime import datetime

dt = datetime.now() # Получаем текущую дату и время
print(dt) # Например: 2024-02-28 14:30:00.123456
print(dt.tzinfo) # None (нет информации о часовом поясе)


🟠`pytz` – внешний модуль для работы с часовыми поясами
Библиотека pytz добавляет поддержку часовых поясов и позволяет работать с разными временными зонами.
from datetime import datetime
import pytz

tz = pytz.timezone("Europe/Moscow") # Часовой пояс Москвы
dt = datetime.now(tz) # Получаем текущее время с учетом часового пояса

print(dt) # Например: 2024-02-28 17:30:00+03:00
print(dt.tzinfo) # Europe/Moscow


🚩Как работать с часовыми поясами правильно?

Создание datetime с часовым поясом pytz
dt = datetime(2024, 2, 28, 15, 0)  # Наивная дата
tz = pytz.timezone("Europe/Moscow")
dt = tz.localize(dt) # Присваиваем часовой пояс
print(dt) # 2024-02-28 15:00:00+03:00


Конвертация времени между часовыми поясами
ny_tz = pytz.timezone("America/New_York")
ny_time = dt.astimezone(ny_tz)
print(ny_time) # Конвертированное время в Нью-Йорке


Использование UTC (лучший подход для серверов)
utc_now = datetime.now(pytz.UTC)  # Текущее время в UTC
print(utc_now) # Например: 2024-02-28 14:30:00+00:00


Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 В чем суть принципа REST?

REST (Representational State Transfer) — это архитектурный стиль для разработки веб-сервисов, который использует стандартные методы HTTP для взаимодействия между клиентом и сервером. В REST каждая операция выполняется с использованием определённого HTTP-метода: GET для получения данных, POST для создания, PUT для обновления и DELETE для удаления. RESTful API использует унифицированные ресурсы и URL для представления данных, а также статeless-коммуникацию между клиентом и сервером. Основной принцип REST — это простота и масштабируемость.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4🔥1💊1
🤔 Какая сложность сортировки слияния в худшем случае?

Сортировка слиянием (Merge Sort) — это алгоритм, который использует разделяй и властвуй (divide & conquer).
В худшем случае сложность O(n log n).

🚩Как работает сортировка слиянием?

🟠Делим массив пополам
до тех пор, пока не останутся отдельные элементы.
🟠Сортируем и сливаем
полученные подмассивы.

def merge_sort(arr):
if len(arr) <= 1:
return arr

mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])

return merge(left, right)

def merge(left, right):
sorted_arr = []
i = j = 0

while i < len(left) and j < len(right):
if left[i] < right[j]:
sorted_arr.append(left[i])
i += 1
else:
sorted_arr.append(right[j])
j += 1

sorted_arr.extend(left[i:])
sorted_arr.extend(right[j:])
return sorted_arr

arr = [5, 2, 9, 1, 5, 6]
print(merge_sort(arr))


Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Для чего нужен модуль warnings?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как в Python происходит поиск переменной по области видимости?

В Python поиск переменной происходит по правилу LEGB, которое определяет порядок поиска в четырёх областях видимости:
Пример работы LEGB
x = "глобальная"  # Global

def outer():
x = "охватывающая" # Enclosing
def inner():
x = "локальная" # Local
print(x) # Поиск начинается отсюда (L)

inner()

outer()


Вывод
локальная


🚩Глобальные переменные (`global`)

Если нужно изменить глобальную переменную внутри функции, используем global
x = 10  # Глобальная переменная

def modify_global():
global x
x = 20 # Меняем глобальную переменную

modify_global()
print(x) # 20


🚩Переменные из внешней функции (`nonlocal`)

Если в вложенной функции нужно изменить переменную из enclosing-области, используем nonlocal
def outer():
x = 10 # Переменная из enclosing-области

def inner():
nonlocal x
x = 20 # Меняем `x` в `outer()`

inner()
print(x) # 20

outer()


🚩Что если переменная отсутствует во всех областях?

Если переменная не найдена в LEGB, Python выдаст NameError
def func():
print(y) # Ошибка: y не объявлена!

func()


Ошибка
NameError: name 'y' is not defined


🚩`Built-in` — встроенные функции

Python в последнюю очереде проверяет встроенные функции (print(), len(), sum() и т. д.).
print = "Ошибка!"  # Переопределили встроенную функцию
print("Hello") # TypeError: 'str' object is not callable


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

await — ключевое слово в Python, которое приостанавливает выполнение функции, пока не завершится корутина или awaitable-объект. Оно передаёт управление event loop'у, позволяя другим задачам выполняться в это время.


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

Для реализации протокола итерирования данных в 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)


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое dunder методы?

Это специальные методы, обрамлённые двойными подчёркиваниями.
1. Пример: init, str, add.
2. Они позволяют изменять поведение встроенных операций, таких как создание объектов или арифметика.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое деструктор класса?

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

🚩Определение и использование деструктора

Определяется внутри класса с помощью метода __del__().
class FileManager:
def __init__(self, filename):
self.file = open(filename, 'w')
print(f"Файл {filename} открыт для записи.")

def write_data(self, data):
self.file.write(data)

def __del__(self):
self.file.close()
print("Файл закрыт.")


🟠Класс FileManager имеет конструктор __init__(), который открывает файл для записи.
🟠Метод write_data() записывает данные в файл.
🟠Деструктор __del__() закрывает файл, когда объект FileManager уничтожается.

🚩Создание и уничтожение объекта

Когда объект класса создается, вызывается конструктор. Когда объект больше не нужен, вызывается деструктор:
manager = FileManager('example.txt')
manager.write_data('Hello, world!')
# Когда объект manager больше не нужен, вызывается деструктор и файл закрывается


🚩Важные замечания

🟠Сборка мусора
Python использует механизм сборки мусора для автоматического управления памятью. Когда объект больше не используется (например, нет активных ссылок на него), сборщик мусора удаляет объект и вызывает его деструктор.

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

🟠Контекстные менеджеры
Для явного управления ресурсами и их освобождения в предсказуемый момент лучше использовать контекстные менеджеры.
with open('example.txt', 'w') as file:
file.write('Hello, world!')
# Файл автоматически закрывается после выхода из блока with


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

1. cls — это ссылка на сам класс, аналог self для объектов.
2. Используется в методах класса (помеченных декоратором
@classmethod) для доступа к атрибутам или созданию новых экземпляров.
3. Пример: def create_instance(cls): return cls().


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