Скрининг на middle-senior IOS Разработчик в ****

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

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

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

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

(2025-01-30)

Техскрининг

Задача 1

struct ContentItem: Decodable {
    let company_name: String
    
    let company_description: String
    
    let company_revenue: Int
}

struct ContentItemView: View {
    let item: ContentItem

    var body: some View {
        ZStack {
            Text(item.company_name)
            Text(item.company_description)
        }
    }
}

class DataProvider {
    func loadItems(searchQuery: String?, _ callback: @escaping ([ContentItem]?, Error?) -> Void) {
        let url = URL(string: "url" + searchQuery) // assume URL is always valid

        URLSession.shared.dataTask(with: url) { data, response, error in
            DispatchQueue.global(qos: .background).async {
                if let error {
                    callback(nil, error)
                }
                
                guard let dataCompanies = try? JSONDecoder().decode([ContentItem].self, from: data) else {
                    return
                    callback(nil, error)
                }
                let companies: [ContentItem] = dataCompanies
                    callback(companies, nil)
            }
        }.resume()
    }
}

class ContentViewModel  {
    @Binding var inputSearchText: String = ""
    @State var outputItems: [ContentItem] = []
    
    init() {
        $inputSearchText
            .sink(receiveValue: { [weak self] inputSearchText in
                self.onAppear(searchQuery: inputSearchText)
            })
    }
    
    func onAppear(searchQuery: String) {
        let dataProvider = DataProvider()
        dataProvider.loadItems(searchQuery: inputSearchText) { result, error in

            if result != nil {
                self.outputItems = result!
            }
        }
    }
}

struct ContentView: View {
    var viewModel = ContentViewModel()
    
    var body: some View {
        VStack {
            TextField("search", text: viewModel.inputSearchText)
                .padding()
            ScrollView {
                VStack {
                    ForEach(viewModel.outputItems, id: .id) { item in

                        ContentItemView(item: item)
                    }
                }
            }
        }
        .onChange(of: viewModel.inputSearchText) { inputSearchText in
            viewModel.onAppear(inputSearchText: inputSearchText)
        }
    }
}

Задача 2

Что выведет, без рефакторинга

func foo() {
    print(1)
    DispatchQueue.main.async {
        print(2)
        DispatchQueue.global(qos: .background).async {
            print(3)
            DispatchQueue.global(qos: .background).sync {
                print(4)
            }
            print(5)
        }
        print(6)
    }
    print(7)
}

Задача 3

Что выведет

var a = [1, 2, 3]
for i in a {
    a = [4, 5, 6]
    print(i)
}