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

+1 440новых вакансий за сутки·54 706вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 748
  • Облачные технологии6 616
  • QA вакансии2 169
  • Android1 320
  • Инженер данных872
  • Продакт-менеджер302

Разработка

  • iOS1 232
  • Backend вакансии1 204
  • AI вакансии543
  • Fullstack вакансии497
  • Frontend вакансии417
  • Mobile вакансии28

По стеку

  • Go5 212
  • Java3 116
  • Kotlin1 090
  • Node.js995
  • Rust845
  • .NET661
  • PHP320
  • C++271
  • C#208

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

  • Kubernetes3 913
  • Linux-инфраструктура2 852
  • DevOps вакансии2 678
  • Terraform / IaC2 167
  • Мониторинг и Observability1 066
  • CI/CD923
  • SRE301
  • Кибербезопасность26

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

  • Аналитик данных533
  • Data Scientist436
  • Бизнес-аналитик400
  • Системный аналитик68

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

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

По регионам

  • Вакансии в США25 784
  • Вакансии в Европе10 258
  • Работа в России3 652
  • Вакансии в Канаде2 266

По формату

  • Удалённые вакансии42 770
  • Релокация в США25 784
  • Гибридная работа5 627
  • Офисная работа4 602

По уровню

  • Senior вакансии22 956
  • Middle вакансии11 692
  • Junior вакансии3 903

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

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

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

В чём разница между clone и dup в Ruby?

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

clone копирует объект вместе с singleton-методами и сохраняет frozen-статус; dup создаёт размороженную копию без singleton-методов. Оба делают shallow copy.

Что общего у clone и dup

Оба метода создают поверхностную (shallow) копию объекта: копируется сам объект, но вложенные объекты (Array, Hash, другие инстансы) не клонируются — они разделяются между оригиналом и копией по ссылке.

a = ['hello', 'world']
b = a.dup
b.push('!')
puts a.inspect   # => ["hello", "world"]   — массив не затронут
b[0].upcase!     # мутируем строку внутри
puts a[0]        # => "HELLO"  — строка общая!

Ключевые различия

1. frozen?

orig = 'immutable'.freeze

cloned = orig.clone
duped  = orig.dup

puts cloned.frozen?   # => true   (clone сохраняет frozen)
puts duped.frozen?    # => false  (dup создаёт размороженную копию)

duped << ' appended'  # OK
cloned << ' appended' # FrozenError

2. Singleton-методы

obj = Object.new
def obj.greet = 'hello'

cloned = obj.clone
duped  = obj.dup

puts cloned.greet   # => "hello"  — singleton-метод скопирован
puts duped.greet    # => NoMethodError  — dup не копирует singleton

3. initialize_copy

Оба вызывают initialize_copy на новом объекте. Переопределив этот метод, можно добавить deep copy для нужных полей:

class Cart
  attr_reader :items

  def initialize
    @items = []
  end

  def initialize_copy(source)
    super
    @items = source.items.map(&:dup)  # deep copy элементов
  end
end

cart1 = Cart.new
cart1.items << 'apple'
cart2 = cart1.dup
cart2.items << 'banana'
puts cart1.items.inspect  # => ["apple"]   — не затронут

Когда что использовать

  • dup — когда нужна изменяемая копия объекта для безопасного изменения. Это более распространённый вариант.
  • clone — когда важно сохранить singleton-методы или frozen-статус. Используется реже; типичный случай — metaprogramming, прототипирование объектов.

Deep copy через Marshal

Для полного глубокого копирования используют Marshal:

deep = Marshal.load(Marshal.dump(original))

Ограничение: не работает с объектами, содержащими IO, Proc, привязки (Binding).

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

  • Shallow copy по умолчанию — мутация вложенных объектов (строк, массивов, хэшей) затрагивает обе копии. Всегда проверяйте, нужна ли deep copy.
  • clone на frozen объектах — клон будет тоже заморожен. Если вы хотите изменяемую копию замороженного объекта — используйте dup.
  • Symbol и Integer — эти объекты не дублируются: :foo.dup возвращает сам символ (Ruby >= 2.4 бросал TypeError, >= 2.7 возвращает тот же символ).
  • initialize_copy не вызывают явно — переопределяйте его, но никогда не вызывайте напрямую; этим занимаются clone/dup.
  • ActiveRecord — у AR-моделей dup создаёт новую несохранённую запись без id; clone копирует id и может привести к конфликтам при сохранении.
  • Concurrent modification — ни clone, ни dup не обеспечивают thread-safe снапшот. Для многопоточного кода используйте Mutex.

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

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

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

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

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

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

Источники

  • https://docs.ruby-lang.org/en/master/Object.html
  • https://docs.ruby-lang.org/en/master/
←Предыдущий вопросЧто такое `attr_accessor`, `attr_reader` и `attr_writer` в Ruby?Следующий вопрос→Что такое модули `Comparable` и `Enumerable` и как их использовать?

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

RubyBackend-Engineeringruby-ecosystem

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

Ruby вакансии
  • Senior Software Engineer (P4 DAM)
  • Cloud Engineer
  • DevOps Engineer - Recommendation Department, AI & Data Division (AIDD)
  • Security Detection & Automation Engineer - Product Security Section, Cyber Security Defense Department (CSDD)
  • Sales Engineer

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

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