Python | Вопросы собесов
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Show more📈 Analytical overview of Telegram channel Python | Вопросы собесов
Channel Python | Вопросы собесов (@python_easy_ru) in the Russian language segment is an active participant. Currently, the community unites 12 631 subscribers, ranking 9 915 in the Technologies & Applications category and 51 035 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 631 subscribers.
According to the latest data from 16 October, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -115 over the last 30 days and by -6 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 6.29%. Within the first 24 hours after publication, content typically collects 4.30% reactions from the total number of subscribers.
- Post reach: On average, each post receives 794 views. Within the first day, a publication typically gains 543 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 2.
- Thematic interests: Content is focused on key topics such as ставь, модуль, строка, docker, alice.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy
Контакт для рекламы: @sendme_ads”
Thanks to the high frequency of updates (latest data received on 17 October, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
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️⃣ Нарушение инкапсуляции: Посетитель может требовать доступа к закрытым полям и методам элементов, что может нарушить инкапсуляцию.
🤔 Когда использовать данный паттерн?
➕ Когда необходимо выполнять множество различных операций над объектами сложной структуры.
➕ Когда нужно добавлять новые операции, не изменяя классы объектов.
➕ Когда изменение алгоритмов чаще, чем изменение структуры объектов.
Паттерн "Посетитель" является мощным инструментом для организации и расширения операций над объектами, упрощая добавление новых операций и улучшая структуру кода.
🔥 ТОП ВОПРОСОВ С СОБЕСОВ
🔒 База собесов | 🔒 База тестовых