<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Нубы в IT</title><subtitle>Статьи на следующие темы: Big Data, тестирование, программирование, аналитика</subtitle><author><name>Нубы в IT</name></author><id>https://teletype.in/atom/datanoob</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/datanoob?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@datanoob?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=datanoob"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/datanoob?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-05T07:19:56.490Z</updated><entry><id>datanoob:java-5</id><link rel="alternate" type="text/html" href="https://teletype.in/@datanoob/java-5?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=datanoob"></link><title>5. Введение в Java. Наследования и ООП. | Технострим  </title><published>2024-05-17T10:17:49.408Z</published><updated>2024-05-17T10:17:49.408Z</updated><summary type="html">5. Введение в Java. Наследования и ООП. | Технострим</summary><content type="html">
  &lt;p id=&quot;trNy&quot;&gt;5. Введение в Java. Наследования и ООП. | Технострим&lt;/p&gt;
  &lt;p id=&quot;J55p&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=z3PqNsKx2Bo&quot; target=&quot;_blank&quot;&gt;https://www.youtube.com/watch?v=z3PqNsKx2Bo&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;fE2y&quot;&gt;&lt;strong&gt;00:08 Обсуждение наследования и маппинга&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;mi9H&quot;&gt;• Обсуждение наследования и использования стандартных коллекций, таких как хэшмапы.&lt;br /&gt;• Обсуждение проблем с наследованием и использованием стандартных коллекций.&lt;/p&gt;
  &lt;p id=&quot;Timt&quot;&gt;&lt;strong&gt;12:00 Тестирование и проблемы с маппингом&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Lpap&quot;&gt;• Обсуждение тестирования и проблем с маппингом.&lt;br /&gt;• Обсуждение того, как маппинг может мешать покупке одинаковых товаров с разными ссылками.&lt;br /&gt;• Обсуждение неявной информации, связанной с маппингом и классами.&lt;/p&gt;
  &lt;p id=&quot;NVgI&quot;&gt;&lt;strong&gt;19:27 Хэшмапы и связанные списки&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;xcbM&quot;&gt;• Хэшмапы - это структуры данных, которые используют хэш-коды для быстрого поиска элементов.&lt;br /&gt;• Хэш-коды могут совпадать у разных объектов, что приводит к коллизиям.&lt;br /&gt;• Хэшмапы используют связанные списки для хранения элементов.&lt;/p&gt;
  &lt;p id=&quot;j5dC&quot;&gt;&lt;strong&gt;24:01 Методы и классы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;3Xjj&quot;&gt;• В хэшмапах используются методы для сравнения объектов и определения равенства.&lt;br /&gt;• Класс Object является корнем иерархии классов и наследуется всеми классами.&lt;br /&gt;• Методы клонирования и toString переопределяются для реализации пользовательских функций.&lt;/p&gt;
  &lt;p id=&quot;PbSH&quot;&gt;&lt;strong&gt;32:25 Хешкоды и иквоусы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;3HyT&quot;&gt;• Хешкоды и иквоусы - это методы, которые используются для сравнения объектов и их полей.&lt;br /&gt;• Хешкод считается по умолчанию, но его можно переопределить.&lt;br /&gt;• Хешкод и иквоус связаны между собой, и если они не соответствуют правилам, то это считается ошибкой.&lt;/p&gt;
  &lt;p id=&quot;9lbt&quot;&gt;&lt;strong&gt;39:56 Использование хешкодов и иквоусов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;BGJa&quot;&gt;• Хешкоды и иквоусы используются в коллекциях, таких как хэшмапы и хэш-сеты.&lt;br /&gt;• Если вы хотите использовать эти коллекции, то вам нужно переопределить методы хешкод и иквоус.&lt;br /&gt;• Хешкоды и иквоусы связаны между собой и должны соответствовать определенным правилам.&lt;br /&gt;• Если вы не выполните эти правила, то это считается ошибкой.&lt;/p&gt;
  &lt;p id=&quot;O6gN&quot;&gt;&lt;strong&gt;44:03 Модификаторы доступа&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;lYGz&quot;&gt;• Обсуждение важности защиты приватных полей от несанкционированного доступа.&lt;br /&gt;• Приватные поля могут быть доступны только через методы, которые возвращают информацию, но не изменяют объект.&lt;/p&gt;
  &lt;p id=&quot;dRk7&quot;&gt;&lt;strong&gt;47:50 Создание приватных методов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;JoBD&quot;&gt;• Приватные методы могут быть созданы для доступа к приватным полям, но только из родительского класса.&lt;br /&gt;• Приватные методы могут быть использованы для согласованных операций с объектом.&lt;/p&gt;
  &lt;p id=&quot;xEET&quot;&gt;&lt;strong&gt;51:22 Создание приватных полей&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;My9C&quot;&gt;• Приватные поля могут быть созданы для защиты информации от несанкционированного доступа.&lt;br /&gt;• Приватные поля могут быть использованы для хранения информации, которая не должна быть доступна извне.&lt;/p&gt;
  &lt;p id=&quot;CZ8v&quot;&gt;&lt;strong&gt;54:40 Решение проблемы с доступом к приватным полям&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;feco&quot;&gt;• Создание приватных методов для доступа к приватным полям может быть решением проблемы.&lt;br /&gt;• Приватные методы могут быть доступны только из ограниченного количества классов, что обеспечивает безопасность и единоличную ответственность.&lt;/p&gt;
  &lt;p id=&quot;Iooq&quot;&gt;&lt;strong&gt;56:38 Композиция и наследование в объектно-ориентированном программировании&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;owgD&quot;&gt;• В видео обсуждается, как можно использовать композицию и наследование в объектно-ориентированном программировании.&lt;br /&gt;• Композиция позволяет одному классу содержать другой класс, который может быть использован для добавления и удаления объектов.&lt;br /&gt;• Наследование позволяет одному классу наследовать свойства и методы от другого класса.&lt;/p&gt;
  &lt;p id=&quot;fUvy&quot;&gt;&lt;strong&gt;01:02:55 Примеры использования композиции и наследования&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;f3xx&quot;&gt;• В примере с магазином, склад может содержать товары, а бэк-стор может добавлять и удалять товары.&lt;br /&gt;• В примере с промоушеном, можно создать класс промоушен, который наследует класс атом и добавляет свои собственные поля и методы.&lt;br /&gt;• В обоих случаях, важно понимать, что каждый класс должен иметь свою собственную ответственность и не вмешиваться в работу других классов.&lt;/p&gt;
  &lt;p id=&quot;BRan&quot;&gt;&lt;strong&gt;01:09:08 Ключевые слова для доступа к полям и методам родительского класса&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;toLq&quot;&gt;• В случае наследования, ключевое слово &amp;quot;супер&amp;quot; позволяет получить доступ к полям и методам родительского класса.&lt;br /&gt;• Однако, если создать поле с тем же именем, что и поле в родительском классе, то это приведет к созданию двух полей с одинаковым именем, но разных типов.&lt;/p&gt;
  &lt;p id=&quot;uWHP&quot;&gt;&lt;strong&gt;01:10:40 Модификаторы доступа и наследование&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;VfGY&quot;&gt;• В видео обсуждаются модификаторы доступа, такие как public, private и protected, и их влияние на наследование.&lt;br /&gt;• Если класс наследуется, то все поля и методы родительского класса становятся доступными для наследника.&lt;/p&gt;
  &lt;p id=&quot;PRjV&quot;&gt;&lt;strong&gt;01:17:03 Использование модификаторов и наследование&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;hdY4&quot;&gt;• Если класс является наследником, то он должен корректно инициализировать все поля и методы родительского класса.&lt;br /&gt;• Если класс содержит приватные поля, то они не могут быть доступны из наследника.&lt;/p&gt;
  &lt;p id=&quot;gdoL&quot;&gt;&lt;strong&gt;01:22:05 Запрет наследования&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;83eG&quot;&gt;• Если класс содержит ключевое слово final, то он не может быть унаследован.&lt;br /&gt;• Если в классе есть приватный конструктор, то он не может быть унаследован.&lt;/p&gt;
  &lt;p id=&quot;UhlC&quot;&gt;&lt;strong&gt;01:26:01 Паттерн проектирования &amp;quot;синглтон&amp;quot;&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;oObr&quot;&gt;• В видео обсуждается паттерн проектирования &amp;quot;синглтон&amp;quot;, который позволяет создать один экземпляр класса и использовать его в программе.&lt;br /&gt;• Внутри класса можно получить доступ к приватным полям, используя статические методы.&lt;/p&gt;
  &lt;p id=&quot;azBc&quot;&gt;&lt;strong&gt;01:28:35 Абстрактные классы&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;QbX0&quot;&gt;• В видео объясняется, что абстрактные классы не могут быть созданы, так как они не имеют полной реализации всех своих методов.&lt;br /&gt;• Если у класса есть абстрактные методы, то его нельзя создать, пока все абстрактные методы не будут определены.&lt;/p&gt;
  &lt;p id=&quot;dfqE&quot;&gt;&lt;strong&gt;01:31:11 Наследование и реализация методов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;DeNx&quot;&gt;• Наследование от абстрактного класса позволяет реализовать общие методы, но также может привести к проблемам с пониманием иерархии классов и зависимостей между ними.&lt;br /&gt;• Если метод в родительском классе меняется, это может повлиять на все дочерние классы, что может привести к ошибкам и сложностям в понимании кода.&lt;/p&gt;
  &lt;p id=&quot;kPOc&quot;&gt;&lt;strong&gt;01:37:00 Динамическая диспетчеризация типов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;kykh&quot;&gt;• В видео объясняется, что в Java есть механизм динамической диспетчеризации типов, который позволяет вызывать методы базового класса, даже если ссылка указывает на дочерний класс.&lt;br /&gt;• Однако, это может привести к проблемам, если иерархия классов становится слишком сложной и запутанной.&lt;/p&gt;
  &lt;p id=&quot;uyJL&quot;&gt;&lt;strong&gt;01:40:34 Проблемы с наследованием и композицией&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;J0LL&quot;&gt;• В видео обсуждаются проблемы с наследованием и композицией в программировании.&lt;br /&gt;• Наследование может быть сложным для понимания, особенно когда иерархия становится слишком глубокой.&lt;br /&gt;• Композиция может быть сложной из-за большого количества объектов и методов, которые нужно вызывать.&lt;/p&gt;
  &lt;p id=&quot;Jsbk&quot;&gt;&lt;strong&gt;01:42:01 Примеры использования наследования и композиции&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ti37&quot;&gt;• В примере с классом Point, композиция выглядит как класс Point, который содержит класс ColorPoint, который добавляет цвет к Point.&lt;br /&gt;• В примере с коллекциями, такими как ArrayList, HashSet и HashMap, композиция может быть сложной из-за большого количества классов и методов, которые нужно использовать.&lt;br /&gt;• В случае с файлами, композиция может быть сложной из-за большого количества маленьких классов, которые нужно использовать для работы с файлами.&lt;/p&gt;
  &lt;p id=&quot;7ggi&quot;&gt;&lt;strong&gt;01:50:43 Интерфейсы и их использование&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;upKC&quot;&gt;• Интерфейсы определяют контракт класса, то есть публичное API, которое класс предоставляет.&lt;br /&gt;• В идеальном мире, интерфейс содержит только публичные методы, и класс не должен содержать ничего лишнего.&lt;br /&gt;• Примеры интерфейсов: коллекция, итератор, итератор.&lt;/p&gt;
  &lt;p id=&quot;LfqO&quot;&gt;&lt;strong&gt;01:53:06 Коллекции и их использование&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ME6Q&quot;&gt;• Интерфейс коллекции определяет методы, полезные для всех коллекций, такие как размер, проверка на пустоту, итератор для обхода элементов.&lt;br /&gt;• Мап не является коллекцией, но может быть обходом с помощью интерфейса итератора.&lt;br /&gt;• Мап представляет отображение элементов, а не группу элементов.&lt;/p&gt;
  &lt;p id=&quot;ofWM&quot;&gt;&lt;strong&gt;01:57:25 Использование интерфейсов и спецификаций&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;PSro&quot;&gt;• Интерфейсы используются для ссылки на коллекцию в коде, а для работы с коллекцией без дубликатов используется интерфейс сет.&lt;br /&gt;• Джава док считается весомым аргументом, и разработчики должны соблюдать его, если они переопределяют интерфейсы.&lt;/p&gt;

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

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

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

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

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

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

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

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

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

</content></entry></feed>