Python вопросы с собеседований
25.5K subscribers
563 photos
30 videos
17 files
445 links
Вопросы с собеседований по Python

@workakkk - админ

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

@pro_python_code - Python

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

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

РКН: clck.ru/3FmrFd
Download Telegram
🖥 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() аккуратно захватывает все «совместные» вторые места.
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥5👍4
💼 Как подготовиться к любому собеседованию: гайд от нового сотрудника 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. Принятие решения
Выбирайте место, где вам будет комфортно работать каждый день.

📌 Главное: интервью — это навык, который можно натренировать. Подготовка + уверенность = высокий шанс успеха.

📌 Полный текст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95👎3🔥3
Media is too big
VIEW IN TELEGRAM
🔥 Самые сложные вопросы для интервью в 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: конфликт, лидерство, фейл, влияние на метрики.

Удачи на интервью!

👉 Полное видео
Please open Telegram to view this post
VIEW IN TELEGRAM
9🔥5👍3
🐍 Python + Ruff: сложность кода под контролем

На скрине — функция validate_product, которая проходит несколько вложенных проверок.
Линтер Ruff с правилом C901 (McCabe Complexity) сигнализирует: сложность функции = 7, что выше лимита 5.

📏 McCabe Complexity измеряет количество ветвлений и условий в функции. Чем выше показатель, тем сложнее код для понимания и поддержки.

⚠️ Почему это важно:
• Снижение читаемости
• Рост вероятности багов
• Трудности при тестировании

💡 Решение:
1. Разбить функцию на несколько маленьких с понятными именами
2. Использовать ранние выходы (`return`) вместо вложенных if
3. Упрощать логику с помощью вспомогательных функций или структур данных

#Python #Ruff #CleanCode #Refactoring #McCabeComplexity
4👍3🔥1
🍭 Задача на 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
8👍5🔥3
👨‍🔧 CoreNN — база данных для работы с векторами и эмбеддингами в масштабе миллиардов, с сублинейным временем отклика на обычных серверах.

📌 Пример: поиск по 1 млрд эмбеддингов комментариев Reddit из индекса 4,8 ТБ на диске занимает всего 15 мс.

🔧 Ключевые особенности:
- Работает на дешёвых SSD/flash-накопителях, а не в дорогой DRAM → в 40–100 раз дешевле.
- Масштабирование: от 1 до 1 млрд векторов в одном индексе.
- Upsert и delete оптимизируют локальный граф, освобождают место и сохраняют скорость — без полной перестройки.
- Поддерживает параллельные запросы и обновления без блокировок.

🔗 https://github.com/wilsonzlin/CoreNN
3👍1🤔1
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
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🔥1
🎯 Разбор задания с подвохом (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 замыкания захватывают имена, а не значения.

Привязывай нужное значение в момент создания функции — и подвох исчезнет.
👍9🔥54
🚀 Фишка на 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 = [
"https://www.irs.gov/pub/irs-pdf/f1040.pdf",
"https://www.irs.gov/pub/irs-pdf/f1040a.pdf",
"https://www.irs.gov/pub/irs-pdf/f1040ez.pdf",
"https://www.irs.gov/pub/irs-pdf/f1040es.pdf",
"https://www.irs.gov/pub/irs-pdf/f1040sb.pdf"
]
main(urls)
👍51🔥1🐳1
🚀 PySentry — это сверхбыстрый сканер уязвимостей для Python-проектов, написанный на Rust, который справляется с аудитом зависимостей быстро и надёжно.

Основное:
- Автоматически анализирует файлы зависимостей: uv.lock, poetry.lock, Pipfile.lock, pyproject.toml, Pipfile, requirements.txt и др.
- Сверяет зависимости с базами уязвимостей: PyPA Advisory Database, PyPI JSON API, OSV.dev
- Поддерживает вывод в формате: человекочитаемом, JSON, SARIF или Markdown — отлично подходит для CI/CD и IDE-интеграций (например, GitHub Security)
- Написан на Rust с асинхронной обработкой, многоуровневым кэшированием и оптимизированной резолюцией — очень быстро и эффективно

uvx pysentry-rs /path/to/project

🟢 Github
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥1
Forwarded from Machinelearning
✔️ Alibaba инвестировала $140 млн в ИИ-роботов

Alibaba Group и Alibaba Cloud возглавили консорциум по финансированию шэньчжэньского стартапа X Square Robot (осн. 2023). Участвовали HSG, Meituan и Legend Star.
Это часть стратегии Alibaba — компания планирует вложить $53 млрд в ИИ-инфраструктуру. Цель сделки — новое поколение «умной робототехники», где ИИ отвечает за автономность и принятие решений. Инвестиция также отражает курс Китая на ускоренное развитие сектора ИИ и робототехники.
mktnews.com

✔️ Unitree Robotics готовится к IPO ($7 млрд)

Китайский производитель гуманоидных роботов Unitree планирует выйти на шанхайскую биржу STAR Market в IV квартале. Цель — оценка $7 млрд (почти в 6 раз выше июльского раунда).
Компания — лидер в Китае по производству роботов-гуманоидов, её продукция используется в университетах и на публичных мероприятиях. Unitree уже прибыльна: выручка >1 млрд юаней ($140 млн). За спиной — Alibaba, Tencent и Geely. Успешное IPO станет ключевым индикатором интереса инвесторов к физическим воплощениям ИИ.
reuters.com

✔️ Google снизила цены на Veo 3 и добавила 1080p

Стоимость генерации видео в Veo 3 упала: стандартная версия — с $0.75 до $0.40 за секунду (-47%), Veo 3 Fast — до $0.15 (-62.5%). Теперь поддерживаются вертикальные форматы (9:16) и качество 1080p. Обе модели стабильны и доступны через Gemini API.
Это сигнал к масштабированию и ценовой конкуренции на рынке видео-ИИ. Veo 3 уже применяется в проектах Invisible Studio, Saga, Mosaic для ускорения контент-продакшена.
X.com

✔️ Claude получил доступ к данным смартфона

Anthropic расширила возможности ассистента Claude на мобильных устройствах. При разрешении пользователя ИИ теперь может использовать геолокацию, календарь и другие данные для планирования мероприятий и рекомендаций.
Это шаг к созданию по-настоящему персональных ИИ-агентов, работающих с контекстом пользователя. Такой подход усиливает конкуренцию среди мобильных ассистентов и закрепляет тренд интеграции ИИ в повседневные процессы.
Скачать

✔️ Anthropic поддержала калифорнийский законопроект SB 53

Компания официально выступила в поддержку инициативы сенатора Скотта Винера, регулирующей передовые ИИ-системы. Ключевые положения:
• публикация принципов безопасности и прозрачности
• уведомление о критических инцидентах в течение 15 дней
• защита осведомителей и санкции за нарушения
• порог для регулирования — >10²⁶ FLOPs

Anthropic отмечает, что закон закрепляет уже применяемые практики и создаёт равные условия для конкуренции. Это первый случай открытой поддержки крупной ИИ-лабораторией регуляторных инициатив.
anthropic.com

✔️ Google обновила NotebookLM

- Флэшкарты и квизы: формат «вопрос–ответ» + тесты с настройкой сложности.
-Reports: авто-рекомендации форматов (блог, white paper, стади-гайд и др.), кастомизация промптов.
- ИИ-подкасты: новые режимы — Deep Dive, Brief, Critique, Debate; поддержка всех языков.
Примеры, видео, квиза и карточек прикрепили к посту.
Notebooklm

@ai_machinelearning_big_data

#news #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🐍 Полезные фишки парсинга в Python

1️⃣ Парсинг JSON без лишних усилий

import json

data = '{"name": "Alice", "age": 25}'
parsed = json.loads(data)
print(parsed["name"]) # Alice


2️⃣ HTML/XML-парсинг с BeautifulSoup

from bs4 import BeautifulSoup

html = "<h1>Hello <b>Python</b></h1>"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1.text) # Hello Python


3️⃣ Парсинг аргументов командной строки с argparse

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--name")
args = parser.parse_args()
print(f"Hello, {args.name}")


4️⃣ Быстрый CSV-парсинг

import csv

with open("data.csv") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["username"], row["score"])


5️⃣ Регулярки для гибкого текста

import re

text = "Email: [email protected]"
match = re.search(r"\w+@\w+\.\w+", text)
print(match.group()) # [email protected]


🔥 Эти трюки помогают парсить JSON, HTML, CSV, аргументы CLI и даже “грязный” текст.
Подойдут как для скриптов, так и для продакшн-кода.

👉 Сохрани, чтобы не забыть!
5🔥2