Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Больше📈 Аналитический обзор Telegram-канала Python | Вопросы собесов
Канал Python | Вопросы собесов (@python_easy_ru) языкового сегмента Русский является активным участником. Сейчас сообщество объединяет 12 631 подписчиков, занимая 9 915 место в категории Технологии и приложения и 51 035 место в регионе Россия.
📊 Показатели аудитории и динамика
С момента создания невідомо проект демонстрирует стремительный рост, собрав аудиторию из 12 631 подписчиков.
Согласно последним данным от 16 октября, 2026, канал показывает стабильную активность. За последние 30 дней изменение числа участников составило -115, а за последние 24 часа — -6, при этом общий охват остаётся высоким.
- Статус верификации: Не верифицирован
- Уровень вовлечённости (ER): Средний показатель вовлечённости аудитории составляет 6.29%. В первые 24 часа после публикации контент обычно набирает 4.30% реакций от общего числа подписчиков.
- Охват публикаций: В среднем каждый пост получает 794 просмотров. В течение первых суток публикация набирает 543 просмотров.
- Реакции и взаимодействия: Аудитория активно поддерживает контент: среднее количество реакций на один пост — 2.
- Тематические интересы: Контент сосредоточен на ключевых темах, таких как ставь, модуль, строка, docker, alice.
📝 Описание и контентная политика
Автор описывает ресурс как площадку для выражения субъективного мнения:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Благодаря высокой частоте обновлений (последние данные получены 17 октября, 2026) канал поддерживает актуальность и высокий уровень охвата публикаций. Аналитика показывает, что аудитория активно взаимодействует с контентом, что делает его важной точкой влияния в категории Технологии и приложения.
syntax = "proto3";
service Calculator {
rpc Add (AddRequest) returns (AddReply) {}
}
message AddRequest {
int32 a = 1;
int32 b = 2;
}
message AddReply {
int32 result = 1;
}
🤔 Генерация кода из файла .proto:
Для этого используется утилита protoc:
protoc --python_out=. --grpc_python_out=. calculator.proto
Реализация сервера:
import grpc
from concurrent import futures
import time
import calculator_pb2
import calculator_pb2_grpc
class CalculatorServicer(calculator_pb2_grpc.CalculatorServicer):
def Add(self, request, context):
response = calculator_pb2.AddReply()
response.result = request.a + request.b
return response
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
calculator_pb2_grpc.add_CalculatorServicer_to_server(CalculatorServicer(), server)
server.add_insecure_port('[::]:50051')
server.start()
try:
while True:
time.sleep(86400)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
serve()
Реализация клиента:
import grpc
import calculator_pb2
import calculator_pb2_grpc
def run():
with grpc.insecure_channel('localhost:50051') as channel:
stub = calculator_pb2_grpc.CalculatorStub(channel)
response = stub.Add(calculator_pb2.AddRequest(a=1, b=2))
print(f"1 + 2 = {response.result}")
if name == '__main__':
run()
🤔 Преимущества:
1️⃣ Высокая производительность: Благодаря использованию HTTP/2 и protobuf.
2️⃣ Поддержка нескольких языков: Возможность работы с разными языками программирования.
3️⃣ Типы RPC: Поддержка различных типов взаимодействия между клиентом и сервером.
4️⃣ Масштабируемость: Подходит для построения микросервисной архитектуры.
🤔 Недостатки:
1️⃣ Крутая кривая обучения: Требует знания HTTP/2 и Protocol Buffers.
2️⃣ Совместимость с старыми системами: Не все системы и языки программирования имеют поддержку HTTP/2 и protobuf.
3️⃣ Инструменты и экосистема: В некоторых случаях может потребоваться настройка дополнительных инструментов для интеграции и отладки.
gRPC является мощным и гибким инструментом для построения современных распределённых систем, обеспечивая высокую производительность и масштабируемость, а также поддерживая множество языков программирования.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхimport grpc
from concurrent import futures
import time
import calculator_pb2
import calculator_pb2_grpc
class CalculatorServicer(calculator_pb2_grpc.CalculatorServicer):
def Add(self, request, context):
response = calculator_pb2.AddReply()
response.result = request.a + request.b
return response
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
calculator_pb2_grpc.add_CalculatorServicer_to_server(CalculatorServicer(), server)
server.add_insecure_port('[::]:50051')
server.start()
try:
while True:
time.sleep(86400)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
serve()
Клиентская часть:
import grpc
import calculator_pb2
import calculator_pb2_grpc
def run():
with grpc.insecure_channel('localhost:50051') as channel:
stub = calculator_pb2_grpc.CalculatorStub(channel)
response = stub.Add(calculator_pb2.AddRequest(a=1, b=2))
print(f"1 + 2 = {response.result}")
if name == '__main__':
run()
➕ Определение протокола (calculator.proto):
syntax = "proto3";
service Calculator {
rpc Add (AddRequest) returns (AddReply) {}
}
message AddRequest {
int32 a = 1;
int32 b = 2;
}
message AddReply {
int32 result = 1;
}
🤔 Преимущества:
1️⃣ Простота использования: Легко интегрируется в существующие приложения, предоставляя простой способ вызова удалённых процедур.
2️⃣ Прозрачность: Абстрагирует сетевые взаимодействия, делая вызовы процедур более интуитивно понятными.
3️⃣ Гибкость: Поддерживает взаимодействие между различными системами и языками программирования.
🤔 Недостатки:
1️⃣ Задержки сети: Сетевые задержки могут значительно влиять на производительность, особенно в высоконагруженных системах.
2️⃣ Отказоустойчивость: Требует дополнительных механизмов для обработки ошибок и обеспечения надёжности.
3️⃣ Безопасность: Необходимо обеспечить безопасность данных, передаваемых по сети, что может потребовать дополнительных усилий.
RPC является мощным инструментом для построения распределённых систем, предоставляя простой и интуитивно понятный способ вызова удалённых процедур и улучшая взаимодействие между различными компонентами системы.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхimport pika
# Установка соединения с RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Создание очереди
channel.queue_declare(queue='hello')
# Отправка сообщения
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
# Закрытие соединения
connection.close()
2️⃣ Apache Kafka
Это распределённая потоковая платформа, ориентированная на высокую пропускную способность и низкую задержку. Используется для построения систем обработки потоков данных в реальном времени.
🤔 Особенности:
➕ Высокая производительность и масштабируемость.
➕ Поддержка репликации и отказоустойчивости.
➕ Поддержка хранения и обработки больших объемов данных.
➕ Интеграция с системами потоковой обработки данных, такими как Apache Storm и Apache Flink.
🤔 Пример использования:
from kafka import KafkaProducer
# Создание продюсера
producer = KafkaProducer(bootstrap_servers='localhost:9092')
# Отправка сообщения
producer.send('test-topic', b'Hello, Kafka!')
producer.flush()
# Закрытие продюсера
producer.close()
Существует множество готовых реализаций MQ, каждая из которых предназначена для различных сценариев использования и требований. Выбор подходящей реализации зависит от конкретных потребностей вашего проекта, таких как производительность, масштабируемость, простота использования и интеграции с другими системами.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхfunctools предоставляет встроенную реализацию LRU cache через декоратор lru_cache. Вот пример использования этого декоратора:
from functools import lru_cache
@lru_cache(maxsize=3)
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
# Использование
print(fibonacci(10)) # 55
print(fibonacci.cache_info()) # CacheInfo(hits=8, misses=11, maxsize=3, currsize=3)
# Вывод значений из кэша
print(fibonacci(8)) # 21
print(fibonacci.cache_info()) # CacheInfo(hits=9, misses=11, maxsize=3, currsize=3)
🤔 Преимущества:
1️⃣ Улучшение производительности: Часто используемые данные остаются в кэше, что снижает время доступа.
2️⃣ Эффективное использование памяти: Кэш автоматически удаляет устаревшие данные, освобождая место для новых.
3️⃣ Простота реализации: Встроенные библиотеки и декораторы, такие как lru_cache в Python, упрощают внедрение.
🤔 Недостатки:
1️⃣ Неопределенность удаления: В определённых сценариях LRU может не быть оптимальным выбором для удаления элементов.
2️⃣ Дополнительные накладные расходы: Управление порядком использования элементов требует дополнительных ресурсов.
🤔 Когда его использовать?
➕ Когда нужно кэшировать результаты дорогостоящих вычислений.
➕ Когда доступ к данным является частым и повторяющимся.
➕ Когда размер кэша ограничен, и необходимо автоматически удалять устаревшие данные для освобождения места.
LRU cache является эффективным и простым способом улучшения производительности и управления памятью в системах с ограниченными ресурсами.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовыхfrom abc import ABC, abstractmethod
# Интерфейс элемента
class Element(ABC):
@abstractmethod
def accept(self, visitor):
pass
# Конкретные элементы
class TextElement(Element):
def accept(self, visitor):
visitor.visit_text_element(self)
def get_text(self):
return "This is a text element."
class ImageElement(Element):
def accept(self, visitor):
visitor.visit_image_element(self)
def get_image(self):
return "This is an image element."
# Интерфейс посетителя
class Visitor(ABC):
@abstractmethod
def visit_text_element(self, element):
pass
@abstractmethod
def visit_image_element(self, element):
pass
# Конкретный посетитель
class PrintVisitor(Visitor):
def visit_text_element(self, element):
print(f"Printing: {element.get_text()}")
def visit_image_element(self, element):
print(f"Printing: {element.get_image()}")
class SaveVisitor(Visitor):
def visit_text_element(self, element):
print(f"Saving: {element.get_text()}")
def visit_image_element(self, element):
print(f"Saving: {element.get_image()}")
# Клиентский код
elements = [TextElement(), ImageElement()]
print_visitor = PrintVisitor()
save_visitor = SaveVisitor()
for element in elements:
element.accept(print_visitor)
for element in elements:
element.accept(save_visitor)
🤔 Преимущества:
1️⃣ Добавление новых операций: Легко добавлять новые операции без изменения классов элементов.
2️⃣ Разделение кода: Разделяет алгоритмы и структуру объектов, упрощая их понимание и поддержку.
3️⃣ Поддержка сложных структур данных: Упрощает работу с составными объектами или деревьями.
🤔 Недостатки:
1️⃣ Изменение классов элементов: При добавлении новых типов элементов требуется изменение всех классов посетителей.
2️⃣ Нарушение инкапсуляции: Посетитель может требовать доступа к закрытым полям и методам элементов, что может нарушить инкапсуляцию.
🤔 Когда использовать данный паттерн?
➕ Когда необходимо выполнять множество различных операций над объектами сложной структуры.
➕ Когда нужно добавлять новые операции, не изменяя классы объектов.
➕ Когда изменение алгоритмов чаще, чем изменение структуры объектов.
Паттерн "Посетитель" является мощным инструментом для организации и расширения операций над объектами, упрощая добавление новых операций и улучшая структуру кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых