ar
Feedback

لا تقع ضحية للمخادعين! تيليمتريو يكتشف ويُميّز هذه القنوات 👉 إذا كنت تريد رؤية العلامة، اشترك

Python вопросы с собеседований

Python вопросы с собеседований

الذهاب إلى القناة على Telegram

Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd

إظهار المزيد

📈 نظرة تحليلية على قناة تيليجرام Python вопросы с собеседований

تُعد قناة Python вопросы с собеседований (@python_job_interview) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 24 950 مشتركاً، محتلاً المرتبة 5 326 في فئة التكنولوجيات والتطبيقات والمرتبة 26 130 في منطقة روسيا.

📊 مؤشرات الجمهور والحراك

منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 24 950 مشتركاً.

بحسب آخر البيانات بتاريخ 28 أكتوبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 81، وفي آخر 24 ساعة بمقدار -5، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 5.88‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 3.12‎% من ردود الفعل نسبةً إلى إجمالي المشتركين.
  • وصول المنشورات: يحصل كل منشور على متوسط 1 466 مشاهدة. وخلال اليوم الأول يجمع عادةً 778 مشاهدة.
  • التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 6.
  • الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل github, api, собеседование, git, docker.

📝 الوصف وسياسة المحتوى

يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Вопросы с собеседований по Python @workakkk - админ @machinelearning_interview - вопросы с собесдований по Ml @pro_python_code - Python @data_analysis_ml - анализ данных на Python @itchannels_telegram - 🔥 главное в ит РКН: clck.ru/3FmrFd”

بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 29 أكتوبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

24 950
المشتركون
-524 ساعات
-67 أيام
+8130 أيام
أرشيف المشاركات
🚀 Фишка на Python: Скачивание нескольких файлов параллельно с помощью ThreadPoolExecutor Этот скрипт использует urllib.reque
🚀 Фишка на Python: Скачивание нескольких файлов параллельно с помощью ThreadPoolExecutor Этот скрипт использует urllib.request + concurrent.futures, чтобы загружать файлы одновременно и значительно ускорить процесс.

import os
import urllib.request

from concurrent.futures import ThreadPoolExecutor, as_completed

def downloader(url):
    """Скачивает указанный URL и сохраняет его на диск"""
    req = urllib.request.urlopen(url)
    filename = os.path.basename(url)
    ext = os.path.splitext(url)[1]
    if not ext:
        raise RuntimeError('URL не содержит расширения')

    with open(filename, 'wb') as file_handle:
        while True:
            chunk = req.read(1024)
            if not chunk:
                break
            file_handle.write(chunk)

    return f'Загрузка завершена: {filename}'

def main(urls):
    """Создаёт пул потоков и скачивает указанные файлы"""
    with ThreadPoolExecutor(max_workers=5) as executor:
        futures = [executor.submit(downloader, url) for url in urls]
        for future in as_completed(futures):
            print(future.result())

if __name__ == '__main__':
    urls = [
        "http://www.irs.gov/pub/irs-pdf/f1040.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040a.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040ez.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040es.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040sb.pdf"
    ]
    main(urls)

🎯 Разбор задания с подвохом (Python, собес) Задание > Сформируйте список функций callbacks, где каждая функция при вызове печатает свой индекс. > Затем вызовите их по очереди (или из потоков/таймеров) — ожидаемый вывод: 0 1 2. Наивное решение (почти все так пишут)

callbacks = [lambda: print(i) for i in range(3)]

for f in callbacks:
    f()
Что выведет? 2 2 2 — и это не баг интерпретатора. В чём подвох - Замыкание поздно связывает имя i: лямбды не «копируют» значение, а смотрят на переменную i, когда вы их вызываете. - К моменту вызова цикл уже закончился, i == 2, значит все три лямбды печатают 2. Правильные варианты Привязать значение через параметр по умолчанию (часто лучший баланс читаемости)

callbacks = [lambda i=i: print(i) for i in range(3)]
for f in callbacks:
    f()  # 0 1 2
Заводим фабрику функций (прямо подчёркивает намерение)

def make_printer(i):
    def _f():
        print(i)
    return _f

callbacks = [make_printer(i) for i in range(3)]
for f in callbacks:
    f()  # 0 1 2
functools.partial — когда нужно просто «прикрутить аргументы»

from functools import partial

callbacks = [partial(print, i) for i in range(3)]
for f in callbacks:
    f()  # 0 1 2
А если таймеры/потоки?

import threading

for i in range(3):
    # ПЛОХО: замкнёт одно и то же i
    # threading.Timer(1, lambda: print(i)).start()

    # ХОРОШО: привяжем значение сразу
    threading.Timer(1, lambda i=i: print(i)).start()
Мини-чеклист для собеса - Лямбды/внутренние функции в цикле → проверь, не упираешься ли в late binding. - Если нужна «заморозка» значения, используй параметр по умолчанию, фабрику или partial. Не путай с другой классикой: изменяемые значения по умолчанию (например, def f(x, acc=[])), это другая ловушка. Вывод В Python замыкания захватывают имена, а не значения. Привязывай нужное значение в момент создания функции — и подвох исчезнет.

Docker и Kubernetes: основы разработки под облачную инфраструктуру Курс для тех, кто хочет держать свой стэк и знания актуаль
Docker и Kubernetes: основы разработки под облачную инфраструктуру Курс для тех, кто хочет держать свой стэк и знания актуальными и глубоко разбираться, как устроены Docker, Kubernetes, и современная облачная инфраструктура в целом. 🌐 Чему вы научитесь: 🤩 Создавать облачную инфраструктуру «с нуля» управление и конфигурация серверов с Terraform, Ansible, cloud‑init 🤩 Уверенно работать с Docker: Dockerfile, слои, кэш, многоступенчатые сборки, реестры, безопасность, air‑gapped 🤩 Проектировать многоконтейнерные приложения: паттерны Sidecar, Ambassador, Adapter, проверки (liveness/readiness), DaemonSet и поды 🤩 Настраивать сеть и балансировку в Kubernetes ClusterIP, Services, Ingress, MetalLB, TLS/SNI, сервис‑меши (Istio) 🤩 Организовывать хранение данных: PersistentVolumes / PVC, StorageClasses, резервное копирование. Упаковка в Helm и поддержка через Operator 🥸 Кто мы: R&D-центр Devhands. Автор курса — Николай Ихалайнен, эксперт по СУБД и бекенду (ex-Percona), со-основатель MyDB, энтузиаст открытого ПО. 🗓 Старт курса: 17 сентября, 6 недель обучения. Изучить программу и записаться можно здесь. Ждем вас! Реклама. ИП Рыбак А.А. ИНН 771407709607 Erid: 2VtzqxNnFKA

🚀 Индивидуальный IPython в Docker: советы от Frank Wiles Хочешь, чтобы твоя IPython-среда в Docker была настроена под тебя,
🚀 Индивидуальный IPython в Docker: советы от Frank Wiles Хочешь, чтобы твоя IPython-среда в Docker была настроена под тебя, но не мешала коллегам? Вот лёгкий и гибкий способ: 1. Используй IPYTHONDIR и Docker Compose: - В .env: IPYTHONDIR=/code/attic/ipython/ - В .gitignore: attic/ - В Docker Compose: подключай .env и твой проект как volume, чтобы IPython создавал конфигурацию в attic/ipython/profile_default/ :contentReference[oaicite:0]{index=0}. 2. Настройка по вкусу: - В ipython_config.py можно задать стиль редактирования (например, `c.editing_mode = "vi"`). - Автоматически импортируй часто используемые библиотеки через c.InteractiveShellApp.exec_lines = [...] или скрипты в папке startup/, пронумерованные по порядку загрузки :contentReference[oaicite:1]{index=1}. 3. Предзагрузка данных для удобной работы: Например, при работе с Django можно автоматически загрузить dev-данные. Скрипт 20-load-devdata-assignment.py внутри startup/ пытается получить объект Assignment и связанные с ним данные, делая работу в IPython удобнее :contentReference[oaicite:2]{index=2}. 4. Собственный инструмент для рутины: Автор реализовал класс URLFinder, который извлекает UUID из строки URL, красиво их отображает с помощью библиотеки rich — и позволяет получить нужный UUID по индексу (`ids(0)`, ids(1) и т.п.) :contentReference[oaicite:3]{index=3}. Вывод: Настройка IPython в Docker — это просто, удобно и лично. И это не навязывает изменения команде. Даже маленький инструмент вроде URLFinder может существенно упростить рутину. Опубликовано 19 августа 2025 года автором Frank Wiles, основателем REVSYS и бывшим президентом Django Software Foundation . Если хочешь, могу добавить краткий пример docker-compose.yaml или показать фрагмент скрипта URLFinder — скажи! https://frankwiles.com/posts/customize-ipython-docker/ -

👨‍🔧 CoreNN — база данных для работы с векторами и эмбеддингами в масштабе миллиардов, с сублинейным временем отклика на обы
+2
👨‍🔧 CoreNN — база данных для работы с векторами и эмбеддингами в масштабе миллиардов, с сублинейным временем отклика на обычных серверах. 📌 Пример: поиск по 1 млрд эмбеддингов комментариев Reddit из индекса 4,8 ТБ на диске занимает всего 15 мс. 🔧 Ключевые особенности: - Работает на дешёвых SSD/flash-накопителях, а не в дорогой DRAM → в 40–100 раз дешевле. - Масштабирование: от 1 до 1 млрд векторов в одном индексе. - Upsert и delete оптимизируют локальный граф, освобождают место и сохраняют скорость — без полной перестройки. - Поддерживает параллельные запросы и обновления без блокировок. 🔗 https://github.com/wilsonzlin/CoreNN

🍭 Задача на Python: Анализ работы декораторов и замыканий Уровень: middle Код:
def counter(func):
    count = 0
    
    def wrapper(*args, **kwargs):
        nonlocal count
        count += 1
        print(f"Функция {func.__name__} вызвана {count} раз")
        return func(*args, **kwargs)
    
    return wrapper

@counter
def greet(name):
    return f"Привет, {name}!"

print(greet("Анна"))
print(greet("Пётр"))
Вопрос: Что выведет данный код? Правильный ответ: Функция greet вызвана 1 раз Привет, Анна! Функция greet вызвана 2 раз Привет, Пётр! Пояснение: 1. Декоратор counter создает замыкание — внутреннюю функцию wrapper, которая имеет доступ к переменной count. 2. При каждом вызове декорированной функции greet: — Увеличивается счетчик count — Выводится сообщение с текущим значением счетчика — Вызывается оригинальная функция greet с переданными аргументами 3. Переменная count сохраняет свое состояние между вызовами благодаря механизму замыканий. 4. nonlocal позволяет изменять переменную из внешней области видимости @python_job_interview

🔥Прими участие в Хакатоне Т1 в Нижнем Новгороде и поборись за призовой фонд 600 000 рублей! 📅 Когда: 19 – 22 сентября 🌐 Фо
🔥Прими участие в Хакатоне Т1 в Нижнем Новгороде и поборись за призовой фонд 600 000 рублей! 📅 Когда: 19 – 22 сентября 🌐 Формат: онлайн + финал на площадке  Участвуй, если ты: 🔹студент тех/ИТ-направлений; 🔹развиваешься в dev, аналитике, дизайне, AI/DS/ML, DevOps; 🔹сможешь быть в Нижнем Новгороде 22-09. Выбери свой кейс: 🔸PingTower — сервис круглосуточного отслеживания доступности сайтов и мгновенных уведомлений о сбоях, позволяющий бизнесу не терять клиентов. 🔸HR Консультант — ИИ-консультант для карьерных сценариев и поиска талантов по умным фильтрам. Почему стоит участвовать: 🔻Кейс в портфолио и полезная обратная связь от менторов Т1; 🔻Шанс проявить себя, чтобы начать карьеру в одной из крупнейших ИТ-компаний; 🔻Реальный опыт командной работы. Регистрация открыта!  ➡️ Успей до 17 сентября по ссылке. Ты не из Нижнего Новгорода? Смотри расписание хакатонов в других городах. #реклама О рекламодателе

🐍 Python + Ruff: сложность кода под контролем На скрине — функция validate_product, которая проходит несколько вложенных про
🐍 Python + Ruff: сложность кода под контролем На скрине — функция validate_product, которая проходит несколько вложенных проверок. Линтер Ruff с правилом C901 (McCabe Complexity) сигнализирует: сложность функции = 7, что выше лимита 5. 📏 McCabe Complexity измеряет количество ветвлений и условий в функции. Чем выше показатель, тем сложнее код для понимания и поддержки. ⚠️ Почему это важно: • Снижение читаемости • Рост вероятности багов • Трудности при тестировании 💡 Решение: 1. Разбить функцию на несколько маленьких с понятными именами 2. Использовать ранние выходы (`return`) вместо вложенных if 3. Упрощать логику с помощью вспомогательных функций или структур данных #Python #Ruff #CleanCode #Refactoring #McCabeComplexity

🔥 Самые сложные вопросы для интервью в Google — как готовиться и что отвечать 🔤 Что чаще спрашивают - Алгоритмы и структуры данных - «Найдите k-й элемент в отсортированных массивах без слияния» - «Минимальное окно подстроки с набором символов» - «Пути с минимальной стоимостью в графе с ловушками/порталами» - Системный дизайн (Senior+) - «Спроектируйте сокращатель ссылок с 10 млрд кликов/день» - «Реал-тайм чат с end-to-end доставкой и поиском по истории» - «Видео-платформа: загрузка, хранение, CDN, рекомендации» - Конкурентность и распределённые системы - «Счётчик с глобальной монотонностью на шардированном кластере» - «Идемпотентная очередь задач при ретраях и дедупликации» - Поведенческие (бар-рейзер) - «Расскажите про провал и чему вы научились» - «Как вы влияли без формальных полномочий» 📌 Как решать задачи с кодом (шаблон) 1) Уточните ограничения и формат ввода/вывода. 2) Проговорите наивное решение → оценка O(...) по времени/памяти. 3) Предложите улучшение (двойной указатель, heap, prefix, DP, BFS/DFS, binary search on answer). 4) Кодируйте чисто: небольшие функции, проверки краёв, именование. 5) Прогоны тестов: пустой ввод, дубликаты, большие размеры, Unicode и т. п. 6) Завершите: сложность, варианты оптимизации, trade-offs. 🛠 **Системный дизайн — скелет ответа** - Требования: функциональные/нефункциональные (RPS, латентность, доступность). - API/схемы данных → оценка объёмов (QPS, storage, рост). - Высокоуровневая архитектура: клиент, API-шлюз, сервисы, БД, кэш, очередь, CDN. - Горячие пути: чтение/запись, кэширование, индексирование, консистентность. - Масштабирование: шардинг, репликация, партиционирование, backpressure. - Надёжность: ретраи, идемпотентность, дедупликация, алерты, SLO/SLI. - Трейд-оффы и поэтапный rollout. ☠️ Типичные ловушки - Пишете код сразу, не уточнив ограничения. - Нет тестов на крайние случаи. - Перескакиваете в микро-детали дизайна, не зафиксировав требования. - Не называете trade-offs и метрики успеха. 🔖 Мини-шпаргалка по инструментам - Два указателя — подстроки/окна/парные суммы. - Heap/priority queue — k-наилучших элементов/поток слияния. - Prefix/Suffix/Hash — подсчёты и проверки за O(1) на запрос. - DP — оптимизация по состояниям (категории: линейная, на подмасках, по интервалам). - Graph — BFS (минимум шагов), Dijkstra/0-1 BFS (взвешенные), Topo sort (DAG). - «Binary search по ответу» — задачи вида «можно/нельзя при X». ⚡️ Как готовиться эффективно (4 шага) 1) Разделите тренировки: 60% кодинг, 25% дизайн, 15% поведенческие. 2) Решайте задачники по темам и фиксируйте паттерн решения (а не только код). 3) Мок-интервью: таймер 30–45 минут, проговаривайте мысли вслух. 4) Соберите портфель историй по STAR: конфликт, лидерство, фейл, влияние на метрики. Удачи на интервью!

💼 Как подготовиться к любому собеседованию: гайд от нового сотрудника OpenAI Новый инженер OpenAI поделился опытом прохожден
💼 Как подготовиться к любому собеседованию: гайд от нового сотрудника OpenAI Новый инженер OpenAI поделился опытом прохождения интервью в AI-стартапы и крупные компании, включая OpenAI. 1. Заботьтесь о себе — ментально и физически Интервью — это стресс. Следите за сном, питанием, отдыхом, заручитесь поддержкой друзей и семьи. 2. Помните: цель — ваш успех Компания и интервьюеры хотят, чтобы вы прошли. Даже если был отказ, пробуйте снова — многие успешно попадали на роль со второй попытки. 3. Получайте удовольствие от процесса Это шанс познакомиться с интересными людьми, узнать новые технологии и потренироваться в решении задач. 4. Готовьтесь основательно - 100 часов на задачи (LeetCode и аналоги) - 100 часов на изучение теории и статей - Тренируйтесь с друзьями без автодополнений и LLM-подсказок 5. Каждая встреча важна Даже «неформальный звонок» — это возможность показать мотивацию, характер и профессионализм. 6. Работайте над профилем и сетью LinkedIn, GitHub с проектами, участие в митапах, open-source, хакатонах — всё это привлечёт внимание рекрутеров. 7. Первые звонки - С рекрутером: записывайте детали — этапы, состав команды, имя руководителя - С руководителем: изучите его публикации и проекты, покажите интерес, расскажите, почему хотите работать именно здесь 8. Поведенческие вопросы Готовьте истории по формату STAR(I) — о том, как решали конфликты, брали на себя лидерство, справлялись с ошибками. 9. Техническая часть - Решайте задачи быстро и чётко, проговаривая ход мыслей - Практикуйте кодинг в условиях стресса и без IDE - Разбирайтесь в алгоритмах, трансформерах, RL-методах - Умейте объяснить свою текущую работу и её пользу для компании 10. Переговоры Обсуждайте не только зарплату, но и команду, миссию, культуру. Все договорённости фиксируйте письменно. 11. Принятие решения Выбирайте место, где вам будет комфортно работать каждый день. 📌 Главное: интервью — это навык, который можно натренировать. Подготовка + уверенность = высокий шанс успеха. 📌 Полный текст

🖥 Microsoft вопрос с собеседования по SQL Задача: найти топ-2 Power Users в Microsoft Teams — пользователей, которые отправи
🖥 Microsoft вопрос с собеседования по SQL Задача: найти топ-2 Power Users в Microsoft Teams — пользователей, которые отправили больше всего сообщений в августе 2022. Вывести их sender_id и количество сообщений. Подход: 1) Отфильтровать сообщения по интервалу августа — в T-SQL удобно задавать полуинтервалом [2022-08-01, 2022-09-01), без функций над датой (чтобы не ломать индексы). 2) Посчитать сообщения по sender_id. 3) Отсортировать по убыванию и взять TOP 2. Если хотите корректно обрабатывать «ничьи» — используйте DENSE_RANK(). Быстрое решение (T-SQL):

SELECT TOP (2)
       sender_id,
       COUNT(*) AS message_count
FROM   messages
WHERE  sent_date >= '2022-08-01'
  AND  sent_date <  '2022-09-01'
GROUP BY sender_id
ORDER BY COUNT(*) DESC, sender_id;
Вариант с учетом ничьих (tie-safe):

WITH monthly AS (
  SELECT sender_id, COUNT(*) AS message_count
  FROM   messages
  WHERE  sent_date >= '2022-08-01'
    AND  sent_date <  '2022-09-01'
  GROUP BY sender_id
),
ranked AS (
  SELECT sender_id, message_count,
         DENSE_RANK() OVER (ORDER BY message_count DESC) AS rnk
  FROM   monthly
)
SELECT sender_id, message_count
FROM   ranked
WHERE  rnk <= 2
ORDER BY message_count DESC, sender_id;
Почему так: - Фильтр по диапазону дат без функций сохраняет «sargable» запрос (используются индексы по sent_date). - GROUP BY + COUNT(*) дают нужную метрику. - DENSE_RANK() аккуратно захватывает все «совместные» вторые места.

🏵️ async-lru — кэширование для асинхронного Python без головной боли Простой, но мощный порт стандартного lru_cache из funct
🏵️ async-lru — кэширование для асинхронного Python без головной боли Простой, но мощный порт стандартного lru_cache из functools для asyncio-приложений. Главная фишка — автоматическая обработка конкурентных вызовов: даже если 10 корутин запросят одни и те же данные одновременно, реальный запрос выполнится лишь один раз. Проект особенно полезен в связке с aiohttp для кэширования HTTP-запросов или результатов работы с базами данных. Поддержка TTL и ручная инвалидация кэша делают библиотеку универсальным инструментом. 🤖 GitHub @python_job_interview

Repost from Machinelearning
📌Python на взлете, а Python Software Foundation в минусе на 1.5 млн. долларов: разбираем свежий опрос. Python Software Found
📌Python на взлете, а Python Software Foundation в минусе на 1.5 млн. долларов: разбираем свежий опрос. Python Software Foundation (PSF) совместно с JetBrains опубликовала результаты восьмого, самого крупного в истории опроса разработчиков - в нём приняли участие более 30 000 человек. Данные, собранные в конце 2024 года, показывают, что 72% респондентов используют Python в рабочих целях и это подтверждает доминирующую роль языка в индустрии. И популярность Python продолжает расти: согласно другому исследованию, от Stack Overflow, использование языка увеличилось на 7%. 🟡Приток свежей крови в экосистему. Половина опрошенных имеют менее 2 лет профессионального опыта в программировании, а 39% начали использовать Python в течение последних 2 лет. Это говорит о том, что язык активно привлекает новичков и остается ключевой точкой входа в разработку. 🟡Парадокс версий. Только 15% разработчиков используют последнюю на момент опроса версию, 3.13. В PSF утверждают, что массовый переход на нее мог бы сэкономить миллионы долларов на облачных вычислениях за счет повышения эффективности. Однако сами разработчики не торопятся: 53% заявляют, что текущая версия полностью удовлетворяет их потребности, 27% ссылаются на проблемы с совместимостью, а 25% - на нехватку времени. При этом нельзя сказать, что сообщество инертно. Самая популярная версия - 3.12 (35%), выпущенная в конце 2023 года, за ней следует 3.11 (21%), что говорит о довольно быстрой адаптации к не самым последним, но свежим релизам. 🟡Сферы применения. Анализ данных (48%) и веб-разработка (46%) идут практически вровень. Но если к анализу прибавить ML (41%) и инжиниринг данных (31%), то доминирование Data Science становится очевидным. В мире веб-фреймворков происходит смена караула: FastAPI (38%) резко вырвался вперед, обогнав ветеранов: Django (35%) и Flask (34%). Год назад у FastAPI было всего 29%. Ещё один стремительный взлёт — у написанного на Rust менеджера пакетов uv, который позиционируется как замена pip. Заявляя о кратном превосходстве в скорости, он уже отхватил 11% пользователей. А вот в лагере IDE плохие новости для спонсора опроса, JetBrains: Visual Studio Code укрепил свое лидерство, набрав 48% (против 41% в прошлом году), а доля PyCharm снизилась до 25% (с 31%). 🟡Финансовые проблемы Python Software Foundation. Ранее в этом месяце PSF объявила о приостановке своей грантовой программы из-за нехватки средств. Годовой отчет за 2024 год показал чистый убыток в размере 1 462 000 долларов, что значительно больше, чем в 2023 году, там убыток был 225 000 долларов. Фонд, который поддерживает репозиторий PyPI, дистрибуцию самого Python и нанимает разработчиков для CPython, оказался в сложной ситуации и явно нуждается в большей поддержке и ресурсах от корпораций, которые строят свой бизнес и получают доход на Python. @ai_machinelearning_big_data #news #ai #ml

🖥 Молниеносный HTML-парсинг: selectolax быстрее BS4 в разы Полезный трюк: быстро парсим HTML прямо из строки с помощью selectolax — лёгкой и очень быстрой библиотеки на C, в разы быстрее BeautifulSoup. Установка:

pip install selectolax
Пример с кодом:


from selectolax.parser import HTMLParser

html = """

<html><body> <h1>Hello</h1> <p class='msg'>World</p> </body></html> """
tree = HTMLParser(html)
print(tree.css_first("h1").text()) # Hello
print(tree.css_first("p.msg").text()) # World

https://www.youtube.com/shorts/CSYJDmt4ztg

🖥 Полный проект с нуля: клон голоса на Python 🔊 Клонирование голоса на Python с нуля: пошаговый разбор, рабочий код, провер
🖥 Полный проект с нуля: клон голоса на Python 🔊 Клонирование голоса на Python с нуля: пошаговый разбор, рабочий код, проверка сходства и защита с водяными знаками. Полное руководство для разработчиков по созданию собственного проекта voice cloning. 📌 Читать

🆕 Hugging Face представили **AI Sheets** — no-code инструмент для создания и обработки таблиц с помощью ИИ. - Выглядит как обычная таблица, но вместо формул — тысячи моделей - Поддержка OpenAI-совместимых и локальных LLM - Можно добавлять столбцы с промптами, редактировать данные вручную или через лайки - Запуск онлайн или локально (Docker / pnpm) - Полностью опенсорс (Apache-2.0), легко встроить в пайплайны - Подходит для классификации, трансформации данных, синтетики и «vibe-тестов» моделей ⚡️ Попробовать #AI #NoCode #datasets #HuggingFace #LLM

👾 Задача из собеседования по Python Уровень: middle-senior Условие: Реализуйте потокобезопасный кэш с TTL и политикой вытеснения LRU. Кэш должен: 1️⃣ Автоматически удалять записи по истечении TTL. 2️⃣ При достижении максимального размера вытеснять реже всего используемые элементы. 3️⃣ Гарантировать корректную работу в многопоточной среде. 4️⃣ Поддерживать методы: get(key), set(key, value, ttl), delete(key), clear(). 5️⃣ Опционально: реализовать ленивое удаление просроченных записей. Решение:

import time
import threading
from collections import OrderedDict

class TTLLRUCache:
    def __init__(self, maxsize=1024):
        self.maxsize = maxsize
        self._cache = OrderedDict()
        self._lock = threading.RLock()
        self._expiry_times = {}

    def get(self, key):
        with self._lock:
            if key not in self._cache:
                return None
            
            # Ленивое удаление просроченного ключа
            if self._is_expired(key):
                self._delete(key)
                return None
            
            # Обновляем порядок использования (LRU)
            self._cache.move_to_end(key)
            return self._cache[key]

    def set(self, key, value, ttl=None):
        with self._lock:
            # Вытеснение старых записей при достижении лимита
            if len(self._cache) >= self.maxsize:
                self._evict()
            
            self._cache[key] = value
            self._cache.move_to_end(key)
            self._expiry_times[key] = time.time() + ttl if ttl else None

    def delete(self, key):
        with self._lock:
            self._delete(key)

    def _delete(self, key):
        self._cache.pop(key, None)
        self._expiry_times.pop(key, None)

    def clear(self):
        with self._lock:
            self._cache.clear()
            self._expiry_times.clear()

    def _is_expired(self, key):
        expiry = self._expiry_times.get(key)
        return expiry is not None and expiry < time.time()

    def _evict(self):
        # Сначала удаляем просроченные ключи
        expired_keys = [k for k in self._cache if self._is_expired(k)]
        for k in expired_keys:
            self._delete(k)
        
        # Если после этого кэш всё ещё полон, применяем LRU
        if len(self._cache) >= self.maxsize:
            self._cache.popitem(last=False)

    def __contains__(self, key):
        with self._lock:
            if key not in self._cache:
                return False
            if self._is_expired(key):
                self._delete(key)
                return False
            return True
Пояснение: 1. Потокобезопасность: Используется threading.RLock для всех операций, изменяющих состояние кэша. Это позволяет рекурсивные блокировки из одного потока. 2. TTL: Время истечения хранится в отдельном словаре _expiry_times. При обращении к ключу проверяется его актуальность. 3. LRU-политика: OrderedDict автоматически поддерживает порядок использования элементов. Метод move_to_end() обновляет позицию при каждом обращении, а popitem(last=False) удаляет самый старый элемент. 4. Гибкое удаление: — Ленивое (при обращении к ключу) — Активное (при добавлении новых элементов через _evict()) 5. Оптимизация: — Сначала удаляются просроченные ключи, и только потом применяется LRU. — Сложность операций: O(1) для get/set (в среднем случае). @python_job_interview

⚡️Лето подходит к концу, но подарки нет! Разыгрываем iPhone 16 Pro и Apple Watch SE 2 📲⌚️ 📄 Условия участия очень просты: ⚡
⚡️Лето подходит к концу, но подарки нет! Разыгрываем iPhone 16 Pro и Apple Watch SE 2 📲⌚️ 📄 Условия участия очень просты: ⚡️Подписаться на Telegram каналы: ▪t.me/pythonl ▪ t.me/DevOPSitsec ⚡️Нажать "Участвую!" под этим постом Итоги подведём уже 15 сентября. Доставка осуществляется по всей территории РФ и РБ🚚 ⚡️Удачи ВСЕМ🍀

⚡ Python-трюк: быстрая группировка данных Хотите сгруппировать элементы по ключу без лишних циклов? Используйте itertools.groupby — но не забудьте предварительно отсортировать данные по этому ключу, иначе группы будут неправильными.

from itertools import groupby
from operator import itemgetter

data = [
    {"user": "alice", "score": 8},
    {"user": "bob",   "score": 5},
    {"user": "alice", "score": 7},
    {"user": "bob",   "score": 9},
]

# Сортируем по ключу
data.sort(key=itemgetter("user"))

# Группируем и считаем средний балл
for user, items in groupby(data, key=itemgetter("user")):
    scores = [i["score"] for i in items]
    print(user, "avg score:", sum(scores) / len(scores))

#Python #itertools #groupby #lifehack

Тот, кто знает, чего хотят на собеседовании, всегда выигрывает у того, кто просто пришел отвечать на вопросы. Разница между ними в том, что первый видит процесс целиком: он понимает, зачем нужен каждый этап, чего ждет интервьюер, и как в нужный момент показать сильные стороны. А второй просто надеется, что его ответы «понравятся». И, к сожалению, чаще всего это не срабатывает. 21 августа в 18:00 (МСК) karpovꓸcourses проведут вебинар совместно с Павлом Бухтиком — экс-руководителем продуктовой аналитики в Яндексе и FindMyKids, экспертом с восьмилетним опытом в профессии, пять из которых на управленческой позиции. Вам покажут, как выглядит воронка собеседований, что происходит на каждом шаге, и как реагировать на задачи так, чтобы интервьюер видел, что перед ним человек, который точно справится с работой. Узнайте четкий план, как действовать на собеседовании: https://clc.to/erid_2W5zFJd2cvC  Это третий вебинар Data-интенсива: от новичка до оффера, который поможет сориентироваться в сфере Data Science и перейти к первым шагам. Реклама. ООО "КАРПОВ КУРСЫ". ИНН 7811764627. erid: 2W5zFJd2cvC