Python вопросы с собеседований
25K subscribers
518 photos
19 videos
17 files
414 links
Вопросы с собеседований по Python

@workakkk - админ

@machinelearning_interview - вопросы с собесдований по Ml

@pro_python_code - Python

@data_analysis_ml - анализ данных на Python

@itchannels_telegram - 🔥 главное в ит

РКН: clck.ru/3FmrFd
Download Telegram
⚡️ Почему лучшие разработчики всегда на шаг впереди?

Потому что они знают, где брать настоящие инсайд!
Оставь “программирование в вакууме” в прошлом, выбирай свой стек — подпишись и погружайся в поток идей, лайфхаков и знаний, которые не найдёшь в открытом доступе.

ИИ: t.iss.one/ai_machinelearning_big_data
Python: t.iss.one/pythonl
Linux: t.iss.one/linuxacademiya
Мл собес t.iss.one/machinelearning_interview
C++ t.iss.one/cpluspluc
Docker: t.iss.one/DevopsDocker
Хакинг: t.iss.one/linuxkalii
МЛ: t.iss.one/machinelearning_ru
Devops: t.iss.one/DevOPSitsec
Data Science: t.iss.one/data_analysis_ml
Javascript: t.iss.one/javascriptv
C#: t.iss.one/csharp_ci
Java: t.iss.one/java_library
Базы данных: t.iss.one/sqlhub
Python собеседования: t.iss.one/python_job_interview
Мобильная разработка: t.iss.one/mobdevelop
Golang: t.iss.one/Golang_google
React: t.iss.one/react_tg
Rust: t.iss.one/rust_code
ИИ: t.iss.one/vistehno
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Frontend: t.iss.one/front
Big Data: t.iss.one/bigdatai
МАТЕМАТИКА: t.iss.one/data_math
Kubernets: t.iss.one/kubernetc
Разработка игр: https://t.iss.one/gamedev
Физика: t.iss.one/fizmat
SQL: t.iss.one/databases_tg

Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
Папка ML: https://t.iss.one/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://t.iss.one/addlist/mzMMG3RPZhY2M2Iy

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
😆ИТ-Мемы: t.iss.one/memes_prog
🇬🇧Английский: t.iss.one/english_forprogrammers
🧠ИИ: t.iss.one/vistehno

🖥 Chatgpt для кода в тг: @Chatgpturbobot

📕Ит-книги: https://t.iss.one/addlist/BkskQciUW_FhNjEy
💼ИТ-вакансии t.iss.one/addlist/_zyy_jQ_QUsyM2Vi

Подпишись, чтобы всегда знать, куда двигаться дальше!
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускоряй Python циклы без NumPy — через встроенный `array.array`

Если ты используешь большие списки чисел в Python и работаешь с ними в цикле — знай: list медленный и неэффективный по памяти.

Есть способ ускорить операции в 2–5 раз без внешних библиотек — просто используй array точка array. Попробуй и напиши в комментах результат, на сколько ускорились твои функции.

from array import array

data = array('f', [0.1] * 10_000_000) # вместо обычного list

# быстрая арифметика
for i in range(len(data)):
data[i] *= 2.5


@python_job_interview
9👍4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Подменяй любые импорты в Python “на лету” — без изменения кода

Если ты хочешь протестировать модуль, подменить зависимость, замокать внешний сервис или обмануть импорт — не обязательно редактировать исходники. Python позволяет перехватывать импорты прямо во время выполнения, через sys.modules.

Вот минимальный приём, который делает это прозрачно:


import sys
import types

# Создаём фейковый модуль
fake = types.SimpleNamespace()
fake.get_data = lambda: "подмена работает"

# Подменяем импорт
sys.modules['external_service'] = fake

# Теперь даже import будет работать
import external_service
print(external_service.get_data()) # → "подмена работает"
🔥54👍2🥰1
🎙️ pytest-recording — плагин для записи и воспроизведения HTTP-запросов в тестах. Полезный инструмент для Python-разработчиков, который помогает сделать тесты, зависящие от внешних API, более стабильными и быстрыми. Плагин использует VCR.py под капотом, позволяя записывать реальные HTTP-взаимодействия в YAML-кассеты и затем воспроизводить их локально.

Инструмент имеет удобный режим rewrite, который полностью перезаписывает кассеты, а не просто дополняет их. Также есть встроенная блокировка случайных сетевых запросов во время тестирования.

🤖 GitHub

@python_job_interview
3👍3
🔍Открытое собеседование на Python-бекендера с разработчиком из Avito и Яндекс в четверг

10 июля(уже в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.

Как это будет:
📂 Савва Демиденко, ТехЛид с опытом в Яндексе и Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Савва будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Савве

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot

Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxjiWL7
Please open Telegram to view this post
VIEW IN TELEGRAM
3
📌 Сложная задача для собеседования на Python: «Асинхронный кэш с TTL и инвалидацией».

Условие:
Реализуйте потокобезопасный асинхронный кэш с временем жизни записей, поддержкой инвалидации по ключу и автоматическим удалением устаревших записей. Кэш должен:
1️⃣ Хранить значения не дольше указанного TTL (seconds)
2️⃣ Автоматически очищать устаревшие записи без блокировки основного потока
3️⃣ Поддерживать асинхронные операции get/set
4️⃣ Иметь механизм ручной инвалидации
5️⃣ Гарантировать потокобезопасность
6️⃣ Оптимизировать память

Ожидаемое решение:
import asyncio
import time
from collections import OrderedDict
from typing import Any, Optional
import threading

class AsyncTTLCache:
def __init__(self, maxsize: int = 1024, ttl: int = 60):
self._cache = OrderedDict()
self._maxsize = maxsize
self._ttl = ttl
self._lock = threading.Lock()
self._cleanup_task = asyncio.create_task(self._cleanup_expired())

async def get(self, key: str) -> Optional[Any]:
with self._lock:
if key not in self._cache:
return None
value, expiry = self._cache[key]
if time.time() > expiry:
del self._cache[key]
return None
# Move to end to mark as recently used
self._cache.move_to_end(key)
return value

async def set(self, key: str, value: Any) -> None:
with self._lock:
if key in self._cache:
self._cache.move_to_end(key)
self._cache[key] = (value, time.time() + self._ttl)
if len(self._cache) > self._maxsize:
self._cache.popitem(last=False)

async def invalidate(self, key: str) -> None:
with self._lock:
if key in self._cache:
del self._cache[key]

async def _cleanup_expired(self) -> None:
while True:
await asyncio.sleep(self._ttl)
with self._lock:
now = time.time()
expired_keys = [
k for k, (_, expiry) in self._cache.items()
if expiry <= now
]
for k in expired_keys:
del self._cache[k]

def __del__(self):
self._cleanup_task.cancel()


# Пример использования
async def main():
cache = AsyncTTLCache(ttl=2)

await cache.set("a", 1)
print(await cache.get("a")) # 1

await asyncio.sleep(3)
print(await cache.get("a")) # None

await cache.set("b", 2)
await cache.invalidate("b")
print(await cache.get("b")) # None

asyncio.run(main())

Предлагайте свои варианты решения в комментариях⏬️

@python_job_interview
🔥155👍5😱3
🎙️ pytest-recording — плагин для записи и воспроизведения HTTP-запросов в тестах Инструмент использует VCR.py под капотом, чтобы сохранять сетевые взаимодействия в YAML-кассеты и переиспользовать их при последующих запусках. Достаточно добавить @pytest.mark.vcr к тесту и все запросы автоматически запишутся или возьмутся из кэша.

Особенно удобно для тестирования API, можно блокировать случайные сетевые вызовы через @pytest.mark.block_network и точечно разрешать только нужные хосты. Поддерживается тонкая настройка через vcr_config и работа в режиме перезаписи кассет.

🤖 GitHub

@python_job_interview
3👍3🔥3
Forwarded from Machinelearning
🔥 Google DeepMind представили новую open-source библиотеку на Python для сборки асинхронных AI‑пайплайнов в реальном времени!

Новая библиотека позволяет собирать AI-процессы из компонентов — как LEGO для ИИ-агентов.

🔧 Особенности:
- Построение асинхронных, компонуемых пайплайнов
- Поддержка Gemini и Gemini Live API
- Основана на asyncio
- Обрабатывает мультимодальные данные: текст, изображения, аудио
- Внутри готовые агенты: real-time агент, исследователь, live-комментатор

💡 Подходит для:
- Разработки ИИ-агентов
- Генеративных моделей, работающих в реальном времени
- Быстрой сборки MVP с мультимодальными возможностями

Установка:


pip install genai-processors


Открытый код, готовые компоненты и интеграция с API.

Repo: https://github.com/google-gemini/genai-processors
Blog: https://developers.googleblog.com/en/genai-processors/

@ai_machinelearning_big_data


#DeepMind #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥1
🐍 Совет дня для опытных Python-разработчиков

📌 Используй декораторы с параметрами — мощный приём для логирования, контроля, кэширования и кастомных проверок.

Пример: логгер, у которого можно задать уровень логирования через аргумент:


import functools
import logging

def log(level=logging.INFO):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
logging.log(level, f"Вызов {func.__name__} с args={args}, kwargs={kwargs}")
return func(*args, **kwargs)
return wrapper
return decorator

@log(logging.DEBUG)
def compute(x, y):
return x + y


Зачем это нужно:

Декоратор гибко настраивается;

Подходит для трассировки в проде и отладки в деве;

Сохраняет сигнатуру и docstring благодаря @functools.wraps.

⚠️ Совет: избегай вложенности >2 уровней и всегда пиши тесты на поведение декоратора.

Python даёт инструменты, которые выглядят магией, но работают стабильно — если знаешь, как ими пользоваться.
🔥52👍1🤔1
Forwarded from Python/ django
👾 GREMLLM — теперь у ваших багов есть сознание

GREMLLM — это необычный Python-класс, в котором все методы и свойства создаются динамически с помощью LLM. Вы описываете, *что за объект вы хотите*, и дальше GREMLLM сам решает, что должно происходить при вызове методов или обращении к полям.

📦 Установка:

pip install gremllm


🔧 Пример:



from gremllm import Gremllm

counter = Gremllm('counter')
counter.value = 5
counter.increment()
print(counter.value) # → 6?
print(counter.to_roman_numerals()) # → VI?


🧩 Возможности:
– Динамическое поведение: всё определяется "на лету" с помощью LLM
– Поддержка OpenAI, Claude, Gemini, и локальных моделей
– Wet Mode: можно строить цепочки вызовов (методы возвращают объекты)
– Verbose Mode: выводит, какой код был сгенерирован
– Умная обработка ошибок и настройка через наследование

⚠️ Это экспериментальный инструмент. Не для продакшена. Но очень интересен для изучения LLM-интеграций в Python-код.

🔗 Репозиторий: https://github.com/ur-whitelab/gremllm

@pythonl
3👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускорь import в Python-проектах с помощью lazy loading — без изменения логики

Если у тебя проект с тяжёлыми модулями (`pandas`, torch, tensorflow`), но они не всегда нужны — не загружай их зря. Python позволяет **отложить импорт до первого использования**, через встроённый `importlib.

Вот как это выглядит на практике:



import importlib

# Обёртка для ленивого импорта
def lazy_import(name):
return importlib.util.LazyLoader(importlib.import_module(name))

# Использование
np = lazy_import('numpy')
# numpy ещё не загружен

# Теперь загрузится:
print(np.array([1, 2, 3]))
9👎2🔥1🥰1
🧠 Хитрая задача по Python — *ловушка с изменяемыми значениями по умолчанию*

Вопрос:
Что выведет следующий код?


def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list

print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))


Ваш ответ? 🤔

Многие ожидают:


[1]
[2]
[3]


Но фактически вывод будет:

python 
[1]
[1, 2]
[1, 2, 3]


🔍 Почему так происходит?

Параметр my_list=[] создаётся один раз — при определении функции. И он сохраняется между вызовами. То есть все вызовы функции используют один и тот же список по умолчанию.

Это одна из самых частых ошибок в продакшене.

Правильный способ — использовать None как значение по умолчанию:



def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list

Теперь:


[1]
[2]
[3]

Каждый вызов получает новый список.

⚠️ Если вы работаете с функциями, которые принимают списки или словари — всегда проверяйте, не мутируется ли значение между вызовами.
👍73🔥1