Vadim Chistiakov | IT
1.85K subscribers
67 photos
2 videos
101 links
Сообщество разработчиков со всего мира: boosty.to/chistiakov
Менторство: https://vadim-chistiakov.github.io
Автор: @chvadim

Рассказываю о программировании и жизни разработчика в Лондоне на Global Talent Visa. Делюсь мыслями, опытом и знаниями.
Download Telegram
Вторая часть вопросов для поведенческого интервью. Здесь собрал вопросы, которые чаще всего слышал сам на собеседованиях, как в российские компании, так и в зарубежные.
Некоторые из них могут пересекаться с первой частью.
 
Главное на таких интервью транслировать "флаги" собеседующему. Ваша задача разрекламировать себя со всех сторон, а интервьюеру узнать о вашем позитивном опыте как можно больше.
 
Я бы рекомендовал каждому, вне зависимости от уровня, составить список из 15-20 вопросов/ответов и готовиться по нему. Если предстоящее интервью кажется особенным, (допустим это компания мечты) можно подогнать ответы под описание вакансии и проекта этой компании.

https://gist.github.com/vadim-chistiakov/7daf45b8ff9819ff799861d54c3891cb
Неплохая, на мой взгляд, статья о том, как устроена память. Хорошо разобрана часть о Side Table. По большому счету, прикладного значения я в этом не вижу, но задушнить на интервью вполне могут. Полезна чисто для кругозора и углубленного понимания некоторых аспектов памяти в Свифт

https://habr.com/ru/companies/hh/articles/546856/
Как составлять "рабочее" резюме?

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

Хочу порекомендовать сайт https://www.overleaf.com/gallery/tagged/cv с готовыми шаблонами, он помог мне составить резюме.

Оно точно работает, я успел проверить его опытным путем) в РФ и на иностранном рынке труда, в том числе FAANG. Сейчас думаю поменять некоторые пункты, и постараться показать свои достижения и результаты выразительней.
 
Несколько рекомендаций, которые отмечают по составлению резюме:

1. Только одна страница - must have (Можно больше если вы гуру с 10+ лет опыта)
2. Таймлайн от последнего места работы к первому
3. Убрать нерелевантный или очень короткий опыт
4. Показывать, что получилось достичь, улучшить и к чему это привело тебя или компанию
5. Больше цифр - это все любят! "Улучшил метрику Х на 35%. Изменения Y увеличили Z в 3 раза и тд"
6. Автовыгруженное резюме с HH - red flag🚩 для многих компаний
7. Фото, возраст, пол для иностранных компаний лучше не указывать
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
Я заметил, что людей прибавилось, и я незнаком со многими лично. Самое время представиться, как следует.

Меня зовут Чистяков Вадим, я занимаюсь iOS разработкой более 6 лет. Сейчас живу в Черногории в городе Будва. На данный момент работаю на позиции iOS Team Lead в компании Prequel.

Немного фактов обо мне:

- Работал в разных компаниях. Рад и очень благодарен этому опыту.
https://www.linkedin.com/in/vadim-chistiakov/

- Люблю развлекаться на литкоде, как душнила)
https://leetcode.com/Titaniys/

- Занимаюсь менторингом. Это одна из причин, почему я завел этот канал. Классно помогает прокачивать свои знания, в особенности soft skills.
https://vadim-chistiakov.github.io/services/

- В свободное время люблю путешествовать и пробовать новое. Побывал в 18 странах.
https://my.flightradar24.com/VadimChistiakov

- Катаюсь на сноуборде зимой, а летом на велике) Да и в целом люблю экстрим и активный отдых. Больше о мире моими глазами тут
https://instagram.com/vadim_chist
Хочу упростить навигацию по каналу и обозначить темы, о которых мне интересно писать и размышлять.

1. Этот канал создавался, как помощник изучающим #swift и #ios в целом. Постараюсь фокусироваться на шеринг знаний в этих областях, как main stream канала.

2. Многие из вас в активном поиске новой работы или даже первой. Я уверен, что мой опыт в проведении и прохождении технических интервью будет релевантным. Топик - #interview #lookingforjob

3. Я долгое время хотел найти работу за рубежом и больше путешествовать. Поэтому хочу делиться своим опытом, как digital nomad и опытом переезда на постоянку в другую страну #relocate #remote  #digitalnomad

4. Думаю, что так или иначе будут проскальзывать общие темы об #it и #programming через призму моего опыта и наблюдений #experience.

5. Все, что не попадет в обозначенные темы, но очень захочется запостить помечу #random
 
Чтобы получше узнать, что вам вообще интересно, запущу опросы. Не стесняйтесь голосовать они будут анонимны)
Провел 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
Stack vs Heap 👨‍💻
 
Базовый вопрос на любой уровень кандидата, но часто слышу невнятные ответы. Собрал полный ответ, который зачастую, хотят услышать на интервью:

Stack(Стек):
• Статичная память. Выделение происходит только во время компиляции.
• Стек имеет структуру данных LIFO (последний пришел – первый вышел)
• Очень быстрый доступ
• При вызове функции все локальные экземпляры этой функции помещаются в текущий стек. И как только функция завершит выполнение, все экземпляры будут удалены из стека.
• Данные, хранящиеся в стеке, находятся там только временно, пока функция не завершит работу и не вызовет автоматическое освобождение всей памяти в стеке.
• Каждая область действия (scope) в вашем приложении (например, внутреннее содержимое метода) будет предоставлять необходимый объем памяти.
• Cтек не используется с объектами, которые изменяют размер.
• Каждый поток имеет собственный стек
• В стеках хранятся типы значений(value type), такие как структуры и перечисления, скаляры.
• Если размер вашего типа значения может быть определен во время компиляции или если ваш тип значения не содержит рекурсивно/не содержит ссылочного типа, тогда потребуется выделение стека.
• Value type не увеличивает счетчик ссылок. Но если ваш value type содержит внутренний reference typy, для его копирования потребуется вместо этого увеличить счетчик ссылок его дочерних элементов.
 
Heap(Куча):
• Динамическое распределение памяти и распределение происходит во время выполнения.
• К значениям можно обращаться в любое время через адрес памяти.
• Нет ограничений на объем памяти
• Доступ к объектам медленнее чем на стеке
• Когда процесс запрашивает определенный объем памяти, куча ищет адрес памяти, удовлетворяющий этому запросу, и возвращает его процессу.
• Когда память больше не используется, процесс должен сказать куче освободить этот раздел памяти.
• Требуется потокобезопасность.
• Куча доступна всем потокам
• Если размер вашего типа значения(value type) не может быть определен во время компиляции (из-за протокола/дженерика) или если ваш value type рекурсивно содержит/содержится внутри ссылочного типа (помните, что замыкания также являются ссылочными типами), тогда потребуется выделение кучи.
• Классы хранятся в динамической памяти.
 
Выделение кучи медленнее, чем выделение стека, не только из-за более сложной структуры данных — оно также требует безопасности потоков. Каждый поток имеет свой собственный стек, но куча используется совместно всеми, что требует синхронизации.

#interview #ios #swift
Channel name was changed to «Vadim Chistiakov | IOS Development»
OOP vs POP

И так, продолжаю рубрику - батл #versus
 
Объектно-ориентированное программирование (ООП) и протокольно-ориентированное программирование (POP) представляют различные подходы к структурированию и проектированию кода. Вот некоторые сходства и различия между ними, которые стоит упоминуть, отвечая на такой вопрос:
 
Сходства:
Оба подхода стремятся к абстракции и моделированию реального мира с помощью объектов и их взаимодействия.
И ООП, и POP позволяют использовать полиморфизм для работы с разными типами данных, обрабатывая их через общий интерфейс.
Оба подхода поддерживают концепцию инкапсуляции, позволяющую скрыть внутренние детали реализации и предоставить доступ только к необходимой функциональности.
 
Различия:
⚠️ ООП сосредоточено на использовании классов и наследования для организации кода. Классы могут наследовать свойства и методы от других классов и создавать иерархию наследования. В POP используются протоколы вместо классов для определения требований к функциональности.
⚠️ Наследование, может привести к сложным иерархиям классов и проблемам с тесной связностью. В особенности, множественного наследования (отсутствует в Swift). В POP используется композиция, где типы состоят из более специализированных компонентов через соответствие (conform) протоколам, обеспечивая более гибкую и модульную организацию кода.
⚠️ В ООП функциональность определяется внутри классов и их методов. В POP функциональность определяется через протоколы. Протоколы могут иметь требования к методам и свойствам, и типы должны реализовать эти требования.
⚠️ В POP протоколы позволяют использовать расширения протоколов для предоставления реализации методов по умолчанию. Это делает код более гибким и легким для расширения новыми функциями или высичляемыми свойствами. В ООП расширение функциональности класса может быть достигнуто через наследование или создание подклассов.

Какой подход выбрать зависит от требований и конкретной ситуации. В некоторых случаях ООП может быть предпочтительным, особенно если требуется сильная связь между объектами и наследование функциональности. В других случаях POP может предоставить более гибкую и модульную организацию кода с помощью протоколов и композиции. Apple транслирует в своих библиотеках именно POP, поэтому при разработке приложений на Swift он используется чаще.

#interview #swift #ios
Задай свой вопрос!

Мы с коллегой решили запустить канал, где будем публиковать ответы на вопросы по iOS разработке)

Если StackOverflow или ChatGPT не смог вам помочь, то обращайтесь к нам.

https://t.me/iAskiOS
Channel photo updated
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
SwiftData

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

Досадно немного, но зато сэкономил себе пару часов времени.
https://habr.com/ru/companies/surfstudio/articles/742696/

Ссылки на сессии по SwiftData с WWDC23:
Meet SwiftData
Build an app with SwiftData
Model your schema with SwiftData
Migrate to SwiftData
Dive deeper into SwiftData

UPD: Если кто-то может подкинуть еще интересных сессий напишите в комменты

#ios #swift
Многопоточность

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

UPD: Изначально скрин был неправильный, сорри)
#interview #ios #swift