— Общие вопросы и вопросы о процессах в команде:
1. Расскажи, как у вас устроен процесс разработки: как задача проходит от этапа получения до выпуска в прод? 2. Какой твой лучший проект, чего ты добился? Приведи кейсы, где ты был инициатором чего-то нового или предложил интересное решение. 3. Какие процессы в команде тебе нравятся и какие ты считаешь идеальными?
— Архитектура и дизайн:
1. Как с точки зрения безопасности работала кросс-авторизация в твоем проекте?
2. Расскажи о своем опыте перехода с MVC на MVVM. Что тебе понравилось и не понравилось в этом переходе?
3. Почему вы приняли решение перейти с MVC на MVVM?
4. В чем отличие View Controller от View Model?
5. Ты когда-нибудь работал с компонентами, которые используются в разных проектах? Например, с внутренними библиотеками.
6. Какое понятие ты вкладываешь в термин “архитектура”?
7. Если бы ты начал новый большой проект с нуля, какую архитектуру бы выбрал и какие подходы внедрил? От чего это зависит?
8. Что ты подразумеваешь под Clean Architecture? Расскажи о своем понимании.
9. С какими принципами из SOLID ты знаком? Какой из них кажется тебе наиболее важным и почему?
10. Как ты можешь объяснить принцип “открытости/закрытости” (Open/Closed Principle)?
11. Как можно расширять функционал библиотеки, не меняя ее код? Приведи примеры.
12. Как бы ты реализовал взаимодействие с UI-элементами, не изменяя код базовой библиотеки, например, для кастомной UITableView?
13. Применял ли ты Dependency Injection (DI) в своих проектах?(DI) в своих проектах?
— Производительность и оптимизация:
1. Расскажи о своем опыте оптимизации производительности UITableView.
2. С какими проблемами утечки памяти (memory leaks) ты сталкивался?
3. Какие инструменты для поиска утечек памяти ты использовал?
4. Расскажи про диспетчеризацию в Swift/Objective-C? (статистическая, табличная, отправка сообщений)
5. Как ты относишься к многопоточности? Чувствуешь ли себя уверенно в этой области?
6. Как сделать словарь потокобезопасным? Какие способы ты знаешь?
7. Чем Operation отличается от GCD? В каких случаях ты бы выбрал одно, а в каких другое?
8. Какие преимущества async/await по сравнению с GCD?авнению с GCD?
— Тестирование:
1. Какие тесты можно написать для формы с авторизацией, где есть два текстовых поля и кнопка? 2. Как бы ты написал Unit-тест? Как бы он понимал, что тест прошел или упал? 3. Как бы ты проверил, что отправка событий после нажатия на кнопку работает корректно?о?
— Задача 1: Разберём простую задачу. Допустим, у нас есть форма логина с двумя полями — логин и пароль — и кнопка “Войти”. Выбери архитектуру, которая тебе ближе, и расскажи, какие будут компоненты и как они будут взаимодействовать между собой.
— Задача 2: Что выведет программа?
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()
— Задача 3: — Что выведет программа и почему? — Что скажете по поводу 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!”) }}