Общие вопросы и вопросы о процессах в команде
1. Расскажи, как у вас устроен процесс разработки: как задача проходит от этапа получения до выпуска в прод?
2. Какой твой лучший проект, чего ты добился? Приведи кейсы, где ты был инициатором чего-то нового или предложил интересное решение.
3. Какие процессы в команде тебе нравятся и какие ты считаешь идеальными?
Архитектура и дизайн
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) в своих проектах?
Производительность и оптимизация
17. Расскажи о своем опыте оптимизации производительности UITableView.
18. С какими проблемами утечки памяти (memory leaks) ты сталкивался?
19. Какие инструменты для поиска утечек памяти ты использовал?
20. Расскажи про диспетчеризацию в Swift/Objective-C? (статистическая, табличная, отправка сообщений)
21. Как ты относишься к многопоточности? Чувствуешь ли себя уверенно в этой области?
22. Как сделать словарь потокобезопасным? Какие способы ты знаешь?
23. Чем Operation отличается от GCD? В каких случаях ты бы выбрал одно, а в каких другое?
24. Какие преимущества async/await по сравнению с GCD?
Тестирование
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!")
}
}