Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: mvc4 5
Як працює дизайн команда у продуктовій розробці.

Автор: Герман Шалов

<p>Дизайн &mdash; это значительная часть разработки продукта, так как отвечает за репрезентацию сервиса в глазах потребителя, а также в значительной мере определяет вектор развития продукта. Тем не менее, понимание дизайна и его процессов даже у состоявшихся специалистов всё ещё далеко от идеала &mdash; рынок и индустрия меняется слишком быстро, и устоявшиеся понятия даже двухлетней давности давно пора пересматривать.</p> <p>На вебинаре обсудим, что представляет из себя продуктовый дизайн, в чем его особенности и как определить его место в цикле продуктовой разработки.</p> <p>&nbsp;</p> <p><strong>План вебинара:</strong></p> <p>1. Что такое дизайн продукта и чем он отличается от веб- и мобильного дизайна.</p> <p>2. Что определяет компетенцию продуктового дизайнера.</p> <p>3. Как создается дизайн продукта: подходы и методы.</p> <p>4. Как организованы процессы внутри команды.</p> <p>5. Кросскомандная коммуникация - о чем и как говорить с дизайнерами.</p> <p>6. Почему процессы работают плохо и как их чинить.</p> <p>7. Инструментарий продуктового дизайнера.</p> <p>8. Автоматизация: дизайн-киты, дизайн-системы, гайдлайны, тексты.</p> <p>9. Ответы на вопросы.</p> <p><strong>Целевая аудитория:</strong></p> <p>Вебинар будет интересен всем, кто соприкасается с дизайном внутри продукта &mdash; проектным и продуктовым менеджерам, разработчикам, аналитикам.</p> <p>Рядовые сотрудники лучше поймут работу параллельной команды, её нужды и особенности процессов, а лиды с помощью полученных знаний смогут наладить коммуникацию и межкомандные процессы.</p> <p>Также вебинар будет крайне полезен веб-дизайнерам и дизайнерам мобильных приложений, которые хотят глубже погрузиться в создание продуктов, расширить круг своих компетенций и перейти &quot;на следующий уровень&quot;.</p>
З Сибіру до Кремнієвої долини. Особистий досвід.

Автор: Олександр Залуцький

<p>Приглашаем вас на онлайн встречу с <a href="https://www.linkedin.com/in/alex-zalutskiy-40a76a48/">Алексом Залуцким</a>, Senior Business Analyst, Epam Systems, California, на которой вы сможете в прямом эфире задать вопросы, связанные с профессиональным и карьерным ростом в IT. Это будет краткий рассказ программиста, перековавшегося в менеджеры и аналитики ради мечты. История про то, как не сдаваться даже в самой безвыходной ситуации.</p> <p>Какие трудности и вызовы возникают на пути начинающего айтишника и какие есть методы для их решения. А также много практических примеров без заумной теории.</p> <p>&nbsp;</p> <ol> <li>Сибирь: <ul> <li>Школа</li> <li>Первая программа в 12 лет.</li> <li>Олимпиада по информатике.</li> <li>Первая игра на qbasic и Pascal.</li> </ul> </li> <li value="2">Москва <ul> <li>Мест нет, но Вы держитесь)))</li> </ul> </li> <li value="3">Питер <ul> <li>Мест нет, но может в связисты пойдешь?</li> <li>Олимпиада среди вузов на космическую тематику.</li> <li>Дипломная работа и автоматизация космоса.</li> </ul> </li> <li value="4">Опять Москва <ul> <li>Первая работа Python-программистом.</li> <li>Перековаться в C++ инженера по безопасности.</li> <li>SQL девелопер в страховой компании.</li> </ul> </li> <li value="5">Как переехать в Силиконовую долину из Москвы? <ul> <li>Системный аналитик.</li> <li>Бизнес аналитик.</li> <li>Менеджер проектов.</li> <li>Работа в почти западной компании.</li> </ul> </li> <li value="6">Переезд внутри компании <ul> <li>Бизнес-анализ в супер технологичной компании.</li> <li>Первые шаги на новой местности.</li> <li>Ретроспектива 10 летнего пути.</li> <li>Можно было переехать быстрее за 2 года просто девелопером.</li> </ul> </li> <li value="7">Плюсы и минусы США</li> </ol> <p>&nbsp;</p> <p><strong>Целевая аудитория:</strong> IT сециалисты, которые столкнулись с трудностями, хотят найти новые пути и резервы для успешной карьеры, профессионального и личного роста, а также те, кого интересует работа в США.</p>
Як стати FrontEnd-розробником

Автор: Тисячний Влад

<p dir="ltr">FrontEnd Developer - это разработчик, который создает клиентскую сторону веб-сайтов. Ваши любимые сервисы - социальные сети, видеохостинги, интернет-магазины - любой интернет-продукт необходимо преподнести пользователю в привлекательном и удобном для него виде. В такой задаче никак не обойтись без фронтенд специалиста.</p> <p dir="ltr">Какие требования выдвигают работодатели к FrontEnd-разработчику? Что нужно знать и уметь, с чего начать и как лучше спланировать обучение. На вебинаре, вы получите ответы на все интересующие вас вопросы и составите целостное представление о профессии фронтендщика.&nbsp;</p> <p dir="ltr"><strong>План вебинара:</strong></p> <ol dir="ltr"> <li role="presentation">Пару слов об авторе. Как я начинал свой путь во FrontEnd.</li> <li role="presentation">Какие бывают типы FrontEnd-разработчиков?</li> <li role="presentation">Какие технологии должен знать каждый фронтенд специалист?&nbsp;</li> <li role="presentation">Версии JavaScript (5/6/7): разница, зачем их выпускают и почему их надо учить?</li> <li role="presentation">Что такое сборщики пакетов (Webpack, Gulp) и зачем они нужны?</li> <li role="presentation">Назначение менеджера пакетов NPM</li> <li role="presentation">Что такое фреймворк?</li> <li role="presentation">Фреймворки Angular/React/Vue/React Native: ключевые концепции, примеры кода, что и когда лучше использовать?</li> <li role="presentation">Рекомендуемая литература, полезные ссылки</li> <li role="presentation">Ответы на вопросы</li> </ol> <p dir="ltr"><strong>Целевая аудитория:</strong></p> <p dir="ltr">Все, кого интересует веб разработка, а также те, кто уже понял, что хочет стать FrontEnd-разработчиком.</p>
Unit-тестування Angular додатків.

Автор: Антон Нєстєров

<p>Юнит тестирование - &nbsp;это не только способ удостоверится в качестве своего программного продукта, но и также полезный инструмент документирования поведения вашего приложения.</p> <p>Если Вы начинающий разработчик &ndash; то наш вебинар поможет Вам познакомиться с азами тестирования, опытные специалисты смогут почерпнуть новые знания по работе с Jasmine и Karma, а также задать вопросы, связанные с практикой их применения на проекте.</p> <p>Данный вебинар покрывает основы тестирования, мы с Вами рассмотрим:</p> <ul> <li>как создавать шаблон теста прямо из консоли с помощью Angular CLI;</li> <li>рассмотрим тест фреймворк Jasmine;</li> <li>познакомимся со стандартным test-runner-ом Karma.</li> </ul> <p>Также рассмотрим несколько сценариев тестирования компонентов в Angular. Разберёмся как тестировать сервисы, пайпы и директивы.</p> <p>&nbsp;</p> <p><strong>План вебинара:</strong></p> <p>1) Юнит тестирование. Введение.</p> <p>2) Настройка приложения для юнит-тестирования.</p> <p>3) Karma and Jasmine.</p> <p>4) Тестирование сервисов.</p> <p>5) Тестирование компонентов.</p> <p>6) Сценарии компонентного тестирования.</p> <p>7) Тестирование пайпов.</p> <p>8) Тестирование директив.</p> <p><strong>Целевая аудитория:</strong></p> <p>Данный вебинар будет интересен как начинающим разработчикам, так и разработчикам с небольшим опытом, которые занимаются поддержкой или рефакторингом старых приложений. Также вебинар будет интересен начинающим AQA специалистам.</p>
Шахова IT Арена для програмістів. III тур - Прохідна пішака та рокірування

Автор: Євген Волосатов

<p>Если ты силен в программировании и готов к сражению &ndash; докажи это в честном бою! Участвуй в Первой шахматной IT Арене, которая проходит на ITVDN с 9 июня по 7 июля 2019 года. <a href="https://itvdn.com/ru/news/article/chess-arena" target="_blank">Подробности.</a></p> <p>Состязания проходят в 4 тура.</p> <p>16 июня состоялось подведение итогов первого тура - определение победителей, разбор задач и постановка заданий второго тура. Смотрите <a href="https://www.youtube.com/watch?v=nXt0C5jDHNI" target="_blank">видео запись</a>.</p> <p>Для решения заданий перейдите <a href="https://itvdn.com/ru/start-practice" target="_blank">по ссылке.</a></p> <p>Решения&nbsp;заданий второго тура принимаются до 12:00 часов 23 июня.&nbsp;</p> <p>В каждом туре есть призы и подарки - трое лучших получают подписку ITVDN на три месяца, а остальные участники, выполнившие все задания, получают в подарок 1 видео курс на выбор.</p> <p><strong>Тема задач третьего тура </strong>- Проходная пешка и рокировка.</p> <p>На решение задач даётся 1 неделя, до начала следующего тура. На следующем вебинаре 30 июня <strong>мы рассмотрим решения задач, определим победителей третьего тура</strong> и расскажем об условиях новых задач.</p> <p>Задания можно решать на одном из 5 языков программирования -&nbsp; <strong>Python, C#, Java, C++ или Pascal.</strong></p> <p>До встречи на поле сражений!</p>
Першоквітневі змагання з програмування на C#, Java, C++, Pascal

Автор: Євген Волосатов

<p>Впервые на ITVDN! Соревнование для начинающих программистов в режиме реального времени. За полтора-два часа вам нужно будет решить наилучшим образом 6 задач на том языке программирования, который вам ближе.</p> <p>Результаты каждого будут видны сразу. Тот, кто успешно выполнит все 6 заданий, получит в подарок 1 любой видео курс ITVDN. А тот, кто решит все задачи быстрее всех &ndash; подписку на месяц с доступом ко всем курсам, представленным в <a href="https://itvdn.com/ru/catalog">Каталоге</a>.</p> <p>Также во время вебинара каждая задача будет разобрана ведущим.&nbsp; Будет весело! Участвуйте в соревнованиях и приводите болельщиков!</p> <p>&nbsp;</p> <p><strong>План вебинара:</strong></p> <p>&nbsp;&nbsp;&nbsp; 0. Перекличка и разминка участников соревнования.</p> <p>&nbsp;&nbsp;&nbsp; 1. for (i = 1; i &lt;= 6; i ++) {</p> <p>&nbsp;&nbsp;&nbsp; 2. Формулировка условия i-ой задачи.</p> <p>&nbsp;&nbsp;&nbsp; 3. Время для самостоятельного решения.</p> <p>&nbsp;&nbsp;&nbsp; 4. Разбор алгоритма i-ой задачи &laquo;у доски&raquo;.</p> <p>&nbsp;&nbsp;&nbsp; 5. Просмотр и разбор присланных программ. }</p> <p>&nbsp;&nbsp;&nbsp; 6. Подведение итогов и награждение победителей.</p> <p>&nbsp;</p> <p><strong>Предварительные требования:</strong></p> <p>&nbsp; Базовые знания алгоритмов.</p> <p>&nbsp; Базовые знания одного из языков программирования: C#, Java, C++, Pascal.</p> <p>&nbsp;</p> <p><strong>Целевая аудитория:</strong></p> <p>&nbsp;&nbsp;&nbsp; Программисты, Инженеры, IT-студенты, школьники</p>
Огляд сучасної розробки під .NET

Автор: Владислав Омельчук

<p>На двух онлайн встречах, которые состоятся 12 и 13 сентября, мы рассмотрим современные технологии и подходы при создании приложений на платформах .NET , .NET Core, мы разберем, что необходимо знать разработчику в современных условиях, создадим небольшое ASP.NET Core приложение, подключим к нему источники данных, разберем и реализуем систему логгирования, разберем и используем систему контроля версий, создадим набор контейнеров и опубликуем наше приложение на Azure cloud в кластер Kubernetes.</p> <p><strong>Программа: </strong></p> <p>1) Обзор .Net Framework</p> <ul> <li>.Net 4.6.2</li> <li>ASP.NET (Web forms, MVC, OWIN)</li> <li>Desktop applications (Win Forms, WPF, UWP)</li> <li>.NET Core</li> <li>ASP.NET Core</li> </ul> <p>2) Работа с хранилищами данных</p> <ul> <li>SQL (SQL server)</li> <li>Data access (EF 6 + Core, Dapper, NHibernate, ADO.Net, Microsoft.EnterpiseLibrary)</li> <li>NoSQL (Redis, MongoDb, CosmosDb, Dynamodb)</li> </ul> <p>3)&nbsp;Логгирование и мониторинг</p> <ul> <li>Serilog , log4net</li> <li>ELK (elastic search + kibana)</li> <li>Zabbix</li> </ul> <p>4) Системы контроля версий</p> <ul> <li>TFS (VSTS)</li> <li>SVN</li> <li>GIT</li> </ul> <p>5) Системы обмена сообщениями</p> <ul> <li>Service bus</li> <li>RabbitMQ</li> <li>Kafka</li> </ul> <p>6) Cloud development</p> <ul> <li>Azure</li> <li>AWS</li> <li>Google cloud</li> </ul> <p>7) Контейнеризация приложений</p> <ul> <li>Docker</li> <li>Docker Swarm</li> <li>Kubernetes</li> </ul> <p>Технологии: .NET , .NET Core, SQL Server, Entity framework, Dapper, Redis, MongoDB, Git, Service Bus, Azure, Docker, Kubernetes.</p> <p>Для участия в вебинаре обязательна регистрация. На email, который Вы укажете в регистрационной форме, 12 сентября будет отправлено письмо-приглашение со ссылкой на трансляцию.</p>
Співбесіда з Android. 250+ питань для Junior, Middle, Senior

Автор: Влад Сверчков

Junior 1.1 Базовые вопросы 1.2 Алгоритмы, структуры данных, хранение данных 1.3 Работа с сетью 1.4 Многопоточность, Java Core, RxJava 1.5 Android SDK, Kotlin 1.6 Другое 1.7 Практические задачи   Middle 2.1 Базовые вопросы 2.2 Алгоритмы, структуры данных, хранение данных 2.3 Работа с сетью 2.4 Многопоточность, Java Core 2.5 Android SDK 2.6 Kotlin 2.7 RxJava 2.8 Тестирование 2.9 Другое   Senior 3.1 Базовые вопросы, архитектура 3.2 Многопоточность 3.3. Java Core, Android SDK, Kotlin Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 3 ноября 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Если вы готовитесь к собеседованию по Android — или проходить, или проводить — возможно, этот перечень вопросов пригодится вам. Редакция DOU поинтересовалась у разработчиков, проводящих технические интервью в компании в Украине, о чем они спрашивают кандидатов. Это уже десятая статья из рубрики «100+ технических вопросов»; ознакомиться с вопросами для других языков программирования на DOU.ua на украинском языке вы сможете, перейдя по ссылке.   Junior   Базовые вопросы 1. Назовите основные принципы ООП. 2. Что такое класс? Что такое интерфейс? Какая между ними разница? 3. Назовите базовые типы данных. 4. В чем отличие примитивных типов от объектов? 5. Какая разница между абстрактным классом и интерфейсом? 6. Что такое паттерны проектирования? Какие паттерны вы знаете? 7. Чем отличается Java от Kotlin?   Ответы на некоторые из этих вопросов вы можете найти в видео курсе Kotlin, а также статье Kotlin vs Java: что лучше для Android-разработки? и вебинаре Структуры данных в Java и Kotlin.   Алгоритмы 8. Что такое алгоритм и как выбрать правильный? 9. Что такое сложность алгоритма? Как и с помощью чего её можно вычислить? 10. Что такое нотация big-O? 11. Что такое рекурсия? 12. Какие алгоритмы сортировки вы знаете?   Структуры данных 13. Расскажите о таких структурах данных, как List, Set, Map? 14. Какая разница между ArrayList и LinkedList?   Ответы на эти вопросы вы найдёте в вебинаре Структуры данных в Java и Kotlin.   Хранение данных 15. Как можно хранить данные в Android? 16. Когда следует использовать SharedPreferences? 17. Из каких компонентов состоит библиотека Room? 18. Что такое @PrimaryKey, @Ignore, @Embedded, @TypeConverters в Room? 19. Для чего нужна миграция в базах данных?   Ответы на некоторые из этих вопросов вы найдете в видео курсе SQLite. Базы данных в Android приложениях (урок 2, урок 3).   Работа с сетью 20. Что такое JSON, XML? 21. Какие варианты реализации работы с сервером? 22. Что такое REST?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2), Android Углубленный (урок 9).   Многопоточность 23. Что такое процесс? 24. Что такое поток? 25. Для чего используют ключевое слово synchronized? 26. Зачем синхронизировать потоки? 27. Какая разница между синхронным и асинхронным исполнением? 28. Как мы можем создать поток в Java? 29. Что такое deadlock? 30. Какие варианты реализации многопоточности есть в Android? 31. Что такое main thread? Какие операции нужно выполнять на main thread, а какие нельзя делать?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).   Java Core 32. Что такое Exceptions? Зачем они нужны? 33. Зачем используют ключевые слова final, finally и finalize? 34. Что такое абстрактный класс? Что такое интерфейс? 35. Что такое анонимный класс? Использовали ли на практике? Для чего? 36. Что такое статический класс (static class)? 37. Что такое enum? Зачем его используют? 38. Можем ли мы сделать конструктор приватным? 39. Какая разница между ключевыми словами throw и throws? 40. Какая разница между Error и Exception? 41. Какая разница между checked и unchecked exception? 42. Что такое Object class и какие методы он имеет? 43. Какие существуют модификаторы доступа для классов? Какая разница между ними? 44. Что такое итератор? 45. Как безопасно удалить элемент из коллекции? 46. Зачем нам переопределять equals() и когда не нужно это делать? 47. Какой должен выполняться контракт при переопределении equals()?   Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Базовый (урок 2, урок 4, урок 6, урок 7, урок 8, урок 9).   RxJava 48. В чем разница между map() и flatMap() в RxJava? 49. Когда используете observeOn(), а когда subscribeOn()? 50. Как можно обработать ошибки в RxJava? 51. Какие schedulers знаете в RxJava? Назовите их отличия. 52. Что такое Disposable? Зачем его используют? 53. В чем разница между Hot и Cold Observables? Назовите примеры в RxJava.   Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).   Android SDK 54. Какие базовые Android-компоненты можете назвать? 55. Что такое ContentProvider? 56. Какие типы Service знаете? 57. Что такое BroadcastReceiver и какие типы существуют? 58. Для чего используют механизм фрагментов? 59. Опишите жизненный цикл Activity. 60. Опишите жизненный цикл Fragment. 61. Есть ли у Fragment контекст? Если да, то как его получить? 62. Чем отличается Fragment от Activity? Зачем выдумали Fragment? 63. Что такое изменение конфигурации? Что происходит с приложением на Android при этом? 64. Что такое Intent? Что такое explicit/implicit Intent? 65. Что такое SharedPreferences? 66. Что такое ANR? Как избегать таких ситуаций? 67. Что такое DataBinding? 68. Что такое LiveData? Какие виды знаете? 69. Как создать ViewModel? Почему создавать ViewModel нужно именно так? 70. Что такое Context и зачем он? 71. Что такое AndroidManifest.xml? Зачем его используют? Что мы можем там декларировать? 72. Перечислите layout, с которыми работали? Когда и какой нужно использовать? 73. Расскажите, что нужно реализовать, чтобы отобразить список строк в RecyclerView. 74. Объясните паттерн ViewHolder. Для чего он применяется? 75. Что такое DiffUtil? 76. Расскажите о ConstraintLayout. 77. Для чего используют Group, Guideline, Barriers, Chains в ConstraintLayout? 78. У вас есть Activity с двумя Fragment'ами, у одного есть кнопка, у другого TextView. При нажатии кнопки изменяется TextView. Как вы реализуете это? 79. Что такое WorkManager? Когда используем?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 2, урок 4, урок 5, урок 7), Android Углубленный (урок 3, урок 6, урок 9), Android User Interface (урок 3), Создание пользовательских элементов управления в Android (урок 9).   Kotlin 80. Как вы понимаете термин Null safety? 81. Что такое nullable и non-nullable типы? Какая разница между val и var? 82. Как задекларировать getter/setter для property? 83. Почему классы Kotlin по умолчанию final? 84. Что такое sealed class? 85. Что такое data classes? 86. Какая разница между sealed class и enum? 87. Почему у Kotlin нет checked exceptions? 88. Что такое Extensions? Использовали ли вы их на практике? 89. Что такое перегрузка операторов (operator overloading)? Зачем нужен этот механизм? 90. Как работают примитивы в Kotlin? 91. Расскажите об объекте Unit в Kotlin. 92. Расскажите об объекте Any в Kotlin. 93. Как создать Singleton объект в Kotlin? 94. Что такое companion object? 95. Чем отличается const val от val? 96. Какие знаете модификаторы доступа? 97. Что означает модификатор lateinit? 98. Coroutines – что это за механизм? Использовали ли его на практике? 99. Зачем нужны Coroutines? Чем они лучше обычных тредов? 100. Что такое suspend-функция? 101. Что такое Job? 102. Что такое Dispatcher? Какие есть виды? 102. Что такое Scope? 103. Как писать Java compatible API в Kotlin?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.   Другое 104. Расскажите, что такое memory leak. Как избежать? 105. Как бы вы искали memory leak? 106. Расскажите о Dependency injection. Какие варианты реализации в Android? 107. Для чего нужна система контроля версий? 108. Что такое Git? 109. Для чего используем .gitignore-файл? 110. Расскажите о командах push, pull, fetch в Git? 111. Что такое merge и rebase? Какая разница? 112. Что такое CI? Зачем используем?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Dependency Injection в Android-разработке, Основы работы с Git.   Практические задачи 113. Разверните Linked List. Отпишите о зацикленности в LinkedList или ее отсутствии. 114. Напишите функцию, которая вернет n первых неотъемлемых чисел: un nMin(items: List<String>, n: Int): List<Int> { //return n minimal non negative items } Пример вызова функции: nMin(listOf("1","-11","-12","22","100","-30",”2”, “5”), 3) Ожидаемый результат: [1, 22, 100] 115. Что будет выведено в консоль? Объясните результат. var globalId = 0 data class User(val name: String) { val id = globalId++ } fun main(args: Array<String>) { val user1 = User("User") val user2 = User("User") println(user1) println(user2) println(user1 == user2) } 116. Исправьте все ошибки в коде: class Animal class Dog: Animal {} 117. Для коллекции items: val items = listOf(1, -2 ,-3 , 4, 5, 0, 2, -2) Подсчитайте количество отрицательных элементов. Вычислите среднее арифметическое значение отрицательных и неотрицательных чисел.   Middle   Базовые вопросы 1. Нужно ли придерживаться SOLID-принципов? Почему да/нет? 2. Какие паттерны использовали на практике? Приведите примеры. 3. Опишите паттерны MVP и MVVM. Какие из них использовали? Какой предпочитаете? Знаете ли/использовали другие паттерны? 4. Почему слой Model должен быть отделен от View или Presenter? 5. Что такое инверсия зависимости (dependency inversion)? 6. Объясните пример паттерна Singleton. Где его использовать в Android? 7. Объясните пример паттерна Observer. Где его использовать в Android? 8. Объясните пример паттерна Builder. Где его использовать в Android? 9. Как вы понимаете термин «архитектура приложения»? Зачем это вообще нужно? Почему инженеры пытаются усложнить процесс разработки и тратят время на проектирование архитектуры? Может, лучше сэкономить ресурсы и пойти по простому пути — держать весь код в одном файле? 10. Что такое иммутабельный объект? Для чего его используют? Как сделать иммутабельный объект в Java? 11. MVP vs MVVM – в чем основное отличие?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Архитектура Android приложений (урок 1-5), Создание пользовательских элементов управления в Android (урок 4), SOLID принципы в Java.   Алгоритмы 12. Есть много алгоритмов сортировки. Возможно ли выбрать один самый быстрый и использовать его повсюду? Почему да/нет? 13. В чем сложность поиска произвольного элемента в ArrayList? В LinkedList? 14. Какие алгоритмы используют в Android/Java коллекциях под капотом?   Структуры данных 15. HashMap. Используете ли вы на практике? Если да, то зачем? Как она работает изнутри? 16. Какая разница между HashMap и LinkedHashMap? 17. Что такое бинарное дерево?   Сохранение данных 18. Как бы вы реализовали сохранение зашифрованных данных в SharedPreferences? Базу данных? 19. Как реализовать миграцию таблицы, где нужно из non-nullable поля сделать nullable поле?   Работа с сетью 20. Расскажите, какие методы можно применить в REST API? Зачем какой нужен? 21. Что можно использовать, кроме REST API, для работы с сервером?   Многопоточность 22. Что такое Thread Pool? Каковы его особенности? 23. Что такое Executor/ExecutorService? Какую задачу выполняют и как использовать? 24. Какие есть виды Executor? 25. Какая разница между методами start() и run() в классе Thread? 26. На что указывает ключевое слово synchronized? Какова его основная функция? 27. Модификатор volatile. Приходилось ли использовать? Зачем нужен? 28. Знаете ли вы о таком понятии, как «эффект гонки» (race condition)? Как это предотвратить? Какие механизмы в Java для предотвращения этого? 29. Что такое атомарная операция? 30. Как остановить поток в Java? Можно ли продолжить выполнение потока после его остановки? 31. Знаете ли вы о потокобезопасных коллекциях в Java/Android? Приходилось ли их использовать? 32. Какие стратегии можно применить, чтобы добиться потокобезопасности? 33. Какие варианты реализации потокобезопасности кода есть у Kotlin? 34. Как сделать переменную потокобезопасной? 35. Что такое Mutex и Monitor? Кто может выступать в роли монитора? 36. Что такое атомарные операции? 37. Почему инкрементация и операции с long не являются атомарными? 38. Какие классы атомарных переменных? 39. Что такое устаревшие данные (stale data)? Как избежать этого эффекта?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Android Углубленный (урок 5).   Java Core 40. Механизм Generics. Какую проблему решает? 41. Что такое soft reference, weak reference? 42. Что такое сериализация объекта? Какую проблему она решает? Какие стандартные механизмы у Java? 43. Какой контракт существует между equals() и hashCode()? 44. По вашему мнению, почему строки в Java сделаны иммутабельными? 45. Можем ли мы задекларировать пустой интерфейс? Если да, то зачем? 46. ​​Что такое String pool? Зачем он нужен? 47. Что такое StringBuilder, какую проблему он решает? 48. Что такое Stack в JVM и какие данные там хранятся? 49. Что такое Heap в JVM и какие данные там хранятся? 50. Что такое garbage collector, как он вообще работает? Каковы реализации GC?   Ответы на некоторые из этих вопросов вы найдете в вебинаре Что такое Java EE и Java Core и видео курсе Java Углубленный (урок 5).   Android SDK 51. Назовите основные изменения в версиях Android. 52. Как реализовать IPC в системе Android? 53. Как реализовать отложенную задачу? 54. Что такое Doze Mode? 55. Что такое App Standby mode? 56. Что такое AIDL и зачем он нужен? Какие типы данных поддерживаются? 57. Что такое Multidex? 58. Что такое KeyStore API? 59. Что такое PendingIntent? 60. Как безопасно хранить user-sensitive данные? 61. Какие методы защиты приложения? 62. Что такое SSL/TLS Pinning? Как его реализовать в Android? 63. Что такое ViewBinding? 64. Для чего нужны методы onSaveInstanceState/onRestoreInstanceState? Что такое permissions? Как запросить permissions? 65. Что такое Intent? Что такое Explicit/Implicit Intent? Что такое Sticky Intent, Pending Intent? 66. Какие типы данных мы можем положить в Bundle? 67. В чем разница между Serializable и Parcelable? 68. Если фрагмент для работы нуждается во входных данных, каким образом будет правильно передать их фрагменту? 69. Что такое ViewModel? Какие ее свойства? 70. Объясните работу ViewModel с Jetpack. Что такое ViewModelProviders, ViewModelProvider.Factory? 71. Что такое LiveData? Зачем её используете? 72. Какая связь между LiveData и LifecycleOwner? 73. Приведите пример LifecycleOwner? 74. Что такое Looper? 75. Использовали ли HaMeR фреймворк (Handler/Message/Runnable)? Для чего он? 76. Какую информацию содержит контекст? Какие типы контекста знаете? 77. Для чего используют Content Provider? 78. Что такое Data Binding? Что такое View? 79. Преимущества Fragments против View? 80. Как работает Content Provider? 81. Какая разница между Single Activity и Multiple Activity? 82. Какие виды Context знаете? Где какой использовать? 83. Объясните работу BroadcastReciever и его реализацию. 84. Зачем LocalBroadcastManager? 85. Для чего нужен MotionLayout? 86. Опишите, как реализовать анимацию в MotionLayout. 87. Как можно обнаружить проблемы в скорости UI и устранить их? 88. Расскажите о вариантах реализации custom view. 89. Что делают методы onMeasure, onLayout, onDraw во View? 90. Как воплотить анимацию при переходе между Activity-фрагментами? 91. Когда необходимо использовать foreground service вместо service? 92. Когда использовать workmanager, а когда service? 93. Есть ли у workmanager лимиты для выполнения работы? 94. Расскажите о Jetpack Compose. Зачем придумали основной принцип работы, как устроено? 95. Что такое WakeLock? 96. Что такое AlarmManager? Какие особенности работы?   Ответы на некоторые из этих вопросов вы найдете в видео курсах Разработка приложений под Android. Базовый курс (урок 4, урок 7), Android Углубленный (урок 6, урок 8), Создание пользовательских элементов управления в Android (урок 9).   Kotlin 97. Чем отличается работа с Exceptions в Kotlin и Java? 98. Что такое платформенные типы? 99. Что такое нелокальный return? 100. Для чего нужны reified generics? 101. Какая разница между Unit, Any, Nothing? 102. Расскажите о функциях высшего порядка, лямбда, функциях, которые могут использоваться в качестве аргумента. 103. Что такое inline-модификатор? Noinline? 104. Какая разница между crossinline и noinline? 105. Какие типы конструкторов вы знаете? 106. Что такое Flow? Что такое SharedFlow? 107. В чем разница методов run, let, apply, also, with, use? 108. Что произойдет, если в классе переопределить метод hashCode следующим образом: override fun hashCode(): Int = Random.nextInt()? А если так: override fun hashCode(): Int = 1? 109. Расскажите о Flow. В чем разница между Hot и Cold Flow? 110. Что такое деструктурирующее объявление? Что нужно сделать, чтобы иметь возможность использовать его для своего класса? Какие проблемы могут возникнуть с таким объявлением? 111. Для чего использовать data class? Почему нельзя работать с обычным классом? 112. Приведите пример делегатов в Kotlin? 113. Как реализовать кастомный делегат? 114. Объясните, как работает suspen-функция? Что такое continuation? 115. Как обрабатывать ошибки в Coroutines? 116. Что такое SupervisorJob и когда применяется? 117. Как остановить/отменить Coroutines?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Kotlin.   RxJava 118. В чем разница между flatMap(), concatMap(), switchMap()? 119. Какие Subjects вы знаете в RxJava, чем отличаются от Observable? 120. Чем отличается Observable от Flowable? 121. Что такое backpreassure? Какие стратегии есть для решения? 122. Что такое Single, Maybe, Completable? 123. Какие варианты обработки ошибок есть, кроме onError?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Создание пользовательских элементов управления в Android (урок 1).   Тестирование 124. На какие группы можно поделить тесты (Unit (JUnit) и Instrumental или UI Tests (espresso))? 125. Чем отличаются Unit и UI тесты (контекст)? 126. Расскажите, какие библиотеки использовали для mock? 127. Как тестировать DB? 128. Как “замокать” network layer в инструментальных тестах?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Unit тестирование для Android разработчиков.   Другое 129. Расскажите, с какими DI-фреймворками работали. 130. Расскажите о Dagger Hilt.   Senior   Базовые вопросы 1. Расскажите о функциях высшего порядка. Когда они нужны? 2. Опишите, как происходит процесс деплоя Android-приложения. 3. Расскажите о многомодульной архитектуре. Зачем используют и когда ее нет смысла использовать? 4. Вам нужно написать простое приложение для работы с рецептами (несложное, имеет экран списка, поиска и детали). Оно должно работать с определенным API для получения/модификации вашего списка рецептов и хранить его локально в БД для отображения, если интернета нет. Опишите, как бы вы создавали приложение такого типа? Из каких уровней оно бы состояло, каково предназначение каждого уровня? Представьте, что в этом приложении необходимо добавить возможность изменять основную картинку рецепта (т. е. получать новые данные из галереи/камеры и загружать их на сервер через API) и это реализовано на экране с подробным описанием рецепта. Вам пришел запрос сделать такой же функционал и на экране список рецептов. Как вы это сделаете?   Архитектура 5. Как организовать CI/CD для Android-проектов? 6. Различия архитектурных подходов в Android. Какие и когда лучше использовать? 7. Как вы понимаете Clean Architecture? 8. Опишите основные отличия между MVC/MVP и MVVM. Как MVVM стал одним из рекомендованных паттернов?   Ответы на некоторые из этих вопросов вы найдете в видео курсе Архитектура Android приложений.   Многопоточность 9. Какие еще знаете механизмы синхронизации данных, кроме synchronized? 10. Что такое переключение контекста (context-switching), когда речь идет о многопоточности? 11. Что мы понимаем, когда говорим о «честной» блокировке (fair lock)?   Java Core 12. Если бы пришлось имплементировать иммутабельный класс на Java, как бы вы это сделали? 13. Что такое Java Memory Model? 14. Сравните принципы композиции и наследования (Composition vs Inheritance).   Android SDK 15. ViewModel сохраняет свое состояние при повороте экрана? Как это возможно? Можете ли предложить, как сделать такой механизм? 16. Android Architecture Components. Что из этого приходилось применять на практике? Какие задачи решали? 17. Приходилось ли исследовать «утечки» памяти? Какие инструменты использовали для этого? 18. Представьте, что у вас есть экран со списком товаров. Во время скроллинга вы замечаете, что рендеринг не плавный, в логах много фреймов скипается и вообще-то экран тормозит. Что будете делать, чтобы улучшить ситуацию? 19. Если бы была задача написать приложение для интернет-магазина с нуля, какие технологии/подходы выбрали бы? 20. Приведите пример применения GoF-паттернов в Android SDK.   Kotlin 21. Опишите взаимодействие кода Kotlin и Java. 22. Что изменилось в обработке ошибок в Kotlin, если сравнить с Java? 23. Что такое делегированные характеристики (Delegated properties)?   Благодарим за эту статью Виктора Чистякова, Михаила Дьяченко, Влада Тищенко, Александра Романишина, Андрея Люшенка, Дмитрия Пашко, Вячеслава Сергеева, Антона Козленка, Артема Грищука, Евгения Трощия, Романа Белоконя, Константина Красильникова, Сергея Харченка, Андрея Друка, Виктора Косенко.
Популярні мови програмування на 2019 рік

Автор: Армен Маїлян

Планируя новые вехи для своего образования, полезно оценить их полезность относительно запросов общества в целом и вашей сферы деятельности – в частности. Для разработчиков программного обеспечения, как начинающих - выбирающих для себя первый язык программирования, так и опытных – выбирающих второй, третий (и тд.) язык для изучения, важно понимать востребованность этого языка на рынке. Владеть современным языком, поддерживающим большинство актуальных парадигм и технологий очень важно. Но важно и чтобы такой язык предоставлял достаточный выбор вакансий при поиске работы. Рассмотрим несколько авторитетных рейтингов, составленных для языков программирования по результатам 2018 года.   1) Популярные языки программирования на 2019 по рейтингу TIOBE   Индекс TIOBE (TIOBE programming community index) - это один из известных индексов, показывающий степень востребованности языка программирования, анализируя данные запросов в поисковых системах. Обновляется данный индекс каждый в месяц. Рейтинг учитывает как количество квалифицированных инженеров во всем мире, так и количество образовательных курсов по различным языкам. Для расчета индекса TIOBE используются данные результатов поиска в популярных поисковых системах, полученных в Google, YouTube, Wikipedia, Bing, Yahoo !, Baidu, и Amazon. Важно отметить, что индекс TIOBE не называет победителя рейтинга - лучшим языком программирования или языком, на котором написано большинство строк кода. Детальнее с методикой получения этого индекса можно ознакомиться тут.   На первом месте продолжает оставаться Java. Однако, несмотря на то, что в сравнении с декабрем 2017 его позиции поднялся на 2.66, из графика, представленного ниже, видно – показатели этого языка падают после пика популярности в октябре 2018. Второе место занимает язык C, имея 14.282% в рейтинге. Третье место получил Python с 8.376%, сместив в этом рейтинге популярности С++. Позиция Python выросла по сравнению с декабрем 2017 и продолжает расти. Язык С++, в свою очередь, уступив третье место, занимает сейчас четвертое. Его популярность, как видно из графика, колеблется относительно 8%, имея на декабрь 2018 - 7.56%. Интересной особенностью этого индекса оказывается то, что Visual Basic .NET в настоящее время находится на пятой позиции с рекордно высоким для данного языка уровнем. Это очень неожиданно, ведь профессиональные разработчики программного обеспечения крайне мало используют Visual Basic. Стоит отметить, что язык SQL снова добавлен в индекс TIOBE с февраля 2018 года. Вследствие этого, для языка SQL нет недавней истории, и может показаться, что значимость SQL растет очень быстро.   2) Статистика GitHub по языкам программирования за 2018 год     Статистика использования языков программирования на площадке GitHub показывает, что лидером по применению продолжает быть язык JavaScript. Он остается бессменным лидером и в частных репозиториях, и в публичных, а также лидирует в репозиториях организаций всех размеров вне зависимости от региона расположения во всем мире. На втором месте, также без изменений значимости, находится Java. Третье место занимает Python, чья популярность, благодаря применению его в системах машинного обучения, выросла в 1.5 раза. Четвертое и пятое место соответственно занимают, PHP и C++. По сравнению с предыдущим годом можно отметить стремительный рост применения языка TypeScript – благодаря частоте его применения, в рейтинге он поднялся с 10 места на 7. Заметным оказалось падение популярности языка С. В этом году он «провалился» сразу на два пункта, занимая сейчас 9 место. Популярность Ruby падает. Начиная с 2015 года этот язык на GitHub последовательно «сползает» с 5 места на 10 в 2018 году. Стоит также отметить существенный рост частоты применения языка Kotlin. Несмотря на то, что он пока не входит в десятку - за 2018 год частота его использования в проектах выросла в 2.6 раза.   3) Рейтинг языков программирования на Stackoverflow по результатам 2018 года   Согласно данным опроса Stack Overflow’s 2018 Developer Survey, проводимого уже восьмой год среди более чем 100 000 разработчиков, есть несколько тенденций, которые отмечают редакторы самого StackOverflow: DevOps и машинное обучение являются сегодня важными тенденциями индустрии программного обеспечения. Языки и структуры, связанные с этими видами работ, находятся на подъеме, и разработчики, работающие в этих областях, получают самые высокие зарплаты. Python поднялся в рейтинге языков программирования, превзойдя C# по популярности в этом году, так же как он превзошел PHP в прошлом году. JavaScript, согласно данным StackOverflow, остается лидирующим языком среди использованых разработчиками. Следующим после JavaScript является SQL, занимающий второе место. Затем идут Java, Bash, Python, занимающие соответственно третье, четверное и пятое места. Кроме этих, озвученных результатов опроса, мы можем увидеть и другие тенденции среди языков из первой десятки. Из графика количества вопросов на StackOverflow по различным языкам программирования видно, что уровень интереса к Python не перестает расти, как это уже было сказано выше. Это происходит на фоне некоторого снижения количества вопросов по таким языкам как PHP, C++, Java, C#. Имеет смысл рассмотреть также позиции языков Objective-C и Swift в контексте разработки под iOs. Заметно, что популярность Objective-C стабильно падает. Swift уже сейчас занимает 12 место среди языков, получив 8.1% в рейтинге. В то же время Objective-C находится на 15 месте, имея 7.0%. Полезной для понимания рынка разработки будет и статистика зарплат специалистов, применяющих в разработке те или иные языки программирования:  Как мы видим, среди языков первой десятки снова выделяется Python - предоставляющий возможность получать высокую зарплату относительно молодым специалистам. Так разработчики Java, со сходным опытом, получают в среднем на 15% меньше, чем разработчики на Python, а разработчики на PHP – почти на 30% меньше. Среди же наиболее оплачиваемых знаний языков мы можем наблюдать навыки вланения Clojure, F#, Go, Skala и ряда других языков программирования не входящий в первую десятку.   4) Рейтинг языков программирования IEEE Spectrum за 2018   Следующий рейтинг представлен IEEE Spectrum — ежемесячным периодическим изданием, представляющим Институт инженеров электротехники и электроники. Данный институт является международной некоммерческой организацией, объединяющей сотни тысяч технических специалистов со всего мира. Результаты этого анализа остаются актуальными, хотя они и были представлены в июле 2018. Согласно этому рейтингу Python занимает первое место уже второй год подряд. Такую высокую популярность языка составители объясняют несколькими причинами: Во-первых, Python стал все чаще применяться как язык embedded разработки. Все больше современных микроконтроллеров получают достаточно мощности и памяти для размещения интерпретатора Python. Следующей причиной роста популярности Python составители рейтинга видят падение популярности языка R, применяемого в основном для обработки статистических данных. Данный язык последовательно терял очки популярности и опускался с 5 места в 2016 году до 6 места в 2017 году, и 7 места в 2018 году. Соответственно Python все чаще используется для обработки больших наборов данных в статистических исследованиях и задачах машинного обучения. Заметен в рейтинге IEEE Spectrum рост востребованности PHP - он поднимается с 8-го на 6-е место. Также, согласно данным этого рейтинга, несколько снизилась доля применения JavaScript   5) Статистика W3Techs для языков WEB-разработки на 2019 году   Для понимания изменения трендов WEB-разработки полезным будет рассмотреть статистику, предоставляемую w3techs.com. Данная статистика показывает количество сайтов, применяющих для своей работы те или иные языки и платформы. В WEB проектах, среди языков фронтенда, первое место по значимости стабильно удерживается JavaScript. Рассмотрим языки бэкенда: Тренды применения языков программирования в серверной части на 08.01.2019. Для бэкенда все еще востребованным остается PHP. Несмотря на незначительные потери позиций, на фоне роста популярности других языков программирования - много кода уже написано на PHP. Около 80% всех сайтов Интернета написаны с применением PHP в серверной части. При выборе языка для изучения стоит учитывать, что на сегодняшний день PHP применяется такими популярными сайтами: Facebook.com Wikipedia.org Vk.com Sina.com.cn 360.cn Aliexpress.com Wordpress.com Pinterest.com Cobalten.com Detik.com Также мы видим, что несколько упала популярность платформы ASP.NET, хотя она и не утратила второе место по частоте использования. Растет частота применения Java, Ruby, Scala и JavaScript (благодаря активному применению платформы Node.js). Отмечается уменьшение на общем числе сайтов процента применения Python.   6) Статистика вакансий ITJobsWatch   Статистика ITJobsWatch для вакансий постоянных сотрудников в Великобритании, отсортированная именно по языкам программирования, позволяет рассмотреть языки с точки зрения количества вакансий по ним за период в 6 последних месяцев.    Данный рейтинг начинается со значения 4, поскольку 1, 2 и 3 места занимают вакансии Agile Software Development, Developer и Finance. Из представленной таблицы можно увидеть, что среди общего количества вакансий лидирует SQL, затем идут JavaScript, C# и Java. Количество вакансий со знанием указанных языков относительно прошлого полугодия практически не изменилось. С другой стороны, их догоняют Python – уже находящийся на 5 месте и C++ - на 6 месте среди языков программирования в вакансиях разработчиков. На фоне общего количества вакансий падает доля запросов на разработчиков, владеющих PHP – на 17 пунктов и владеющих T-SQL – на 7 пунктов. Наибольшая медианная зарплата соответствует Python – 60 000 £ . 7) Данные для размышления   По данным крупнейшей социальной сети для профессионалов и поиска работы - LinkedIn, за 2018 год в ТОП 5 наиболее растущих по количеству вакансий входят: блокчейн-разработчик, инженер сферы машинного обучения, специалист по машинному обучению. Стоит отметить, что, согласно данным LinkedIn, в ТОП 20 навыков, которыми должен владеть соискатель работы в Индии входят среди прочих, в порядке убывания важности: Java, SQL, HTML, JavaScript, C++. Также, в ТОП 10 навыков, наиболее часто отмечаемых у себя среди представителей молодежи Индии, Бразилии, Индонезии и Южной Африки входят: C/C++, WEB-разработка и Java-разработка.   Выводы Легко заметить, что одни данные мировых рейтингов языков программирования несколько противоречат данным других рейтингов о тенденциях изменения популярности языков. Однако есть ряд трендов, которые можно четко выделить из всех предоставленных данных: Все они отмечают заметный рост запросов на разработчиков, применяющих Python – как в уже относительно устоявшихся сферах статистической обработки, BigData и машинного обучения, так и в WEB, и в embedded разработке. Python – однозначно стоит рассмотреть в качестве языка для изучения на 2019 год. JavaScript остается бессменным лидером фронтенда и постепенно набирает очки в бэкенде и мобильной разработке под Android и iOs. Java продолжает лидировать как в разработке под Android, так и в сфере Enterprise разработки. Постепенно проникает Java и в WEB-backend. C# несколько растерял свои позиции, однако он однозначно будет находиться среди первых мест, оставаясь главным языком экосистемы Microsoft с широчайшей поддержкой этой корпорации. Также не стоит забывать достаточно глубокое проникновение С# в WEB, относительную простоту изучения, а также активное применение этого языка в разработке игр (Unity, XBOX 360) и мобильных приложений (Xamarin). Неоднозначна позиция у C++. Несмотря на то, что этот язык все еще полноценно присутствует в ТОП 10 языков и активно применяется для разработки игр, приложений для мобильных платформ, десктопных приложений и в embedded разработке – все больше заметно вытеснение его с занимаемых позиций другими языками. Кроме того, стоит учитывать, что большинство разработчиков не рекомендуют его как первый язык для изучения, из-за его сложности. В разработке под iOs Swift уже обогнал Objective-C и разрыв все еще увеличивается. Значительная часть разработчиков не считает PHP – языком «будущих разработок», при этом признавая его однозначным лидером «сегодняшних разработок» в сфере бэкенда. Падение же популярности его будет явно достаточно длительным. Ряд языков, такие как Go, Kotlin, Ruby и др. имеет смысл рассмотреть в качестве второго или третьего языка для развития себя как разработчика программного обеспечения.   Возможно на основе представленных данных Вы придете к несколько иным для себя выводам. Со своей же стороны в новом 2019 году мы желаем, чтобы и наши, и Ваши выводы помогли Вам достигнуть успеха в изучении новых языков, и технологий.
Паралакс для 2D гри без нервів та милиць

Автор: Дар'я Коновалова

Недавно в моей жизни начинающего разработчика игр появилась задача - сделать фон в игре, но не просто уныленький статичный бэкграунд, а параллакс. Да, эта чудо-красота применима не только в разработке сайтов, но и при создании игр. Попытка вдохновиться в гугле практически ничем не закончилась. Пришлось справляться с задачей собственными силами. У меня получилось. Хочу поделиться с вами опытом. Справедливо замечу, что параллакс — это не достояние веба. Еще в дремучие времена существования 8-битных игр параллакс успешно применялся для создания иллюзии объема в двухмерной игре. Коротко говоря, параллакс — это наслоение изображений, каждый слой движется со своей скоростью. Ближайший к игроку имеет самую высокую скорость, соответственно дальний (последний) — самую низкую. Ну что, вроде, минимально в теории разобрались и даже нашли, откуда ноги растут, значит, мы готовы перейти непосредственно к практике и сотворить это чудо своими руками. Что вам потребуется: базовые знания Unity3D 5 (на уровне создания скриптов, добавления компонентов); понимание С#; 3 или больше картинок в формате .png; внимательность и желание. Ладно, последнее не очень обязательно =) По ссылке вы можете скачать необходимые изображения, а также уже готовый проект. Подготовка Запускаем Unity3D, создаем новый проект, называем его, например, Parallax2D. Закидываем в папку Assets наши бэкграунды. Рекомендую сложить их в отдельную папку. В моем случае они лежат в Assets – StarSky. Каждое изображение называем удобно и понятно. Я назвала их по порядку размещения (Background – задний фон, MiddleBackground – средний, TopBackground – верхний слой). Для того, чтобы картинка перемещалась гладко, нам необходимо настроить ее в Inspector. Обратите внимание, этот этап очень важен, иначе все размажет, как звезды за иллюминатором Энтерпрайза на 3-й космической скорости. В поле Texture Type выбираем тип Texture, во Wrap Mode отмечаем Repeat. И радостно тыкаем Apply. Без этого действия изменения не сохранятся, а потом можно долго недоумевать, почему же оно не работает. Совершаем эти телодвижения и для 2-х остальных текстур. Подготовив картинки, переходим к этапу размещения их на сцене. Часто в этих ваших интерентах можно встретить совет - размещать их с помощью GameObject – Plane. Вы, конечно, можете потрудиться и заставить 3D объект нормально функционировать в 2D игре. Но, на самом деле, это все будет уныло, как последний эпизод «Звездных войн», а работать это чудовище будет чуть более быстро, чем аж никак. Поэтому я рекомендую долго не мучиться и использовать элемент UI – Canvas. Canvas меняет размер фона автоматически, подстраивает его под размеры экрана гаджета, на котором запускают игру. Это избавляет нас от потребности писать скрипт, который будет отвечать за отслеживание размеров экрана и изменения размера фона. В Hierarchy выбираем UI – Canvas. Собственно, если работать с Юнькой для вас не впервой, то вы явно знаете еще много других способов, как добавить в Hierarchy объект. Так что делайте это любым удобным способом. Создав Canvas, добавляем чайлдами («внутрь» канвы) три Panel для 3-х наших фонов. После добавления наша Hierarchy выглядит так: Переименовываем Canvas и Panel, чтобы у всех были свои пароли и явки. А теперь засучиваем рукава и беремся препарировать — подготавливать каждый компонент в Inspector. Начнем с ParallaxBackground. Изменяем Layer на Ignore Raycast, чтобы наш фон не реагировал на касания пальцами. Unity обязательно спросит, применить ли эти изменения ко всем «детям» — соглашаемся.  Далее переходим к компоненту Canvas. Находим Render Mode, выбираем Screen Space – Camera. В Render Camera добавляем нашу текущую дефолтную камеру (Main Camera(Camera)). Plane Distance ставим пока 110, но этот показатель проще отстроить во время теста. По факту — это расстояние от камеры до нашей канвы. То есть, изменяя его, мы будем получать разную глубину изображения. Остальное не трогаем и переходим к Back. В Rect Transform привязываем позицию к левому краю. Теперь наш фон будет всегда отстраиваться по одному краю, и мы избежим проблем с правильной позицией на разных устройствах. Удаляем компонент Image (Script), вместо него добавляем Raw Image (Script) (напомню, Add Component – UI – Raw Image (Scriot)). В Texture добавляем картинку нашего самого последнего слоя. Те же операции проделываем и для остальных слоев. Можно сделать немного проще, наколдовать изменения в первой Panel, дублировать (Ctrl + D), поставить в каждую свою текстуру, переименовать. Тут уже зависит от того, как вам будет удобнее. Запускаем сцену — любуемся. Три картинки прекрасно легли друг на друга. Немного черной магии Теперь весь смак. Мы с вами напишем скрипт, который заставит наши картинки двигаться. Создаем новый скрипт, напомню, пишем на C#, назовем его BackgroundHelper. Он у нас будет один, поэтому нет смысла делать отдельную папку, кидаем его прямо в основную Assets. Открываем созданный скрипт и понеслась тяжкая работа на 5 строчек: using UnityEngine; using UnityEngine.UI; // обязательно добавляем библиотеку пользовательского интерфейса, без нее кино не будет using System.Collections; public class BackgroundHelper : MonoBehaviour {     public float speed = 0; //эта публичная переменная отобразится в инспекторе, там же мы ее можем и менять. Это очень удобно, чтобы настроить скорость разным слоям картинки     float pos = 0; //переменная для позиции картинки     private RawImage image; //создаем объект нашей картинки               void Start () {         image = GetComponent<RawImage>();//в старте получаем ссылку на картинку         }                    void Update () {         //в апдейте прописываем как, с какой скоростью и куда мы будем двигать нашу картинку           pos += speed;             if (pos > 1.0F)                 pos -= 1.0F;             image.uvRect = new Rect(pos, 0, 1, 1);        }     } Сохраняем скрипт и добавляем его, как компонент к каждому слою. Скорости у меня такие: Back 0.0001 Middle 0.00015 Top 0.00024 Наслаждаемся успешной работой Если все было сделано правильно, мы получим умопомрачительный эффект, от которого просто невозможно оторвать глаз. У вас остались вопросы или возникли трудности? Пишите в комментариях.
Notification success