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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

В чём разница между stateful и stateless composable?

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

Stateful composable хранит состояние внутри через remember, stateless — получает данные параметрами и сообщает об изменениях через лямбды. Рекомендуемый паттерн: stateless-компонент + stateful-обёртка, состояние хранится во ViewModel.

Stateful Composable

Хранит состояние внутри себя с помощью remember или rememberSaveable. Удобен для изолированных UI-компонентов, у которых состояние не нужно снаружи.

@Composable
fun ExpandableCard(title: String, body: String) {
    var expanded by remember { mutableStateOf(false) }  // состояние внутри

    Card {
        Column {
            Row(
                modifier = Modifier
                    .clickable { expanded = !expanded }
                    .padding(16.dp)
            ) {
                Text(title, Modifier.weight(1f))
                Icon(
                    if (expanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore,
                    contentDescription = null
                )
            }
            if (expanded) {
                Text(body, Modifier.padding(16.dp))
            }
        }
    }
}

Плюс: просто использовать. Минус: состояние закрыто — нельзя управлять снаружи, сложно тестировать.

Stateful и Stateless Composable

Разделение на stateful и stateless — ключевой архитектурный паттерн в Compose, называемый state hoisting (подъём состояния).

Stateless Composable

Не содержит собственного состояния. Принимает данные через параметры и сообщает об изменениях через лямбды. Полностью предсказуем и тестируем.

@Composable
fun ExpandableCard(
    title: String,
    body: String,
    expanded: Boolean,           // состояние снаружи
    onExpandToggle: () -> Unit   // событие наружу
) {
    Card {
        Column {
            Row(
                modifier = Modifier
                    .clickable { onExpandToggle() }
                    .padding(16.dp)
            ) {
                Text(title, Modifier.weight(1f))
                Icon(
                    if (expanded) Icons.Default.ExpandLess else Icons.Default.ExpandMore,
                    contentDescription = null
                )
            }
            if (expanded) {
                Text(body, Modifier.padding(16.dp))
            }
        }
    }
}

Паттерн: stateful обёртка над stateless

Типичное решение — пара функций: stateless-компонент для переиспользования и testability, и stateful-обёртка для удобства.

// Stateless — используется в сложных сценариях и тестах
@Composable
fun EmailField(
    value: String,
    onValueChange: (String) -> Unit,
    isError: Boolean = false
) {
    OutlinedTextField(
        value = value,
        onValueChange = onValueChange,
        label = { Text("Email") },
        isError = isError
    )
}

// Stateful — для быстрого использования
@Composable
fun EmailFieldStateful() {
    var email by remember { mutableStateOf("") }
    EmailField(
        value = email,
        onValueChange = { email = it }
    )
}

State hoisting в ViewModel

В реальных экранах состояние поднимается в ViewModel:

class LoginViewModel : ViewModel() {
    var email by mutableStateOf("")
        private set

    fun onEmailChange(value: String) { email = value }
}

@Composable
fun LoginScreen(vm: LoginViewModel = viewModel()) {
    EmailField(
        value = vm.email,
        onValueChange = vm::onEmailChange
    )
}

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

  • Слишком раннее поднятие состояния — состояние в ViewModel, которое нужно только локально (например, флаг «dropdown open»), загромождает ViewModel.
  • Слишком позднее поднятие — два независимых composable не могут синхронизироваться, потому что состояние у каждого своё.
  • Передача изменяемого объекта вниз вместо лямбды — нарушает принцип однонаправленного потока данных (UDF).
  • Stateful composable трудно тестировать юнит-тестами — не видно состояния снаружи.
  • Смешение бизнес-логики и UI-состояния в одном composable — переполненный компонент, сложный для поддержки.
  • Поднятие состояния слишком высоко («god state» в корневом composable) — все дочерние функции рекомпонируются при любом изменении.

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

  • Что такое State в Jetpack Compose и как работает state hoisting?
  • Что такое recomposition и что её вызывает в Jetpack Compose?
  • В чём разница между remember и rememberSaveable?
  • Каковы лучшие практики производительности в Jetpack Compose (стабильность, пропускаемость)?

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

  • Объяснять «stateful и stateless composable» только как синтаксис и не описывать поведение runtime/compiler.
  • Игнорировать важный риск: Stateful компоненты сложнее переиспользовать, если состояние нужно синхронизировать с ViewModel или navigation.
  • Давать пример без edge case: отмены, null, recomposition, platform boundary или ошибки.

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

  • Формулирует суть темы «stateful и stateless composable» своими словами и связывает ее с кодом.
  • Называет механизм: Обычно публичный API строят stateless, а удобную stateful-обертку добавляют рядом для простых случаев.
  • Видит production-последствие: Stateful компоненты сложнее переиспользовать, если состояние нужно синхронизировать с ViewModel или navigation.

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

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

Источники

  • https://developer.android.com/develop/ui/compose/state
←Предыдущий вопросКак Jetpack Compose интегрируется с компонентом архитектуры ViewModel?Следующий вопрос→Что такое `rememberCoroutineScope` и как он используется?

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

Jetpack Composestateful-stateless-reasoningui-state