Что нужно знать готовясь к собеседованию на iOS программиста

01.07.2013

Как и обещал сформирую примерно 30 тем и вопросов, которые, по опыту других, задают на собеседовании на программиста Objective-C и iOS. На 100% актуальность, корректность и уникальность не претендую, просто собрал в сети что спрашивают и пытаюсь накидать свой план готовности к собеседованию.

План

План обьемный и стихийный, буду его оптимизировать и переписывать/дописывать по мере обработки. Строго не судите

Знание ООП:

 

Это теоретические основы, но хоть убейте с таким обычно всегда сложно. Как вариант просят еще вот так:

Знание ОО шаблонов проектирования (паттернов):

Знание ОО антипаттернов:

В этом разделе я не силен, в мое время паттерны еще только рождались. Это потом появились умные книжки типа Design Patterns авторством GoF или Банды Четырех, 🙂 в общем 4 чуваков которые оставили неизгладимый след в истории ООП

Алгоритмы:

  • решение алгоритмических задач (сортировки, нахождение третьего, прочие задачи)
  • мощность алгоритмов

 

Примеры

1. Поменять местами a и b не используя промежуточную переменную.

2. Написать функцию вычисления n-го числа последовательности фибоначи.
(если решить через рекурсию, спросят чем опасно такое решение)

и т.д.

Алгоритмы сила и одновременно жопа. Я их нахватался, забыл, а по сути фундаментальных алгоритмов нам никто в интституте не давал. Те же сортировки!! Боже храни наше образование, кроме тебя ему ни кто не поможет.

 

 

Реляционные БД:

 

С этим проще. Вспомнить, сформулировать и все ок.

Сетевые протоколы:

  • TCP/IP
  • UDP
  • HTTP

сюда можно отнести вот такой вопрос

Как загрузить что-то из интернета?

В чем разница между синхронными и асинхронными запросами?

Небольшое задание. Опишите как загрузить изображение из интернета и отобразить его в ImageView – все это должно происходить после нажатия кнопки.

 

Параллельное программирование:

  • методы параллельного программирования
  • синхронизация
  • локи
  • что такое deadlock и как он возникает?

Масштабирование:

  • принципы построения распределенной архитектуры
    • вертикальное масштабирование
    • горизонтальное масштабирование
  • SOA
    • синхронные и асинхронные транспорты
    • вебсервисы
    • очереди
  • методы масштабирования баз данных
    • noSQL
    • кэш
    • реляционные хранилища
    • репликация
    • шардинг

 

Рефакторинг:

  • что это такое и зачем оно нужно?
  • методы рефакторинга ОО кода
  • особенности рефакторинга в зависимости от языка

Документирование кода:

  • стандарты кода и их роль в документации
  • методы создания самодокументирующегося кода
  • документация кода через комментарии
  • другие виды документирования через логирование, интерфейсы, прототипирование, контракты
  • стандарты документации кода
  • необходимы и достаточные условия для написания документации

 

Логирование и отладка:

  • что такое логирование и зачем оно нужно?
  • методы логирования
  • отладка через логирование

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

  • виды тестирования и их применение
    • отладка
    • логирование
    • функциональные тесты
    • интеграционные тесты
    • ручное тестирование
    • смок тесты
    • автоматизированное тестирование
    • регрессивное тестирование
  • юнит тестирование
    • требование к тестам
    • консистентность требований и тестов
    • создание объектов
    • мок объекты
    • что такое покрытие тестами, метрики?
  • как правильно применять тесты?

Ревью кода:

  • Что это такое и зачем оно нужно?
  • Методы ревью

OBJECTIVE-C

В: Что такое структура (struct)?

О: Структура – специальный тип данных языка C, который содержит в себе другие типы данных в одном блоке и группрует их под одним именем. Объекты в Obj-c представляют собой структуры в которых имеется ссылка на объект класса.

В: В чем разница между NSArray и NSMutableArray?

О: Содержимое NSArray не может быть изменено после создания ,в то время как NSMutableArray можно изменять т.е. добавлять и удалять объекты

4 комментария

  • Александр 22.06.2013 в 1:17 дп

    Внимательно читаю твою ленту. Этот пост — просто замечательный! Действительно интересные вопросы. Многие касаются философских взглядов, вроде «умение свободно обосновывать ОО полноту или неполноту различных языков программирования». Это ведь с какой точки зрения посмотреть.
    Был бы весьма благодарен, если бы каждый из пунктов был разобран возможно подробнее.
    Это было бы полезно и мне, как системному администратору, в плане всестороннего обзора смежной области. И любому программисту, готовящемуся к собеседованию. И тебе, для визуализации ответов. Ведь как иногда бывает? Так старался объяснить, что сам уже понял. 🙂
    Спасибо!

    • Максим 24.06.2013 в 6:35 пп

      Спасибо за ваш комментарий. Вдохновляет. Все пункты буду разбирать и описывать жизненный опыт в плане устройства на новую работу 🙂

  • Алекс 25.02.2015 в 9:54 пп

    Спасибо, очень интересная статья, особенно в плане наполнения нужной информацией)

  • PaulV 01.03.2017 в 6:13 пп

    Знал бы я всё это в своём 2013м году…. =3

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *