Pull to refresh

Comments 60

Всё, конечно, здорово, вопросов много разноплановых. Хотелось бы увидеть от вас вторую статью с развёрнутыми ответами теперь.
Да, в дальнейшем планирую написать ответы. А эта статья поможет проверить текущие знания iOS.
И где же ответы? :)) Уже больше года прошло :)

И где же ответы? :)) Уже больше девяти лет прошло :)

Эти вопросы могут стать началом серии tutorial'ов по iOS development :)
Кто-то подскажет что-то похожее для C# WPF и C# WP? Можно и для джуников тоже.
Неважно, умеешь ли ты программировать. Важно, отвечаешь ли ты на вопросы или нет.
Непонятна категоризация вопросов. В networking попали вопросы по мультитредингу, в UIKit — вопросы по экосистеме.
Ребята, с любым из этих вопросов можно разобраться в ходе работы. Проверяйте мозги, а не начитку.
Часто, смысл собеседования проверить не только мозги, но и понизить твою самооценку, что несомненно повлияет на уровень запросов соискателя. Т.е. это повод для работодателя сбить цену. Иначе, я ничем не могу объяснить реально дебильные, совершенно не практические вопросы на собеседованиях.
Приведите пару примеров того, что вы понимаете под практическими вопросами?
если человек не знает что ответить, то достаточно посмотреть на то как он рассуждает, для этого и нужны каверзные вопросы
— Напишите код, который разворачивает строку на С++.

что значит разворачивает?

Networking:
— Что такое deadlock?
— Что такое livelock?
— Что такое семафор?
— Что такое мьютекс?
вы серьезно? какое отношение имеют эти вопросы к Networking

и ни одного вопроса по алгоритмике и структурам данных
И ни одного по архитектуре, ну кроме б-гомерзкого синглетона)
+1, разворачивает — если я верно понимаю — переставить символы в строке в обратном порядке. А так мне тоже этот тест не понравился.
— Напишите код, который разворачивает строку на С++.
Это означает, что «abcd» на входе и «dcba» на выходе.

вы серьезно? какое отношение имеют эти вопросы к Networking
Изменил на Networking & Multithreading

и ни одного вопроса по алгоритмике и структурам данных
На полноту обзора всех тем на собеседовании этот топик не претендует. В статье упомянуты вопросы, которые автор получал/задавал на собеседованиях.
Я бы предпочел проверять у кандидатов не уровень абстрактного знания, а умение работать. Эти вещи связаны довольно слабо.
А как еще проверить умение работать? Можно с помощью тестового задания, но я лично, если это не гиганты рынка, отказался бы от его выполнения, дав ссылку на гитхаб, где лежит мой опенсорсный код. Потому что тратить день-два на его выполнение мне не хочется. А задание на 1-2 часа нет смысла давать, потому что оно ничего не покажет. Так что как ни крути, а без технических вопросов на собеседовании никак не обойтись.
>дав ссылку на гитхаб, где лежит мой опенсорсный код

А этого было бы достаточно. Зачем мне после этого спрашивать про абстрактные классы?
> — Как удалить объект в ходе итерации по циклу?

Какой объект?
— Что такое responder chain?

Раз говорим о паттернах, так может их и называть правильно? «Chain of responsibility»
pthread_create(&thread, NULL, startTimer, (void *)t);

Для чего при разработке под iOS использовать POSIX-потоки?
— Atomic vs nonatomic. Чем отличаются? Как вручную переопределить atomic/nonatomic сеттер в не ARC коде?

А что нет вопроса как это сделать с использованием ARC?
Раз говорим о паттернах, так может их и называть правильно? «Chain of responsibility»
Вот ссылка на документацию
Для чего при разработке под iOS использовать POSIX-потоки?
Мы же говорим о позиции middle/senior.
А что нет вопроса как это сделать с использованием ARC?
Если кандидат умеет это делать в не ARC коде, то под ARC ему это не составить труда.
Вот ссылка на документацию

И правда по другому называется у них, просто привык к GOF'у…
Мы же говорим о позиции middle/senior.

А чем реально то они лучше чем GCD или NSOperationQueue вместе с NSOperation? Приходилось ри реально использовать POSIX и как в этом были прюсы? Реально, просто интересно…
Тоже непонимаю, почему не используется NSThread. Зачем мешать всё в одну кучу?
Ну и это тоже есть, конечно. Просто для каких-то сложных вещей уже не подходит. Например, NSOperation уммеет всякие зависимости выставлять, то есть ожидание завершения какой-то другой операции…
В данном примере использован POSIX для отвлечения внимания. Можно с тем же успехом использовать и другие технологии. Мне не приходилось использовать POSIX в проектах, где я учавствовал.
Вот что можно найти в документации по поводу использования POSIX:
Use POSIX calls if cross-platform portability is required. If you are writing networking code that runs exclusively in OS X and iOS, you should generally avoid POSIX networking calls, because they are harder to work with than higher-level APIs. However, if you are writing networking code that must be shared with other platforms, you can use the POSIX networking APIs so that you can use the same code everywhere.


Я pthread_* сам не использовал, однако неоднократно встречал его применение в различных opensource-библиотеках. Грамотного разработчика применение pthread не должно смутить.
Имелась в виду такая ситуация. Есть mutable массив объектов, есть айди объекта, который надо удалить из массива. Как удалить объект с данным айди из массива?
ОК. А какие варианты ответа подходят?

1. Запомнить объект и удалить.
2. Запомнить индекс и удалить.
3. Использовать filtered…
4. Сет индексов при удалении нескольких объектов.

Может есть ещё какие, которые необходимо знать?
Я так понимаю смысл в том, что бы удалять объекты во время реверсивного обхода массива, а не наоборот, дабы избежать выхода за пределы его.
На мой взгляд, чем больше подходов к решению проблемы кандидат может придумать, тем лучше.
Может есть ещё какие, которые необходимо знать?
Я может не смог донести суть статьи до читателей, но я не хотел сказать, что если ты не можешь ответить на все вопросы, то ты не senior. Или что если ты ответил, то ты мегакрут. Суть статьи в том, чтобы показать моменты, на которые стоит обратить внимание перед собеседованием.
Пассивная/активная модель это anemic/rich model что ли?
Об активной/пассивной модели можно почитать тут и тут. Если верить MSDN, то Application Programming in Smalltalk-80: How to use Model-View-Controller (MVC) [Burbeck92], Steve Burbeck — это первоисточник.
Спасибо. Не задумывался об этом.
вопрос только в том, насколько правильно вы на них ответили :-)
большинство вопросов требуют пояснений, а не ответа. Поэтому мне всё-же не понятно как вы по гуглу судите.
1. Развернуто отвечаю на вопрос сам, для себя.
2. Ищу в гугле ответ и литературу по ответу, сверяюсь.

А что не так в том, чтобы судить по гуглу?
Стандартное желание — такое бы, да для Android…
UIKit:
— Что такое Run Loop?

Бугага ))) Автор, не гони!
Выдержка из правил сайта:
Хабр — для спокойных людей. Всегда будет кто-то, кто, по вашему мнению, ни разу не прав. Однако просим оставить хамство, грубость, переходы на личности и прочие проявления агрессии и неадекватности для других ресурсов — на Хабре это не в почёте.
Спасибо большое, с большинством вопросов не согласен, но некоторые забрал.
Добавлю парочку своих:
По CoreAnimation
— чем отличается UIView от CALayer
— какие типы CALayer есть?
— чем отличается UIView based Animation от Core Animation
— тайминги в CoreAnimation
— что такое backing store
— чем отличаются аффинные преобразования от трехмерных

Core Data
— что такое Fault и зачем он нужен
— как происходят изменения в NSManagedObjectContext
— синхронизация разных типов NSManagedObjectContext (получение и изменение данных в child контекстах).
— зачем нужен NSPersistentStoreCoordinator
— зачем нужно делать двустороннии связи в таблицах
— что таке Fetched Property и особенности работы с ним по сравнению с обычной связью

Ну то что сразу на ум пришло. Обычно вообще вопросы придумываю по ходу общения.
По поводу вот этого вопроса:
— Зачем все свойства ссылающиеся на делегаты strong/retain. :)))

Я не понял, почему он должен быть strong? Вообще не могу в голове придумать ни одной причины чтоб он в любом случае должен быть таким? Более того могу придумать причины, почему такого делать нельзя, например когда два объекта в самом простом случае являются делегатами друг друга. Во избежании циклической связи один из них должен быть weak.
Делегата же может и вообще не быть, почему тогда исключать возможность, что он может пропасть в любой момент, если нам не нужно гарантировать его постоянное присутствие?
Вы правы, именно поэтому стоит смайл в конце вопроса. Это вопрос с подвохом.
вот этот вопрос в недоумении вообще вгоняет:
— Асинхронность vs многопоточность. Чем отличаются?

Он лично для меня звучит как «в чем разница между ведром и лопатой». Что автор имел ввиду я думаю в процессе собеседования уточнить можно, но так в общем виде это звучит некорректно.
У меня на интервью по С++ был вопрос
— В чем разница между виртуальными функциями и полиморфизмом?

Правильный ответ:
— Полиморфизм — это теоретическая фича ООП, а виртуальные функции — это имплементация полиморфизам в С++.

Я к тому, что разница между Асинхронностью и многопоточностью имеется. Понятия взаимосвязанные, но разные.
— Как можно заимплементировать autorelease pool на с++?

«заимплементировать» — реализовать :-)
зачем на С++, вообще причем он здесь. Если уже проверять знания языка, то С. С++ каким тут боком?
А этот вопрос я бы сформулировать как: напишите простую реализацию NSAutoreleasePoll на Objective-C
можно и на objective-c. Cуть — выяснить как человек понимает работу NSAutoreleasePoll. Большинство вопросов провокационных. И цель их — услышать рассуждения. 100% правильного ответа может и не существовать. На своем опыте могу сказать, что после того, как объяснил интервьюверу, как реализовать NSAutoreleasePoll на плюсах, то лучше понял его(NSAutoreleasePoll) работу.
Очень странный список. На приличное количество вопросов не отвечу, не очень понятно что делаю на позиции senior developer'а :)
Зачем, к примеру, спрашивать про core data, если в проекте оно не используется? Разве как-то изменит впечатление, если человек его знает, но больше ничего не расскажет? И наоборот — всюду понравился, а с core data не работал и ничего сказать не сможет.

Вообще говоря, мне кажется, что все эти вопросы спрашивать в принципе не нужно. Как говаривал мой преподаватель по матану: «На экзамене билет дается исключительно для того, чтобы преподавателю было с чего начать разговор со студентом». Так и тут — начинаешь с чего-то привычного, а дальше уже как кривая выведет. Подобные разговоры дают гораздо лучшее представление о кандидате.
Мне, как интервьюверу, не важно ответите Вы правильно или нет. Важны Ваши рассуждения в ходе раздумий. На это, по-моему, надо делать упор.
Рассуждения это хорошо, я так и написал. Вот только каких рассуждений вы ждете на вопрос «что такое мьютекс?», если человек не знает ответ?
Вопросы типа «что такое мьютекс?» нужны, чтобы понять в каких областях человек работал и как глубоко он в них разобрался. А ответ на этот конкретный вопрос надо знать, потому что он из общего программирования.
Не ответил что такое мьютекс, симафор, хеш — не взяли на работу в Польше. Остальные вопросов 20 по практике ответил развернуто и правильно. Так что да, без основ никуда.
Я один не понимаю, зачем iOS Delevoper'у нужен C++?
Например, вы разработчик iOS, Android, Windows Mobile(Phone). Написали собственную обертку для OpenGL ES на C++. Подключаете её в свои проекты. Пишете для неё unit-тесты и спокойной дорабатываете.

У меня есть проект на ObjC с подключением OCR библиотеки написанной на C++, использующей OpenCV.
Тогда давайте еще добавим вопросов по Java/C# и другим языкам программирования. На них тоже можно делать кроссплатформу для телефона.

Но тут же вроде вакансия на чистого iOS девелопера. И что тут делает C++, который ему не нужен?
C, C++, ObjC — это все таки очень близкие друг-другу языки, и они абсолютно безболезненно могут сосуществовать в одном проекте на iOS\OS X. Junor'у C++ конечно не нужен, но утверждать что он не нужен мидлу, а тем более сеньеру — по крайней мере странно.
UFO just landed and posted this here
Sign up to leave a comment.

Articles

Change theme settings