Тех собес на senior IOS Разработчик в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории IOS Разработчик

Посмотреть видео в категории

(2025-01-30)

Техническое собеседование

  • Обсуждение опыта на проектах, вопросы по архитектуре и системному дизайну, исходя из этого опыта.

Задание по коду (Swift Concurrency)

struct City {
    let name: String
    let population: Int
}

protocol CityRepository {
    func getCityNames(_ completion: @escaping ([String]) -> Void)
    func getPopulation(city: String, _ completion: @escaping (Int) -> Void)
}

class CityUseCase {
    private let cityRepository: CityRepository

    init(cityRepository: CityRepository) {
        self.cityRepository = cityRepository
    }

    func execute(_ completion: @escaping ([City]) -> Void) {
        cityRepository.getCityNames { [weak self] cityNames in
            guard let self = self else { return }

            var cityes: [City] = []
            let group = DispatchGroup()

            for cityName in cityNames {
                group.enter()
                self.cityRepository.getPopulation(city: cityName) { getPopulation in
                    cityes.append(City(name: cityName, population: getPopulation))
                    group.leave()
                }
            }

            group.notify(queue: .main) {
                completion(cityes)
            }
        }
    }
}
  • Проанализируйте предоставленный Swift код.
  • Объясните, что делает этот код.
  • Какие потенциальные проблемы или улучшения вы видите в этом коде?
  • Объясните использование DispatchGroup.
  • Объясните использование weak self и guard let self.
  • Как бы вы обработали ошибки в этом коде?
  • Как бы вы протестировали этот код?

Вложения

37_1660_photo.jpg