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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

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

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

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

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

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

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Как понять, что проблема в приложении связана с UIKit, а не с backend, сетью, дизайном состояния или платформой?

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

Изолируйте слой: создайте минимальный VC с заглушкой данных — если баг исчез, проблема в данных/сети. Затем проверьте thread через dispatchPrecondition, используйте Instruments Core Animation для FPS и Memory Graph Debugger для retain cycles.

Практический алгоритм

  1. Воспроизведите проблему стабильно. Нестабильно воспроизводимая проблема — вероятно, race condition или retain cycle.
  2. Изолируйте: создайте минимальный ViewController с заглушкой данных (без сети, без CoreData). Если баг исчез — проблема в данных или сети, не в UIKit.
  3. Проверьте thread: добавьте dispatchPrecondition(condition: .onQueue(.main)) перед любым обновлением UI. UIKit не thread-safe — обновление с background queue даёт визуальные артефакты без crash.
  4. Используйте Instruments → Allocations и Leaks для поиска утечек памяти, которые могут вызывать потерю состояния.
  5. Сравните поведение на симуляторе и реальном устройстве — Metal рендеринг, точность тачей и производительность отличаются.
import UIKit
import os.log

final class DiagnosticViewController: UIViewController {
    private let logger = Logger(subsystem: "com.app", category: "DiagnosticVC")

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        // Проверяем, что мы на main thread
        dispatchPrecondition(condition: .onQueue(.main))
        logger.debug("viewWillAppear: state=\(self.debugDescription)")
    }

    func updateUI(with data: SomeModel) {
        // Явная диспетчеризация на main queue
        DispatchQueue.main.async { [weak self] in
            guard let self else { return }
            // weak self предотвращает retain cycle в closure
            self.render(data)
        }
    }

    private func render(_ data: SomeModel) {
        // Все UIKit-обновления здесь, на main thread
        titleLabel.text = data.title
    }
}

Диагностика: как локализовать источник проблемы

Когда в iOS-приложении что-то ломается, первый шаг — построить гипотезу о слое, где возникает проблема, и затем опровергнуть или подтвердить её минимальным экспериментом. Наугад переписывать UIKit-код без понимания причины — антипаттерн.

Слои системы и инструменты диагностики

  • Backend/API: проверьте ответы через Charles Proxy или Proxyman — перехватите реальные HTTP-запросы, сравните payload с ожиданиями. Отключите кэш URLSession (URLRequest.cachePolicy = .reloadIgnoringLocalCacheData) и убедитесь, что данные корректны до рендеринга.
  • Сеть: используйте Network Link Conditioner (Developer settings на устройстве) для симуляции плохой связи. Проверьте URLSessionTaskMetrics на время установки соединения и TTFB.
  • UIKit rendering: включите Debug → Color Blended Layers и Color Offscreen-Rendered в Simulator для поиска лишних blending слоёв. Используйте Xcode Instruments → Core Animation для замера FPS и найдите drop ниже 60 fps.
  • State management: добавьте breakpoint на viewWillAppear / viewDidLoad и логируйте состояние ViewModel. Если состояние корректно, но UI отображает старые данные — проблема в binding между моделью и view.
  • Платформа/OS: воспроизведите на разных iOS версиях через Simulator или BrowserStack. Apple изменяла поведение UIScrollView contentInsetAdjustmentBehavior в iOS 11, UINavigationBar appearance в iOS 15 — платформенные изменения ломают код, который «работал раньше».

Платформенные нюансы, которые ломают не по вине UIKit

Начиная с iOS 15, UINavigationBar использует UINavigationBarAppearance по умолчанию. Код, который задавал navigationBar.barTintColor напрямую, перестал работать — это не баг UIKit, а изменение API. Аналогично, UITableView в iOS 15 получил sectionHeaderTopPadding = 22 по умолчанию — это сломало множество list-экранов, которые не задавали явный стиль.

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

  • Обновление UILabel/UIImageView с фонового потока не вызывает crash сразу — баг проявляется позже в виде артефактов или некорректного layout.
  • Charles Proxy показывает HTTP-трафик, но не URLSession из WKWebView — там нужен отдельный перехват.
  • Instruments → Leaks не находит retain cycles в Swift closures — для этого нужен Memory Graph Debugger (Debug → Memory Graph в Xcode).
  • UIKit-проблема на симуляторе может не воспроизводиться на устройстве из-за разного поведения Metal и OpenGL ES.
  • Изменение contentInset у UIScrollView вместо adjustedContentInset — источник «плавающего» контента при появлении клавиатуры.
  • Сброс состояния ViewController при memory warning — viewDidUnload больше не вызывается (deprecated iOS 6), но didReceiveMemoryWarning всё ещё работает и может обнулить кэши.
  • NSZombie включённый в схеме замедляет приложение в 3–5 раз — не забудьте выключить перед performance-профилированием.
  • Разные результаты Auto Layout на iPhone SE (320pt) и iPhone Pro Max (430pt) — добавляйте constraint priority и тестируйте на обоих размерах.

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

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

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

  • Сразу обвинять UIKit, не проверив соседние слои системы
  • Чинить симптом без минимального воспроизведения и evidence
  • Не учитывать версии, конфигурацию, окружение и recent changes

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

  • Умеет локализовать проблему вокруг UIKit
  • Двигается от симптома к гипотезам и проверкам
  • Отличает баг инструмента от ошибки использования или окружения

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

Проверить себя по теме UIKit →
←Предыдущий вопросПредставьте, экран на UIKit тормозит, теряет состояние или ведёт себя по-разному на разных платформах. Как вы будете искать причину?Следующий вопрос→Как обрабатывать появление клавиатуры и управлять insets у scroll view соответствующим образом?

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

UIKitDebuggingtechnical-communicationtechnology-selectiontrade-off-analysis