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

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

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

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

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

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

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

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

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

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

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

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

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

Разработка

  • Android1 855
  • iOS1 695
  • Fullstack вакансии995
  • AI вакансии952
  • Frontend вакансии751
  • 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

По регионам

  • Вакансии в США44 164
  • Вакансии в Европе24 016
  • Вакансии в Канаде4 533
  • Работа в России3 837

По формату

  • Удалённые вакансии75 134
  • Релокация в США44 163
  • Гибридная работа12 456
  • Офисная работа7 066

По уровню

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

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

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

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

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

Что такое Scaffold и какие стандартные компоненты он предоставляет?

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

Scaffold — Material 3 layout-компонент, предоставляющий слоты для TopAppBar, BottomBar, FAB и SnackbarHost. Он вычисляет innerPadding с учётом всех компонентов и системных вставок — его обязательно применять к контенту.

Сигнатура

@Composable
fun Scaffold(
    modifier: Modifier = Modifier,
    topBar: @Composable () -> Unit = {},
    bottomBar: @Composable () -> Unit = {},
    snackbarHost: @Composable () -> Unit = {},
    floatingActionButton: @Composable () -> Unit = {},
    floatingActionButtonPosition: FabPosition = FabPosition.End,
    containerColor: Color = MaterialTheme.colorScheme.background,
    contentColor: Color = contentColorFor(containerColor),
    contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,
    content: @Composable (PaddingValues) -> Unit
)

Scaffold в Jetpack Compose

Scaffold — это layout-компонент Material Design 3, который предоставляет стандартную структуру экрана: TopAppBar, BottomBar, FAB, Snackbar и основной контент. Он управляет отступами (padding), чтобы контент не перекрывался системными элементами и компонентами Material.

Полный пример

@Composable
fun HomeScreen(
    navController: NavController,
    viewModel: HomeViewModel = viewModel()
) {
    val snackbarHostState = remember { SnackbarHostState() }
    val scope = rememberCoroutineScope()

    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text("Главная") },
                navigationIcon = {
                    IconButton(onClick = { navController.navigateUp() }) {
                        Icon(Icons.Default.ArrowBack, contentDescription = "Назад")
                    }
                },
                actions = {
                    IconButton(onClick = { /* поиск */ }) {
                        Icon(Icons.Default.Search, contentDescription = "Поиск")
                    }
                }
            )
        },
        bottomBar = {
            NavigationBar {
                NavigationBarItem(
                    icon = { Icon(Icons.Default.Home, contentDescription = null) },
                    label = { Text("Главная") },
                    selected = true,
                    onClick = {}
                )
                NavigationBarItem(
                    icon = { Icon(Icons.Default.Person, contentDescription = null) },
                    label = { Text("Профиль") },
                    selected = false,
                    onClick = { navController.navigate("profile") }
                )
            }
        },
        floatingActionButton = {
            FloatingActionButton(onClick = {
                scope.launch {
                    snackbarHostState.showSnackbar("Новый элемент добавлен")
                }
            }) {
                Icon(Icons.Default.Add, contentDescription = "Добавить")
            }
        },
        snackbarHost = { SnackbarHost(snackbarHostState) }
    ) { innerPadding ->               // innerPadding — обязательно применять!
        LazyColumn(
            modifier = Modifier.padding(innerPadding)  // критично
        ) {
            items(20) { index ->
                Text("Элемент $index", Modifier.padding(16.dp))
            }
        }
    }
}

Стандартные компоненты Scaffold

  • TopAppBar / MediumTopAppBar / LargeTopAppBar — верхняя панель с заголовком, навигацией и действиями
  • BottomAppBar / NavigationBar — нижняя навигация
  • FloatingActionButton / ExtendedFloatingActionButton — плавающая кнопка действия
  • SnackbarHost — область для отображения уведомлений
  • Drawer (DrawerLayout) — боковое меню, передаётся отдельно через ModalNavigationDrawer

PaddingValues и WindowInsets

Лямбда content получает PaddingValues, содержащий отступы от TopBar, BottomBar и системных вставок (status bar, navigation bar). Это значение обязательно применять к корневому контенту через Modifier.padding(innerPadding).

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

  • Игнорирование innerPadding — контент уходит под TopAppBar или BottomBar, особенно на устройствах с жестовой навигацией.
  • Применение innerPadding дважды (к Scaffold и к дочернему элементу) — двойные отступы.
  • Вложенные Scaffold — правила padding-а конфликтуют, системные вставки считаются дважды.
  • Использование устаревшего Scaffold из Material 2 вместе с компонентами Material 3 — несовместимые темы и цвета.
  • Создание SnackbarHostState внутри snackbarHost-лямбды без remember — новый state при каждой рекомпозиции, снэкбары теряются.
  • FAB перекрывает последний элемент LazyColumn — добавляйте нижний отступ, равный высоте FAB, либо используйте innerPadding.
  • Установка contentWindowInsets = WindowInsets(0) без понимания последствий — контент уходит под системные бары.

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

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

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

  • Объяснять «Scaffold» только как синтаксис и не описывать поведение runtime/compiler.
  • Игнорировать важный риск: Игнорирование padding от Scaffold часто дает обрезанный список или FAB поверх поля ввода.
  • Давать пример без edge case: отмены, null, recomposition, platform boundary или ошибки.

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

  • Формулирует суть темы «Scaffold» своими словами и связывает ее с кодом.
  • Называет механизм: Контент должен учитывать innerPadding, иначе UI перекрывается системными или scaffold elements.
  • Видит production-последствие: Игнорирование padding от Scaffold часто дает обрезанный список или FAB поверх поля ввода.

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

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

Источники

  • https://developer.android.com/develop/ui/compose/components/scaffold
←Предыдущий вопросРасскажите о случае, когда вы решали проблему с Jetpack Compose: lifecycle, performance, testing, release или platform integration.Следующий вопрос→Что такое side-effect APIs: `LaunchedEffect`, `DisposableEffect`, `SideEffect`, `snapshotFlow`?

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

Jetpack Composescaffold-reasoningui-state