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

+1 098новых вакансий за сутки·92 474вакансии открыты сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 175
  • Облачные технологии14 160
  • QA вакансии3 451
  • Backend вакансии2 059
  • Инженер данных1 800
  • Продакт-менеджер1 247

Разработка

  • Android1 854
  • iOS1 694
  • Fullstack вакансии983
  • AI вакансии945
  • Frontend вакансии737
  • Mobile вакансии43

По стеку

  • Go8 754
  • Java6 595
  • Node.js2 038
  • .NET1 738
  • Kotlin1 617
  • Rust1 473
  • C#718
  • PHP692
  • C++582

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

  • Kubernetes7 778
  • DevOps вакансии6 088
  • Linux-инфраструктура5 502
  • Terraform / IaC4 276
  • CI/CD3 275
  • Мониторинг и Observability1 793
  • SRE563
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик921
  • Аналитик данных860
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США42 682
  • Вакансии в Европе23 611
  • Вакансии в Канаде4 365
  • Работа в России3 838

По формату

  • Удалённые вакансии72 518
  • Релокация в США42 681
  • Гибридная работа12 458
  • Офисная работа7 066

По уровню

  • Senior вакансии42 247
  • Middle вакансии20 971
  • Junior вакансии6 706

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

Все компании
  • Rakuten189 вакансий
  • Wise189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

В чём разница между map, collect, select, reject, find и each?

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

each итерирует для побочных эффектов. map возвращает новый массив трансформированных значений. select/reject фильтруют. find возвращает первый подходящий элемент или nil.

each — побочные эффекты

users = [{ name: 'Alice', role: 'admin' }, { name: 'Bob', role: 'user' }]

users.each do |u|
  puts "Processing #{u[:name]}"
  AuditLog.record(u)   # побочный эффект
end
# => возвращает исходный массив users

each возвращает исходную коллекцию. Используйте его только ради побочных эффектов (запись в БД, логирование, отправка события).

Обзор методов

Все перечисленные методы — часть модуля Enumerable (кроме each, который определяется в самой коллекции). Ключевое правило: выбирайте метод по намерению, а не только по результату.

map / collect — трансформация

names = users.map { |u| u[:name] }
# => ["Alice", "Bob"]

ids = users.map.with_index(1) { |u, i| "#{i}. #{u[:name]}" }
# => ["1. Alice", "2. Bob"]

map и collect — псевдонимы. Всегда создают новый массив той же длины. Если нужно изменить исходный — map!.

select / filter — фильтрация

admins = users.select { |u| u[:role] == 'admin' }
# => [{ name: 'Alice', role: 'admin' }]

# Эквивалент:
admins = users.filter { |u| u[:role] == 'admin' }  # Ruby 2.6+

Возвращает новый массив элементов, для которых block вернул truthy-значение. select! изменяет исходный массив.

reject — обратный select

non_admins = users.reject { |u| u[:role] == 'admin' }
# => [{ name: 'Bob', role: 'user' }]

find / detect — первый подходящий элемент

first_admin = users.find { |u| u[:role] == 'admin' }
# => { name: 'Alice', role: 'admin' }

missing = users.find { |u| u[:role] == 'superadmin' }
# => nil

# С default-значением через Proc:
missing = users.find(-> { { name: 'Unknown' } }) { |u| u[:role] == 'superadmin' }
# => { name: 'Unknown' }

find и detect — псевдонимы. Останавливаются при первом совпадении. Возвращают элемент или nil.

Сравнительная таблица

  • each → исходная коллекция, используйте для I/O и побочных эффектов.
  • map → новый массив той же длины, для трансформации каждого элемента.
  • select → подмножество, для фильтрации по условию (truthy).
  • reject → подмножество, для фильтрации по условию (falsy).
  • find → один элемент или nil, для поиска первого совпадения.

Производительность и lazy

# Без lazy — обработает всё:
(1..Float::INFINITY).select { |n| n.odd? }.first(5)  # зависнет!

# С lazy — остановится вовремя:
(1..Float::INFINITY).lazy.select { |n| n.odd? }.first(5)
# => [1, 3, 5, 7, 9]

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

  • each вместо map — если внутри each вы собираете массив через <<, замените на map. Код чище, Ruby оптимизирует аллокацию.
  • map.flatten(1) vs flat_map — flat_map эффективнее и читаемее, когда block возвращает массив.
  • select + first vs find — array.select { }.first проходит весь массив, find останавливается. Для больших коллекций разница существенная.
  • Мутация внутри each — изменение коллекции во время итерации each — undefined behavior. Используйте select! / reject! или соберите изменения отдельно.
  • collect — устаревшее имя — collect — алиас map из Smalltalk-наследия. В современном Ruby-коде пишите map.
  • find возвращает nil, не [] — не путайте с select: find возвращает один объект или nil, select — всегда массив.
  • Лямбда как default у find — аргумент-callable (не значение) вызывается если ничего не найдено: find(lambda { default }).

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

  • Сводить enumerable iteration methods к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: объектная динамическая модель Ruby, где почти всё является объектом, а методы ищутся через ancestor chain.
  • Не отделять validation, authorization, transaction boundary и business logic.
  • Менять похожие API местами без учёта семантики ошибок и ownership.

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

  • Объясняет enumerable iteration methods через конкретную точку lifecycle в Ruby.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.

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

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

Источники

  • https://docs.ruby-lang.org/en/master/Enumerable.html
  • https://docs.ruby-lang.org/en/master/
←Предыдущий вопросЧто такое duck typing в Ruby и как это влияет на проектирование API?

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

RubyBackend-Engineeringruby-ecosystem

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

Ruby вакансии
  • AI DevOps Engineer
  • Senior Forward Deployed Engineer
  • Sr Software Engineer - Remote
  • Intermediate Backend Engineer , Security Factory
  • Security Engineer, Privy

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

  • В чём разница между symbols и strings в Ruby и когда использовать каждый?
  • В чём разница между nil, false и другими ложными значениями (falsy values) в Ruby?
  • В чём разница между proc и lambda с точки зрения поведения return и арности (arity)?
  • Что такое модули Ruby и чем они отличаются от классов?