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
Я заметил, что людей прибавилось, и я незнаком со многими лично. Самое время представиться, как следует.

Меня зовут Чистяков Вадим, я занимаюсь 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
Выберите правильный ответ:
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
Please open Telegram to view this post
VIEW IN TELEGRAM