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
Что хотелось бы чаще видеть в канале?
Anonymous Poll
37%
Истории из моего опыта
31%
Поиск работы за рубежом
63%
Разборы вопросов с собесов
42%
Ссылки на интересные статьи об IT/iOS/Swift etc
25%
Разработка и IT в целом
❓ 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
Задай свой вопрос!
Мы с коллегой решили запустить канал, где будем публиковать ответы на вопросы по iOS разработке)
Если StackOverflow или ChatGPT не смог вам помочь, то обращайтесь к нам.
https://t.me/iAskiOS
Мы с коллегой решили запустить канал, где будем публиковать ответы на вопросы по iOS разработке)
Если StackOverflow или ChatGPT не смог вам помочь, то обращайтесь к нам.
https://t.me/iAskiOS
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.
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
Посмотрел я значит все сессии по 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
Хабр
На смену CoreData пришёл новый фреймворк SwiftData. Разбираемся, как он упрощает хранение данных
Фреймворк для хранения данных Core Data был написан еще во времена Objective-C. Многим iOS-разработчикам хотелось иметь более современный инструмент, который бы поддерживал все новые возможности языка...
Многопоточность
Часто такие примеры встречаются на собеседовании. Нужно ответить в каком порядке будут выведены цифры в консоль.
Проверим ваши знания и внимательность.
UPD: Изначально скрин был неправильный, сорри)
#interview #ios #swift
Часто такие примеры встречаются на собеседовании. Нужно ответить в каком порядке будут выведены цифры в консоль.
Проверим ваши знания и внимательность.
UPD: Изначально скрин был неправильный, сорри)
#interview #ios #swift
Выберите правильный ответ:
Anonymous Quiz
4%
1 2 3 6
24%
1 2 6 3
10%
2 6 3
44%
1 2 6 7 3
18%
1 2 6 3 7 5 4
Выберите правильный ответ:
Anonymous Quiz
1%
1 2 3 6
4%
1 2 6 3
3%
2 6 3
37%
1 2 6 7 3
54%
1 2 6 3 7 5 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
Войти вАйти 👨💻
Знаю, что многие ищут свою первую работу в качестве разработчика. Это всегда было непросто, в том числе и для меня. Расскажу свой путь вкатывания)
С информатикой познакомился лет в 12, участвовал в разных олимпиадах по спортивному программированию на Паскале и даже что-то выигрывал на районном и областном уровне.
Когда пришло время поступать в вуз, почему то не пошел на чисто кодерские специальности, а выбрал более аналитическую информационную безопасность. Пока учился в МИРЭА, мне особо не нравилось то, что преподают. Было очень много математических дисциплин, которые казались скучными и сложными. Программирование было слабым, да и тоже не цепляло особо своими задачами. Единственный проект за все время учебы, который мне понравился и запомнился, это ЭЦП методом RSA на С#.
На 4 курсе параллельно я работал в баре и думал, как и куда вкатываться. По ИБ предлагали меньше вакансий и мне это не заходило. Начал сразу, без какой-либо подготовки, откликаться на вакансии, в основном стажер-джун разработчик. Иногда даже не имея релевантных знаний по описанию вакансии, но с большим желанием получить первую работу. Сколько заняли поиски по времени уже не вспомню. Помню только, как купил Макбук на последние деньги в феврале 2017, в апреле пригласили пройти отбор на курсы по iOS от Сбертеха. Было 2 этапа интервью я их прошел, но не получил ответа. Подумал, что меня не взяли и оставили без фидбека, как это часто бывает в индустрии. Но оказалось интересней. Эйчар позвонила узнать почему я не прихожу на занятия и выяснилось, что письмо отправили моему однофамильцу, и в итоге я пропустил первые 3 урока на курсе)
Занятия проходили оффлайн в офисе Сбертеха примерно 3 раза в неделю часа по 2, поэтому я сразу бросил работу в баре и сконцентрировался на курсах по максимуму. Изучали Objective-C на протяжении 3 месяцев. Было набрано 2 группы, человек по 15 и по итогу работу получило человек 8-10 после собеседования в команды Сбербанк-Онлайн. Зп дали всем одинаковую (на сколько мне известно) 70к на руки. Мы были молодые зеленые и никто не торговался - все были рады такой возможности.
Сейчас это звучит как сказка, и такие, на первый взгляд, легкие вкатывания сложно представить на текущем рынке. Остается только верить, что те, кто пашет и работает над собой регулярно, смогут дойти до своей цели и не сдаться)
Вид из моего первого офиса прилагается)
#it #experience #random
Знаю, что многие ищут свою первую работу в качестве разработчика. Это всегда было непросто, в том числе и для меня. Расскажу свой путь вкатывания)
С информатикой познакомился лет в 12, участвовал в разных олимпиадах по спортивному программированию на Паскале и даже что-то выигрывал на районном и областном уровне.
Когда пришло время поступать в вуз, почему то не пошел на чисто кодерские специальности, а выбрал более аналитическую информационную безопасность. Пока учился в МИРЭА, мне особо не нравилось то, что преподают. Было очень много математических дисциплин, которые казались скучными и сложными. Программирование было слабым, да и тоже не цепляло особо своими задачами. Единственный проект за все время учебы, который мне понравился и запомнился, это ЭЦП методом RSA на С#.
На 4 курсе параллельно я работал в баре и думал, как и куда вкатываться. По ИБ предлагали меньше вакансий и мне это не заходило. Начал сразу, без какой-либо подготовки, откликаться на вакансии, в основном стажер-джун разработчик. Иногда даже не имея релевантных знаний по описанию вакансии, но с большим желанием получить первую работу. Сколько заняли поиски по времени уже не вспомню. Помню только, как купил Макбук на последние деньги в феврале 2017, в апреле пригласили пройти отбор на курсы по iOS от Сбертеха. Было 2 этапа интервью я их прошел, но не получил ответа. Подумал, что меня не взяли и оставили без фидбека, как это часто бывает в индустрии. Но оказалось интересней. Эйчар позвонила узнать почему я не прихожу на занятия и выяснилось, что письмо отправили моему однофамильцу, и в итоге я пропустил первые 3 урока на курсе)
Занятия проходили оффлайн в офисе Сбертеха примерно 3 раза в неделю часа по 2, поэтому я сразу бросил работу в баре и сконцентрировался на курсах по максимуму. Изучали Objective-C на протяжении 3 месяцев. Было набрано 2 группы, человек по 15 и по итогу работу получило человек 8-10 после собеседования в команды Сбербанк-Онлайн. Зп дали всем одинаковую (на сколько мне известно) 70к на руки. Мы были молодые зеленые и никто не торговался - все были рады такой возможности.
Сейчас это звучит как сказка, и такие, на первый взгляд, легкие вкатывания сложно представить на текущем рынке. Остается только верить, что те, кто пашет и работает над собой регулярно, смогут дойти до своей цели и не сдаться)
Вид из моего первого офиса прилагается)
#it #experience #random
Please open Telegram to view this post
VIEW IN TELEGRAM
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
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
Две работы 👨💻 👨💻
Был у меня такой опыт и пришло время порефлексировать о нем и поделиться результатами эксперимента. Больше хотел попробовать для нового экспириенса и понять, как я себя буду ощущать при таком ритме жизни.
Работы были в разных часовых поясах, поэтому в совместительстве проблем не было. Созвоны и обязательные активности не накладывались друг на друга. На мой взгляд, такой вариант самый простой, иначе два компа и постоянные отмазки почему вы не придёте на митинг. Свободное время и силы на другие активности тоже оставались при правильном планировании дня и задач.
Если кто-то хочет прям жестко погрузиться в тему нескольких работ/проектов одновременно рекомендую https://overemployed.com. Тут найдете ответы на все ваши вопросы)
Суммарно выходило 11-12к$ в месяц - обе удаленки. Для себя решил, что мне это не подходит на тот момент точно, и не находил мотивацию продолжать.
Какие выводы я сделал?
Это история не масштабируема (хотя некоторым удавалось совмещать немыслимое количество работ) и не приносила никакого профита кроме денежного.
Некоторые, кто в теме, могут сказать, что 2 работы = 2 одновременных опыта. Да, но иногда этот опыт может быть негативный и полностью разъебать вас в лоскуты так, что за комп больше не захочется садиться)
Я не могу и не хочу заниматься вещами, которые не интересны, не драйвят и не дают ничего кроме денег. Деньги в чистом виде не делают счастливее. Если кто-то думает, что при росте зарплаты даже на 100% уровень счастья также вырастает в прямой зависимости, то это только первый месяц, а дальше привыкаете к новому уровню и опять мало)
Эксперимент длился 6 месяцев, потом оставил одну работу, которая нравилась больше и казалась перспективней. Не жалел об эксперименте и о том, что я его прекратил по собственной инициативе ни разу. Удалось выйти со здоровой психикой и без выгораний) Если есть финансовые проблемы и срочно нужно налутать бабок, то вариант рабочий и может помочь. Других смыслов для себя не нахожу.
Сейчас интересней развиваться как разработчик, менеджер и ментор,CEO, легенда и искать другие способы дополнительного заработка и пассивного дохода.
Знаю, что некоторые выбирают такой путь чтобы накопить котлету и все бросить (движение - FIRE) мне оно не близко. Почему бы просто не заниматься тем, что хочешь прямо сейчас, а не ждать еще 10-20 лет и не кайфовать в моменте. Мне ближе идея диверсификации доходов и инвестирование для спокойной жизни, но не так агрессивно, как FIRE.
Если есть вопросы пишите в коменты или личку. Если хотите рассказать о своем отношении или опыте в двух работах, то тоже велком
#It #random
Был у меня такой опыт и пришло время порефлексировать о нем и поделиться результатами эксперимента. Больше хотел попробовать для нового экспириенса и понять, как я себя буду ощущать при таком ритме жизни.
Работы были в разных часовых поясах, поэтому в совместительстве проблем не было. Созвоны и обязательные активности не накладывались друг на друга. На мой взгляд, такой вариант самый простой, иначе два компа и постоянные отмазки почему вы не придёте на митинг. Свободное время и силы на другие активности тоже оставались при правильном планировании дня и задач.
Если кто-то хочет прям жестко погрузиться в тему нескольких работ/проектов одновременно рекомендую https://overemployed.com. Тут найдете ответы на все ваши вопросы)
Суммарно выходило 11-12к$ в месяц - обе удаленки. Для себя решил, что мне это не подходит на тот момент точно, и не находил мотивацию продолжать.
Какие выводы я сделал?
Это история не масштабируема (хотя некоторым удавалось совмещать немыслимое количество работ) и не приносила никакого профита кроме денежного.
Некоторые, кто в теме, могут сказать, что 2 работы = 2 одновременных опыта. Да, но иногда этот опыт может быть негативный и полностью разъебать вас в лоскуты так, что за комп больше не захочется садиться)
Я не могу и не хочу заниматься вещами, которые не интересны, не драйвят и не дают ничего кроме денег. Деньги в чистом виде не делают счастливее. Если кто-то думает, что при росте зарплаты даже на 100% уровень счастья также вырастает в прямой зависимости, то это только первый месяц, а дальше привыкаете к новому уровню и опять мало)
Эксперимент длился 6 месяцев, потом оставил одну работу, которая нравилась больше и казалась перспективней. Не жалел об эксперименте и о том, что я его прекратил по собственной инициативе ни разу. Удалось выйти со здоровой психикой и без выгораний) Если есть финансовые проблемы и срочно нужно налутать бабок, то вариант рабочий и может помочь. Других смыслов для себя не нахожу.
Сейчас интересней развиваться как разработчик, менеджер и ментор,
Знаю, что некоторые выбирают такой путь чтобы накопить котлету и все бросить (движение - FIRE) мне оно не близко. Почему бы просто не заниматься тем, что хочешь прямо сейчас, а не ждать еще 10-20 лет и не кайфовать в моменте. Мне ближе идея диверсификации доходов и инвестирование для спокойной жизни, но не так агрессивно, как FIRE.
Если есть вопросы пишите в коменты или личку. Если хотите рассказать о своем отношении или опыте в двух работах, то тоже велком
#It #random
Please open Telegram to view this post
VIEW IN TELEGRAM
Overemployed ®
Overemployed ® - Work Two Remote Jobs, Reach Financial Freedom
A community that helps professionals earn a double income and achieve financial freedom. Learn to work two remote jobs and invest wisely. No more layoffs.
Жизнь в Черногории 🏝
Прожил почти год тут. Самое время описать свои ощущения. Закинул на VC небольшую статью о моем опыте.
#random #experience
Прожил почти год тут. Самое время описать свои ощущения. Закинул на VC небольшую статью о моем опыте.
#random #experience
Please open Telegram to view this post
VIEW IN TELEGRAM
vc.ru
Мысли о переезде и жизни в Черногории спустя год — Вадим Чистяков на vc.ru
Предыстория