Swift Interview - Вопросы для собеседований. Mobile митапы и конференции.
161 subscribers
9 photos
28 links
При интервью кандидаты часто сталкиваются с вопросами, которые не встречали или разбирали поверхностно. Это касается как и сложных, так и простых тем. На канале вопросы будут систематизироваться по сложности и темам
Download Telegram
Вопросы будут распределены по хештегам #SwiftInterviewUIKit, #SwiftInterviewRxSwift, #SwiftInterviewArchitecture, #SwiftInterviewGeneral, #SwiftInterviewNotification,
#SwiftInterviewMultithreading,
#SwiftInterviewMemory,
#SwiftInterviewTasks (по мере заполнения количество тем будет увеличиваться). И по сложности #SwiftInterviewBeginner, #SwiftInterviewMedium, #SwiftInterviewAdvanced. В начале большинство вопросов будут для начального уровня, затем будут разбираться более сложные темы.

Так же будут ссылки на мобильные конференции и митапы, на которых можно узнать что-то новое и повысить свой уровень. Надеюсь, канал найдут полезным как начинающие, так и продвинутые разрабочики

Вопросы для разбора, предложения можно присылать @dmitryZazulin
Начальный уровнь. Общие вопросы.

Что такое ООП? Для чего нужен ООП?

На первый взгляд легкий вопрос, но некоторые начинают путаться уже на нем. В интернете можете найти множество статей.

Так же попробуйте ответить на вопрос:
Можете ли вы объяснить высказывание “наследование нарушает инкапсуляцию”?

#SwiftInterviewBeginner #SwiftInterviewGeneral

https://blog.skillfactory.ru/glossary/oop-obektno-orientirovannoe-programmirovanie/
👍3🔥1
Начальный уровень. Общие вопросы.

Чем отличается массив от множества? Когда предпочтителен каждый тип коллекции?

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

Обычно от кандидатов ожидаются подобные ответы:
1) Массив - это упорядоченная коллекция, состоящая из элементов, которые могут быть не уникальными.
2) Множество - это неупорядоченная коллекция из уникальных элементов. Уникальность достигается имплементацией протокола Hashable (его мы разберём в одном из следующих постов).

Если вы дали ответ на первый заглавный вопрос подобный моему, то второй как правило отпадает.

Если при ответе я, например, не слышу про протокол Hashable, то задаю следующий вопрос: не могу ли я в множество добавить кастомный класс, если да, то почему и при каких условиях, если нет, то так же почему? Чтобы не возникали дополнительные вопросы, вы должны стараться иметь такой уровень знаний, который позволял бы давать четкие, краткие, исчерпывающие ответы.

Более подробное описание всех типов коллекций по ссылке снизу 👇👇👇

#SwiftInterviewBeginner #SwiftInterviewGeneral

https://swiftbook.ru/content/languageguide/collection-types/
👍4
Начальный уровень. Общие вопросы.

Логические задачи. Задача про два шнура (фитиля).

В конце собеседования иногда хотят проверить умение кандидата логически мыслить и рассуждать, что является очень важным для программиста в любом направлении. Мне и моим коллегам в частности попадалась задача почему-то именно по шнуры, попробуйте решить сами 😀:

У Вас есть два шнура (фитиля). Каждый шнур, подожженный с конца, полностью сгорает дотла ровно за один час, но при этом горит с неравномерной скоростью. Как при помощи этих шнуров и зажигалки отмерить время в 45 минут?

Необходимо поджечь первый шнур одновременно с обоих … Ответ читайте ниже 👇👇👇

Больше логических задач по ссылке ниже 👇👇👇

https://tproger.ru/articles/10-logicheskih-zadach-s-sobesedovanij-kotorye-zastavjat-zastrelitsja/

#SwiftInterviewBeginner
#SwiftInterviewGeneral
👍21
Все уровни. Общие вопросы. 

Саморазвитие.

На начальном этапе изучения языка необходимо заложить именно фундамент (на моем канале это вопросы начального уровня), без которого невозможно решать самостоятельно продуктовые задачи. После того как заложена основа, нужно как расширять, так и углублять знания. Постоянное саморазвитие — это  очень важный аспект для любого программиста, без него не стоит рассчитывать ни на карьерный рост, ни на хорошую зарплату.

Получать информацию можно из многих источников, таких как:

Книги. Определённое что-то советовать не буду, но вы можете сами определиться, что вам интересно или что необходимо изучить, и поискать в интернете. Книги могут быть разной тематики про сам язык swift, про алгоритмы, про паттерны, про анимации, про геймдев и т.д.

Интернет сайты. Среди англоязычных одни из самых полезных https://www.raywenderlich.comhttps://medium.com, среди русских — https://habr.com/, на начальном этапе https://swiftbook.ru.

YouTube. Здесь можно найти много полезных видео как по обучению, так и на более сложные темы, видео с различных митапов, от крупных ит-компаний и т.д. Первый свой шаг в RxSwift, который был сложен для меня, сделал как раз благодаря видео с YouTube.

Тематические телеграмм каналы. Можете поискать на различных каталогах и подобрать по вкусу.

Митапы и конференции. Полезны как новичкам, так и опытным разработчикам. На подобных мероприятиях часто разбираются нетривиальные темы и кейсы. Есть хорошая возможность узнать что-то новое. Если же вы будет участвовать в оффлайн режиме, то можно познакомиться с интересными людьми, задать лично вопросы.

Интенсивы и хакатоны. Пожалуй, больше полезны для начинающих разработчиков. На таких мероприятиях есть хорошая возможность прокачать свои как hard, так и soft скилы, поработать в команде и т.д. И сейчас, когда требования для соискателей увеличились, в том числе и по опыту, участие в интенсивах и хакатонах — это хорошая возможность показать себя и устроится в компанию.

По возможности я постараюсь размещать мероприятия из 5 и 6 пунктов, интересных и полезных именно iOS разработчикам. На самом деле они проходят не так часто, поэтому, я надеюсь, вас подобные посты не будут раздражать 😉

#SwiftInterviewGeneral
#SwiftInterviewBeginner #SwiftInterviewMedium #SwiftInterviewAdvanced
👍10
Начальный уровень. Общие вопросы.

Жизненный цикл приложения. 

Хотя вопрос на прямую задают не часто, зато во время разговора могут спросить про точку входа в приложение или про стейты жизненного цикла и как приложение переходит из одного в другой. Будет большим минусом, если вы не сможете ответить, но и вообще нужно знать это даже на начальном уровне.

Жизненный цикл приложения представляет собой последовательность событий, происходящих между запуском и закрытием приложения.

Точкой входа является main.swift:

main.swift
autoreleasepool {
  UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))
}

Во время запуска, функция UIApplicationMain выбирает несколько ключевых объектов и запускает приложение. В сердце каждого iOS приложения лежит объект UIApplication, который способствует взаимодействию между системой и другими объектами приложения. Объект UIApplication запускает main runloop и использует его для обработки пользовательских событий и изменений в интерфейсе.

В любом момент времени приложение можно находится в одном из пяти состояний:

• Not running (Не запущено): приложение не было запущено или остановлено системой.
• Inactive (Неактивное состояние): приложение переходит в состояние переднего плана, но не получает события.
• Active (Активное состояние): приложение переходит в состояние переднего плана и может обрабатывать события.
• Background (Фоновое состояние): в этом состоянии, если есть исполняемый код, он будет выполняться, а если исполняемый код отсутствует или выполнение завершено, приложение будет немедленно приостановлено.
• Suspended (Приостановленное состояние): приложение находится в фоновом режиме (в памяти), но не выполняет код, и если в системе недостаточно памяти, оно завершит работу приложения.

Это короткий ответ на данную тему, так же отдельного разбора требует runloop (в одном из будущих постов). Более подробный разбор по ссылке ниже 👇 👇👇
https://medium.com/@neroxiao/ios-app-life-cycle-ec1b31cee9dc

#SwiftInterviewGeneral
#SwiftInterviewBeginner
👍9
Начальный уровень. Общие вопросы.

Принципы SOLID. 

Алоха друзья! Сегодня мы разберём один из базовых вопросов на собеседовании. Итак, SOLID - это  мнемонический акроним для первых пяти принципов, названных Робертом Мартином в начале 2000-х, которые означали 5 основных принципов объектно-ориентированного программирования и проектирования. Использование принципов SOLID способствует созданию системы, которую будет легко поддерживать и расширять в течение долгого времени.

Разберём подробнее каждую букву:

• SSingle-responsibility principle/ Принцип единственной ответственности

Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче

• O - Open–closed principle / Принцип открытости-закрытости 

Программные сущности должны быть открыты для расширения, но закрыты для модификации

• L - Liskov substitution principle / Принцип подстановки Лисков 

Объекты родительских классов должны быть заменимы объектами подклассов без изменения поведения приложения

• I - Interface segregation principle / Принцип разделения интерфейсов 

Слишком «толстые» интерфейсы необходимо разделять на более маленькие и специфические, чтобы программные сущности маленьких интерфейсов знали только о методах, которые необходимы им в работе. В итоге, при изменении метода интерфейса не должны меняться программные сущности, которые этот метод не используют

• D - Dependency inversion principle / Принцип инверсии зависимостей 

При разработке нужно полагаться на абстракции, а не на конкретные реализации. Компоненты ПО должны иметь низкую связность и высокую согласованность.

Часто спрашивают не все принципы, а какой-то один, например, чаще почему-то именно принцип подстановки Лисков. Иногда просят привести пример нарушения принципов SOLID, в стандартных библиотеках, фреймворках от Apple. Тут можно указать, что в языке Swift есть механизм переопределения функции (override func), который нарушает принцип Принцип открытости-закрытости. Так же можно привести пример UIStackview, который игнорирует  backgroundColor, тем самым нарушается принцип подстановки Лисков.

Более наглядно в статье по принципам SOLID 👇👇👇

#SwiftInterviewBeginner
#SwiftInterviewGeneral

https://habr.com/ru/company/productivity_inside/blog/505430/
👍9🔥21
Общие вопросы

Подготовка к нетехнической части собеседования

Друзья, всем привет! Хочу поделиться радостной новостью - вчера на Хабре вышла моя первая, так сказать, вводная статья - «Подготовка к нетехнической части собеседования». В дальнейшем планирую выкладывать там важный материал, связанный напрямую с темой моего телеграмм-канала. Возможно, часть информации, необходимой для подготовки к собеседованиям, будет выкладываться там раньше, поэтому буду признателен, если подпишитесь на меня на Хабре. Заранее спасибо и хорошего дня! Ссылка на статью👇👇👇https://habr.com/ru/post/701962/

#SwiftInterviewGeneral
#SwiftInterviewBeginner
#SwiftInterviewMedium
#SwiftInterviewAdvanced
🔥81