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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python7 042
  • Облачные технологии5 085
  • QA вакансии1 814
  • Android1 199
  • Инженер данных831
  • Продакт-менеджер339

Разработка

  • iOS1 135
  • Backend вакансии1 131
  • Fullstack вакансии475
  • AI вакансии458
  • Frontend вакансии404
  • Mobile вакансии27

По стеку

  • Go4 093
  • Java2 435
  • Kotlin990
  • Node.js827
  • Rust665
  • .NET525
  • PHP282
  • C++223
  • C#199

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

  • Kubernetes2 931
  • Linux-инфраструктура2 312
  • DevOps вакансии2 110
  • Terraform / IaC1 714
  • CI/CD872
  • Мониторинг и Observability825
  • SRE253
  • Кибербезопасность50

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

  • Аналитик данных497
  • Data Scientist463
  • Бизнес-аналитик374
  • Системный аналитик54

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

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

По регионам

  • Вакансии в США25 531
  • Вакансии в Европе9 792
  • Работа в России3 193
  • Вакансии в Канаде2 236

По формату

  • Удалённые вакансии43 578
  • Релокация в США25 531
  • Гибридная работа4 289
  • Офисная работа3 340

По уровню

  • Senior вакансии21 650
  • Middle вакансии12 211
  • Junior вакансии3 886

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

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise125 вакансий
  • Celonis28 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen17 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

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

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

Что такое raw pointers в Rust и когда их следует использовать?

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

Raw pointers (*const T / *mut T) — указатели без гарантий borrow checker; разыменование требует unsafe. Используются в FFI, ручном управлении памятью и нестандартных структурах данных.

Пример: FFI и ручное управление памятью

use std::alloc::{alloc, dealloc, Layout};
use std::ptr;

fn main() {
    let layout = Layout::new::<u64>();

    unsafe {
        // Выделяем память вручную
        let raw: *mut u64 = alloc(layout) as *mut u64;
        if raw.is_null() {
            panic!("allocation failed");
        }

        // Записываем значение через raw pointer
        ptr::write(raw, 42u64);

        // Читаем значение
        let value = ptr::read(raw);
        println!("value = {}", value); // value = 42

        // Освобождаем вручную
        dealloc(raw as *mut u8, layout);
    }
}

Raw pointers в Rust

Raw pointers — это указатели *const T и *mut T, которые существуют вне системы владения и заимствования Rust. Компилятор не гарантирует их корректность: они могут быть нулевыми, висячими или указывать на освобождённую память. Разыменование raw pointer разрешено только внутри блока unsafe.

Отличия от ссылок

  • Не подчиняются правилу одного изменяемого или нескольких неизменяемых заимствований.
  • Не имеют времени жизни (lifetime), поэтому borrow checker их не отслеживает.
  • Могут быть нулевыми — std::ptr::null() и std::ptr::null_mut().
  • Разыменование через *ptr требует блока unsafe.
  • Арифметика указателей (ptr.add(n), ptr.offset(n)) разрешена только в unsafe.

Когда применяются

  • FFI: взаимодействие с C-библиотеками через extern "C".
  • Реализация нестандартных структур данных (связные списки, арены, интрузивные структуры).
  • Оптимизации, где гарантия корректности обеспечивается вручную.
  • Работа с std::mem::MaybeUninit для неинициализированной памяти.

Пример: взаимодействие с C через FFI

extern "C" {
    fn strlen(s: *const u8) -> usize;
}

fn main() {
    let s = b"hello\0";
    let len = unsafe { strlen(s.as_ptr()) };
    println!("len = {}", len); // len = 5
}

Создание raw pointer из ссылки

fn main() {
    let mut x = 10i32;
    let r: *mut i32 = &mut x as *mut i32;

    unsafe {
        *r += 5;
    }
    println!("{}", x); // 15
}

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

  • Use-after-free: raw pointer не отслеживает время жизни объекта, поэтому легко получить висячий указатель после освобождения памяти.
  • Нулевой указатель: разыменование std::ptr::null() вызывает неопределённое поведение (UB). Всегда проверяйте ptr.is_null().
  • Неверное выравнивание: ptr::read/ptr::write требуют правильного выравнивания. Для невыровненного доступа используйте ptr::read_unaligned.
  • Двойное освобождение: если несколько raw pointer указывают на одну область, освобождение через dealloc дважды — UB.
  • Гонки данных: *mut T не Send/Sync по умолчанию, но можно обойти это вручную, что открывает гонки данных.
  • Арифметика за пределами аллокации: ptr.add(n) за границами выделенного блока — UB, даже если не разыменовывается.
  • Замена Box::into_raw без Box::from_raw: если вызвать Box::into_raw и не вернуть владение через Box::from_raw, будет утечка памяти.

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

  • Для каких задач Rust является сильным выбором, а где лучше честно выбрать другой язык?
  • Какие production-риски чаще всего возникают в проектах на Rust: производительность, зависимости, конкурентность, деплой или observability?
  • Как сравнить Rust с ближайшими альтернативами по производительности, поддерживаемости, найму и экосистеме?
  • Какие особенности runtime, type system или memory model Rust реально влияют на архитектуру приложения?

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

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

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

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

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

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

Источники

  • https://doc.rust-lang.org/book/
  • https://doc.rust-lang.org/cargo/reference/
←Предыдущий вопросЧто такое zero-cost abstraction в Rust и как это проявляется на практике?Следующий вопрос→Что такое макросы Rust? В чём разница между `macro_rules!` и процедурными макросами?

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

Rustrisk-analysisrust-productiontechnical-depth

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

Rust вакансии
  • Senior Software Engineer (Python)
  • Specialist Software Engineer
  • Software Engineer in Test
  • Software Engineer (Backend - Typescript Focused)
  • Lead Backend Developer