Все материалы лекций лежат в 2020-spring/lectures
Раздел cделать нужно сдавать через pull request в этот репозиторий. Делаешь fork, в папке 2020-spring создаешь папку со своим именем. В нее кладешь папку, названную номером домашнего задания. Коммитишь, пушишь, создаешь pr. Я буду оставлять комментарии (ласковее чем Мартынов) и мерджить, если все ок.
Раздел почитать сдается через устные ответы на лекциях. Каждое занятие я буду случайно спрашивать вопросы с прошлого раза. Особо принуждать к ответу не стану, но героя-одиночки, который будет отдуваться за всех, тоже не будет.
В папке Questions можно отыскать вопросы с реальных собесов джунов и пару тестовых (для собственного развития). Чувствуй себя свободно добавлять туда свои вопросы/ответы через pr. Любая активность помимо домашек приветствуется, я готов помогать, советовать, ревьювить твои тестовые в компании.
По любым вопросам обращайся в личку в телеграмм @M0rtyMerr
Реализовать структуру данных Бинарное дерево. Что должно уметь:
- добавлять элемент
- удалять элемент
- искать элемент
- выполнять балансировку
- работать с разными типами данных
- Protocol Oriented Programming
- Closures
- Automatic Reference Counting (ARC)
- Copy-on-write
- Swift.org/swiftbook.ru - документация по Swift с подробными примерами
- iOS-Developer-Roadmap - что должен знать junior/middle/senior ios разработчик. Вопросы и ссылки на статьи
Проверка домашки Делаем приложение
Создать приложение, выводящее таблицу сущностей, полученных из сети. Это уже реализовано на лекции, не стесняйтесь сверяться с проектом RickAndMorty.
Главное, проделайте все сами, а не просто копируйте.
Можно использовать любое апи отсюда: https://github.com/public-apis/public-apis
Я, например, взял это - https://rickandmortyapi.com/. можете использовать его же.
Проверьте, что в API:
- есть пагинация (вам возвращают ссылку на следующую страницу сущностей или номер следующей страницы)
- есть картинки (сущность содержит ссылку на картинку/аватар сущности)
Приложение должно:
- выводить таблицу, где каждая ядейка содержит информацию об одной сущности (например, имя и картинка)
- при скроле до конца таблицы загружать новую порцию сущностей
- при клике на ячейку открывать детальный экран с информацией о выбранной сущности (UINavigationController в гугле)
- Что такое SOLID?
- Зачем нужны strong, weak, unowned ссылки?
- Чем асинхронность отличается от многопоточности?
- Что такое GCD? Расскажите про виды очередей?
- Стиль кода
- Автоматическая проверка стиля кода - научимся в следующий раз
- Туториалы по iOS
- Что такое POP? Доклад Александра Зимина
- Добавить зависимость через CocoaPods. Как минимум линтер, но можешь использовать что-то интереснее.
- Добавить линтер. Я сделал для тебя конфиг файл с нужными правилами. Его нужно положить в корень своего проекта. Можно спросить, зачем то или иное правило нужно
- Добавить констрейнты (autolayout), приложение должно нормально выглядеть на всех айфонах
- Что такое deadlock/livelock? Приведи пример, как добиться в iOS
- Что такое KISS и DRY?
- Перечислите все способы работы с optional в Swift?
- В чем разница Dependency Injection и Dependency Inversion? Пример?
- Что такое method dispatch? Какиой бывают в свифте?
Realm, кэш Устройство на работу
- Добавить поддержку оффлайн режима в приложение. Сохранить в базу загружаемые с API сущности и показывать их, если нет подключения. Можно использовать Realm/CoreData/SQLite
- Добавить в приложение pull-to-refresh
- (опционально) добавить в приложение индикатор загрузки следующей страницы данных с API. Долистали до низу таблицы -> показали индикатор активности -> отправили запрос -> дождались ответа -> спрятали индикатор активности
- (опционально) подписаться на мой подкаст
- (не успели в прошлый раз) В чем разница Dependency Injection и Dependency Inversion? Пример?
- (не успели в прошлый раз) Что такое method dispatch? Какиой бывают в свифте?
- Расшифровать и объяснить аббревиатуры CRUD и ACID
- Функции высшего порядка: что это, зачем нужно, приведи пример в Swift
- Что такое view.frame и view.bounds? Чем отличаются?
- Придумать и реализовать анимацию. Если идей нет, то сделай квадрат с тенью, бесконечно двигающийся по треугольной траектории
- Реализовать поиск по таблице сущностей (по имени/тэгам). Обновление таблицы должно быть анимировано. Нужно считать поисковый запрос, получить отфильтрованный массив сущностей и найти его diff с изначальным. Затем к diff применить анимацию insert/delete/reload. Для поиска diff лучше использовать фреймворк
- (неправильно в прошлый раз) Что такое method dispatch? Какие виды есть в Swift? Назвать отличия
- (неправильно в прошлый раз) Frame vs bounds? Когда bounds.origin не (0,0)?
- Что такое CALayer? Зачем нужен? Отличие от UIView?
- Что такое Explicit/implicit анимация?
- Что такое layer model/presentation? В каких ситуациях у layer model/presentation разные значения?
- Кто получает событие первым UIView или GestureRecognizer на нем?
- Как рисовать на CPU, а как на GPU?
- Написать тесты на приложение. Минимальный набор: протестировать методы loadMore и getData по аналогии с лекционным проектом
- (Опционально) Внедрить в приложение любую понравившуюся архитектуру
- Что такое layer model/presentation? В каких ситуациях у layer model/presentation разные значения?
- Mock vs stub vs spy?
- MVC, MVVM, VIPER - расшифруй, че-нибудь расскажи