HR Screening interview
Я уже писал о том, какие неудобные вопросы можно услышать от рекрутера или нанимающего менеджера. Чтобы показать свою вовлеченность в процесс интервью, узнать больше о позиции и понять, насколько вам подходит новая роль, необходимо задавать правильные вопросы и вам.
Подготовил список вопросов, которые я люблю спрашивать на интервью. Упор был сделан на поиск работы за рубежом, так как, на мой взгляд, это перспективней на данный момент. В том числе для меня, как не native speaker, это создает больше трудностей.
1. Is remote work an option for this position? - Это база. Многие мечтают зарабатывать доллары и евро, и чилить на дешевых островах (хотя таких уже и нет).
2. Does the company provide support for relocation and offer visa sponsorship? - Все-таки вы решили забустить карьеру и уехать в Долину.
3. What qualities and skills are you seeking in an ideal candidate for this role? Или What can distinguish a candidate as the most suitable for the company? - Если это первый этап интервью, дальше будет проще выстраивать диалог и подсвечивать нужные качества.
4. Could you walk me through the interview process for this position? - Сразу выясним, будут ли тестовые задания, которые никто не проверит, или 7 этапов душных алгоритмических собеседований.
5. How many employees are currently part of the iOS squad? - Для меня важно, чтобы я был не один в команде разработчик. Иначе у кого учиться и кому передавать свои знания?
6. Is this position newly created, or did someone leave the company? - Может и мне не стоит туда залетать вообще?
7. Why is the company seeking external candidates rather than promoting someone internally? - То же самое, что и предыдущий вопрос, только в другой руке). Больше мэтчится с позициями лидов. На мой взгляд, безопаснее повышать людей, а не нанимать с рынка.
8. What is the development process like at your company? Are there any specific methodologies or tools that the team uses? И туда же How do you ensure code quality and maintainability in development? - Проверить, вообще ли они слышали про процессы разработки или это стартап на коленках. Ответ может сказать много о зрелости и профессионализме команды.
9. Are there any particular challenges or upcoming projects that the team is currently facing? - Пролить чуть больше света на то, чем вам предстоит заниматься в ближайшее время. Может быть, вас зовут писать тесты и фиксить баги после команды говнорей-аутсорсеров.
10. Can you describe the company's approach to testing and releasing apps? - Мне это дает понимание о том, в каком темпе и с каким прессингом со стороны менеджмента команда существует.
11. Are there opportunities for professional growth and skill development within the company? - Наверное, базовый вопрос, больше для формальности, чтобы показать мотивацию и целеустремленность. Ответ в 9 из 10 случаев не соответствует реалиям по итогу.
Вот такой у меня список. Очевидно, что в процессе интервью могут возникнуть еще вопросы, или какие-то вопросы задавать не придется, так как представитель компании уже расскажет об этом. Пользуйтесь и пишите в комментариях, что вам важно узнать на интервью.
Больше статей на тему интервью можно найти на сайте https://www.themuse.com/advice/interviewing
PS: Как спрашивать о зарплате и выторговывать оффер послаще, думаю, написать отдельно."
#interview
Я уже писал о том, какие неудобные вопросы можно услышать от рекрутера или нанимающего менеджера. Чтобы показать свою вовлеченность в процесс интервью, узнать больше о позиции и понять, насколько вам подходит новая роль, необходимо задавать правильные вопросы и вам.
Подготовил список вопросов, которые я люблю спрашивать на интервью. Упор был сделан на поиск работы за рубежом, так как, на мой взгляд, это перспективней на данный момент. В том числе для меня, как не native speaker, это создает больше трудностей.
1. Is remote work an option for this position? - Это база. Многие мечтают зарабатывать доллары и евро, и чилить на дешевых островах (хотя таких уже и нет).
2. Does the company provide support for relocation and offer visa sponsorship? - Все-таки вы решили забустить карьеру и уехать в Долину.
3. What qualities and skills are you seeking in an ideal candidate for this role? Или What can distinguish a candidate as the most suitable for the company? - Если это первый этап интервью, дальше будет проще выстраивать диалог и подсвечивать нужные качества.
4. Could you walk me through the interview process for this position? - Сразу выясним, будут ли тестовые задания, которые никто не проверит, или 7 этапов душных алгоритмических собеседований.
5. How many employees are currently part of the iOS squad? - Для меня важно, чтобы я был не один в команде разработчик. Иначе у кого учиться и кому передавать свои знания?
6. Is this position newly created, or did someone leave the company? - Может и мне не стоит туда залетать вообще?
7. Why is the company seeking external candidates rather than promoting someone internally? - То же самое, что и предыдущий вопрос, только в другой руке). Больше мэтчится с позициями лидов. На мой взгляд, безопаснее повышать людей, а не нанимать с рынка.
8. What is the development process like at your company? Are there any specific methodologies or tools that the team uses? И туда же How do you ensure code quality and maintainability in development? - Проверить, вообще ли они слышали про процессы разработки или это стартап на коленках. Ответ может сказать много о зрелости и профессионализме команды.
9. Are there any particular challenges or upcoming projects that the team is currently facing? - Пролить чуть больше света на то, чем вам предстоит заниматься в ближайшее время. Может быть, вас зовут писать тесты и фиксить баги после команды говнорей-аутсорсеров.
10. Can you describe the company's approach to testing and releasing apps? - Мне это дает понимание о том, в каком темпе и с каким прессингом со стороны менеджмента команда существует.
11. Are there opportunities for professional growth and skill development within the company? - Наверное, базовый вопрос, больше для формальности, чтобы показать мотивацию и целеустремленность. Ответ в 9 из 10 случаев не соответствует реалиям по итогу.
Вот такой у меня список. Очевидно, что в процессе интервью могут возникнуть еще вопросы, или какие-то вопросы задавать не придется, так как представитель компании уже расскажет об этом. Пользуйтесь и пишите в комментариях, что вам важно узнать на интервью.
Больше статей на тему интервью можно найти на сайте https://www.themuse.com/advice/interviewing
PS: Как спрашивать о зарплате и выторговывать оффер послаще, думаю, написать отдельно."
#interview
The Muse
Interviewing
Get tips and tricks for answering tough questions, dressing appropriately, sending the perfect thank you note, and interviewing like a pro.
🔥3👍2👏2❤1
Пригласили рассказать о поиске работы за рубежом. Подкинули вам лайфхаки от экспертов с опытом в разных странах и международных компаниях. Смотрите, ставьте лайки)
https://www.youtube.com/live/EXUqWzDKDeo?feature=share
#interview
https://www.youtube.com/live/EXUqWzDKDeo?feature=share
#interview
YouTube
Как найти работу за границей? | Трудоустройство в международную компанию | AgileFluent + Solvery
#трудоустройство #работазаграницей #IT
Эфир про поиск работы за границей с менторами Solvery из международных компаний и основательницей AgileFluent Дарьей Шульгиной.
В первом эфире феста мок-интервью на английском языке AgileFluent и Solvery поговорим…
Эфир про поиск работы за границей с менторами Solvery из международных компаний и основательницей AgileFluent Дарьей Шульгиной.
В первом эфире феста мок-интервью на английском языке AgileFluent и Solvery поговорим…
🔥3👍1👏1🤡1
Хочу упростить навигацию по каналу и обозначить темы, о которых мне интересно писать и размышлять.
1. Этот канал создавался, как помощник изучающим #swift и #ios в целом. Постараюсь фокусироваться на шеринг знаний в этих областях, как main stream канала.
2. Многие из вас в активном поиске новой работы или даже первой. Я уверен, что мой опыт в проведении и прохождении технических интервью будет релевантным. Топик - #interview #lookingforjob
3. Я долгое время хотел найти работу за рубежом и больше путешествовать. Поэтому хочу делиться своим опытом, как digital nomad и опытом переезда на постоянку в другую страну #relocate #remote #digitalnomad
4. Думаю, что так или иначе будут проскальзывать общие темы об #it и #programming через призму моего опыта и наблюдений #experience.
5. Все, что не попадет в обозначенные темы, но очень захочется запостить помечу #random
Чтобы получше узнать, что вам вообще интересно, запущу опросы. Не стесняйтесь голосовать они будут анонимны)
1. Этот канал создавался, как помощник изучающим #swift и #ios в целом. Постараюсь фокусироваться на шеринг знаний в этих областях, как main stream канала.
2. Многие из вас в активном поиске новой работы или даже первой. Я уверен, что мой опыт в проведении и прохождении технических интервью будет релевантным. Топик - #interview #lookingforjob
3. Я долгое время хотел найти работу за рубежом и больше путешествовать. Поэтому хочу делиться своим опытом, как digital nomad и опытом переезда на постоянку в другую страну #relocate #remote #digitalnomad
4. Думаю, что так или иначе будут проскальзывать общие темы об #it и #programming через призму моего опыта и наблюдений #experience.
5. Все, что не попадет в обозначенные темы, но очень захочется запостить помечу #random
Чтобы получше узнать, что вам вообще интересно, запущу опросы. Не стесняйтесь голосовать они будут анонимны)
🔥9👍2❤1
Провел mock interview для совместного проекта Solvery и AgileFluent. К сожалению, были проблемы с трансляцией и звук записался в плохом качестве. Ссылку на собес все равно оставлю, но рекомендовать к просмотру не буду)
https://www.youtube.com/live/o6jxnLg6tks?feature=share
Теоретические вопросы, которые успели обсудить, прилагаются. На некоторые можно дать лаконичный ответ, а другие предполагают развернутые ответы в зависимости от уровня кандидата.
Common questions:
• First of all, please, tell me about your background and experience?
• What are you looking for in the next role?
• What is your the greatest achievement as an employee?
Computer science and Algorithm complexity:
• Let discuss SOLID principles. Can you find any examples from standard swift libraries where principles were kept or violated?
• Can you give some examples of where singletons might be a good idea? (Examples from ios UIApplication or URLSession)
• What kind of collections we have in Swift?
• What is the complexity of main operations in them?
• What the difference between Set and OrderedSet?
• How does OrderedSet look like under the hood?
Swift and ios
• How would you explain protocol-oriented programming to a new Swift developer? What is the difference between OOP and POP?
• What steps would you follow to make a network request? (Back to main thread, Combine, Swift type result)
Memory handling
• What is the difference between value type and reference type?
• Why we need unowned if we have weak parameter?
• What is the autorelease and autorelease pool? Use cases?
• What is the side table?
UI layer
• What does view controller life-cycle look like?
• What is the difference between CALayer and UIView?
• Can you name any different CALayer subclasses?
• Why we have three similar methods layoutSubview, layoutIfNeeded and setNeedsLayout?
• How can we establish relationship between two horizontal labels in case when text doesn't fit the screen?
Если какие-то вопросы не понятны, можете спросить в комментариях
#lookingforjob #interview #ios #swift
https://www.youtube.com/live/o6jxnLg6tks?feature=share
Теоретические вопросы, которые успели обсудить, прилагаются. На некоторые можно дать лаконичный ответ, а другие предполагают развернутые ответы в зависимости от уровня кандидата.
Common questions:
• First of all, please, tell me about your background and experience?
• What are you looking for in the next role?
• What is your the greatest achievement as an employee?
Computer science and Algorithm complexity:
• Let discuss SOLID principles. Can you find any examples from standard swift libraries where principles were kept or violated?
• Can you give some examples of where singletons might be a good idea? (Examples from ios UIApplication or URLSession)
• What kind of collections we have in Swift?
• What is the complexity of main operations in them?
• What the difference between Set and OrderedSet?
• How does OrderedSet look like under the hood?
Swift and ios
• How would you explain protocol-oriented programming to a new Swift developer? What is the difference between OOP and POP?
• What steps would you follow to make a network request? (Back to main thread, Combine, Swift type result)
Memory handling
• What is the difference between value type and reference type?
• Why we need unowned if we have weak parameter?
• What is the autorelease and autorelease pool? Use cases?
• What is the side table?
UI layer
• What does view controller life-cycle look like?
• What is the difference between CALayer and UIView?
• Can you name any different CALayer subclasses?
• Why we have three similar methods layoutSubview, layoutIfNeeded and setNeedsLayout?
• How can we establish relationship between two horizontal labels in case when text doesn't fit the screen?
Если какие-то вопросы не понятны, можете спросить в комментариях
#lookingforjob #interview #ios #swift
YouTube
Моковое собеседование на iOS-разработчика в зарубежную компанию | Solvery + AgileFluent
Solvery совместно с AgileFluent и при поддержке сообщества Coffee&Code (https://t.me/coffeeCodeEverywhere) проведёт техническое собеседование на iOS-разработчика в международную компанию в прямом эфире! Присоединяйтесь, поддержите участника и узнайте, как…
🔥6👍3❤2
Stack vs Heap 👨💻
Базовый вопрос на любой уровень кандидата, но часто слышу невнятные ответы. Собрал полный ответ, который зачастую, хотят услышать на интервью:
Stack(Стек):
• Статичная память. Выделение происходит только во время компиляции.
• Стек имеет структуру данных LIFO (последний пришел – первый вышел)
• Очень быстрый доступ
• При вызове функции все локальные экземпляры этой функции помещаются в текущий стек. И как только функция завершит выполнение, все экземпляры будут удалены из стека.
• Данные, хранящиеся в стеке, находятся там только временно, пока функция не завершит работу и не вызовет автоматическое освобождение всей памяти в стеке.
• Каждая область действия (scope) в вашем приложении (например, внутреннее содержимое метода) будет предоставлять необходимый объем памяти.
• Cтек не используется с объектами, которые изменяют размер.
• Каждый поток имеет собственный стек
• В стеках хранятся типы значений(value type), такие как структуры и перечисления, скаляры.
• Если размер вашего типа значения может быть определен во время компиляции или если ваш тип значения не содержит рекурсивно/не содержит ссылочного типа, тогда потребуется выделение стека.
• Value type не увеличивает счетчик ссылок. Но если ваш value type содержит внутренний reference typy, для его копирования потребуется вместо этого увеличить счетчик ссылок его дочерних элементов.
Heap(Куча):
• Динамическое распределение памяти и распределение происходит во время выполнения.
• К значениям можно обращаться в любое время через адрес памяти.
• Нет ограничений на объем памяти
• Доступ к объектам медленнее чем на стеке
• Когда процесс запрашивает определенный объем памяти, куча ищет адрес памяти, удовлетворяющий этому запросу, и возвращает его процессу.
• Когда память больше не используется, процесс должен сказать куче освободить этот раздел памяти.
• Требуется потокобезопасность.
• Куча доступна всем потокам
• Если размер вашего типа значения(value type) не может быть определен во время компиляции (из-за протокола/дженерика) или если ваш value type рекурсивно содержит/содержится внутри ссылочного типа (помните, что замыкания также являются ссылочными типами), тогда потребуется выделение кучи.
• Классы хранятся в динамической памяти.
Выделение кучи медленнее, чем выделение стека, не только из-за более сложной структуры данных — оно также требует безопасности потоков. Каждый поток имеет свой собственный стек, но куча используется совместно всеми, что требует синхронизации.
#interview #ios #swift
Базовый вопрос на любой уровень кандидата, но часто слышу невнятные ответы. Собрал полный ответ, который зачастую, хотят услышать на интервью:
Stack(Стек):
• Статичная память. Выделение происходит только во время компиляции.
• Стек имеет структуру данных LIFO (последний пришел – первый вышел)
• Очень быстрый доступ
• При вызове функции все локальные экземпляры этой функции помещаются в текущий стек. И как только функция завершит выполнение, все экземпляры будут удалены из стека.
• Данные, хранящиеся в стеке, находятся там только временно, пока функция не завершит работу и не вызовет автоматическое освобождение всей памяти в стеке.
• Каждая область действия (scope) в вашем приложении (например, внутреннее содержимое метода) будет предоставлять необходимый объем памяти.
• Cтек не используется с объектами, которые изменяют размер.
• Каждый поток имеет собственный стек
• В стеках хранятся типы значений(value type), такие как структуры и перечисления, скаляры.
• Если размер вашего типа значения может быть определен во время компиляции или если ваш тип значения не содержит рекурсивно/не содержит ссылочного типа, тогда потребуется выделение стека.
• Value type не увеличивает счетчик ссылок. Но если ваш value type содержит внутренний reference typy, для его копирования потребуется вместо этого увеличить счетчик ссылок его дочерних элементов.
Heap(Куча):
• Динамическое распределение памяти и распределение происходит во время выполнения.
• К значениям можно обращаться в любое время через адрес памяти.
• Нет ограничений на объем памяти
• Доступ к объектам медленнее чем на стеке
• Когда процесс запрашивает определенный объем памяти, куча ищет адрес памяти, удовлетворяющий этому запросу, и возвращает его процессу.
• Когда память больше не используется, процесс должен сказать куче освободить этот раздел памяти.
• Требуется потокобезопасность.
• Куча доступна всем потокам
• Если размер вашего типа значения(value type) не может быть определен во время компиляции (из-за протокола/дженерика) или если ваш value type рекурсивно содержит/содержится внутри ссылочного типа (помните, что замыкания также являются ссылочными типами), тогда потребуется выделение кучи.
• Классы хранятся в динамической памяти.
Выделение кучи медленнее, чем выделение стека, не только из-за более сложной структуры данных — оно также требует безопасности потоков. Каждый поток имеет свой собственный стек, но куча используется совместно всеми, что требует синхронизации.
#interview #ios #swift
👍15👏2❤1
❓ OOP vs POP
И так, продолжаю рубрику - батл #versus
Объектно-ориентированное программирование (ООП) и протокольно-ориентированное программирование (POP) представляют различные подходы к структурированию и проектированию кода. Вот некоторые сходства и различия между ними, которые стоит упоминуть, отвечая на такой вопрос:
Сходства:
✅ Оба подхода стремятся к абстракции и моделированию реального мира с помощью объектов и их взаимодействия.
✅ И ООП, и POP позволяют использовать полиморфизм для работы с разными типами данных, обрабатывая их через общий интерфейс.
✅ Оба подхода поддерживают концепцию инкапсуляции, позволяющую скрыть внутренние детали реализации и предоставить доступ только к необходимой функциональности.
Различия:
⚠️ ООП сосредоточено на использовании классов и наследования для организации кода. Классы могут наследовать свойства и методы от других классов и создавать иерархию наследования. В POP используются протоколы вместо классов для определения требований к функциональности.
⚠️ Наследование, может привести к сложным иерархиям классов и проблемам с тесной связностью. В особенности, множественного наследования (отсутствует в Swift). В POP используется композиция, где типы состоят из более специализированных компонентов через соответствие (conform) протоколам, обеспечивая более гибкую и модульную организацию кода.
⚠️ В ООП функциональность определяется внутри классов и их методов. В POP функциональность определяется через протоколы. Протоколы могут иметь требования к методам и свойствам, и типы должны реализовать эти требования.
⚠️ В POP протоколы позволяют использовать расширения протоколов для предоставления реализации методов по умолчанию. Это делает код более гибким и легким для расширения новыми функциями или высичляемыми свойствами. В ООП расширение функциональности класса может быть достигнуто через наследование или создание подклассов.
Какой подход выбрать зависит от требований и конкретной ситуации. В некоторых случаях ООП может быть предпочтительным, особенно если требуется сильная связь между объектами и наследование функциональности. В других случаях POP может предоставить более гибкую и модульную организацию кода с помощью протоколов и композиции. Apple транслирует в своих библиотеках именно POP, поэтому при разработке приложений на Swift он используется чаще.
#interview #swift #ios
И так, продолжаю рубрику - батл #versus
Объектно-ориентированное программирование (ООП) и протокольно-ориентированное программирование (POP) представляют различные подходы к структурированию и проектированию кода. Вот некоторые сходства и различия между ними, которые стоит упоминуть, отвечая на такой вопрос:
Сходства:
✅ Оба подхода стремятся к абстракции и моделированию реального мира с помощью объектов и их взаимодействия.
✅ И ООП, и POP позволяют использовать полиморфизм для работы с разными типами данных, обрабатывая их через общий интерфейс.
✅ Оба подхода поддерживают концепцию инкапсуляции, позволяющую скрыть внутренние детали реализации и предоставить доступ только к необходимой функциональности.
Различия:
⚠️ ООП сосредоточено на использовании классов и наследования для организации кода. Классы могут наследовать свойства и методы от других классов и создавать иерархию наследования. В POP используются протоколы вместо классов для определения требований к функциональности.
⚠️ Наследование, может привести к сложным иерархиям классов и проблемам с тесной связностью. В особенности, множественного наследования (отсутствует в Swift). В POP используется композиция, где типы состоят из более специализированных компонентов через соответствие (conform) протоколам, обеспечивая более гибкую и модульную организацию кода.
⚠️ В ООП функциональность определяется внутри классов и их методов. В POP функциональность определяется через протоколы. Протоколы могут иметь требования к методам и свойствам, и типы должны реализовать эти требования.
⚠️ В POP протоколы позволяют использовать расширения протоколов для предоставления реализации методов по умолчанию. Это делает код более гибким и легким для расширения новыми функциями или высичляемыми свойствами. В ООП расширение функциональности класса может быть достигнуто через наследование или создание подклассов.
Какой подход выбрать зависит от требований и конкретной ситуации. В некоторых случаях ООП может быть предпочтительным, особенно если требуется сильная связь между объектами и наследование функциональности. В других случаях POP может предоставить более гибкую и модульную организацию кода с помощью протоколов и композиции. Apple транслирует в своих библиотеках именно POP, поэтому при разработке приложений на Swift он используется чаще.
#interview #swift #ios
🔥11❤3👌2
Algo interview preparing 👨💻
Вот вы уже успешные разработчики и хотите поехать работать в США, или еще куда-то, в крупную компанию. Для этого вам необходимы знания и навыки решения алгоритмических задач. Таковы правила игры. Их нужно просто принять или быть готовым работать только на галлерах.
Собрал свой топ ресурсов для подготовки к собесам с алгоритмическими секциями, в том числеFAANG MANGA
⭐️ LeetCode - это база. Тут и писать нечего. Главная платформа для тренировки алгосиков
⭐️ https://www.techinterviewhandbook.org - для тех, кто основательно хочет подготовиться к интервью в топ компании и изучить весь процесс.
⭐️ Влад Тен - перезалитые разборы задач с LeetCode. Когда вроде бы и сил нет решать задачки, а хочется провести время с пользой для своего развития.
⭐️ Чаты https://t.me/l33tcode и https://t.me/joinchat/oEXjPDz9Av8xZTcy - можно обсудить решения сложных задач, процессов интервью или найти компанию для мокового собеса по алгоритмам или системному дизайну
⭐️ https://interviews.school - можно взять за основу, если эта тема для вас новая.
⭐️ https://coderpad.io - платформа на которой часто происходит сам процесс интервью. Помогает прокачивать навык решения задач без подсказок IDE и подсветки синтаксиса.
Список можно продолжать долго, но чтобы не создавать дилемму выбора остановлюсь на этом.
P.S Холивар на тему нужны ли алгоритмы мобильным разработчиками или вообще программистам оставлю для другого поста)
#interview #lookingforjob
Вот вы уже успешные разработчики и хотите поехать работать в США, или еще куда-то, в крупную компанию. Для этого вам необходимы знания и навыки решения алгоритмических задач. Таковы правила игры. Их нужно просто принять или быть готовым работать только на галлерах.
Собрал свой топ ресурсов для подготовки к собесам с алгоритмическими секциями, в том числе
⭐️ LeetCode - это база. Тут и писать нечего. Главная платформа для тренировки алгосиков
⭐️ https://www.techinterviewhandbook.org - для тех, кто основательно хочет подготовиться к интервью в топ компании и изучить весь процесс.
⭐️ Влад Тен - перезалитые разборы задач с LeetCode. Когда вроде бы и сил нет решать задачки, а хочется провести время с пользой для своего развития.
⭐️ Чаты https://t.me/l33tcode и https://t.me/joinchat/oEXjPDz9Av8xZTcy - можно обсудить решения сложных задач, процессов интервью или найти компанию для мокового собеса по алгоритмам или системному дизайну
⭐️ https://interviews.school - можно взять за основу, если эта тема для вас новая.
⭐️ https://coderpad.io - платформа на которой часто происходит сам процесс интервью. Помогает прокачивать навык решения задач без подсказок IDE и подсветки синтаксиса.
Список можно продолжать долго, но чтобы не создавать дилемму выбора остановлюсь на этом.
P.S Холивар на тему нужны ли алгоритмы мобильным разработчиками или вообще программистам оставлю для другого поста)
#interview #lookingforjob
Leetcode
LeetCode - The World's Leading Online Programming Learning Platform
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
🔥7👍6🆒1
Многопоточность
Часто такие примеры встречаются на собеседовании. Нужно ответить в каком порядке будут выведены цифры в консоль.
Проверим ваши знания и внимательность.
UPD: Изначально скрин был неправильный, сорри)
#interview #ios #swift
Часто такие примеры встречаются на собеседовании. Нужно ответить в каком порядке будут выведены цифры в консоль.
Проверим ваши знания и внимательность.
UPD: Изначально скрин был неправильный, сорри)
#interview #ios #swift
🔥4
Capture list 🤔
Сегодня разберем еще один классический вопрос с ios собеседований. Необходимо понять, что будет выведено в консоль.
Начем с самого простого. Переменная cityClass в пункте 4 меняет свое значение поля name. Т.к классы относятся к reference type, то захват в capture list никак не повлияет на итоговое значение. В консоле мы увидем в обоих случаях "Liverpool".
Переменная cityStruct - cтруктура, поэтому в первом замыкании она будет скопирована при захвате в capture list, а во втором обращение произойдет в момент выполнения замыкания к уже обновленной переменной. Поэтому "London" и "Marseille" соответственно.
Последний случай может показаться самым неочевидным. Переменная cityClassOptional захватывается в первом замыкании по слабой ссылке. В пункте 4 сначала создается еще один указатель на cityClassOptional, а потом заниляется. В замыкании closure1 будет выведено Paris - счетчик ссылок у объекта еще не равен нулю (doubleClass удерживает объект по сильной ссылке), а вот closure2 обратится по указателю уже к пустому значению.
Как итог, вывод в консоль будет выглядеть следующим образом:
1 - my city is Liverpool
2 - my city is London
3 - my city is Paris
4 - my city is Liverpool
5 - my city is Marseille
6 - my city is nil
А что произойдет если применить weak к переменной с типом структуры? К счастью, компилятор поможет понять, что такое действие недопустимо. ARC не применим к Value Types
'weak' may only be applied to class and class-bound protocol types
#interview #ios #swift
Сегодня разберем еще один классический вопрос с ios собеседований. Необходимо понять, что будет выведено в консоль.
Начем с самого простого. Переменная cityClass в пункте 4 меняет свое значение поля name. Т.к классы относятся к reference type, то захват в capture list никак не повлияет на итоговое значение. В консоле мы увидем в обоих случаях "Liverpool".
Переменная cityStruct - cтруктура, поэтому в первом замыкании она будет скопирована при захвате в capture list, а во втором обращение произойдет в момент выполнения замыкания к уже обновленной переменной. Поэтому "London" и "Marseille" соответственно.
Последний случай может показаться самым неочевидным. Переменная cityClassOptional захватывается в первом замыкании по слабой ссылке. В пункте 4 сначала создается еще один указатель на cityClassOptional, а потом заниляется. В замыкании closure1 будет выведено Paris - счетчик ссылок у объекта еще не равен нулю (doubleClass удерживает объект по сильной ссылке), а вот closure2 обратится по указателю уже к пустому значению.
Как итог, вывод в консоль будет выглядеть следующим образом:
1 - my city is Liverpool
2 - my city is London
3 - my city is Paris
4 - my city is Liverpool
5 - my city is Marseille
6 - my city is nil
А что произойдет если применить weak к переменной с типом структуры? К счастью, компилятор поможет понять, что такое действие недопустимо. ARC не применим к Value Types
'weak' may only be applied to class and class-bound protocol types
#interview #ios #swift
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2😱2🤡1
Vibe собесов 😏
Посмотрел на днях интервью Антон проходит собеседование на iOS разработчика – оффер 550к. Оно навело меня на мысли о том, насколько важен именно вайб или ощущение от происходящего, для обеих сторон. Собственно многие позитивные флаги, поддержание правильной атмосферы и продемонстрировал Антон в этом, на мой взгляд, интересном интервью.
Теперь по порядку. Начинающие разработчики зачастую готовятся только по хард скиллам. Заучивают топ 100-150 вопросов по вставь_свой_язык_программирования и думают, что это оптимальный подход. На первых порах может быть так оно и есть, важно продемонстрировать свои навыки и компетенции, зачастую, выдавая заученные клише на популярные вопросы. Но когда речь заходить о высокой позиции, где от сотрудника будет требоваться намного больше, важно попасть в так называемый culture fit.
Бывает и такое, что интервью не задается, вопросы пошли душные и тд. Многие начинают нервничать, выдумывать, или говорят что-то невнятное. Люди поопытней могут сделать более хитрый маневр и постараться перевести поток мыслей и внимание интервьюеров в другую сторону, и попробовать порассуждать или даже убедить их в том, что вопрос не имеет прикладного значения или вообще бессмысленный. Собственно, похожие приемы и помогают выйти победителем по итогу.
Зачастую, после собеседования думаешь, что прошел его хорошо, ответил на все вопросы, но оффер так не получил. Но покопавшись глубже понимаешь - коннекта не было! Ты не смог убедить почему именно тебя должны позвать на работу. А бывает и наоборот. Вопросы сложные, ответы слабые, но получилось быстро понять, кого ищет компания, найти точки соприкосновения и дать им то, что они хотят в другом виде.
Из своего опыта хочется вспомнить несколько моментов, для лучшего описания, что я имею ввиду. Однажды, я попал на собеседование в компанию, приложением которой я пользовался, и оно мне нравилось. Я понятия не имел, как там все устроено в техническом плане. Релевантного опыта тоже не было в этом бизнес направлении. После технической части, я думал, что провалил интервью и на эту позицию компания будет искать разработчика дальше. Но когда дело дошло до моих вопросов (я подготовил их заранее, что рекомендую делать всегда) диалог пошел намного бодрее, я смог продемонстрировать, что мне интересно, как я могу улучшить то, чем уже пользуюсь и люблю. Подсветил вопросы со стороны клиента и мобильного разработчика и даже некоторыми вопросами поставил в тупик интервьюеров. Я думаю, это сыграло ключевую роль при найме меня и я тоже, с радостью, согласился пойти работать в эту компанию.
Что еще важно продемонстрировать на интервью?
Рассуждения вслух. Телепатов среди нас нет, а вот умение переносить поток мыслей в поток вербальности - хороший навык. Любой, кто проводит собеседования обращает на это внимание.
Не сдаваться. Если не знаете, как ответить на вопрос или решить задачу, продолжайте набрасывать идеи и предлагать разные подходы. Важно осознавать, что в современных реалиях вся работа - командная, поэтому не обязательно вывозить все на своих плечах. Грамотный интервьюер всегда направит вас в нужное русло, чтобы вместе прийти к успешномууспеху результату.
#interview #random #it
Посмотрел на днях интервью Антон проходит собеседование на iOS разработчика – оффер 550к. Оно навело меня на мысли о том, насколько важен именно вайб или ощущение от происходящего, для обеих сторон. Собственно многие позитивные флаги, поддержание правильной атмосферы и продемонстрировал Антон в этом, на мой взгляд, интересном интервью.
Теперь по порядку. Начинающие разработчики зачастую готовятся только по хард скиллам. Заучивают топ 100-150 вопросов по вставь_свой_язык_программирования и думают, что это оптимальный подход. На первых порах может быть так оно и есть, важно продемонстрировать свои навыки и компетенции, зачастую, выдавая заученные клише на популярные вопросы. Но когда речь заходить о высокой позиции, где от сотрудника будет требоваться намного больше, важно попасть в так называемый culture fit.
Бывает и такое, что интервью не задается, вопросы пошли душные и тд. Многие начинают нервничать, выдумывать, или говорят что-то невнятное. Люди поопытней могут сделать более хитрый маневр и постараться перевести поток мыслей и внимание интервьюеров в другую сторону, и попробовать порассуждать или даже убедить их в том, что вопрос не имеет прикладного значения или вообще бессмысленный. Собственно, похожие приемы и помогают выйти победителем по итогу.
Зачастую, после собеседования думаешь, что прошел его хорошо, ответил на все вопросы, но оффер так не получил. Но покопавшись глубже понимаешь - коннекта не было! Ты не смог убедить почему именно тебя должны позвать на работу. А бывает и наоборот. Вопросы сложные, ответы слабые, но получилось быстро понять, кого ищет компания, найти точки соприкосновения и дать им то, что они хотят в другом виде.
Из своего опыта хочется вспомнить несколько моментов, для лучшего описания, что я имею ввиду. Однажды, я попал на собеседование в компанию, приложением которой я пользовался, и оно мне нравилось. Я понятия не имел, как там все устроено в техническом плане. Релевантного опыта тоже не было в этом бизнес направлении. После технической части, я думал, что провалил интервью и на эту позицию компания будет искать разработчика дальше. Но когда дело дошло до моих вопросов (я подготовил их заранее, что рекомендую делать всегда) диалог пошел намного бодрее, я смог продемонстрировать, что мне интересно, как я могу улучшить то, чем уже пользуюсь и люблю. Подсветил вопросы со стороны клиента и мобильного разработчика и даже некоторыми вопросами поставил в тупик интервьюеров. Я думаю, это сыграло ключевую роль при найме меня и я тоже, с радостью, согласился пойти работать в эту компанию.
Что еще важно продемонстрировать на интервью?
Рассуждения вслух. Телепатов среди нас нет, а вот умение переносить поток мыслей в поток вербальности - хороший навык. Любой, кто проводит собеседования обращает на это внимание.
Не сдаваться. Если не знаете, как ответить на вопрос или решить задачу, продолжайте набрасывать идеи и предлагать разные подходы. Важно осознавать, что в современных реалиях вся работа - командная, поэтому не обязательно вывозить все на своих плечах. Грамотный интервьюер всегда направит вас в нужное русло, чтобы вместе прийти к успешному
#interview #random #it
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍5❤1👏1🤡1🤣1
Method dispatch
Про то, как устроена диспетчеризация методов в Swift написано не мало, поэтому я не хочу повторяться в пересказе. Детально погрузиться или повторить все аспекты, предлагаю за просмотром видео Swift Mehtod Dispatch. Статей, где подробно объясняется зачем и почему в Swift сосуществуют различные типы нахождения и вызовов методом предостаточно, например, вот. Вообще говоря, большого прикладного применения я в этом не вижу, но понимать базово все же стоит.
Разберем несколько "tricky" примеров-вопросов с собеседований, которые могут действительно застать врасплох.
На первом скрине, у нас есть вызов метода сначала у структуры, а затем у структуры приведенной к протоколу. В случае если метод определен только в расширении протокола, мы получим ответы:
// In Struct
// In Protocol
Будет использована Static dispatch для метода из расширения протокола.
Если же мы добавим метод и в объявление протокола, то будет применен Witness table (скрин 2) и ответ станет:
// In Struct
// In Struct
На третьем скрине ситуация посложнее. Метод определен в протоколе и в его расширении. Есть класс B, который реализует протокол, но не перегружает метод из него. И есть класс С потомок класса B и переопределенный метод из протокола P. При вызове метода у класса С приведенного к протоколу, логично предполагать, что будет вызван переопределенный метод из класса С, но мы получаем вызов метода из расширения протокола 🤯.
Баг открыт много лет и пока не был поправлен. Собственно, как можно его закостылись смотреть там же)
#ios #swift #interview
Про то, как устроена диспетчеризация методов в Swift написано не мало, поэтому я не хочу повторяться в пересказе. Детально погрузиться или повторить все аспекты, предлагаю за просмотром видео Swift Mehtod Dispatch. Статей, где подробно объясняется зачем и почему в Swift сосуществуют различные типы нахождения и вызовов методом предостаточно, например, вот. Вообще говоря, большого прикладного применения я в этом не вижу, но понимать базово все же стоит.
Разберем несколько "tricky" примеров-вопросов с собеседований, которые могут действительно застать врасплох.
На первом скрине, у нас есть вызов метода сначала у структуры, а затем у структуры приведенной к протоколу. В случае если метод определен только в расширении протокола, мы получим ответы:
// In Struct
// In Protocol
Будет использована Static dispatch для метода из расширения протокола.
Если же мы добавим метод и в объявление протокола, то будет применен Witness table (скрин 2) и ответ станет:
// In Struct
// In Struct
На третьем скрине ситуация посложнее. Метод определен в протоколе и в его расширении. Есть класс B, который реализует протокол, но не перегружает метод из него. И есть класс С потомок класса B и переопределенный метод из протокола P. При вызове метода у класса С приведенного к протоколу, логично предполагать, что будет вызван переопределенный метод из класса С, но мы получаем вызов метода из расширения протокола 🤯.
Баг открыт много лет и пока не был поправлен. Собственно, как можно его закостылись смотреть там же)
#ios #swift #interview
🔥7👍4👏2🤡2
Salary negotiation 🤑
Тейки на тему "деньги не главное" мне не нравятся. Мы продаем свои навыки и время - наш главный невозобновляемый ресурс. Стремление зарабатывать больше и получать дополнительные перки для меня естественное. Это не означает, что при выборе работы это должен быть основополагающий аспект и на остальные пункты обращать внимание не стоит. Также, вполне нормально, заниматься какой-то деятельностью бесплатно как хобби, волонтерство, искусство и тд.
Получив оффер на новую работу, зачастую, кандидаты сразу соглашаются, что несомненно, на руку работодателю. На самом деле практически всегда есть место для торгов и переговоров. Никогда не слышал, чтобы оффер отзывали после того, как кандидат попросил больше. Не стоит стесняться и боятся этого.
Я недавно для себя открыл, что есть сайты и даже курсы, которые могут в этом помочь, на разных условиях. До этого я встречал только посты и упоминания в книгах.
🪙 10 правил переговоров о зарплате. Стоит всегда держать в голове.
💸 Level.fyi - можно узнать сколько платят известные компании своим сотрудникам на разных должностях. Полезно, когда вы ищите работу на новом для себя рынке. В том числе, предоставляет сервис по зарплатным переговорам. Готовы сделать все за вас)
🤑 Rora - отдельный продукт, который уже помог более 1к сотрудников увеличить оффер в топ компании FAANG+
🤑 Курс - Если вы планируете сменить работу или увеличить свой заработок, оставаясь на текущей работе, этот курс прокачает вас в этом моменте.
Я не пользовался помощью платных сервисов, поэтому если у кого-то есть такой опыт напишите в комментариях. От себя точно могу рекомендовать -📕 Cracking the coding interview. Тема переговоров часто затрагивается в главах вступления.
#interview #random #thoughts
Тейки на тему "деньги не главное" мне не нравятся. Мы продаем свои навыки и время - наш главный невозобновляемый ресурс. Стремление зарабатывать больше и получать дополнительные перки для меня естественное. Это не означает, что при выборе работы это должен быть основополагающий аспект и на остальные пункты обращать внимание не стоит. Также, вполне нормально, заниматься какой-то деятельностью бесплатно как хобби, волонтерство, искусство и тд.
Получив оффер на новую работу, зачастую, кандидаты сразу соглашаются, что несомненно, на руку работодателю. На самом деле практически всегда есть место для торгов и переговоров. Никогда не слышал, чтобы оффер отзывали после того, как кандидат попросил больше. Не стоит стесняться и боятся этого.
Я недавно для себя открыл, что есть сайты и даже курсы, которые могут в этом помочь, на разных условиях. До этого я встречал только посты и упоминания в книгах.
💸 Level.fyi - можно узнать сколько платят известные компании своим сотрудникам на разных должностях. Полезно, когда вы ищите работу на новом для себя рынке. В том числе, предоставляет сервис по зарплатным переговорам. Готовы сделать все за вас)
Я не пользовался помощью платных сервисов, поэтому если у кого-то есть такой опыт напишите в комментариях. От себя точно могу рекомендовать -📕 Cracking the coding interview. Тема переговоров часто затрагивается в главах вступления.
#interview #random #thoughts
Please open Telegram to view this post
VIEW IN TELEGRAM
haseeb qureshi
Ten Rules for Negotiating a Job Offer
When the story of how I landed a job at Airbnb went viral, I was surprised at how infatuated people were with my negotiations. Media stories portrayed me as some kind of master negotiator—a wily ex...
👍15🔥5❤2😱1
Swift for Algorithm 👌
Swift - классный язык программирования, но он не очень удобен при решения алгоритмических задач на собеседованиях. Я не владею, на должном уровне, другими языками, поэтому выбора нет.
На алгоритмических секциях отводится ограниченное количество времени на решение задачи, обычно 30-50 минут, за это время нужно понять что от тебя хотят, придумать решение и написать его. Поэтому экономить приходится каждую минуту.
Хочу обратить внимание на несколько хаков, которые помогли мне ускорить и повысить качество решений на интервью в такие компании, как Yandex, Bloomberg и AliExpress.
1. Работа со строками
В Swift это какая-то мутота. Мы не можем спокойно обратиться по порядковому номеру символа в строке и получить объект типа Character. Нужно создавать объект типа String.Index и работать с ним.
⛔️
let myString = "Hello, Swift!"
let index = myString.index(myString.startIndex, offsetBy: 7)
let characterAtIndex = myString[index]
print(characterAtIndex) // "S"
Мне больше нравится работать со строкой, как обычным массивом. У меня это получается лаконичней и быстрее. Но уточните насколько критично для решения выделение доп памяти под новый массив. Например, на собеседовании в Яндексе такой прием был допустим и интервьюер согласился, что работа со строками не сильно место в Swift)
❇️
let collectionOfCharacters = Array(myString)
let characterAtIndex = collectionOfCharacters[7]
print(characterAtIndex) // "S"
2. Сложность стандартных операций
Системные методы могут работать не так, как мы предполагаем. Был случай, что я неправильно оценил сложность алгоритма, потому что не учел сложность метода removeAll у коллекций. В документации сказано, она О(n) я подумал, что константная. ⛔️
❇️ array = [] - решает проблему выше.
3. Сигнатура метода
Обычно алгоритмические задачи предполагают написание одного метода. Прежде чем ее решать нужно выяснить все требования. Часть из них можно поместить сразу в параметры (при условии, что вы пишите все с чистого листа без шаблона, как на LeetCode).
Допустим в задаче есть двумерный массив, тогда метод может выглядеть следующим образом:
⛔️
func testMethod(array: [[Int]]) -> Int {
let n = array.count
let m = array[0].count
...
}
Но можно лучше и вам уже не придется высчитывать границы этого массива:
❇️
func testMethod(array: [[Int]], n: Int, m: Int) -> Int { … }
На первый взгляд мелочь, но когда у вас жесткий дедлай и волнение, даже в таких мелочах можно лажануть)
4. Функции высшего порядка
Ну это база. Допустим есть массив целых чисел, нужно найти сумму всех элементов.
var numbers = [0, 1, 2, 3]
⛔️
var sum = 0
for number in numbers {
sum += number
}
print(sum)
❇️
let sumFast = numbers.reduce(0, +)
print(sumFast)
Кода меньше, пишется быстрее - профит. Map, filter, compactMap, reduce и forEach пригодятся в 80% задач на собесах.
5. Работа со словарем
Первый вариант стремный, второй православный. Тут даже не обсуждается.
var dict: [Int: Int] = [:]
⛔️
if dict[0] != nil {
dict[0]! += 1
}
❇️
dict[0, default: 0] += 1
P.S. Если интересно узнать больше об алгоритмах и собеседованих - ставьте лайки. Расскажу, как я готовился и получил предложение о работе на One day offer в Яндексе.
#swift #interview #algorithm
Swift - классный язык программирования, но он не очень удобен при решения алгоритмических задач на собеседованиях. Я не владею, на должном уровне, другими языками, поэтому выбора нет.
На алгоритмических секциях отводится ограниченное количество времени на решение задачи, обычно 30-50 минут, за это время нужно понять что от тебя хотят, придумать решение и написать его. Поэтому экономить приходится каждую минуту.
Хочу обратить внимание на несколько хаков, которые помогли мне ускорить и повысить качество решений на интервью в такие компании, как Yandex, Bloomberg и AliExpress.
1. Работа со строками
В Swift это какая-то мутота. Мы не можем спокойно обратиться по порядковому номеру символа в строке и получить объект типа Character. Нужно создавать объект типа String.Index и работать с ним.
⛔️
let myString = "Hello, Swift!"
let index = myString.index(myString.startIndex, offsetBy: 7)
let characterAtIndex = myString[index]
print(characterAtIndex) // "S"
Мне больше нравится работать со строкой, как обычным массивом. У меня это получается лаконичней и быстрее. Но уточните насколько критично для решения выделение доп памяти под новый массив. Например, на собеседовании в Яндексе такой прием был допустим и интервьюер согласился, что работа со строками не сильно место в Swift)
❇️
let collectionOfCharacters = Array(myString)
let characterAtIndex = collectionOfCharacters[7]
print(characterAtIndex) // "S"
2. Сложность стандартных операций
Системные методы могут работать не так, как мы предполагаем. Был случай, что я неправильно оценил сложность алгоритма, потому что не учел сложность метода removeAll у коллекций. В документации сказано, она О(n) я подумал, что константная. ⛔️
❇️ array = [] - решает проблему выше.
3. Сигнатура метода
Обычно алгоритмические задачи предполагают написание одного метода. Прежде чем ее решать нужно выяснить все требования. Часть из них можно поместить сразу в параметры (при условии, что вы пишите все с чистого листа без шаблона, как на LeetCode).
Допустим в задаче есть двумерный массив, тогда метод может выглядеть следующим образом:
⛔️
func testMethod(array: [[Int]]) -> Int {
let n = array.count
let m = array[0].count
...
}
Но можно лучше и вам уже не придется высчитывать границы этого массива:
❇️
func testMethod(array: [[Int]], n: Int, m: Int) -> Int { … }
На первый взгляд мелочь, но когда у вас жесткий дедлай и волнение, даже в таких мелочах можно лажануть)
4. Функции высшего порядка
Ну это база. Допустим есть массив целых чисел, нужно найти сумму всех элементов.
var numbers = [0, 1, 2, 3]
⛔️
var sum = 0
for number in numbers {
sum += number
}
print(sum)
❇️
let sumFast = numbers.reduce(0, +)
print(sumFast)
Кода меньше, пишется быстрее - профит. Map, filter, compactMap, reduce и forEach пригодятся в 80% задач на собесах.
5. Работа со словарем
Первый вариант стремный, второй православный. Тут даже не обсуждается.
var dict: [Int: Int] = [:]
⛔️
if dict[0] != nil {
dict[0]! += 1
}
❇️
dict[0, default: 0] += 1
P.S. Если интересно узнать больше об алгоритмах и собеседованих - ставьте лайки. Расскажу, как я готовился и получил предложение о работе на One day offer в Яндексе.
#swift #interview #algorithm
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33🔥7❤5❤🔥2👏2
Как One Day Offer в Yandex стал One Month Offer 🤡
One Day Offer - это когда вам обещают провести процесс отбора в компанию быстро и в случае успеха сделать оффер за 1-2 дня.
На собесе в Яндексе я уже бывал однажды, но оподливился и больше не совался.
Несколько месяцев назад я порешивал задачи на Leetcode, и тут мне пришло письмо попробоваться в Яндекс. Без каких-то серьезных намерений, я решил проверить свои силы в бою.
Первый этап
Отборочный тур на платформе Yandex.Contest. Проходил за неделю до основного этапа, что как бы намекает на долгий процесс.
Платформа от Яндекса максимально неудобная. Вы должны использовать стандартные методы для ввода/вывода в консоль, чтобы заполнить модели из командной строки и вывести результат. Кто-то вообще делал такой треш на Swift?
Два из трех задания были, на мой взгляд, адекватными для позиции iOS разработчика. Третье, для прохождения всех тестовых условий, требовало сложный алгоритм. Классический BFS не был достаточно оптимальным. Все ли разработчики могут его написать? Сомневаюсь. Конечно, это остается на усмотрение организаторов, но я считаю ту мач.
Второй этап
Если вы набираете достаточно количество баллов, то вам ставят 2 этапа в субботу на 1ч каждый. Первая встреча предполагала решения двух небольших задач на проектирование фичи, по 30 минут на каждую - System Design на минималках. Не буду сливать прям точь-в-точь, но это достаточно классические задания на интервью. Например: “Спроектируй модуль, который отвечает за поиск с подсказками при вводе запроса”. Необходимо выяснить требования, ограничения и предложить решение. Сразу писать код не нужно, можно просто порассуждать и назвать плюсы/минусы такого решения. Потом можно накидать протоколов/классов/методов и углубится в реализацию при необходимости.
Третий этап
Достаточно классическая задача на строки. По ощущениям Leetcode medium. Решение было в лоб и не требовало специфичного алгоритма. В комменты закину список материалов, которые рекомендуют рекрутеры для подготовки.
Вечером мне написали, что все классно и я хорошо справился, но на финал команды позвать не готовы, потому что ищут мидлов) Через несколько дней ко мне вернулся рекрутер и сказал, что появились подходящие позиции, но нужно пройти еще один технический этап перед финалом.
Четвертый этап
Проводила команда Яндекс.Маркет. Длительность 1.5ч. Начали с решения алгоритмической задачи, опять попалась на строки и тоже среднего уровня. Потом интервьюер давал примеры кода, в которых нужно было что-то поправить или просто ответить на вопросы. Последняя задача подразумевала проектирование модуля для работы с логами и требовала хорошего понимания, как использовать дженерики в Swift.
Было задание, где фигурировал
Пятый этап
Через несколько дней рекрутер предложил пообщаться с руководителями из двух команд. Это финальные собеседования, без технических заданий. Я рассказал о себе, а мне презентовали продукт и команду. Обе команды были готовы сделать мне оффер, осталось только выбрать в какую из них я хотел бы пойти.
Я выбрал позицию в команде, которая предполагала, что я смогу нанимать и лидить команду. На согласование оффера ушло больше недели, а все наше общение и прохождение пяти этапов растянулось больше чем на месяц. Так One Day Offer превратился в One Month Offer 😄
Яндекс не смог предложить те условия, на которые я рассчитывал, но были готовы продолжить общение и попробовать договорится о более высоком вознаграждении или должности. Это не входило в мои планы, поэтому я отказался.
Позиция, на которую был оффер, предполагала переезд в Белград, как альтернативу можно было выбрать Армению и Казахстан.
Норм ли такой хайринг флоу или напряжно?
#interview #yandex
One Day Offer - это когда вам обещают провести процесс отбора в компанию быстро и в случае успеха сделать оффер за 1-2 дня.
На собесе в Яндексе я уже бывал однажды, но оподливился и больше не совался.
Несколько месяцев назад я порешивал задачи на Leetcode, и тут мне пришло письмо попробоваться в Яндекс. Без каких-то серьезных намерений, я решил проверить свои силы в бою.
Первый этап
Отборочный тур на платформе Yandex.Contest. Проходил за неделю до основного этапа, что как бы намекает на долгий процесс.
Платформа от Яндекса максимально неудобная. Вы должны использовать стандартные методы для ввода/вывода в консоль, чтобы заполнить модели из командной строки и вывести результат. Кто-то вообще делал такой треш на Swift?
let N = Int(readLine()!)!
var graph: [Int: [Int: Bool]] = [:]
for _ in 0..<N {
let line = readLine()!.split(separator: " ").map { Int($0)! }
let A = line[0]
let B = line[1]
graph[A, default: [:]][B] = true
}
Два из трех задания были, на мой взгляд, адекватными для позиции iOS разработчика. Третье, для прохождения всех тестовых условий, требовало сложный алгоритм. Классический BFS не был достаточно оптимальным. Все ли разработчики могут его написать? Сомневаюсь. Конечно, это остается на усмотрение организаторов, но я считаю ту мач.
Второй этап
Если вы набираете достаточно количество баллов, то вам ставят 2 этапа в субботу на 1ч каждый. Первая встреча предполагала решения двух небольших задач на проектирование фичи, по 30 минут на каждую - System Design на минималках. Не буду сливать прям точь-в-точь, но это достаточно классические задания на интервью. Например: “Спроектируй модуль, который отвечает за поиск с подсказками при вводе запроса”. Необходимо выяснить требования, ограничения и предложить решение. Сразу писать код не нужно, можно просто порассуждать и назвать плюсы/минусы такого решения. Потом можно накидать протоколов/классов/методов и углубится в реализацию при необходимости.
Третий этап
Достаточно классическая задача на строки. По ощущениям Leetcode medium. Решение было в лоб и не требовало специфичного алгоритма. В комменты закину список материалов, которые рекомендуют рекрутеры для подготовки.
Вечером мне написали, что все классно и я хорошо справился, но на финал команды позвать не готовы, потому что ищут мидлов) Через несколько дней ко мне вернулся рекрутер и сказал, что появились подходящие позиции, но нужно пройти еще один технический этап перед финалом.
Четвертый этап
Проводила команда Яндекс.Маркет. Длительность 1.5ч. Начали с решения алгоритмической задачи, опять попалась на строки и тоже среднего уровня. Потом интервьюер давал примеры кода, в которых нужно было что-то поправить или просто ответить на вопросы. Последняя задача подразумевала проектирование модуля для работы с логами и требовала хорошего понимания, как использовать дженерики в Swift.
Было задание, где фигурировал
DispatchQueue.main.sync
и интервьюер пытался меня убедить, что он всегда приводит к deadlock. Помните, что это не так)Пятый этап
Через несколько дней рекрутер предложил пообщаться с руководителями из двух команд. Это финальные собеседования, без технических заданий. Я рассказал о себе, а мне презентовали продукт и команду. Обе команды были готовы сделать мне оффер, осталось только выбрать в какую из них я хотел бы пойти.
Я выбрал позицию в команде, которая предполагала, что я смогу нанимать и лидить команду. На согласование оффера ушло больше недели, а все наше общение и прохождение пяти этапов растянулось больше чем на месяц. Так One Day Offer превратился в One Month Offer 😄
Яндекс не смог предложить те условия, на которые я рассчитывал, но были готовы продолжить общение и попробовать договорится о более высоком вознаграждении или должности. Это не входило в мои планы, поэтому я отказался.
Позиция, на которую был оффер, предполагала переезд в Белград, как альтернативу можно было выбрать Армению и Казахстан.
Норм ли такой хайринг флоу или напряжно?
#interview #yandex
🤡19🔥10❤2👍2👏2
System Design interview для мобильщика
Давно не было постов в канал, был занят переездом и энергии для творчества не хватало) Пора бы это исправить. Я уже писал об алгоритмических и поведенческих секциях в крупных компания на интервью. На позиции младших разработчиков редко достается этап по системному дизайну (System design), а на сеньера и выше почти всегда.
Из своего опыта могу сказать, что в том или ином виде он может встретиться не только в FAANG. Даже маленькие и средние компании хотят проверить навыки в проектировании систем. Верхнеуровнево задача может звучать: “Как бы ты сделал Instagram” или “Давай спроектируем месенджер”. И в такой формулировке много вероятных сценариев развития диалога с собеседующим. Задача может быть и с меньшим уровнем неопределенности “Реализуй модуль для загрузки фотографий”.
Как бы не стояла задача, к ним можно и нужно подготовиться. Хочу порекомендовать мой топ материалов.
✅ Туториал, который научит решать комплексные задачи на проектирование уровня FAANG-interview. Есть разборы популярных вопросов в письменном виде и записи на YouTube
✅ Канал AndreyTech нравится подача и нет сомнений в опыте и экспертизе автора. 3 года лидил в Meta, сейчас тим лид в Bloomberg. Более того, Андрей был моим руководителем в МТС)
✅ Обычно для решения задачи отводится от 40 до 60 минут. Терять время на то, чтобы освоить новый интерфейс какого-то графического редактора слишком дорого. Лучше сделать это заранее и потренироваться в рисовании графиков и схем. Мой фаворит - excalidraw
✅ На литкоде можно найти отдельные курсы (не входят в основую подписку) и подборки задач без классических алгоритмов, а именно на проектирование классов/модулей. Например можно выбрать задачи, которые попадались на собеседовании в Google
Дальше я хочу окунуться глубже в некоторые темы касательно system design для мобильных разработчиков.
PS. Новости из туманного альбиона и мои впечатления от жизни в Лондоне в следующих постах.
#interview #lookingforjob #development
Давно не было постов в канал, был занят переездом и энергии для творчества не хватало) Пора бы это исправить. Я уже писал об алгоритмических и поведенческих секциях в крупных компания на интервью. На позиции младших разработчиков редко достается этап по системному дизайну (System design), а на сеньера и выше почти всегда.
Из своего опыта могу сказать, что в том или ином виде он может встретиться не только в FAANG. Даже маленькие и средние компании хотят проверить навыки в проектировании систем. Верхнеуровнево задача может звучать: “Как бы ты сделал Instagram” или “Давай спроектируем месенджер”. И в такой формулировке много вероятных сценариев развития диалога с собеседующим. Задача может быть и с меньшим уровнем неопределенности “Реализуй модуль для загрузки фотографий”.
Как бы не стояла задача, к ним можно и нужно подготовиться. Хочу порекомендовать мой топ материалов.
Дальше я хочу окунуться глубже в некоторые темы касательно system design для мобильных разработчиков.
PS. Новости из туманного альбиона и мои впечатления от жизни в Лондоне в следующих постах.
#interview #lookingforjob #development
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - weeeBox/mobile-system-design: A simple framework for mobile system design interviews
A simple framework for mobile system design interviews - weeeBox/mobile-system-design
🔥16👍5❤3