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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 129
  • Облачные технологии14 088
  • QA вакансии3 457
  • Backend вакансии2 115
  • Инженер данных1 805
  • Продакт-менеджер1 262

Разработка

  • Android1 865
  • iOS1 698
  • Fullstack вакансии989
  • AI вакансии949
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 660
  • Java6 550
  • Node.js2 020
  • .NET1 722
  • Kotlin1 619
  • Rust1 455
  • C#711
  • PHP683
  • C++572

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

  • Kubernetes7 769
  • DevOps вакансии6 056
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 250
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик927
  • Аналитик данных854
  • Системный аналитик153

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

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

По регионам

  • Вакансии в США44 281
  • Вакансии в Европе23 875
  • Вакансии в Канаде4 475
  • Работа в России3 922

По формату

  • Удалённые вакансии75 035
  • Релокация в США44 281
  • Гибридная работа12 401
  • Офисная работа7 079

По уровню

  • Senior вакансии42 679
  • Middle вакансии20 894
  • Junior вакансии6 722

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

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

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

require ищет файл по $LOAD_PATH и загружает его один раз по абсолютному имени. require_relative ищет относительно текущего файла и не зависит от $LOAD_PATH.

require

require 'name' ищет файл name.rb (или нативное расширение name.so/name.bundle) в директориях массива $LOAD_PATH. Ruby обходит их слева направо и загружает первый найденный файл. Загруженные пути записываются в $LOADED_FEATURES — повторный require того же пути возвращает false и не выполняет файл снова.

$LOAD_PATH.unshift('./lib')
require 'my_gem'   # ищет lib/my_gem.rb

require_relative

require_relative 'path' строит абсолютный путь относительно файла, содержащего вызов (__FILE__). $LOAD_PATH при этом не используется. Это удобно для внутренних зависимостей внутри проекта.

# lib/app/models/user.rb
require_relative 'address'       # lib/app/models/address.rb
require_relative '../services/auth'  # lib/app/services/auth.rb

Ключевые отличия

  • Поиск: require — через $LOAD_PATH; require_relative — относительно __FILE__.
  • Переносимость: require_relative всегда найдёт файл независимо от того, откуда запущен скрипт; require может не найти, если директория не добавлена в $LOAD_PATH.
  • Гемы: публичный API гема пишет require 'gemname'; внутренние файлы используют require_relative.
  • eval / irb: require_relative в eval/irb бросает LoadError, потому что __FILE__ там равно (eval) — нет файловой базы.

Пример структуры гема

# lib/mylib.rb  — точка входа (публичный require 'mylib')
require_relative 'mylib/version'
require_relative 'mylib/client'
require_relative 'mylib/errors'

module Mylib
  # ...
end

autoload как альтернатива

Ruby также предоставляет autoload :ClassName, 'path' — файл загружается лениво при первом обращении к константе. Удобно для ускорения старта, но создаёт потенциальные проблемы с потокобезопасностью в Ruby < 2.0.

module Mylib
  autoload :Client,  'mylib/client'
  autoload :VERSION, 'mylib/version'
end

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

  • Если запустить скрипт через ruby script.rb из другой директории, require './lib/foo' сломается, а require_relative 'lib/foo' — нет.
  • $LOADED_FEATURES хранит абсолютные пути, поэтому один и тот же файл можно загрузить дважды, если require и require_relative разрешились в разные пути (например, через симлинк).
  • Порядок в $LOAD_PATH важен: Bundler prepend'ит пути гемов в начало, что может перекрыть системные версии.
  • В Ruby 1.9 . (текущая директория) была убрана из $LOAD_PATH по соображениям безопасности — require './foo' больше не работает без явного добавления.
  • Циклические зависимости через require/require_relative не вызывают ошибку, но константы могут оказаться nil в момент первой загрузки.
  • require_relative нельзя использовать в -e однострочниках командной строки.

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

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

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

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

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

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

Источники

  • https://docs.ruby-lang.org/en/master/Kernel.html
  • https://docs.ruby-lang.org/en/master/
←Предыдущий вопросЧто такое Ractors в Ruby 3 и как они улучшают параллелизм?Следующий вопрос→В чём различия между Ruby 2.x и Ruby 3.x (pattern matching, rightward assignment, Ractors)?

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

RubyBackend-Engineeringruby-ecosystem

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

Ruby вакансии
  • Engineering Manager, Developer Infrastructure
  • Senior Engineering Manager, Co-Intelligent Coaching
  • Intermediate Fullstack Engineer, Subscription Lifecycle
  • Full-Stack Software Engineer, Communication Tools
  • Intermediate Backend Engineer, Authorization

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

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