Новое: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 053
  • Linux-инфраструктура5 493
  • Terraform / IaC4 266
  • CI/CD3 242
  • Мониторинг и Observability1 788
  • SRE567
  • Кибербезопасность453

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

  • Data Scientist1 142
  • Бизнес-аналитик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 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме 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