Новое: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 источников: карьерные страницы компаний и джоб-борды.

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

Какие архитектурные решения UIKit задаёт вокруг UI state, lifecycle, navigation, threading и platform integration?

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

UIKit строится на UIApplication → UIWindow → UIViewController → UIView. State хранится в контроллере или модели, lifecycle управляется OS, navigation через UINavigationController/present, всё UI — на main thread.

UI State: где хранить

UIKit не навязывает паттерн управления состоянием, но задаёт правила: UI-state, нужный только одному экрану, хранится в контроллере или его вью-модели; state, разделяемый между экранами — в сервисном слое или глобальном хранилище (UserDefaults, CoreData, in-memory singleton).

// Локальный state — в контроллере
final class ProfileViewController: UIViewController {
    // Не UIView — это бизнес-объект
    private var user: User? {
        didSet { updateUI() }   // единственная точка обновления UI
    }

    private func updateUI() {
        guard isViewLoaded else { return }  // guard важен при async загрузке
        nameLabel.text = user?.name
        avatarView.configure(with: user?.avatarURL)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        Task { user = try? await userService.fetchProfile() }
    }
}

Базовая иерархия объектов

UIKit строится на чёткой иерархии: UIApplication (singleton) → UIWindowScene → UIWindow → корневой UIViewController → дерево UIView. Понимание этой цепочки отвечает на 80% вопросов о том, «почему что-то не отображается».

Lifecycle: ключевые callback'и

override func viewDidLoad()          // вью создано, bounds ещё не финальны
override func viewWillAppear(_ animated: Bool)  // вью вот-вот появится
override func viewDidLayoutSubviews()            // layout завершён, bounds финальны
override func viewDidAppear(_ animated: Bool)    // вью видно пользователю
override func viewWillDisappear(_ animated: Bool)// момент отмены операций
override func viewDidDisappear(_ animated: Bool) // вью убрано с экрана

Правило: задавайте начальные значения в viewDidLoad; делайте frame-зависимый layout в viewDidLayoutSubviews; отменяйте Timer, NotificationCenter и задачи в viewWillDisappear или deinit.

Navigation: три модели

// 1. Stack navigation
navigationController?.pushViewController(DetailVC(), animated: true)
navigationController?.popViewController(animated: true)

// 2. Modal presentation
let vc = SettingsViewController()
vc.modalPresentationStyle = .pageSheet
present(vc, animated: true)
dismiss(animated: true)

// 3. Tab-based
let tabBar = UITabBarController()
tabBar.viewControllers = [homeNC, searchNC, profileNC]
window?.rootViewController = tabBar

Threading: всё UI — на main thread

// Неправильно — обновление UI с фонового потока
URLSession.shared.dataTask(with: url) { data, _, _ in
    self.label.text = parse(data)   // CRASH или undefined behavior
}.resume()

// Правильно — async/await автоматически возвращает на main actor
final class FeedViewController: UIViewController {
    @MainActor
    private func loadFeed() async {
        do {
            let items = try await feedService.fetch()
            tableView.reloadData()   // всегда на main actor
        } catch {
            showError(error)
        }
    }
}

Platform integration

UIKit интегрируется с платформой через системные callback'и: UIApplicationDelegate для app lifecycle (фон/передний план, push-токены, deep links), UNUserNotificationCenterDelegate для нотификаций, UISceneDelegate для multi-window на iPad. Каждый из них вызывается системой асинхронно — важно не блокировать эти методы синхронной работой.

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

  • Читать view.bounds в viewDidLoad — bounds ещё не финальны до первого layoutSubviews; frame-зависимый код нужно переносить в viewDidLayoutSubviews.
  • Обновлять UI с фонового потока — UIKit не thread-safe; даже «безобидное» label.text = ..." с фонового потока приводит к рандомным крашам.
  • Retain cycle в closures — захват self без [weak self] в animation completion, URLSession callback или Timer удерживает контроллер после pop/dismiss.
  • Не отменять подписки при уходе с экрана — NotificationCenter без removeObserver (до iOS 9 и в некоторых edge cases) или Timer без invalidate приводит к вызовам на мёртвых объектах.
  • Смешивать frame и AutoLayout — constraints переписывают frame на каждом layout pass; нельзя задать frame вручную и ожидать, что он сохранится при AutoLayout.
  • Не понимать разницу viewWillAppear и viewDidLoad — viewDidLoad вызывается один раз, viewWillAppear — каждый раз при появлении (например, после pop с дочернего экрана); состояние, зависящее от актуальности данных, обновляется в viewWillAppear.
  • Создавать вью до addSubview — AutoLayout constraint между вью из разных иерархий вызывает assertion failure; всегда добавляйте вью в иерархию до активации constraint'ов.
  • Игнорировать memory warning — при didReceiveMemoryWarning нужно освобождать кеши; игнорирование может привести к kill процесса на устройствах с малым объёмом RAM.

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

  • Что такое Auto Layout и как создавать constraints программно по сравнению с Interface Builder?
  • Как работает навигация в UIKit с помощью UINavigationController?
  • В чём разница между UIView и UIViewController?
  • Как работает жизненный цикл UIViewController? Опишите каждый lifecycle-метод.

Что портит ответ

  • Знать термины UIKit, но не понимать связи между абстракциями
  • Объяснять поведение через отдельные примеры вместо причинной модели
  • Не связывать mental model с диагностикой ошибок

Что слушает интервьюер

  • Понимает ключевые абстракции UIKit
  • Может предсказывать поведение системы через mental model
  • Связывает модель с debugging и production decisions

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

Проверить себя по теме UIKit →
←Предыдущий вопросКакие ошибки делают команды, когда строят приложение на UIKit как web/backend-проект без учёта mobile constraints?Следующий вопрос→В чём разница между `frame`, `bounds` и `center` в UIKit?

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

UIKitsystems-thinkingtechnical-communicationtechnology-selectiontrade-off-analysis