<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Нубы в IT</title><generator>teletype.in</generator><description><![CDATA[Статьи на следующие темы: Big Data, тестирование, программирование, аналитика]]></description><image><url>https://img4.teletype.in/files/7e/1c/7e1cb9fa-2629-4364-aa4c-80b9295182cb.png</url><title>Нубы в IT</title><link>https://teletype.in/@datanoob</link></image><link>https://teletype.in/@datanoob?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/datanoob?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/datanoob?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 05 Apr 2026 07:20:08 GMT</pubDate><lastBuildDate>Sun, 05 Apr 2026 07:20:08 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@datanoob/java-5</guid><link>https://teletype.in/@datanoob/java-5?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/java-5?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>5. Введение в Java. Наследования и ООП. | Технострим  </title><pubDate>Fri, 17 May 2024 10:17:49 GMT</pubDate><description><![CDATA[5. Введение в Java. Наследования и ООП. | Технострим]]></description><content:encoded><![CDATA[
  <p id="trNy">5. Введение в Java. Наследования и ООП. | Технострим</p>
  <p id="J55p"><a href="https://www.youtube.com/watch?v=z3PqNsKx2Bo" target="_blank">https://www.youtube.com/watch?v=z3PqNsKx2Bo</a></p>
  <p id="fE2y"><strong>00:08 Обсуждение наследования и маппинга</strong></p>
  <p id="mi9H">• Обсуждение наследования и использования стандартных коллекций, таких как хэшмапы.<br />• Обсуждение проблем с наследованием и использованием стандартных коллекций.</p>
  <p id="Timt"><strong>12:00 Тестирование и проблемы с маппингом</strong></p>
  <p id="Lpap">• Обсуждение тестирования и проблем с маппингом.<br />• Обсуждение того, как маппинг может мешать покупке одинаковых товаров с разными ссылками.<br />• Обсуждение неявной информации, связанной с маппингом и классами.</p>
  <p id="NVgI"><strong>19:27 Хэшмапы и связанные списки</strong></p>
  <p id="xcbM">• Хэшмапы - это структуры данных, которые используют хэш-коды для быстрого поиска элементов.<br />• Хэш-коды могут совпадать у разных объектов, что приводит к коллизиям.<br />• Хэшмапы используют связанные списки для хранения элементов.</p>
  <p id="j5dC"><strong>24:01 Методы и классы</strong></p>
  <p id="3Xjj">• В хэшмапах используются методы для сравнения объектов и определения равенства.<br />• Класс Object является корнем иерархии классов и наследуется всеми классами.<br />• Методы клонирования и toString переопределяются для реализации пользовательских функций.</p>
  <p id="PbSH"><strong>32:25 Хешкоды и иквоусы</strong></p>
  <p id="3HyT">• Хешкоды и иквоусы - это методы, которые используются для сравнения объектов и их полей.<br />• Хешкод считается по умолчанию, но его можно переопределить.<br />• Хешкод и иквоус связаны между собой, и если они не соответствуют правилам, то это считается ошибкой.</p>
  <p id="9lbt"><strong>39:56 Использование хешкодов и иквоусов</strong></p>
  <p id="BGJa">• Хешкоды и иквоусы используются в коллекциях, таких как хэшмапы и хэш-сеты.<br />• Если вы хотите использовать эти коллекции, то вам нужно переопределить методы хешкод и иквоус.<br />• Хешкоды и иквоусы связаны между собой и должны соответствовать определенным правилам.<br />• Если вы не выполните эти правила, то это считается ошибкой.</p>
  <p id="O6gN"><strong>44:03 Модификаторы доступа</strong></p>
  <p id="lYGz">• Обсуждение важности защиты приватных полей от несанкционированного доступа.<br />• Приватные поля могут быть доступны только через методы, которые возвращают информацию, но не изменяют объект.</p>
  <p id="dRk7"><strong>47:50 Создание приватных методов</strong></p>
  <p id="JoBD">• Приватные методы могут быть созданы для доступа к приватным полям, но только из родительского класса.<br />• Приватные методы могут быть использованы для согласованных операций с объектом.</p>
  <p id="xEET"><strong>51:22 Создание приватных полей</strong></p>
  <p id="My9C">• Приватные поля могут быть созданы для защиты информации от несанкционированного доступа.<br />• Приватные поля могут быть использованы для хранения информации, которая не должна быть доступна извне.</p>
  <p id="CZ8v"><strong>54:40 Решение проблемы с доступом к приватным полям</strong></p>
  <p id="feco">• Создание приватных методов для доступа к приватным полям может быть решением проблемы.<br />• Приватные методы могут быть доступны только из ограниченного количества классов, что обеспечивает безопасность и единоличную ответственность.</p>
  <p id="Iooq"><strong>56:38 Композиция и наследование в объектно-ориентированном программировании</strong></p>
  <p id="owgD">• В видео обсуждается, как можно использовать композицию и наследование в объектно-ориентированном программировании.<br />• Композиция позволяет одному классу содержать другой класс, который может быть использован для добавления и удаления объектов.<br />• Наследование позволяет одному классу наследовать свойства и методы от другого класса.</p>
  <p id="fUvy"><strong>01:02:55 Примеры использования композиции и наследования</strong></p>
  <p id="f3xx">• В примере с магазином, склад может содержать товары, а бэк-стор может добавлять и удалять товары.<br />• В примере с промоушеном, можно создать класс промоушен, который наследует класс атом и добавляет свои собственные поля и методы.<br />• В обоих случаях, важно понимать, что каждый класс должен иметь свою собственную ответственность и не вмешиваться в работу других классов.</p>
  <p id="BRan"><strong>01:09:08 Ключевые слова для доступа к полям и методам родительского класса</strong></p>
  <p id="toLq">• В случае наследования, ключевое слово &quot;супер&quot; позволяет получить доступ к полям и методам родительского класса.<br />• Однако, если создать поле с тем же именем, что и поле в родительском классе, то это приведет к созданию двух полей с одинаковым именем, но разных типов.</p>
  <p id="uWHP"><strong>01:10:40 Модификаторы доступа и наследование</strong></p>
  <p id="VfGY">• В видео обсуждаются модификаторы доступа, такие как public, private и protected, и их влияние на наследование.<br />• Если класс наследуется, то все поля и методы родительского класса становятся доступными для наследника.</p>
  <p id="PRjV"><strong>01:17:03 Использование модификаторов и наследование</strong></p>
  <p id="hdY4">• Если класс является наследником, то он должен корректно инициализировать все поля и методы родительского класса.<br />• Если класс содержит приватные поля, то они не могут быть доступны из наследника.</p>
  <p id="gdoL"><strong>01:22:05 Запрет наследования</strong></p>
  <p id="83eG">• Если класс содержит ключевое слово final, то он не может быть унаследован.<br />• Если в классе есть приватный конструктор, то он не может быть унаследован.</p>
  <p id="UhlC"><strong>01:26:01 Паттерн проектирования &quot;синглтон&quot;</strong></p>
  <p id="oObr">• В видео обсуждается паттерн проектирования &quot;синглтон&quot;, который позволяет создать один экземпляр класса и использовать его в программе.<br />• Внутри класса можно получить доступ к приватным полям, используя статические методы.</p>
  <p id="azBc"><strong>01:28:35 Абстрактные классы</strong></p>
  <p id="QbX0">• В видео объясняется, что абстрактные классы не могут быть созданы, так как они не имеют полной реализации всех своих методов.<br />• Если у класса есть абстрактные методы, то его нельзя создать, пока все абстрактные методы не будут определены.</p>
  <p id="dfqE"><strong>01:31:11 Наследование и реализация методов</strong></p>
  <p id="DeNx">• Наследование от абстрактного класса позволяет реализовать общие методы, но также может привести к проблемам с пониманием иерархии классов и зависимостей между ними.<br />• Если метод в родительском классе меняется, это может повлиять на все дочерние классы, что может привести к ошибкам и сложностям в понимании кода.</p>
  <p id="kPOc"><strong>01:37:00 Динамическая диспетчеризация типов</strong></p>
  <p id="kykh">• В видео объясняется, что в Java есть механизм динамической диспетчеризации типов, который позволяет вызывать методы базового класса, даже если ссылка указывает на дочерний класс.<br />• Однако, это может привести к проблемам, если иерархия классов становится слишком сложной и запутанной.</p>
  <p id="uyJL"><strong>01:40:34 Проблемы с наследованием и композицией</strong></p>
  <p id="J0LL">• В видео обсуждаются проблемы с наследованием и композицией в программировании.<br />• Наследование может быть сложным для понимания, особенно когда иерархия становится слишком глубокой.<br />• Композиция может быть сложной из-за большого количества объектов и методов, которые нужно вызывать.</p>
  <p id="Jsbk"><strong>01:42:01 Примеры использования наследования и композиции</strong></p>
  <p id="ti37">• В примере с классом Point, композиция выглядит как класс Point, который содержит класс ColorPoint, который добавляет цвет к Point.<br />• В примере с коллекциями, такими как ArrayList, HashSet и HashMap, композиция может быть сложной из-за большого количества классов и методов, которые нужно использовать.<br />• В случае с файлами, композиция может быть сложной из-за большого количества маленьких классов, которые нужно использовать для работы с файлами.</p>
  <p id="7ggi"><strong>01:50:43 Интерфейсы и их использование</strong></p>
  <p id="upKC">• Интерфейсы определяют контракт класса, то есть публичное API, которое класс предоставляет.<br />• В идеальном мире, интерфейс содержит только публичные методы, и класс не должен содержать ничего лишнего.<br />• Примеры интерфейсов: коллекция, итератор, итератор.</p>
  <p id="LfqO"><strong>01:53:06 Коллекции и их использование</strong></p>
  <p id="ME6Q">• Интерфейс коллекции определяет методы, полезные для всех коллекций, такие как размер, проверка на пустоту, итератор для обхода элементов.<br />• Мап не является коллекцией, но может быть обходом с помощью интерфейса итератора.<br />• Мап представляет отображение элементов, а не группу элементов.</p>
  <p id="ofWM"><strong>01:57:25 Использование интерфейсов и спецификаций</strong></p>
  <p id="PSro">• Интерфейсы используются для ссылки на коллекцию в коде, а для работы с коллекцией без дубликатов используется интерфейс сет.<br />• Джава док считается весомым аргументом, и разработчики должны соблюдать его, если они переопределяют интерфейсы.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/java-4</guid><link>https://teletype.in/@datanoob/java-4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/java-4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>4. Введение в Java. Класс. | Технострим  </title><pubDate>Fri, 17 May 2024 10:15:33 GMT</pubDate><description><![CDATA[4. Введение в Java. Класс. | Технострим]]></description><content:encoded><![CDATA[
  <p id="i7GE">4. Введение в Java. Класс. | Технострим</p>
  <p id="qTed"><a href="https://www.youtube.com/watch?v=IoTkYtSUe-4" target="_blank">https://www.youtube.com/watch?v=IoTkYtSUe-4</a></p>
  <p id="4hoE"><strong>00:04 Обсуждение наследования и класса</strong></p>
  <p id="REEs">• В лекции обсуждается наследование и класс в Java, а также как работать с классом без наследования.<br />• Рассматривается пример домашнего задания, где студенты должны были написать метод для проверки скобочной последовательности на правильность.</p>
  <p id="OFpb"><strong>01:35 Создание объектов и использование стека</strong></p>
  <p id="6wGq">• Обсуждается, что создание нового объекта с помощью ключевого слова new потребляет новую память и требует времени на создание.<br />• Предлагается использовать массив символов или указатель для проверки скобочной последовательности, что позволяет избежать создания нового объекта.</p>
  <p id="URYP"><strong>05:27 Класс и его компоненты</strong></p>
  <p id="ClUD">• Класс в Java - это шаблон объекта, который описывает его поведение и методы взаимодействия с ним.<br />• Класс может содержать данные и методы, которые позволяют взаимодействовать с объектом.<br />• Класс также может содержать поля, которые могут быть публичными или приватными, и методы, которые могут быть статическими или нестатическими.</p>
  <p id="oaBv"><strong>09:08 Создание класса и его использование</strong></p>
  <p id="ltU5">• Создание класса с именем &quot;классик&quot; и переменной &quot;имя&quot;.<br />• Обращение к статическим полям и методам класса.</p>
  <p id="0dTg"><strong>16:39 Передача параметров в методы</strong></p>
  <p id="iX3I">• Параметры передаются по значению, примитивные типы - по значению, экземпляры классов - по ссылке.<br />• Пример вызова метода с параметрами и их передача.</p>
  <p id="5DxN"><strong>25:05 Повышение типов и вызов методов</strong></p>
  <p id="fzqO">• Можно вызывать методы с разными типами параметров, но результат будет зависеть от типа переменной, в которую они передаются.<br />• Пример работы с методами с разными типами параметров и их вызов.</p>
  <p id="MXAU"><strong>27:27 Приведение типов</strong></p>
  <p id="mvkM">• В видео обсуждаются правила повышения и понижения типов в Java.<br />• Приводится пример с методами, принимающими разные типы параметров, и выясняется, какие из них будут работать, а какие нет.</p>
  <p id="U22b"><strong>38:05 Анбоксинг и кастование</strong></p>
  <p id="xQHQ">• Объясняется, что анбоксинг - это процесс преобразования объекта в его класс, а кастование - это процесс преобразования переменной в другой тип.<br />• Приводится пример, когда переменная типа шорт может быть явно преобразована в байт.</p>
  <p id="VPJw"><strong>43:15 Перегруженные методы</strong></p>
  <p id="nbFk">• Перегруженные методы - это методы с одинаковыми названиями, но разными параметрами типов или возвращаемыми значениями.<br />• Обсуждается пример, когда два метода принимают одинаковые параметры, но возвращают разные значения.</p>
  <p id="u1sx"><strong>45:24 Перегрузка методов и конструкторов</strong></p>
  <p id="BnPN">• В видео обсуждается перегрузка методов и конструкторов в Java.<br />• Перегрузка методов позволяет вызывать один и тот же метод с разными параметрами, но с разными типами возвращаемых значений.<br />• Перегрузка конструкторов позволяет создавать объекты с разными параметрами, но с одинаковым типом возвращаемого значения.</p>
  <p id="UCac"><strong>51:01 Конструктор и поля</strong></p>
  <p id="BvX9">• В видео объясняется, что конструктор позволяет инициализировать поля класса, но только если все поля являются приватными и не имеют геттеров и сеттеров.<br />• Если поля не инициализированы в конструкторе, они будут иметь значения по умолчанию.</p>
  <p id="V8XG"><strong>58:25 Конструкторы с разными параметрами</strong></p>
  <p id="Kx5w">• В видео рассматривается случай, когда у класса есть несколько конструкторов с разными параметрами.<br />• Для решения этой проблемы можно использовать ключевое слово &quot;this&quot; для вызова другого конструктора.<br />• Также можно использовать ключевое слово &quot;super&quot; для вызова родительского конструктора.</p>
  <p id="ogas"><strong>01:02:11 Создание объектов и инициализация полей</strong></p>
  <p id="du4A">• В видео обсуждается создание объектов и инициализация их полей в Java.<br />• Упоминается, что литералы в Java могут быть использованы для создания объектов, и это облегчает поддержку кода.<br />• Однако, если литералы используются для создания объектов, то они могут быть созданы только один раз.<br />• Если литералы используются для создания объектов, то они будут созданы только один раз, и это облегчает поддержку кода.</p>
  <p id="n6xK"><strong>01:06:36 Блоки инициализации и конструкторы</strong></p>
  <p id="YBel">• В видео обсуждаются блоки инициализации и конструкторы в Java.<br />• Блоки инициализации вызываются при создании класса, а конструкторы - при создании экземпляра класса.<br />• Если класс имеет статические поля, то они инициализируются при создании класса, а не при создании экземпляра.<br />• Если класс имеет вложенные классы, то они могут быть вложены внутрь класса, и их можно разделить на несколько частей.</p>
  <p id="ALjz"><strong>01:12:58 Работа с массивами и обходом элементов</strong></p>
  <p id="xJOx">• В видео рассматривается работа с массивами в Java.<br />• Массивы могут быть созданы с помощью литералов, и их размер может быть ограничен.<br />• Для обхода элементов массива можно использовать метод get и set.<br />• Однако, если массив меняется во время обхода, то это может привести к ошибкам.<br />• Для решения этой проблемы можно использовать метод, который гарантирует, что массив не меняется во время обхода.</p>
  <p id="iBqh"><strong>01:16:42 Итераторы и их использование</strong></p>
  <p id="4PrD">• Итератор - это объект, который позволяет обойти все элементы коллекции, не вызывая каждый раз метод для получения размера коллекции.<br />• Итераторы могут быть реализованы через внутренний класс, который имеет доступ к полям внешнего класса и может быть использован для проверки изменений в коллекции.</p>
  <p id="6va9"><strong>01:24:25 Создание и использование итераторов</strong></p>
  <p id="oGJd">• Итераторы могут быть созданы внутри методов или циклов, но их время жизни ограничено временем жизни метода или цикла.<br />• Итераторы могут быть использованы для проверки изменений в коллекции, но только если они реализованы через внутренний класс.<br />• Итераторы могут быть объявлены как параметры полей или как локальные переменные внутри методов или циклов.<br />• Итераторы могут быть использованы для присвоения значений переменным, но только если эти переменные объявлены как final или почти final.</p>
  <p id="EKvJ"><strong>01:30:45 Вложенные классы</strong></p>
  <p id="GGRs">• Вложенные классы могут быть определены в методе или цикле.<br />• Вложенные классы могут быть вложены в один и тот же файл, но не могут быть статичными.<br />• Если класс верхнего уровня не совпадает с названием файла, то джава ругается.</p>
  <p id="hDJb"><strong>01:36:02 Статичный класс</strong></p>
  <p id="NAhJ">• Статичный класс может быть создан только один раз и имеет доступ только к статичным переменным.<br />• Статичный класс может обращаться к переменным без полного имени.</p>
  <p id="fqld"><strong>01:39:11 Создание статичного класса</strong></p>
  <p id="Wyps">• Статичный класс может создаваться без экземпляра объекта и может использовать переменные и методы.<br />• Статичный класс не имеет ссылки на внешний класс и может создаваться из статичных методов.</p>
  <p id="bfGW"><strong>01:41:42 Проблемы с Git</strong></p>
  <p id="ONWb">• Автор объясняет, что при использовании Git для коммитов из IDE, необходимо отключить некоторые проверки, иначе IDE будет ругаться на ошибки.<br />• Также автор упоминает, что при создании нового бранча из другого бранча, могут возникнуть дополнительные файлы, которые не были ожидаемы.</p>
  <p id="vIS3"><strong>01:43:33 Работа с Git и GitHub</strong></p>
  <p id="2gnB">• Автор объясняет, что Git хранит изменения файлов, а не сами файлы, и что при создании нового бранча, изменения из предыдущего бранча будут перенесены в новый.<br />• Автор также обсуждает возможность откатить изменения в удаленном репозитории с помощью GitHub.<br />• Он объясняет, что если вы еще не запушили изменения, можно откатить их, используя команду &quot;git reset&quot;.<br />• Если же изменения уже запущены, можно сделать новый бранч из старого и откатить изменения с помощью команды &quot;git reset --hard&quot;.</p>
  <p id="xHSb"><strong>01:47:28 Восстановление мастера</strong></p>
  <p id="QnRj">• Автор объясняет, как восстановить мастер, если он был удален или изменен.<br />• Можно скопировать текстовый файл и создать новый мастер.</p>
  <p id="vEzu"><strong>01:50:06 Создание классов для операций</strong></p>
  <p id="52Ep">• В новой домашней задаче нужно создать много классов для операций, используя интерфейс Express.<br />• Необходимо научиться парсить строку и создавать классы для операций с наибольшим приоритетом.</p>
  <p id="clf6"><strong>01:54:50 Рекурсия и рекурсивный спуск</strong></p>
  <p id="BLyO">• Рекурсия - это метод, который вызывает сам себя.<br />• Рекурсивный спуск - это метод, который вызывает сам себя, но с условием, что если условие выполнено, то возвращается значение, иначе вызывается сам себя снова.<br />• Примеры рекурсивного спуска: числа Фибоначчи и другие задачи.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/java-3</guid><link>https://teletype.in/@datanoob/java-3?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/java-3?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>3. Введение в Java. Checkstyle. | Технострим  </title><pubDate>Fri, 17 May 2024 10:11:05 GMT</pubDate><description><![CDATA[3. Введение в Java. Checkstyle. | Технострим]]></description><content:encoded><![CDATA[
  <p id="BCyI">3. Введение в Java. Checkstyle. | Технострим</p>
  <p id="jTw7"><a href="https://www.youtube.com/watch?v=sFtnmo-tgfQ" target="_blank">https://www.youtube.com/watch?v=sFtnmo-tgfQ</a></p>
  <p id="NJJc"><strong>00:05 Обсуждение изменений в коде</strong></p>
  <p id="AvPI">• В видео обсуждаются требования к изменениям в коде, связанные с работой над проектом.<br />• Упоминается, что важно не вносить лишних изменений, чтобы избежать конфликтов и проблем с ревью кода.</p>
  <p id="hP7p"><strong>03:27 Ревью кода и его влияние на процесс разработки</strong></p>
  <p id="5vFh">• Обсуждается важность ревью кода для обеспечения качества и эффективности работы.<br />• Упоминается, что ревью кода может быть долгим и сложным процессом, если в коде много изменений.</p>
  <p id="4Zoq"><strong>07:25 Последствия изменений в коде</strong></p>
  <p id="nOZw">• Упоминаются возможные последствия изменений в коде, такие как поломки и необходимость исправления ошибок.<br />• Подчеркивается важность знания своего кода и ответственности за его изменения.</p>
  <p id="hq1n"><strong>13:24 Обсуждение стилей кодирования</strong></p>
  <p id="m8Dp">• В видео обсуждается вопрос о том, как правильно писать код на Java.<br />• Рассматриваются различные стили кодирования, включая использование одной команды на строке, модификации и отступы.<br />• Обсуждается, что стиль кодирования может помочь избежать ошибок в программе, так как он может помочь мозгу воспринимать код как единое целое.</p>
  <p id="mv5p"><strong>15:02 Примеры ошибок и их предотвращение</strong></p>
  <p id="mJHU">• В видео приводятся примеры ошибок, которые могут возникнуть при неправильном использовании стилей кодирования.<br />• Ошибки могут быть связаны с неправильным размещением условий и операторов, а также с неправильным использованием отступов.<br />• Для предотвращения таких ошибок предлагается использовать дополнительное правило: всегда оставлять пустую строку после оператора if.</p>
  <p id="6AAD"><strong>17:37 Чек-стайл и его использование</strong></p>
  <p id="oShF">• Обсуждение важности использования чек-стайл для поддержания стандартов кодирования и предотвращения случайных багов.<br />• Упоминание о том, что чек-стайл может быть использован для автоматизации процесса поддержки стандартов кодирования.</p>
  <p id="fXOb"><strong>23:46 Анализ кода и его поддержка</strong></p>
  <p id="lKZ6">• Обсуждение того, как чек-стайл упрощает анализ кода и его поддержку, так как код становится более читабельным и легче поддерживается.<br />• Упоминание о том, что чек-стайл может помочь предотвратить потенциальные баги и улучшить читабельность кода.</p>
  <p id="XZO3"><strong>28:46 Использование чек-стайл в IDE</strong></p>
  <p id="bVV3">• Обсуждение использования чек-стайл в IDE, таких как IntelliJ IDEA, для упрощения процесса написания кода и предотвращения ошибок.<br />• Упоминание о плагине &quot;Code Style Configuration&quot; для IntelliJ IDEA, который позволяет автоматически применять настройки чек-стайл при написании кода.</p>
  <p id="M7TX"><strong>31:55 Создание и проверка пореквестов</strong></p>
  <p id="w3Fe">• Создание и проверка пореквестов в Git и Git Hub.<br />• Использование Git для хранения изменений и Git Hub для отслеживания изменений.</p>
  <p id="LbBQ"><strong>40:18 Создание и тестирование домашнего задания</strong></p>
  <p id="vBFm">• Создание домашнего задания, которое включает в себя проверку скобочной последовательности и статистику о проверке.<br />• Использование статических методов и переменных для эффективного кодирования.<br />• Создание класса для хранения статистики и использование операторов &quot;final&quot; для ограничения наследования и создания экземпляров.</p>
  <p id="dNXI"><strong>44:48 Модификаторы доступа и тесты</strong></p>
  <p id="i9hW">• В видео обсуждаются модификаторы доступа и их использование в контексте тестов.<br />• Упоминается, что если у вас нет тестов, то все приватные поля должны быть приватными.<br />• Однако, если у вас есть тесты, то они обычно находятся в той же папке, что и исходники, и поэтому модификаторы доступа действуют так, будто бы они находятся в одном и том же пакете.</p>
  <p id="pAm2"><strong>47:18 Решение задачи с использованием стека</strong></p>
  <p id="9OWe">• В видео предлагается использовать стек для решения задачи с проверкой корректности скобочной последовательности.<br />• Стек используется для хранения открывающих скобок и выталкивания закрывающих.<br />• Для создания стека используется модификатор static, чтобы сделать его доступным для всех методов класса.<br />• Также обсуждаются дополнительные условия, такие как проверка на наличие открывающих скобок в строке и выбрасывание исключения при обнаружении некорректной последовательности.</p>
  <p id="zmMh"><strong>51:10 Создание эффективного класса для решения задачи</strong></p>
  <p id="OGDU">• В видео подчеркивается, что для создания эффективного класса необходимо использовать модификаторы final и static, а также дать константам нормальные имена.<br />• В заключение, автор призывает задавать вопросы по практике и лекционной части, если они возникнут.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/java-2</guid><link>https://teletype.in/@datanoob/java-2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/java-2?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>2. Введение в Java. Тестирование. | Технострим  </title><pubDate>Fri, 17 May 2024 10:10:05 GMT</pubDate><description><![CDATA[2. Введение в Java. Тестирование. | Технострим]]></description><content:encoded><![CDATA[
  <p id="iIqC">2. Введение в Java. Тестирование. | Технострим</p>
  <p id="8wXV"><a href="https://www.youtube.com/watch?v=pXUybW4ON4w" target="_blank">https://www.youtube.com/watch?v=pXUybW4ON4w</a></p>
  <p id="p2b5"><strong>00:04 Анализ домашних заданий</strong></p>
  <p id="xKRl">• Преподаватель анализирует домашние задания студентов, отмечая проблемы с форматированием, синтаксисом и логикой кода.<br />• Некоторые студенты меняли код, стирали комментарии и переименовывали классы.</p>
  <p id="Niyq"><strong>03:46 Примеры плохого кода</strong></p>
  <p id="4TdE">• Примеры плохого кода, включая проблемы с форматированием, логикой и синтаксисом.<br />• Преподаватель обсуждает, как сделать код более понятным и оптимальным.</p>
  <p id="hMxv"><strong>09:13 Советы по написанию кода</strong></p>
  <p id="0gL8">• Преподаватель дает советы по написанию кода, включая использование отступов, использование интерфейсов и правильное форматирование строк.<br />• Обсуждаются альтернативы использованию интерфейсов и способы сделать код более понятным для других разработчиков.</p>
  <p id="nqYM"><strong>14:32 Анализ кода</strong></p>
  <p id="k3AS">• Обсуждение различных ошибок в коде, включая проблемы с порядком модификаторов, неправильные названия переменных и методов, а также проблемы с тестированием.<br />• Упоминается, что некоторые студенты не тестировали свои программы, а просто смотрели на результат.</p>
  <p id="vp2M"><strong>26:20 Тестирование и дизайн</strong></p>
  <p id="IJCh">• Тестирование рассматривается как способ уменьшения количества багов в программе.<br />• Упоминается модульное тестирование, которое позволяет проверить один метод программы.<br />• Обсуждается важность дизайна, который определяет, как программа должна работать и как она работает на самом деле.</p>
  <p id="ihXP"><strong>32:17 Тестирование и юнит-тестирование</strong></p>
  <p id="JgwE">• В видео обсуждается юнит-тестирование, которое позволяет проводить тестирование кода с помощью аннотаций.<br />• Юнит-тестирование позволяет проверять корректность данных, которые были получены от тестируемой системы.</p>
  <p id="ZSVN"><strong>35:12 Примеры тестирования</strong></p>
  <p id="ISeM">• В видео приводятся примеры методов тестирования, таких как фейл, асер, асерт фолс, проверка на нау объект, отце цвайн матч, но-цем, асерр троуз и другие.</p>
  <p id="wzSM"><strong>40:16 Тестирование интерфейса</strong></p>
  <p id="2LR5">• В видео подчеркивается важность тестирования интерфейса, так как это позволяет создавать более корректные и удобные для использования методы.<br />• Обсуждается, как можно усложнить задачу, передавая диапазон и массив для проверки корректности данных.</p>
  <p id="hzDs"><strong>42:13 Неоднозначность и тестирование</strong></p>
  <p id="Wq4X">• В видео обсуждаются вопросы неоднозначности и неоднозначности при тестировании, такие как выбор разделителя между числами и словами.<br />• Подчеркивается, что правильное тестирование может помочь создать более корректный и удобный код.</p>
  <p id="HjG6"><strong>44:43 Создание интерфейса и реализация</strong></p>
  <p id="94VU">• Создание интерфейса и реализация класса, который наследует интерфейс.<br />• Добавление методов и реализация тестов для класса.</p>
  <p id="Viid"><strong>50:34 Проверка границ и корректность ввода</strong></p>
  <p id="Wrkz">• Проверка корректности ввода и границ чисел.<br />• Создание тестов для проверки корректности ввода и границ.</p>
  <p id="qT2S"><strong>56:32 Проверка корректности вывода</strong></p>
  <p id="EXod">• Создание тестов для проверки корректности вывода.<br />• Починка тестов, если они не проходят.</p>
  <p id="wpHi"><strong>01:00:16 Проверка условий</strong></p>
  <p id="oYmX">• Проверка условий, которые должны быть выполнены для корректного вывода.<br />• Починка тестов, если они не проходят.</p>
  <p id="Y8vu"><strong>01:02:15 Рефакторинг кода</strong></p>
  <p id="ZOd9">• Удаление лишнего кода и проверка корректности тестов.<br />• Добавление интерфейса и наследника для упрощения кода.</p>
  <p id="uORV"><strong>01:08:05 Создание генератора чисел</strong></p>
  <p id="mCVu">• Создание интерфейса и наследника для генерации чисел от 1 до 100.<br />• Создание теста для проверки корректности работы генератора.</p>
  <p id="mfCJ"><strong>01:15:02 Рефакторинг генератора чисел</strong></p>
  <p id="I5tZ">• Создание массива для заполнения числами от 1 до 100.<br />• Использование генератора для заполнения массива.<br />• Добавление конструктора для оптимизации работы генератора.<br />• Добавление статического поля для указания границ массива.</p>
  <p id="mg1w"><strong>01:22:00 Рефакторинг кода</strong></p>
  <p id="mp5E">• Автор обсуждает, как рефакторинг кода может помочь в тестировании и проверке корректности работы программы.<br />• Он приводит пример, где нужно было заполнить массив, но при этом сохранить его границы.<br />• Автор демонстрирует, как можно использовать тесты для проверки корректности работы программы и убедиться, что изменения не сломали существующие тесты.</p>
  <p id="rZXt"><strong>01:36:15 Создание интерфейса и использование стримов</strong></p>
  <p id="gvg5">• Автор обсуждает создание интерфейса и использование стримов для решения задачи.<br />• Он объясняет, как можно использовать стримы для создания массива и как можно использовать стримы для проверки корректности работы программы.<br />• Автор также обсуждает, как можно использовать методы интерфейса для создания и тестирования кода.</p>
  <p id="Z3Mz"><strong>01:39:44 Рефакторинг кода</strong></p>
  <p id="0vVV">• Автор обсуждает, что в коде есть проблема, связанная с ожиданием массива из 100 элементов, хотя на самом деле массив может быть меньше.<br />• Он предлагает изменить логику кода, чтобы он работал с массивами любого размера.</p>
  <p id="rdQN"><strong>01:41:16 Создание массива нужного размера</strong></p>
  <p id="g26T">• Автор решает создать массив нужного размера, а не использовать массив из 100 элементов.<br />• Это позволяет избежать создания лишней памяти и работы, которая не нужна.</p>
  <p id="5aWI"><strong>01:43:08 Рефакторинг кода и тестирование</strong></p>
  <p id="8uZ8">• Автор решает переписать код, чтобы он работал с массивами любого размера, и тестирует его.<br />• Он обнаруживает, что тесты работают, но код может сломаться, если массив будет меньше 100 элементов.</p>
  <p id="AGZD"><strong>01:46:11 Решение проблемы</strong></p>
  <p id="JKkz">• Автор решает проблему, меняя логику кода, чтобы он работал с массивами любого размера.<br />• Он также предлагает использовать мини-костыли, чтобы ускорить процесс рефакторинга.</p>
  <p id="2Dvt"><strong>01:48:17 Исправление ошибок в коде</strong></p>
  <p id="WumB">• Исправление ошибок в коде, связанных с некорректными массивами и индексами.<br />• Проверка корректности работы кода с разными входными данными.</p>
  <p id="OkIE"><strong>02:00:19 Добавление дополнительной информации</strong></p>
  <p id="m5r0">• Добавление возможности вывода дополнительной информации при возникновении ошибок.<br />• Использование класса String для вывода сообщений об ошибках.</p>
  <p id="MH3p"><strong>02:07:46 Исправление ошибок в конструкторе</strong></p>
  <p id="trLN">• Исправление ошибок в конструкторе, связанных с некорректным использованием разделителей.<br />• Использование цикла для корректного вывода данных.</p>
  <p id="UQwH"><strong>02:10:35 Создание тестов для домашней работы</strong></p>
  <p id="Nw4S">• В видео обсуждается создание тестов для домашней работы, где нужно было написать метод, который записывает данные в систем аут.<br />• Для этого используется класс байтеры аут стрим, который позволяет создавать принты и принты лайн.</p>
  <p id="6t6V"><strong>02:18:38 Тестирование и проверка границ</strong></p>
  <p id="sk7S">• В видео демонстрируется, как можно использовать тесты для проверки границ и корректности работы кода.<br />• Это позволяет убедиться, что код работает правильно и не ломается при изменении.</p>
  <p id="L4l7"><strong>02:21:05 Преимущества юнит-тестирования</strong></p>
  <p id="8zrb">• Юнит-тестирование позволяет быстро и эффективно проверять границы и корректность работы кода, что делает его более качественным и защищенным от несанкционированных изменений.<br />• Юнит-тесты также могут быть использованы для тестирования небольших методов, которые не требуют сложных тестов.</p>
  <p id="syDu">02:21:05 Преимущества юнит-тестирования</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/java-1</guid><link>https://teletype.in/@datanoob/java-1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/java-1?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>1. Введение в Java. Вводное занятие. | Технострим  </title><pubDate>Fri, 17 May 2024 10:06:23 GMT</pubDate><description><![CDATA[1. Введение в Java. Вводное занятие. | Технострим]]></description><content:encoded><![CDATA[
  <p id="XmUs">1. Введение в Java. Вводное занятие. | Технострим</p>
  <p id="qTKE"><a href="https://www.youtube.com/watch?v=XcWqkNE3dzE" target="_blank">https://www.youtube.com/watch?v=XcWqkNE3dzE</a></p>
  <p id="n0sy"><strong>00:05 Введение в курс</strong></p>
  <p id="FqCm">• Михаил Нечаев будет вести открытый курс по программированию на Java, состоящий из 12 занятий.<br />• Будут домашние задания, тесты и итоговый проект.</p>
  <p id="2VFE"><strong>03:47 Обзор Java</strong></p>
  <p id="fkEm">• Java занимает первое место по популярности среди языков программирования.<br />• В мире Java произошли печальные изменения, но она все еще популярна в медицине и ракетостроении.<br />• Java позволяет абстрагироваться от операций с памятью и имеет большую библиотеку для работы с числами и структурами данных.<br />• В Java есть виртуальная машина, компилятор и спецификация, которая определяет правила для компиляторов.</p>
  <p id="3num"><strong>13:11 Виртуальная машина Java</strong></p>
  <p id="kzc1">• Виртуальная машина Java обеспечивает кроссплатформенность, компилируя код в байт-код, понятный виртуальной машине.<br />• Виртуальная машина оптимизирует код по мере его исполнения, компилируя часто используемые части.</p>
  <p id="Gy2c"><strong>17:09 Сборка мусора и ссылки</strong></p>
  <p id="QQpf">• Сборка мусора освобождает память, когда объекты становятся не нужны.<br />• Горб-коллектор уменьшает дефрагментацию памяти и оптимизирует использование больших объектов.<br />• Недостижимые объекты удаляются, достижимые объекты продолжают жить.</p>
  <p id="1DgX"><strong>22:16 Платная Java</strong></p>
  <p id="2MZN">• Java стала платной, и теперь для использования в бизнесе или для разработки нужно платить.<br />• Альтернативные решения, такие как OpenJDK, доступны бесплатно, но не поддерживаются Oracle.</p>
  <p id="u225"><strong>25:41 Обзор основных понятий Java</strong></p>
  <p id="f8Vw">• Обсуждение модификатора доступа &quot;public&quot;, который делает класс доступным для других классов.<br />• Упоминание о том, что если класс назван &quot;Java&quot;, то он должен быть &quot;public&quot;.</p>
  <p id="CWKW"><strong>28:13 Создание и вызов методов</strong></p>
  <p id="KO6d">• Обсуждение того, что метод &quot;main&quot; является точкой входа в программу и может быть вызван из других классов.<br />• Объяснение, что &quot;static&quot; означает, что метод может быть вызван без создания экземпляра класса.</p>
  <p id="bWK2"><strong>30:36 Работа с классами и методами</strong></p>
  <p id="y3SO">• Обсуждение того, что &quot;static&quot; может быть применено к классам и методам.<br />• Объяснение, что &quot;final&quot; означает, что значение переменной не может быть изменено после инициализации.</p>
  <p id="IDEc"><strong>34:47 Работа с потоками ввода-вывода</strong></p>
  <p id="CVsh">• Обсуждение того, что &quot;System&quot; - это класс из стандартной библиотеки Java, который имеет статическую ссылку на объект, умеющий работать с вводом-выводом.<br />• Объяснение, что &quot;print&quot; - это метод, который выводит строку в стандартный поток вывода.</p>
  <p id="cKAu"><strong>36:50 Модификаторы доступа</strong></p>
  <p id="Hvau">• В Java есть четыре модификатора доступа: public, protected, private и default.<br />• Public - самый открытый доступ, можно получить доступ к переменной или методу из любого места.<br />• Protected - доступ только из подклассов и классов в одном пакете.<br />• Private - доступ только из класса, в котором объявлена переменная или метод.<br />• Default - доступ только из класса, в котором объявлена переменная или метод, и из подклассов этого класса.</p>
  <p id="7Pwp"><strong>41:12 Интерфейсы и абстрактные классы</strong></p>
  <p id="dyOS">• Интерфейс - это контракт, который обязует реализующие классы выполнять определенные методы.<br />• С Java 8 в интерфейсах можно использовать методы с реализацией.<br />• Абстрактный класс - это класс, который не может быть создан, но может быть унаследован.<br />• Используется для реализации общей логики и создания иерархии классов.<br />• В интерфейсах можно объявлять поля, но они все публичные и статичные.<br />• В абстрактных классах можно объявлять переменные, которые могут быть изменяемыми.</p>
  <p id="Z68C"><strong>46:47 Аннотации и их использование</strong></p>
  <p id="TeHF">• Аннотации используются для рефлексии и создания тестовых фреймворков.<br />• Аннотации могут быть использованы для ускорения работы с сайтами, создания серверов и обработки ссылок.</p>
  <p id="LR7I"><strong>53:58 Перечисления и их использование</strong></p>
  <p id="Y7zR">• Перечисления могут быть использованы для создания полуконстантных полей и передачи дополнительных параметров.<br />• Перечисления могут быть использованы для работы с многопоточностью, стерилизации объектов и передачи данных между потоками.</p>
  <p id="m6pl"><strong>55:40 Модификаторы доступа и порядок их использования</strong></p>
  <p id="lqNR">• Модификаторы доступа (public, protected, private) должны быть использованы в определенном порядке.<br />• Модификатор &quot;volatile&quot; используется для предотвращения оптимизации компилятора и для работы с многопоточностью.</p>
  <p id="fjTH"><strong>01:01:15 Типы переменных и их использование</strong></p>
  <p id="diuQ">• Переменные бывают четырех типов: экземпляры класса, статические переменные класса, локальные переменные и параметры методов.<br />• В Java есть примитивные и ссылочные типы данных.</p>
  <p id="r1Vg"><strong>01:03:21 Примитивные типы данных</strong></p>
  <p id="Pop2">• В видео обсуждаются различные примитивные типы данных, включая целочисленные, плавающие, логические и вотевые.<br />• Упоминается, что каждый примитивный тип имеет класс-обертку, который обеспечивает более мощный функционал, но не всегда удобнее в использовании.</p>
  <p id="FGPq"><strong>01:07:36 Границы примитивных типов</strong></p>
  <p id="cIy0">• Обсуждаются границы примитивных типов, включая диапазоны значений и методы для работы с ними.<br />• Упоминается, что некоторые примитивные типы могут занимать разное количество памяти в зависимости от реализации.</p>
  <p id="kLqz"><strong>01:13:31 Статические и нестатические переменные</strong></p>
  <p id="hcyf">• Объясняется разница между статическими и нестатическими переменными, включая их использование в объектно-ориентированном программировании.<br />• Упоминается, что статические переменные могут быть использованы для оптимизации и оптимизации памяти в ограниченном пространстве, например, в мобильных устройствах.</p>
  <p id="oyA6"><strong>01:18:52 Нейминг и соглашения в Java</strong></p>
  <p id="5c8h">• Обсуждение правил именования классов, методов и полей в Java.<br />• Упоминание о большом документе с правилами, который можно найти в конце видео.</p>
  <p id="SvN8"><strong>01:20:40 Работа с Git</strong></p>
  <p id="Mvum">• Создание репозитория и его клонирование.<br />• Использование Git для работы с проектами и зависимостями.<br />• Создание проекта с использованием идеи.</p>
  <p id="nAPk"><strong>01:30:28 Запуск классов через идею</strong></p>
  <p id="tYA8">• Запуск классов через идею, а не через грядов.<br />• Запуск классов через идею через стрелочку зеленую.</p>
  <p id="6eF8"><strong>01:31:58 Импорт классов</strong></p>
  <p id="Uwv5">• В видео объясняется, что если у вас есть большой проект, то вы можете использовать импорт классов для работы с ними.<br />• Приводится пример создания пэкаджа и импорта классов из него.</p>
  <p id="IffA"><strong>01:39:55 Реализация интерфейса</strong></p>
  <p id="J6N4">• В видео предлагается домашнее задание, где нужно реализовать интерфейс, который печатает числа от определенного до определенного значения.<br />• Указывается, что можно реализовать интерфейс разными способами, включая создание нескольких классов или одного класса.<br />• Также рекомендуется использовать репозиторий для проверки изменений.</p>
  <p id="ChIa"><strong>01:47:41 Создание пури квестов</strong></p>
  <p id="CQWI">• Зайти на сайт GitHub World, нажать на кнопку &quot;fork&quot; и создать свой репозиторий.<br />• Зайти в терминал и сделать &quot;git clone&quot; для создания клона.<br />• Создать папку для хранения репозитория и сделать &quot;git clone&quot; в этой папке.</p>
  <p id="7loA"><strong>01:56:30 Настройка и актуализация репозитория</strong></p>
  <p id="MAMl">• Создать папку &quot;programming slash GitHub&quot; и сделать &quot;git clone&quot; по ссылке из репозитория.<br />• Если репозиторий не был скачан ранее, будут актуальные изменения.<br />• Настроить &quot;git remote add&quot; для подключения к репозиторию.<br />• Настроить &quot;git pull&quot; для обновления изменений.<br />• Настроить &quot;git push&quot; для отправки изменений в репозиторий.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/android-razrabotka-11</guid><link>https://teletype.in/@datanoob/android-razrabotka-11?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/android-razrabotka-11?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>11. Android-разработка. Reactive Programming. | Технострим  </title><pubDate>Fri, 17 May 2024 10:04:25 GMT</pubDate><description><![CDATA[11. Android-разработка. Reactive Programming. | Технострим]]></description><content:encoded><![CDATA[
  <p id="Z2Ps">11. Android-разработка. Reactive Programming. | Технострим</p>
  <p id="rFT1"><a href="https://www.youtube.com/watch?v=Ruy8CJsL4lg" target="_blank">https://www.youtube.com/watch?v=Ruy8CJsL4lg</a></p>
  <p id="in4G"><strong>00:05 Введение в реактивное программирование</strong></p>
  <p id="lHOb">• Реактивное программирование - это использование асинхронных потоков данных для упрощения разработки в Android.<br />• Реактивное программирование используется в Android для упрощения работы с потоками и переключения между ними.</p>
  <p id="408Y"><strong>09:15 Определение реактивного программирования</strong></p>
  <p id="4B7y">• Реактивное программирование - это программирование с использованием асинхронных потоков данных.<br />• Идея реактивного программирования не нова, но формализована и используется в современных технологиях.</p>
  <p id="5ZdZ"><strong>12:13 Стримы данных и их использование</strong></p>
  <p id="Y9J2">• Стрим данных - это последовательность событий, происходящих в течение времени.<br />• Реактивное программирование использует стримы данных для обработки и обработки данных.</p>
  <p id="hgsW"><strong>13:44 Обзор реактивного программирования</strong></p>
  <p id="VN1Z">• Видео обсуждает концепцию реактивного программирования, где значения могут быть отправлены асинхронно и могут завершиться ошибкой.<br />• Это упрощает работу с многопоточностью и позволяет упростить работу с интенсивными вычислениями.</p>
  <p id="kuXK"><strong>20:04 Примеры и обоснование</strong></p>
  <p id="rtzk">• Видео предлагает пример использования реактивного программирования в контексте автомобиля и лошади.<br />• Автор объясняет, что хотя управление автомобилем может быть сложным для человека из 19 века, автомобиль лучше лошади в качестве основного средства передвижения.<br />• Это обосновывает необходимость изучения и использования реактивного программирования для современных компьютерных систем.</p>
  <p id="a4Lk"><strong>25:51 История реактивного программирования</strong></p>
  <p id="xRnR">• Реактивное программирование было придумано в Microsoft в 2006 году для решения проблем с серверами и данными.<br />• Эрик Мейер, профессор из университета, и Дэвид Карнак, исследователь из Будапешта, создали первые реализации реактивного программирования.</p>
  <p id="EyXr"><strong>33:01 Реактивное программирование в Android</strong></p>
  <p id="ZNMK">• Реактивное программирование популярно в Android из-за проблем с Java на старых версиях Android.<br />• Реактор и другие фреймворки, такие как Akka, также популярны в Android.</p>
  <p id="Gbzi"><strong>35:51 Основные свойства реактивного программирования</strong></p>
  <p id="fcL4">• Реактивное программирование позволяет бороться с бэк-пэшем, асинхронностью и параллелизмом.<br />• Реактивное программирование накладывает на разработчиков контракт, который требует, чтобы все действия были безопасными и последовательными в рамках одного потока.</p>
  <p id="xYe5"><strong>43:06 Реактивный подход в программировании</strong></p>
  <p id="WTit">• Реактивный подход позволяет использовать лямбды и другие функции, что делает программирование более удобным.<br />• Реактивный подход также позволяет использовать асинхронные операции, что делает программы более устойчивыми к сбоям и позволяет масштабировать их.</p>
  <p id="dIZZ"><strong>47:05 Определение реактивного программирования</strong></p>
  <p id="mAXH">• Реактивное программирование - это подход, который реагирует на ивенты, ошибки, действия пользователей и другие события.<br />• Реактивное программирование помогает решать проблемы, связанные с сложностью кода, параллельными действиями и вложенностью.</p>
  <p id="5KdQ"><strong>50:48 Примеры реализации реактивного программирования</strong></p>
  <p id="F56D">• Реактивное программирование может быть реализовано с использованием различных подходов, таких как фьючерсы и реактивные потоки.<br />• Реактивное программирование позволяет создавать бесконечные списки и выполнять асинхронные операции.</p>
  <p id="Q7O8"><strong>52:44 Обзор операторов в React</strong></p>
  <p id="jmZf">• Видео начинается с обзора операторов в React, которые позволяют создавать обсеры и цепочки данных.<br />• Упоминается, что на сайте React Extension есть дерево событий и ветки действий, которые помогают понять, как использовать эти операторы.</p>
  <p id="dMOf"><strong>53:31 Примеры использования операторов</strong></p>
  <p id="on4q">• В видео приводятся примеры использования операторов для создания обзоров, преобразования данных и комбинирования значений.<br />• Упоминаются такие операторы, как обзор был, обзор был фром, обзор был таймер, обзор был интервал, обзор был фром итера, обзор был фильтр, обзор был дебаунс и обзор был ротал.<br />• Обсуждаются примеры использования этих операторов в реальных ситуациях, таких как поиск котировок, фильтрация значений и экономия ресурсов.</p>
  <p id="8rkW"><strong>01:00:17 Трансформация данных</strong></p>
  <p id="bWYV">• В видео обсуждается возможность трансформации данных в стриме, например, умножение значений на 10 или выполнение арифметических действий.<br />• Для этого используется оператор &quot;буфер&quot;, который позволяет объединять группы значений и обрабатывать их параллельно.</p>
  <p id="Rhiy"><strong>01:01:59 Оператор &quot;флэт мэп&quot;</strong></p>
  <p id="wcYr">• Оператор &quot;флэт мэп&quot; превращает каждое значение в обзоре в отдельный обзор, что позволяет распараллелить вычисления.<br />• Это может быть полезно, когда нужно обработать много значений из разных источников данных.</p>
  <p id="lNvP"><strong>01:02:58 Оператор &quot;комбайн лейтес&quot;</strong></p>
  <p id="xxlX">• Оператор &quot;комбайн лейтес&quot; объединяет значения из разных потоков данных в один поток, что может быть полезно, когда нужно объединить данные из разных источников.<br />• Он также позволяет обрабатывать данные в последовательности, когда значения приходят одно за другим.</p>
  <p id="oh3H"><strong>01:05:05 Оператор &quot;мерч&quot;</strong></p>
  <p id="mr9E">• Оператор &quot;мерч&quot; объединяет значения из двух потоков данных в один, что может быть полезно, когда нужно обработать данные из разных источников одновременно.<br />• Он позволяет обрабатывать данные в той последовательности, в которой они приходят.</p>
  <p id="y3zd"><strong>01:05:25 Оператор &quot;зип&quot;</strong></p>
  <p id="uBGh">• Оператор &quot;зип&quot; группирует значения в пары и объединяет их в один поток, что может быть полезно, когда нужно обработать несколько значений одновременно.<br />• Он также может объединять данные в порядке, когда сначала проходит один поток, а затем другой.</p>
  <p id="U4LR"><strong>01:07:04 Работа с потоками данных</strong></p>
  <p id="kB2Y">• В видео обсуждаются различные способы работы с потоками данных в программе на языке Java.<br />• Упоминаются операторы, которые позволяют комбинировать данные и выполнять различные операции.<br />• Также обсуждаются различные способы работы с потоками, включая создание своих собственных потоков и использование стандартных потоков, таких как &quot;Обзор был&quot;.</p>
  <p id="z7IO"><strong>01:11:10 Использование сабжект для имитации значений</strong></p>
  <p id="Ynpl">• В видео объясняется, как использовать сабжект для имитации значений, которые приходят из разных источников.<br />• Упоминаются различные типы сабжект, включая &quot;Паблиш сабжект&quot;, &quot;Реплей сабжект&quot; и &quot;Сабжект&quot;.<br />• Обсуждаются различные способы использования сабжект, включая сохранение последнего значения и возврат только одного значения.</p>
  <p id="Ze4w"><strong>01:16:03 Примеры использования сабжект</strong></p>
  <p id="P76U">• В видео приводятся примеры использования сабжект в различных ситуациях, включая фильтрацию данных и группировку данных по определенным признакам.<br />• Упоминается возможность создания своих собственных потоков и использования стандартных потоков для работы с данными.</p>
  <p id="hDLU"><strong>01:17:48 Использование мапинга и поиска</strong></p>
  <p id="6dNu">• В видео обсуждается использование мапинга для преобразования одного значения в другое и его использование в различных ситуациях.<br />• Приводится пример использования мапинга для объединения значений из списка и их преобразования в обзоры.<br />• Также обсуждается пример использования мапинга для поиска, когда пользователь вводит буквы в поле поиска, и приложение подписывается на изменения в этом поле.</p>
  <p id="eBOc"><strong>01:19:15 Примеры использования мапинга</strong></p>
  <p id="aOH3">• В видео приводятся примеры использования мапинга для обработки данных, таких как объединение значений из массива пользователей и сохранение их в базе данных.<br />• Также обсуждается использование мапинга для работы с дисковыми мапами и дисковыми айо, которые позволяют возвращать значения из интерфейса дао.</p>
  <p id="5NCo"><strong>01:23:52 Реализация экспонента шел быков</strong></p>
  <p id="gQF8">• В видео рассказывается о реализации экспонента шел быков, который позволяет избежать проблем с серверами, когда они временно не работают.<br />• В этом случае, клиенты не будут ждать, пока сервер снова заработает, а будут продолжать работать с экспонентом шел быков.</p>
  <p id="xmzX"><strong>01:24:33 Реактивное программирование</strong></p>
  <p id="5xr8">• Обсуждение подхода реактивного программирования и его использования в Android.<br />• Упоминание имени Джейка Вортона, который написал много успешных проектов для Android.</p>
  <p id="a2Ef"><strong>01:31:00 Сравнение производительности</strong></p>
  <p id="9dvw">• Сравнение производительности классического подхода и реактивного подхода при обработке большого количества данных.<br />• Упоминание о том, что реактивный подход позволяет сэкономить на железе и поддержке кода.</p>
  <p id="y0Ky"><strong>01:32:53 Недостатки реактивного подхода</strong></p>
  <p id="rXFs">• Упоминание о том, что реактивный подход сложнее в поддержке и требует больше экспертов.<br />• Обсуждение точки &quot;Нетфликс-пойнт&quot;, где реактивный подход становится более выгодным по стоимости по сравнению с традиционным подходом.</p>
  <p id="hBOl"><strong>01:37:10 Реактивный подход в программировании</strong></p>
  <p id="GZRK">• Обсуждение сложности и стоимости разработки при использовании реактивного подхода в программировании.<br />• Упоминается закон Литла, который помогает оценить пропускную способность системы при использовании реактивного подхода.</p>
  <p id="R9nF"><strong>01:43:25 Сложности и проблемы реактивного подхода</strong></p>
  <p id="qV8a">• Упоминаются проблемы, связанные с сложностью и сложностью понимания кода при использовании реактивного подхода.<br />• Обсуждаются проблемы с тестированием и дебагом кода при использовании реактивного подхода.</p>
  <p id="t6h9"><strong>01:46:30 Тен девелопер и бэкпэш</strong></p>
  <p id="d9bO">• Упоминается термин &quot;тен девелопер&quot;, который описывает человека, способного эффективно управлять командой и предлагать решения для улучшения работы.<br />• Обсуждаются сложности и проблемы, связанные с использованием реактивного подхода в бэкпэше.</p>
  <p id="JIAz"><strong>01:49:04 Сложности и терминология</strong></p>
  <p id="Cfea">• Упоминаются сложности, связанные с использованием разных терминов и подходов при использовании реактивного подхода.<br />• Предлагается обратить внимание на литературу по этой теме для более глубокого понимания.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/android-razrabotka-10</guid><link>https://teletype.in/@datanoob/android-razrabotka-10?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/android-razrabotka-10?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>10. Android-разработка. Kotlin. | Технострим  </title><pubDate>Fri, 17 May 2024 10:02:02 GMT</pubDate><description><![CDATA[10. Android-разработка. Kotlin. | Технострим]]></description><content:encoded><![CDATA[
  <p id="AxPd">10. Android-разработка. Kotlin. | Технострим</p>
  <p id="xJOI"><a href="https://www.youtube.com/watch?v=L_q45tkG38I" target="_blank">https://www.youtube.com/watch?v=L_q45tkG38I</a></p>
  <p id="0ZuJ"><strong>00:04 Введение в Kotlin</strong></p>
  <p id="JaE3">• Обсуждение работы с Kotlin, его возможностей и отличий от Java.<br />• Обсуждение работы с ссылками и их защиты от NullPointerException.</p>
  <p id="ByNu"><strong>05:16 Безопасный вызов и лямбда-выражения</strong></p>
  <p id="3JY3">• Обсуждение использования безопасного вызова и лямбда-выражений для работы с ссылками.<br />• Обсуждение использования оператора &quot;?&quot; для безопасного вызова и оператора &quot;!&quot; для небезопасного вызова.</p>
  <p id="lhhm"><strong>11:39 Работа с классами и функциями</strong></p>
  <p id="fyYG">• Обсуждение работы с классами и функциями в Kotlin.<br />• Обсуждение возможности создания классов и функций в одном файле.<br />• Обсуждение типов ссылок и их использования в Kotlin.</p>
  <p id="d6en"><strong>14:50 Обзор функций в Kotlin</strong></p>
  <p id="Qw9g">• В видео обсуждаются функции в Kotlin, их особенности и отличия от Java.<br />• Упоминается, что в Kotlin функции могут быть статическими и нестатическими, а также что они могут быть расширены для классов без наследования.</p>
  <p id="cBes"><strong>17:03 Экстеншн функции</strong></p>
  <p id="xqvV">• Экстеншн функции позволяют добавлять функциональность к классам без наследования.<br />• Они могут быть использованы для добавления новых методов к существующим классам или для создания новых классов.</p>
  <p id="fX5f"><strong>21:54 Силд классы</strong></p>
  <p id="75zG">• Силд классы похожи на перечисления, но могут содержать данные и могут быть расширены.<br />• Они обеспечивают безопасность и позволяют создавать классы с множественными наследниками.</p>
  <p id="Pdzt"><strong>26:00 Использование силд классов</strong></p>
  <p id="hg9I">• Силд классы могут быть использованы для хранения данных и результатов функций.<br />• Они могут быть использованы для создания классов, которые могут содержать данные и быть расширены.</p>
  <p id="2sl2"><strong>29:42 Структуры данных и классы</strong></p>
  <p id="JfVg">• В видео обсуждаются структуры данных и классы в Kotlin, их основные особенности и использование.<br />• Упоминается, что классы могут содержать стейт, который может быть использован в качестве результата или другого значения.</p>
  <p id="xene"><strong>32:00 Онлайн функции</strong></p>
  <p id="B0Hw">• Онлайн функции - это функции, которые могут быть встроены в код, где они вызываются.<br />• Это позволяет избежать создания анонимных классов и улучшить производительность.<br />• В онлайн функциях можно использовать вещественные типы, которые не стираются в компиляторе и позволяют выполнять более сложные операции.</p>
  <p id="pWdV"><strong>39:16 Инлайн-классы и онлайн-классы</strong></p>
  <p id="8HNH">• Инлайн-классы - это классы, которые встраиваются в место вызова, что позволяет оптимизировать производительность.<br />• Онлайн-классы - это классы, которые оборачивают любой параметр и могут быть использованы для защиты от глупых ошибок, таких как путаница параметров функции или перегрузки методов.</p>
  <p id="bDJz"><strong>45:10 Тайп-классы и дата-классы</strong></p>
  <p id="Ay9E">• Тайп-классы - это нейминг над типом, который позволяет удобно использовать длинные имена в Kotlin.<br />• Дата-классы - это классы, которые автоматически генерируют методы для инициализации полей и копирования класса.<br />• Важно быть аккуратным с использованием дата-классов, так как они могут привести к увеличению количества методов в декс-файлах, что может замедлить работу приложения.</p>
  <p id="6Lyq"><strong>53:28 Введение в каратины</strong></p>
  <p id="HVb0">• Каратины - это конструкции в языке программирования Kotlin, которые позволяют легко управлять асинхронной работой.<br />• Они основаны на саспен-функции, которая может быть приостановлена и возобновлена.</p>
  <p id="aG2I"><strong>56:47 Использование каратин</strong></p>
  <p id="B9HC">• Каратины используются для запуска и приостановки работы, а также для получения результата.<br />• В Kotlin есть два основных билдера: лаунч и старт.<br />• Лаунч используется для запуска работы, а старт - для запуска работы, которая должна быть выполнена в определенное время.</p>
  <p id="kjiQ"><strong>01:00:22 Использование каратин в контексте</strong></p>
  <p id="omPH">• Каратины могут работать на одном и том же треде, но могут быть заморожены и разморожены в зависимости от контекста.<br />• Каратины легковесны и могут быть созданы пачками, что позволяет оптимизировать использование памяти.</p>
  <p id="TX4d"><strong>01:05:52 Использование каратин для распараллеливания работы</strong></p>
  <p id="x0ed">• Аинг билдер используется для запуска двух каратин одновременно, что позволяет распараллелить работу и использовать несколько ядер процессора.</p>
  <p id="RXPx"><strong>01:06:25 Дефиле и лаунч</strong></p>
  <p id="290K">• Дефиле - это объект, который возвращает результат после вычисления, как и фьюча.<br />• Дефиле может быть использовано в лаунч, который возвращает джоб для управления его стейтом и проверки состояния.</p>
  <p id="mYHr"><strong>01:09:44 Использование со спен</strong></p>
  <p id="Njuk">• Со спен означает, что функция может быть приостановлена и запущена позже.<br />• В лаунч можно использовать со спен, чтобы приостановить функцию и запустить ее позже.</p>
  <p id="7tgR"><strong>01:13:45 Взаимодействие Java и Kotlin</strong></p>
  <p id="nq3J">• В Kotlin нет чек-эксцепшенов, что упрощает работу с исключениями.<br />• В Java в Kotlin нужно помнить о некоторых особенностях, таких как обработка исключений и использование аннотаций.</p>
  <p id="Gwy4"><strong>01:14:54 Обработка исключений в Kotlin</strong></p>
  <p id="Bzel">• В Kotlin нет необходимости обрабатывать исключения, так как компилятор автоматически обрабатывает их.<br />• В Java, однако, необходимо обрабатывать исключения, используя аннотации.</p>
  <p id="dO0E"><strong>01:17:57 Платформенный тип в Kotlin</strong></p>
  <p id="SQdx">• В Kotlin есть платформенный тип, который может быть как нал, так и не нал.<br />• В Java аннотации не заставляют обрабатывать исключения, что может привести к проблемам.</p>
  <p id="ztns"><strong>01:25:03 Использование Kotlin для Android</strong></p>
  <p id="sSzG">• Android команда рекомендует использовать Kotlin для разработки новых приложений.<br />• Kotlin имеет проект Kotlin Native, который позволяет писать код на разных платформах.</p>
  <p id="SYV5"><strong>01:29:23 Обращение к Kotlin из Java</strong></p>
  <p id="457F">• В видео обсуждаются особенности обращения к Kotlin из Java, включая использование аннотаций и возможность использования Kotlin в Java.<br />• Упоминается, что в Kotlin есть функции, которых нет в Java, и как они работают.</p>
  <p id="MR6L"><strong>01:33:15 Использование аннотаций</strong></p>
  <p id="1r99">• В видео объясняется, как использовать аннотации для обращения к Kotlin из Java.<br />• Упоминается, что аннотации необходимы для использования Kotlin в Java, и что они могут быть использованы для создания методов и параметров с дефолтными значениями.</p>
  <p id="hcYD"><strong>01:40:46 Использование Kotlin в Android</strong></p>
  <p id="tOxW">• В видео обсуждается использование Kotlin в Android, включая использование аннотации &quot;живой оверлордс&quot; для создания конструкторов и вьюшек.<br />• Упоминается, что не все вьюшки поддерживают использование этой аннотации, и что это может привести к некорректной работе.</p>
  <p id="kpn1"><strong>01:43:33 Сборка и минусы использования Kotlin</strong></p>
  <p id="g7aG">• В видео обсуждаются минусы использования Kotlin, включая увеличение времени сборки и увеличение размера приложения за счет использования Kotlin.<br />• Упоминается, что можно разбить приложение на модули и использовать Kotlin в одном модуле, что может ускорить сборку.</p>
  <p id="1DMi"><strong>01:45:49 Возможности Kotlin для Android</strong></p>
  <p id="z0WZ">• Обсуждение использования FindViewById для обращения к View по ID.<br />• Использование Kotlin Android Extensions для упрощения работы с View.<br />• Создание и использование кастомных View с использованием Kotlin.</p>
  <p id="8EnF"><strong>01:49:00 Обращение к View по ID с Kotlin</strong></p>
  <p id="sY4A">• Использование экспериментальной функции для обращения к View по ID без использования FindViewById.<br />• Необходимость реализации интерфейса для использования Kotlin Android Extensions.<br />• Использование аннотации @Parcelize для оптимизации работы с View.</p>
  <p id="AUed"><strong>01:55:01 Библиотека Android Kotlin</strong></p>
  <p id="WurN">• Библиотека Android Kotlin содержит набор экстеншенов для класса Uri, Bandal и других классов, которые позволяют удобно работать с ними.<br />• Экстеншены позволяют создавать файлы, создавать бандалы и использовать инфикс функции для сокращения кода.</p>
  <p id="TpNS"><strong>02:00:04 Google IO и Kotlin</strong></p>
  <p id="dXWz">• Google IO переводит свои джетпак библиотеки на Kotlin, создавая фреймворк декларативной юай.<br />• Kotlin также используется для создания новых архитектурных компонентов и фреймворков, облегчающих разработку приложений.</p>
  <p id="2Ete"><strong>02:02:15 Kotlin DSL и Delegated Properties</strong></p>
  <p id="bDRz">• Kotlin DSL (Domain Specific Language) позволяет создавать определенные конструкции для определенных сфер, например, для рисования фигур.<br />• Delegated Properties - это удобный способ создания свойств, которые автоматически обновляются при изменении других свойств.</p>
  <p id="GhrM"><strong>02:07:09 Создание класса для работы с линером градиентом</strong></p>
  <p id="p2tn">• Создается класс, который принимает функциональный тип лямбды с обработчиком и создает линер градиент с заданными полями.<br />• Класс имеет ограниченную функциональность, которая нужна для конкретной задачи.</p>
  <p id="65tl"><strong>02:09:17 Использование библиотеки для ботапи ху</strong></p>
  <p id="ViHG">• Создается библиотека для ботапи ху, которая имеет специальные методы для работы с ботом.<br />• Эти методы нужны только для этой задачи и понятны для использования.</p>
  <p id="ciNM"><strong>02:11:37 Использование аннотаций и юнитов в котлине</strong></p>
  <p id="31iO">• В котлине есть аннотации и юниты, которые упрощают работу с классами и функциями.<br />• Аннотации указывают на тип класса, а юниты позволяют возвращать пустоту.<br />• Котлин старается упростить и упростить работу с классами и функциями, но иногда это может быть сложно для понимания.</p>
  <p id="NPr9"><strong>02:15:56 Использование Kotlin для Android разработки</strong></p>
  <p id="6lys">• Kotlin используется для мобильной разработки, но также может быть использован для бэкенд разработки и мультиплатформенных проектов.<br />• Kotlin позволяет оптимизировать размер APK-файлов и ускорить сборку приложений.</p>
  <p id="qzU4"><strong>02:19:42 Использование Kotlin для бэкенд разработки</strong></p>
  <p id="RX5b">• Kotlin может быть использован для создания бэкенд-приложений, таких как бэкенд фреймворк Kotlin-JS.<br />• Kotlin также может быть использован для создания фронтенд-приложений, таких как Bacon.</p>
  <p id="FP8U"><strong>02:21:36 Советы по использованию Kotlin</strong></p>
  <p id="0yEU">• Если вы изучаете Kotlin, рекомендуется сначала изучить базовые концепции, такие как аннотации и исключения.<br />• Если вы начинаете новый проект, Kotlin может быть хорошим выбором, так как Google активно поддерживает его.<br />• Для домашней работы предлагается конвертировать приложение на Java в Kotlin, а также добавить аннотации для корректной работы в Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/android-razrabotka-9</guid><link>https://teletype.in/@datanoob/android-razrabotka-9?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/android-razrabotka-9?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>9. Android-разработка. Проектирование Android приложений. | Технострим  </title><pubDate>Fri, 17 May 2024 10:01:51 GMT</pubDate><description><![CDATA[9. Android-разработка. Проектирование Android приложений. | Технострим]]></description><content:encoded><![CDATA[
  <p id="7nkf">9. Android-разработка. Проектирование Android приложений. | Технострим</p>
  <p id="TWlZ"><a href="https://www.youtube.com/watch?v=dusPvKaH7nE" target="_blank">https://www.youtube.com/watch?v=dusPvKaH7nE</a></p>
  <p id="Yu8l"><strong>00:00 Введение в проектирование Android-приложений</strong></p>
  <p id="aNlj">• Дмитрий рассказывает о своем курсе по проектированию Android-приложений и объясняет, что материал сложный для понимания, но важно иметь представление о том, какие компоненты существуют и как они работают.<br />• Он также упоминает, что если возникнут вопросы или непонимание, то можно задавать их сразу.</p>
  <p id="bgHd"><strong>00:52 Выдуманная история о разработке Android-приложения</strong></p>
  <p id="2GQq">• Дмитрий рассказывает историю о том, как разработчики пытались создать Android-приложение, но столкнулись с проблемами, такими как нечитаемый код, сложно модифицируемый код, хрупкий код и не тестируемый код.<br />• Они также столкнулись с проблемой не переиспользуемого кода, когда пытались вынести часть функционала в отдельное приложение.</p>
  <p id="fiNa"><strong>06:52 Принципы программирования и их влияние на архитектуру</strong></p>
  <p id="SquF">• Дмитрий объясняет, что принципы программирования, такие как структурное программирование, объектно-ориентированное программирование и принципы SOLID, помогают справиться с этими проблемами.<br />• Он также упоминает Роберта Мартина, известного идеолога в программировании, который сформулировал эти принципы и их влияние на проектирование приложений.</p>
  <p id="eup3"><strong>08:22 Принципы SOLID</strong></p>
  <p id="Lyrt">• Первый принцип - принцип единственности ответственности, утверждает, что каждый класс должен выполнять одну задачу.<br />• Второй принцип - принцип открытости-закрытости, говорит о том, что классы должны быть открыты для расширения и закрыты для модификации.<br />• Третий принцип - принцип постановки Барбары Лисков, утверждает, что функции, использующие базовый тип, должны иметь возможность использовать подтипы этого типа.<br />• Четвертый принцип - принцип разделения интерфейсов, говорит о том, что лучше иметь много маленьких интерфейсов, чем один большой.</p>
  <p id="g2J5"><strong>17:19 Примеры применения принципов SOLID</strong></p>
  <p id="9xiP">• Пример с эрия менеджером, который считает площадь фигур, но не учитывает подтипы фигур.<br />• Пример с плеером-контроллером, который зависит от абстрактного интерфейса плеера-дата-сорса.<br />• Пример с модулями в андроид-приложении, где модель, вью и контроллер взаимодействуют между собой.</p>
  <p id="idyz"><strong>25:02 Модул вью контроллер</strong></p>
  <p id="AiXs">• В этом примере используется модул вью контроллер, который позволяет разделить логику на слои и тестировать модель.<br />• В этом примере есть активити, которая взаимодействует со всеми вьюхами, модель, которая отвечает за всю логику игры, и вьюхи, которые отображают прогресс и победителя.</p>
  <p id="VOlv"><strong>32:00 Модул вью презент</strong></p>
  <p id="G6wU">• Модул вью презент - это более продвинутая версия модул вью контроллера, которая позволяет тестировать презентор и отделять бизнес-логику от отображения.<br />• В презенте есть интерфейс, который имплементирует активити, и презентер, который взаимодействует с интерфейсом через интерфейс в юхе.</p>
  <p id="yv74"><strong>36:00 Тестирование и депенси инжек</strong></p>
  <p id="Zczo">• В этом примере показаны тесты для модели и презента, которые выполняются даже без эмулятора на компьютере.<br />• Для тестирования презента используется инъекция зависимости через конструктор, что позволяет избавиться от зависимостей на андроид.<br />• В тесте используется анонимная имплементация экзекьютора, которая выполняет код на том же потоке.</p>
  <p id="y3uM"><strong>44:43 Тестирование презента</strong></p>
  <p id="TRce">• Обсуждение тестирования презента и его зависимости от модели.<br />• Создание юнит-теста для презента, который проверяет, что при клике на ячейку презент передает информацию в модель.</p>
  <p id="oTJJ"><strong>53:41 Использование фреймворка зависимости</strong></p>
  <p id="5N5f">• Обсуждение использования фреймворка зависимости для Android приложений.<br />• Демонстрация использования аннотации инжект для добавления зависимости в дерево зависимости.<br />• Создание компонента для определения, куда будет инъекктиться презент.<br />• Создание модуля для определения, куда будет инъекктиться бэкграунд экзекьютор.<br />• Использование аннотации синглтон для указания, что каждый раз будет использоваться один и тот же инстанс мейн трек экзекьютора.</p>
  <p id="79FM"><strong>01:06:52 Обзор архитектуры Android</strong></p>
  <p id="j4hM">• В видео обсуждается архитектура Android, которая включает в себя компоненты, такие как классы, интерфейсы, аннотации и другие.<br />• В частности, обсуждается использование компонента для инжектирования зависимостей в зависимости от модулей.</p>
  <p id="mZfp"><strong>01:14:50 Тестирование и взаимодействие с базой данных</strong></p>
  <p id="NXrg">• В видео также обсуждаются тесты и взаимодействие с базой данных, используя компоненты, такие как лайф сайк, вью модель и рум.<br />• Лайф сайк позволяет делегировать логику из активити или фрагмента в контроллер, а вью модель представляет данные в удобном для отображения виде.<br />• Рум позволяет взаимодействовать с базами данных удобным способом.</p>
  <p id="JW0V"><strong>01:24:48 Обзор кода и использование лайф даты</strong></p>
  <p id="OyaN">• В видео обсуждается использование лайф даты в коде, которая предоставляет данные для различных компонентов.<br />• Лайф дата имеет методы обзор и обзор фрева, которые используются для получения данных и их обновления.</p>
  <p id="X5NE"><strong>01:30:48 Взаимодействие с лайф датой</strong></p>
  <p id="WbyS">• Лайф дата наследуется от класса мьюта был лайф дата, который обеспечивает взаимодействие с лайф датой.<br />• Лайф дата используется для подписки на изменения и обновления данных.</p>
  <p id="yBLu"><strong>01:36:46 Использование дата-бандингов</strong></p>
  <p id="Pc9a">• В видео демонстрируется использование дата-бандингов для подписки на изменения в лайф дате.<br />• Это позволяет избежать кода в активити и фрагменте и обеспечивает более четкое разделение бизнес-логики.<br />• Однако, дата-бандинги имеют некоторые недостатки, такие как медленная сборка и неочевидное поведение при неправильном синтаксисе.</p>
  <p id="hAzv"><strong>01:44:14 Принципы и архитектура Android</strong></p>
  <p id="IuUf">• Обсуждение принципов и архитектуры Android, включая разделение на слои, независимость от фреймворков и баз данных, и использование интерфейсов для взаимодействия между слоями.<br />• Упоминание о клин-архитектуре, которая была представлена Робертом Мартином и позже развита Фернандо Сиджесом.</p>
  <p id="bSBH"><strong>01:53:12 Пример кода с использованием клин-архитектуры</strong></p>
  <p id="gJsg">• Демонстрация кода, который использует библиотеку для избегания вызова findViewById и аннотации для вызова Butter Knife.<br />• Обсуждение использования интерфейсов для взаимодействия между слоями и использования репозитория для абстракции данных.<br />• Упоминание о последних версиях кода, которые были переписаны и используют набор колбаков для взаимодействия с репозиторием и юс-кейсами.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/android-razrabotka-8</guid><link>https://teletype.in/@datanoob/android-razrabotka-8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/android-razrabotka-8?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>8. Android-разработка. Тестирование. | Технострим  </title><pubDate>Fri, 17 May 2024 09:58:19 GMT</pubDate><description><![CDATA[8. Android-разработка. Тестирование. | Технострим]]></description><content:encoded><![CDATA[
  <p id="uLRe">8. Android-разработка. Тестирование. | Технострим</p>
  <p id="IQab"><a href="https://www.youtube.com/watch?v=oQpmPCZbAt0" target="_blank">https://www.youtube.com/watch?v=oQpmPCZbAt0</a></p>
  <p id="YtZN"><strong>00:04 Введение в юнит-тесты</strong></p>
  <p id="hO6C">• Юнит-тесты - это тесты, которые пишутся на маленькие куски программы, функции или классы, и помогают быстро находить ошибки и улучшать качество архитектуры кода.<br />• Пирамида тестирования: юнит-тесты (70%), миграционные тесты (20%), интеграционные тесты (10%).</p>
  <p id="6TNq"><strong>06:26 Создание юнит-теста</strong></p>
  <p id="pm40">• Создание теста с помощью инструмента &quot;Go to Test&quot; в Android Studio.<br />• Настройка теста с помощью аннотаций и методов.<br />• Использование аннотаций для настройки порядка выполнения тестов и методов.</p>
  <p id="Db57"><strong>14:53 Использование правил юнит-тестов</strong></p>
  <p id="Qqb5">• Создание временной папки, отслеживание выполнения тестового метода, добавление тайм-аута на тест.<br />• Гибкость использования правил юнит-тестов для разных ситуаций.</p>
  <p id="p2ka"><strong>16:26 Использование аннотаций в тестах</strong></p>
  <p id="NgLn">• В видео рассказывается о дополнительных параметрах для аннотаций тестов, которые позволяют отлавливать исключения и игнорировать тесты.<br />• Упоминается, что тесты могут быть запущены с помощью иконок или конфигурации, а также с помощью Gradle.</p>
  <p id="4aDE"><strong>22:24 Моки и макеты</strong></p>
  <p id="6YFg">• В видео обсуждаются макеты и заглушки, которые позволяют создавать фиктивные реализации для интерфейсов и классов.<br />• Упоминаются аннотации моков, которые позволяют создавать заглушки и проверять, вызывались ли методы.</p>
  <p id="qMHY"><strong>31:16 Инжект моков</strong></p>
  <p id="txbA">• В видео объясняется, как использовать инжект моков для встраивания мокируемых объектов, которые требуют других объектов.<br />• Упоминается, что макита умеет макировать только публичные методы, а для статических и приватных методов используется другая библиотека - Power Mock.</p>
  <p id="SFOT"><strong>37:06 Тестирование с использованием моков</strong></p>
  <p id="Ol1x">• Создание моков для взаимодействия с системой и проверки работы приложения.<br />• Использование аннотации для создания моков и работы с шерид преференс.</p>
  <p id="L7Bo"><strong>43:07 Использование арбалектрика для тестирования</strong></p>
  <p id="NWS5">• Арбалектрик позволяет запускать тесты на устройстве, не запуская эмулятор.<br />• Использование шедоу-классов для работы с различными элементами системы.</p>
  <p id="3Otc"><strong>52:34 Проблемы с использованием арбалектрика</strong></p>
  <p id="luDs">• Проблемы с эмуляцией полного андроида и перемещением между активити.<br />• Не рекомендуется использовать арбалектрик для многопоточных приложений.<br />• Арбалектрик - это симулятор андроида, а не чистый андроид.</p>
  <p id="1Y6s"><strong>54:03 Тестирование Android-приложений</strong></p>
  <p id="Z7lo">• Видео обсуждает различные подходы к тестированию Android-приложений, включая использование инструментов, таких как Apeum, Espresso и UIAutomator.<br />• Apeum - это веб-сервер, который позволяет отправлять запросы на тестирование на любом языке, включая Java, Ruby и Java.<br />• Espresso - это фреймворк, который предоставляет доступ к коду приложения и позволяет вызывать код приложения.<br />• Espresso работает вместе с UIAutomator, который позволяет взаимодействовать с компонентами системы, такими как шторка или другое приложение.<br />• Тесты UIAutomator лежат в папке Android-test и используют AndroidJUnitRunner для запуска тестов.</p>
  <p id="17Cb"><strong>01:00:21 Использование эспрессо для тестирования</strong></p>
  <p id="Vz3i">• В видео рассказывается о том, как использовать эспрессо для тестирования в Android.<br />• Эспрессо собирает специальную тестовую ПК, в которую запаковывает все тесты и запускает их на приложении.<br />• В примере показан тест, который кликает на сеттинге, заполняет поля и проверяет, что кнопка реверс возвращает все в исходное состояние.</p>
  <p id="D3Qy"><strong>01:06:21 Ожидания в эспрессо</strong></p>
  <p id="M8Bu">• Эспрессо автоматически ожидает выполнения всех бэкграунд тасков и выполняет тесты только после их завершения.<br />• Если тест выполняется быстро, то можно добавить аси-таски для создания видимости задержки.</p>
  <p id="8dsu"><strong>01:13:00 Запуск активити и использование ресурсов</strong></p>
  <p id="OOju">• Для запуска активити используется специальный рул, который позволяет настроить параметры для интента.<br />• Для настройки дополнительных параметров можно использовать методы бифо и автор активити.<br />• Для поиска элементов в активити можно использовать локатор лоя спектр.<br />• Эспрессо предоставляет дополнительные экшены для ресайклер вью, дата-пикера и других элементов, что упрощает написание тестов.</p>
  <p id="DWA0"><strong>01:20:37 Работа с эспрессо</strong></p>
  <p id="C4Mb">• Обсуждение работы с эспрессо, его костылей и дополнительных возможностей.<br />• Запуск тестов с использованием эспрессо и проверка их работы.</p>
  <p id="CJeE"><strong>01:32:19 Запуск тестов с использованием оркестратора</strong></p>
  <p id="RP4q">• Обсуждение оркестратора, его функций и преимуществ перед обычным запуском тестов.<br />• Запуск тестов с использованием оркестратора и демонстрация его работы.<br />• Обсуждение проблем, связанных с крашами приложений и потерей тестов при их запуске.<br />• Решение этих проблем с помощью оркестратора.</p>
  <p id="IhKs"><strong>01:36:58 Использование оркестратора для тестирования</strong></p>
  <p id="Z01A">• В видео рассказывается о том, как использовать оркестратор для тестирования приложений.<br />• Оркестратор позволяет запускать тесты по одному, а не все сразу, что ускоряет процесс тестирования.<br />• Также он автоматически очищает данные при каждом запуске приложения, что упрощает работу с тестами.</p>
  <p id="4bdu"><strong>01:40:02 Процесс разработки фичи</strong></p>
  <p id="last">• В видео объясняется процесс разработки фичи в компании.<br />• Сначала разработчик получает таску в системе управления задачами, затем создает ветку и начинает разработку.<br />• После завершения разработки, разработчик создает промежуточную ветку и запускает тесты на гибридном бранче.<br />• Если тесты проходят успешно, разработчик может вмерзить свою ветку в девелоп.</p>
  <p id="Xcxg"><strong>01:46:30 Тестирование и релиз</strong></p>
  <p id="DvnP">• После среды, когда любые комиты и пол-реквесты больше не принимаются, девелоп-ветка отводится и из нее делается релиз.<br />• В пятницу тестировщики вручную проверяют то, что не покрыто автотестами, и в понедельник релиз выкладывается в плей-сторе.<br />• В случае обнаружения ошибок, в релиз вносятся исправления.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@datanoob/android-razrabotka-7</guid><link>https://teletype.in/@datanoob/android-razrabotka-7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob</link><comments>https://teletype.in/@datanoob/android-razrabotka-7?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=datanoob#comments</comments><dc:creator>datanoob</dc:creator><title>7. Android-разработка. Архитектура Android OS | Технострим  </title><pubDate>Fri, 17 May 2024 09:54:55 GMT</pubDate><description><![CDATA[7. Android-разработка. Архитектура Android OS | Технострим]]></description><content:encoded><![CDATA[
  <p id="ExXz">7. Android-разработка. Архитектура Android OS | Технострим</p>
  <p id="vnSr"><a href="https://www.youtube.com/watch?v=z8qU03EPcCI" target="_blank">https://www.youtube.com/watch?v=z8qU03EPcCI</a></p>
  <p id="Qw1g"><strong>00:04 Введение в архитектуру Android</strong></p>
  <p id="eOdr">• Обсуждение важности понимания архитектуры Android для поиска и устранения проблем в приложениях.<br />• Упоминание о том, что большая часть времени, проводимого на работе, уходит на поиск и устранение багов.</p>
  <p id="7pJh"><strong>08:30 Основные компоненты Android</strong></p>
  <p id="Ucer">• Обсуждение четырех основных компонентов Android: активити, сервис, контент-провайдер и ресивер.<br />• Обсуждение задач, которые могут быть выполнены в фоновом режиме, и необходимости использования сервисов для этого.</p>
  <p id="VDR2"><strong>10:58 Примеры использования компонентов Android</strong></p>
  <p id="XOng">• Обсуждение примера использования сервиса для выполнения фоновых задач.<br />• Обсуждение важности понимания архитектуры Android для проектирования и разработки приложений.</p>
  <p id="tVHy"><strong>13:01 Глобальный поиск в Android Studio</strong></p>
  <p id="FRNh">• В видео автор демонстрирует использование функции &quot;коммент шифта&quot; в Android Studio для глобального поиска по всем функциям.<br />• Он объясняет, что эта функция может быть полезна, когда нужно увеличить размер шрифта, но не знает, где это искать.</p>
  <p id="Muud"><strong>14:42 Настройка и использование функции</strong></p>
  <p id="IvXk">• Автор пробует различные настройки, чтобы найти нужную функцию, но не находит успеха.<br />• Он решает попробовать создать новый проект и добавить в него новый класс, чтобы проверить, как работает функция.</p>
  <p id="D6n7"><strong>16:16 Создание нового проекта и добавление класса</strong></p>
  <p id="nwuG">• Автор создает новый проект и добавляет класс, используя функцию &quot;старт ворк&quot;.<br />• Он объясняет, что функция &quot;коммент шифта&quot; может быть полезна для проверки документации и понимания работы функций.</p>
  <p id="B497"><strong>19:52 Обсуждение ограничений и ограничений Android</strong></p>
  <p id="yNKg">• Автор обсуждает ограничения, которые Google накладывает на разработчиков, и как они пытаются компенсировать это, предоставляя возможности для выполнения определенных задач.<br />• Он приводит пример сервиса Google &quot;джоб шедлер&quot;, который был анонсирован как очень полезный, но на самом деле оказался с критическими багами и не использовался.</p>
  <p id="EGPq"><strong>21:41 Работа с сервисами</strong></p>
  <p id="IBdl">• Обсуждение работы с сервисами в Android, их назначение и использование.<br />• Упоминается, что сервисы могут быть использованы для сохранения состояния потока и продолжения работы после закрытия приложения.</p>
  <p id="sSwX"><strong>28:04 Медиаплеер и медиатрек</strong></p>
  <p id="ZJM2">• Обсуждение использования медиаплеера и медиатрека для проигрывания музыки.<br />• Указывается на сложность и боль разработки под Android, особенно в случае использования медиаплеера.</p>
  <p id="12BY"><strong>31:08 Контент-провайдеры и браткаст-ресиверы</strong></p>
  <p id="bq2H">• Обсуждение контент-провайдеров и браткаст-ресиверов, их назначение и использование для общения между приложениями.<br />• Упоминается, что контент-провайдеры могут быть использованы для предоставления данных, но не обязательно должны содержать базу данных.</p>
  <p id="oxQq"><strong>34:53 Запуск приложения</strong></p>
  <p id="lhxl">• В видео обсуждается процесс запуска приложения на Android.<br />• Упоминается класс &quot;активити тред&quot;, который запускает все активы приложения.<br />• Этот класс не находится в исходном коде, но его можно найти в Android Open Source Project.</p>
  <p id="sNjD"><strong>37:14 Понимание работы системы</strong></p>
  <p id="bf5h">• Обсуждается путаница между потоками, процессами и переменными в Android.<br />• Объясняется, что операционная система не может повредить данные приложения, так как все системные сервисы и процессы работают отдельно.<br />• Приводится пример, как можно повредить систему, показывая оповещения в шторке.</p>
  <p id="AJL2"><strong>43:09 Порядок инициализации</strong></p>
  <p id="bFTn">• Упоминается метод &quot;от тач бейс контекст&quot;, который вызывается перед инициализацией класса.<br />• Этот метод важен для переопределения методов, которые влияют на все приложение.</p>
  <p id="mO7U"><strong>44:36 Мультидекс и его ограничения</strong></p>
  <p id="qqVx">• Обсуждение знаменитого высказывания Билла Гейтса о том, что 4 килобайта достаточно для всех, и сравнение с 65 тысячами методов, которые Андроид считает достаточным для всех.<br />• Объяснение, что Андроид изначально был заточен под 65 тысяч методов, но столкнулся с ограничениями из-за роста приложений.</p>
  <p id="1syt"><strong>49:29 Работа с мультидексом</strong></p>
  <p id="BYaE">• Демонстрация работы с мультидексом, где статический инициализатор работает быстрее, чем в обычном приложении.<br />• Обсуждение гипотезы о том, что если во всех методах вывести их названия, то при нажатии кнопки &quot;Холм&quot; приложение будет полностью убито.</p>
  <p id="lXXI"><strong>53:36 Сейф стейт и восстановление контекста</strong></p>
  <p id="D6Cz">• Объяснение, что сейф стейт используется для сохранения состояния приложения, чтобы оно могло быть восстановлено при изменении типа рекомендации.<br />• Обсуждение того, что сейф стейт может быть использован для восстановления контекста, но не всегда, и что время жизни процесса не связано с временем жизни компонентов.</p>
  <p id="UudH"><strong>59:49 Использование бэкграунд процесса</strong></p>
  <p id="LvlW">• Обсуждение использования бэкграунд процесса для ограничения количества процессов, которые могут работать.<br />• Пример использования бэкграунд процесса для ограничения количества процессов в приложении.</p>
  <p id="qqGH"><strong>01:08:15 Передача данных между активити</strong></p>
  <p id="QlWq">• Обсуждение передачи данных между активити с использованием статических полей и интентов.<br />• Обсуждение ограничений и недостатков использования статических полей и интентов для передачи данных.</p>
  <p id="lgPO"><strong>01:11:07 Использование статических полей для передачи данных</strong></p>
  <p id="FLSE">• Пример использования статических полей для передачи данных между активити.<br />• Обсуждение преимуществ использования статических полей для передачи данных по сравнению с использованием интентов.</p>
  <p id="1Qki"><strong>01:14:39 Проблемы с передачей данных между активити</strong></p>
  <p id="1Fn2">• В Android, передача данных между активити может быть медленной из-за необходимости доступа к статическим полям.<br />• Проблемы с удалением данных из базы данных, так как процесс может быть убит в любой момент.</p>
  <p id="aLqX"><strong>01:23:12 Интенты и их использование</strong></p>
  <p id="gm0p">• Интенты используются для запуска других компонентов, включая интенты, связанные с операционной системой Android.<br />• Интенты могут быть использованы для запуска других компонентов через операционную систему Android.</p>
  <p id="8yIO"><strong>01:25:27 Таски и их сложность</strong></p>
  <p id="IQpr">• Таски - это важная, но сложная и негибкая концепция в разработке Android.<br />• В современных разработках стараются избегать использования тасок.</p>
  <p id="4pD9"><strong>01:26:12 Навигация и активити</strong></p>
  <p id="qBJj">• В видео обсуждается, как активити могут быть &quot;наложены&quot; друг на друга или происходить разные вещи при переходе между ними.<br />• Упоминается статья, которая подробно описывает этот процесс.</p>
  <p id="Ms1u"><strong>01:30:00 Анимации и передача данных</strong></p>
  <p id="Yb7V">• Обсуждаются различные анимации, которые могут происходить при переходе между активити, и как они могут быть использованы для улучшения пользовательского опыта.<br />• Упоминаются флаги, которые могут быть использованы для управления анимацией и передачи данных между компонентами.</p>
  <p id="Ev28"><strong>01:35:32 Сервисы и их роль</strong></p>
  <p id="p9Id">• Сервисы используются для повышения приоритета процесса, что позволяет избежать его убийства операционной системой.<br />• В видео демонстрируется создание собственного сервиса и его использование в приложении.</p>
  <p id="ncoM"><strong>01:39:31 Работа с сервисами</strong></p>
  <p id="d2Ag">• В видео обсуждаются два способа работы с сервисами: запуск сервиса и возврат флага старт-стик.<br />• Запуск сервиса продлевает время работы приложения, но если операционная система решит убить приложение, то вся история закончится.<br />• Если сервис возвращает флаг старт-стик, то операционная система перезапустит сервис, чтобы завершить работу, которую он не успел сделать.</p>
  <p id="uYQZ"><strong>01:45:46 Взаимодействие с операционной системой</strong></p>
  <p id="kPUs">• Сервисы могут быть использованы для общения с операционной системой, например, для отправки интегентов и выполнения работы.<br />• Сервисы могут быть запущены из активити, но они не привязаны к нему и живут своей собственной жизнью.<br />• Приоритет процесса сервиса выше, чем у других процессов, но он может быть убит, если операционная система решит сэкономить ресурсы.</p>
  <p id="KDdo"><strong>01:50:15 Музыкальные приложения и форграунд сервисы</strong></p>
  <p id="eblw">• Музыкальные приложения используют форграунд сервисы для повышения приоритета процесса и видимости для пользователя.<br />• Это позволяет пользователю быть уверенным, что процесс работает, и не будет убит операционной системой.<br />• Однако, форграунд сервисы также могут быть убиты, если операционная система решит экономить ресурсы.</p>
  <p id="hmce"><strong>01:53:15 Работа с сервисами</strong></p>
  <p id="R85V">• В Android есть два типа сервисов: бэкграунд и форграунд.<br />• Бэкграунд-сервисы запускаются и работают до тех пор, пока есть хотя бы один клиент, подключенный к ним.<br />• Форграунд-сервисы работают до тех пор, пока приложение активно.<br />• В Android есть специальный язык описания интерфейсов (АDL), который используется для общения между компонентами.</p>
  <p id="6kJ9"><strong>02:00:04 Фоновая работа и джоб шедлер</strong></p>
  <p id="sZg9">• Фоновые сервисы могут быть использованы для выполнения задач, которые не требуют немедленного ответа пользователя.<br />• Начиная с Android 8, Google рекомендует использовать джоб шедлер для группировки фоновых задач.<br />• Джоб шедлер позволяет лучше использовать системные ресурсы и снижает энергопотребление.<br />• Однако, есть проблемы с использованием джоб шедлера, и Google предлагает использовать специальную библиотеку для обхода этих проблем.</p>
  <p id="XN0f"><strong>02:06:03 Браткаст ресиверы</strong></p>
  <p id="Quaq">• Браткаст ресиверы - это компоненты, которые могут получать глобальные события, такие как входящие звонки, подключение к сети и т.д.<br />• Браткаст ресиверы могут быть зарегистрированы в любом процессе, даже если он мертв.</p>
  <p id="S9nk"><strong>02:07:35 Браткаст-ресиверы и контент-провайдеры</strong></p>
  <p id="TyxV">• Браткаст-ресиверы используются для получения широковещательных сообщений от операционной системы.<br />• Начиная с Android 7, нельзя подписываться на коннективе чейн экшн в манифесте, но можно в рантайме.<br />• Контент-провайдеры используются для обмена данными между приложениями, но редко используются в реальных проектах.</p>
  <p id="UKVF"><strong>02:20:14 Девелопер обшинс и дунут кип активитис</strong></p>
  <p id="5HmB">• Девелопер обшинс - это класс, который позволяет разработчикам получать информацию о состоянии приложения и его компонентов.<br />• Дунут кип активитис - это класс, который позволяет приложению сохранять состояние при переходе между активити.<br />• Рекомендуется включать эту опцию для обеспечения корректной работы приложения в продакшне.</p>
  <p id="eLi4"><strong>02:22:45 Использование инструментов для оптимизации работы приложений</strong></p>
  <p id="Gso2">• Обсуждение использования инструментов для оптимизации работы приложений, таких как &quot;инспектор памяти&quot; и &quot;профайлер&quot;.<br />• &quot;Инспектор памяти&quot; позволяет увидеть, как быстро рисуется каждый кадр в приложении и на каком этапе происходит обработка.<br />• &quot;Профайлер&quot; помогает определить, почему приложение работает медленно, и оптимизировать его работу.</p>
  <p id="6nks"><strong>02:35:42 Использование &quot;стресс-теста&quot; для проверки системных сервисов</strong></p>
  <p id="DydX">• &quot;Стресс-тест&quot; позволяет увидеть, как работают системные сервисы и оптимизировать их работу.<br />• &quot;Стресс-тест&quot; может подсказать, где оптимизировать работу приложения, если оно начинает тормозить.</p>
  <p id="cEVp"><strong>02:39:41 Использование &quot;adb&quot; для эмуляции нажатия на экран и запуска сервисов</strong></p>
  <p id="Hw3g">• &quot;adb&quot; позволяет эмулировать нажатие на экран и запускать различные сервисы.<br />• &quot;adb&quot; также позволяет получать информацию о системе, включая информацию о том, какие сервисы запущены, сколько батарейки они потребляют и сколько времени занимает рендеринг кадра.</p>

]]></content:encoded></item></channel></rss>