Финуслуги · август 2024

Тех собес на middle-senior IOS Разработчик в Финуслуги

middle-senior Тех собес 27 вопросов 3 задачи
1

Общие вопросы и вопросы о процессах в команде

1. Расскажи, как у вас устроен процесс разработки: как задача проходит от этапа получения до выпуска в прод?

2. Какой твой лучший проект, чего ты добился? Приведи кейсы, где ты был инициатором чего-то нового или предложил интересное решение.

3. Какие процессы в команде тебе нравятся и какие ты считаешь идеальными?

2

Архитектура и дизайн

4. Как с точки зрения безопасности работала кросс-авторизация в твоем проекте?

5. Расскажи о своем опыте перехода с MVC на MVVM. Что тебе понравилось и не понравилось в этом переходе?

6. Почему вы приняли решение перейти с MVC на MVVM?

7. В чем отличие View Controller от View Model?

8. Ты когда-нибудь работал с компонентами, которые используются в разных проектах? Например, с внутренними библиотеками.

9. Какое понятие ты вкладываешь в термин "архитектура"?

10. Если бы ты начал новый большой проект с нуля, какую архитектуру бы выбрал и какие подходы внедрил? От чего это зависит?

11. Что ты подразумеваешь под Clean Architecture? Расскажи о своем понимании.

12. С какими принципами из SOLID ты знаком? Какой из них кажется тебе наиболее важным и почему?

13. Как ты можешь объяснить принцип "открытости/закрытости" (Open/Closed Principle)?

14. Как можно расширять функционал библиотеки, не меняя ее код? Приведи примеры.

15. Как бы ты реализовал взаимодействие с UI-элементами, не изменяя код базовой библиотеки, например, для кастомной UITableView?

16. Применял ли ты Dependency Injection (DI) в своих проектах?

3

Производительность и оптимизация

17. Расскажи о своем опыте оптимизации производительности UITableView.

18. С какими проблемами утечки памяти (memory leaks) ты сталкивался?

19. Какие инструменты для поиска утечек памяти ты использовал?

20. Расскажи про диспетчеризацию в Swift/Objective-C? (статистическая, табличная, отправка сообщений)

21. Как ты относишься к многопоточности? Чувствуешь ли себя уверенно в этой области?

22. Как сделать словарь потокобезопасным? Какие способы ты знаешь?

23. Чем Operation отличается от GCD? В каких случаях ты бы выбрал одно, а в каких другое?

24. Какие преимущества async/await по сравнению с GCD?

4

Тестирование

25. Какие тесты можно написать для формы с авторизацией, где есть два текстовых поля и кнопка?

26. Как бы ты написал Unit-тест? Как бы он понимал, что тест прошел или упал?

27. Как бы ты проверил, что отправка событий после нажатия на кнопку работает корректно?

28. Задача: Разбери архитектуру формы логина с двумя полями и кнопкой "Войти". Выбери архитектуру, которая тебе ближе, и расскажи, какие будут компоненты и как они будут взаимодействовать между собой.

29. Задача: Что выведет программа?

import Foundation

protocol Animal {
    func say()
}

extension Animal {
    func say() {
        print("Say")
    }
}

class Cat: Animal {
    func say() {
        print("Meow")
    }
}

Cat().say()
(Cat() as Animal).say()

30. Задача: Что выведет программа и почему? Что скажете по поводу DispatchQueue.main и RunLoop.main? Есть ли между ними какая-то особенность, и в каких случаях что лучше использовать?

// Кейс 1:
let queue1 = DispatchQueue(label: "label")
queue1.async {
    queue1.sync {
        print("Hello world!")
    }
}

// Кейс 2:
let queue2 = DispatchQueue(label: "label")
let newQueue = DispatchQueue(label: "newQ")
queue2.async {
    newQueue.sync {
        print("Hello world!")
    }
}