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
Предыстория
Было неожиданно, что на хабре так порвутся от безобидного взгляда на мой опыт жизни в Черногории. Уже нашитпостили овер 400+ комментов и 29к просмотров. Хотя на VC вообще всем ровно. Еще хабр додумался о каждом комменте сообщать мне на почту, сначала даже не понял, что с ней случилось. Хорошо хоть это мусорный адрес, как раз для спама)
Некоторым не хватило деталей, но мне было неинтересно погружаться в глубокую личную экономику или политические проблемы государства. Поэтому статья получилось больше про ощущения, мысли и переживания, чем прикладной гайд (их уже душнилы накатали в интернетах много). Без негатива)
Некоторые посчитали, что я омрачаю действительно красивую страну. Поэтому закину фоточек сюда.
P.S. Если у вас остались вопросы после прочтения, велком в комментарии. Если вы уже в Черногории пишите в личку - потусим)
Некоторым не хватило деталей, но мне было неинтересно погружаться в глубокую личную экономику или политические проблемы государства. Поэтому статья получилось больше про ощущения, мысли и переживания, чем прикладной гайд (их уже душнилы накатали в интернетах много). Без негатива)
Некоторые посчитали, что я омрачаю действительно красивую страну. Поэтому закину фоточек сюда.
P.S. Если у вас остались вопросы после прочтения, велком в комментарии. Если вы уже в Черногории пишите в личку - потусим)
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...
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