Как и обещал сформирую примерно 30 тем и вопросов, которые, по опыту других, задают на собеседовании на программиста Objective-C и iOS. На 100% актуальность, корректность и уникальность не претендую, просто собрал в сети что спрашивают и пытаюсь накидать свой план готовности к собеседованию.
План обьемный и стихийный, буду его оптимизировать и переписывать/дописывать по мере обработки. Строго не судите
- наследование
- инкапсуляция
- полиморфизм
- умение свободно обосновывать ОО полноту или неполноту различных языков программирования
- знание других парадигм программирования (функциональной, структурной, аспектной, процедурной)
Это теоретические основы, но хоть убейте с таким обычно всегда сложно. Как вариант просят еще вот так:
Знание ОО шаблонов проектирования (паттернов):
- умение объяснить, зачем они нужны, когда они нужны
- умение обосновать выбор того или иного паттерна
- умение определять тот или иной паттерн по его коду
- знание шаблонов для других парадигм программирования
- умение объяснить, зачем необходимо их знание
- умение определять тот или иной паттерн по его коду
- рассказать про возможные выходы из паттернов
В этом разделе я не силен, в мое время паттерны еще только рождались. Это потом появились умные книжки типа Design Patterns авторством GoF или Банды Четырех, 🙂 в общем 4 чуваков которые оставили неизгладимый след в истории ООП
Алгоритмы:
- решение алгоритмических задач (сортировки, нахождение третьего, прочие задачи)
- мощность алгоритмов
Примеры
1. Поменять местами a и b не используя промежуточную переменную.
2. Написать функцию вычисления n-го числа последовательности фибоначи.
(если решить через рекурсию, спросят чем опасно такое решение)
и т.д.
Алгоритмы сила и одновременно жопа. Я их нахватался, забыл, а по сути фундаментальных алгоритмов нам никто в интституте не давал. Те же сортировки!! Боже храни наше образование, кроме тебя ему ни кто не поможет.
Реляционные БД:
- что такое РБД
- разница между MyISAM и InnoDB
- что такое нормализация и денормализация? зачем нужны нормализация и денормализация?
- применение нормальных форм
- внешние ключи и зачем они нужны
- зачем нужны индексы?
- виды индексов
- как работают индексы?
- Что такое запросы SQL
- применение JOIN: INNER, CROSS, LEFT, RIGHT
- транзакции
- триггеры
- ORM, ActiveRecord
С этим проще. Вспомнить, сформулировать и все ок.
Сетевые протоколы:
- TCP/IP
- UDP
- HTTP
сюда можно отнести вот такой вопрос
Как загрузить что-то из интернета?
В чем разница между синхронными и асинхронными запросами?
Небольшое задание. Опишите как загрузить изображение из интернета и отобразить его в ImageView – все это должно происходить после нажатия кнопки.
Параллельное программирование:
- методы параллельного программирования
- синхронизация
- локи
- что такое deadlock и как он возникает?
Масштабирование:
- принципы построения распределенной архитектуры
- вертикальное масштабирование
- горизонтальное масштабирование
- SOA
- синхронные и асинхронные транспорты
- вебсервисы
- очереди
- методы масштабирования баз данных
- noSQL
- кэш
- реляционные хранилища
- репликация
- шардинг
Рефакторинг:
- что это такое и зачем оно нужно?
- методы рефакторинга ОО кода
- особенности рефакторинга в зависимости от языка
Документирование кода:
- стандарты кода и их роль в документации
- методы создания самодокументирующегося кода
- документация кода через комментарии
- другие виды документирования через логирование, интерфейсы, прототипирование, контракты
- стандарты документации кода
- необходимы и достаточные условия для написания документации
Логирование и отладка:
- что такое логирование и зачем оно нужно?
- методы логирования
- отладка через логирование
Тестирование:
- виды тестирования и их применение
- отладка
- логирование
- функциональные тесты
- интеграционные тесты
- ручное тестирование
- смок тесты
- автоматизированное тестирование
- регрессивное тестирование
- юнит тестирование
- требование к тестам
- консистентность требований и тестов
- создание объектов
- мок объекты
- что такое покрытие тестами, метрики?
- как правильно применять тесты?
Ревью кода:
- Что это такое и зачем оно нужно?
- Методы ревью
OBJECTIVE-C
- От чего пошел язык Objective-c?
- В чем разница между NSString и просто String? (Что значит приставка NS в общем?)
- MVC — Model — View -Controller
- RunLoop
- Опишите иерархию классов от UIButton до NSObject
- структуры C (как представлены),
- UITableViewController как с ним работать какие методы в нем есть,
- чем отличаются Bounds и Frame,
- чем объект Objective-c отличается от структуры С, что такое структура в С.
- рассказать об атрибутах @property в частности про nonatomic
- NSCoding, archiving
- что такое View (представление) и что такое window?
- Что такое контекст (context)?
- Что такое notifications (уведомления)? как мы должны их использовать?
- Что такое memory warning (предупреждение о малом колличестве памяти), как мы должны их обрабатывать?
- Что такое делегат? как его создать и использовать?
- методы доступа, геттер и сеттер
- Виды нотации
В: Что такое структура (struct)?
О: Структура – специальный тип данных языка C, который содержит в себе другие типы данных в одном блоке и группрует их под одним именем. Объекты в Obj-c представляют собой структуры в которых имеется ссылка на объект класса.
В: В чем разница между NSArray и NSMutableArray?
О: Содержимое NSArray не может быть изменено после создания ,в то время как NSMutableArray можно изменять т.е. добавлять и удалять объекты
4 комментария
Внимательно читаю твою ленту. Этот пост — просто замечательный! Действительно интересные вопросы. Многие касаются философских взглядов, вроде «умение свободно обосновывать ОО полноту или неполноту различных языков программирования». Это ведь с какой точки зрения посмотреть.
Был бы весьма благодарен, если бы каждый из пунктов был разобран возможно подробнее.
Это было бы полезно и мне, как системному администратору, в плане всестороннего обзора смежной области. И любому программисту, готовящемуся к собеседованию. И тебе, для визуализации ответов. Ведь как иногда бывает? Так старался объяснить, что сам уже понял. 🙂
Спасибо!
Спасибо за ваш комментарий. Вдохновляет. Все пункты буду разбирать и описывать жизненный опыт в плане устройства на новую работу 🙂
Спасибо, очень интересная статья, особенно в плане наполнения нужной информацией)
Знал бы я всё это в своём 2013м году…. =3