Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+694новые вакансии за сутки·52 494вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 662
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 244
  • Облачные технологии4 749
  • QA вакансии1 736
  • Android1 148
  • Инженер данных800
  • Продакт-менеджер321

Разработка

  • iOS1 092
  • Backend вакансии1 046
  • Fullstack вакансии453
  • AI вакансии391
  • Frontend вакансии376
  • Mobile вакансии27

По стеку

  • Go3 590
  • Java2 153
  • Kotlin942
  • Node.js767
  • Rust544
  • .NET496
  • PHP267
  • C++220
  • C#198

DevOps и инфраструктура

  • Kubernetes2 686
  • Linux-инфраструктура2 117
  • DevOps вакансии1 960
  • Terraform / IaC1 615
  • CI/CD871
  • Мониторинг и Observability742
  • SRE228
  • Кибербезопасность47

Аналитика и данные

  • Аналитик данных495
  • Data Scientist449
  • Бизнес-аналитик351
  • Системный аналитик54

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 835
  • Вакансии в Европе9 341
  • Работа в России3 283
  • Вакансии в Канаде2 140

По формату

  • Удалённые вакансии41 311
  • Релокация в США23 835
  • Гибридная работа4 058
  • Офисная работа2 949

По уровню

  • Senior вакансии20 396
  • Middle вакансии11 620
  • Junior вакансии3 665

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Wise139 вакансий
  • Grab134 вакансии
  • Infobip28 вакансий
  • Adyen23 вакансии
  • Darktrace17 вакансий
  • Spotify15 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PythonВсе вопросы
PythonMiddleАлгоритмы

Как работает dict внутри? Почему доступ по ключу обычно O(1)?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

dict — open-addressing hash table. Хранит pairs (hash, key, value) в массиве entries + sparse indices (с CPython 3.6 — compact dict). Поиск: hash(key) → slot → probe при коллизии → сравнение по __eq__. Средняя сложность O(1), worst O(n) при плохом hash.

Пример

import sys


# Размер таблицы: для пустого dict ~64 байта, после добавления заметно растёт
d = {}
print(sys.getsizeof(d))         # ~64
for i in range(10):
    d[i] = i
print(sys.getsizeof(d))         # ~360


# Иллюстрация коллизий: одинаковый hash, но разные объекты
class Key:
    def __init__(self, value: int):
        self.value = value

    def __hash__(self) -> int:
        return 42  # все ключи в один bucket — open addressing справится, но медленно

    def __eq__(self, other) -> bool:
        return isinstance(other, Key) and self.value == other.value


data = {Key(i): i for i in range(5)}
print(data[Key(3)])  # 3 — но lookup делает много probe шагов

# Hash randomization для строк
# echo $PYTHONHASHSEED  # 0 = выключить, random = включить

Структура CPython dict

С Python 3.6 dict в CPython использует compact представление (PEP 468 + Raymond Hettinger):

  • Плотный массив entries с записями (hash, key, value) в порядке вставки.
  • Разреженный массив indices (по сути hash-таблица), который хранит индекс в entries. Размер индекса растёт по мере роста dict: int8 → int16 → int32 → int64.
  • Таблица заполняется максимум на 2/3, иначе grow (×4 для малых dict, ×2 для больших).

Алгоритм lookup

  1. Вычислить h = hash(key).
  2. Взять slot h & (n - 1) в indices (n — размер, степень двойки).
  3. Если слот пуст — KeyError.
  4. Иначе достать индекс, в entries сравнить сначала hash, потом key is candidate or key == candidate (быстрая identity-проверка, потом дорогая __eq__).
  5. При коллизии — open addressing с probing: perturb = h; i = (5 * i + 1 + perturb) & mask; perturb >>= 5. Это даёт хорошее распределение и использует старшие биты hash.

Почему O(1) в среднем

  • Hash распределяет ключи равномерно по таблице → ожидаемое число коллизий низкое.
  • Load factor < 2/3 удерживает среднюю длину пробы маленькой.
  • Сравнение по identity (is) до __eq__ делает hit практически бесплатным для тех же объектов.

Worst case O(n) достижим, если злоумышленник подсунет ключи с одинаковым hash (hash flooding). Поэтому в CPython hash строк/байт randomized через PYTHONHASHSEED.

Контракт hashable

  • Реализуй и __hash__, и __eq__ вместе.
  • Если a == b, то hash(a) == hash(b). Иначе lookup не найдёт нужный ключ.
  • Hash должен быть стабильным в течение жизни объекта — не зависеть от mutable полей.

Подводные камни

  • Использовать mutable объект как ключ и менять hash-влияющие поля — ключ потеряется в таблице.
  • Реализовать __eq__ без __hash__ — Python автоматически выставит __hash__ = None, объект станет unhashable.
  • Hash, который всегда возвращает константу — все ключи в один bucket, lookup деградирует до O(n).
  • Сериализовать dict в JSON и полагаться на порядок ключей при сравнении ответов — порядок есть, но равенство dict-ов от порядка не зависит.
  • Считать, что resize «дорогой» — он амортизированно O(1) на вставку.

Частые вопросы на собеседовании

  • Что такое truthy и falsy значения в Python?
  • Когда использовать threading?
  • Что такое type hints и зачем они нужны?
  • Как работает yield?

Типичные ошибки

  • Говорить, что dict ищет ключ перебором всех элементов.
  • Не объяснять роль hash и eq.
  • Игнорировать коллизии.

Что проверяет интервьюер

  • Описывает hash-таблицу без лишней реализации CPython.
  • Понимает средний и худший случай.
  • Связывает dict с hashable.

Как вы знаете этот вопрос?

Проверить себя по теме Python →

Источники

  • https://docs.python.org/3/library/stdtypes.html
  • https://docs.python.org/3/reference/datamodel.html

Связанные темы

PythonAlgorithmsdata-structures

Вакансии с этим навыком

Python вакансии
  • Windows Server Senior Engineer - Cloud Platform Enablement Department (CPED)
  • Linux Server Senior Engineer - Cloud Platform Enablement Department (CPED)
  • Senior Software Engineer, Advertisement Optimization Group - Merchandising and Advertisement Department (MAD)
  • SAP BTP Architect/Engineer - Corporate IT Service Department (CITSD)
  • AI Architect - AI Management & Governance Section, Global IT Strategy Office