#Курс Java3
- Встаем в ветку мастер и делаем pull из репозитория, чтобы получить текущую версию
- В IDEA Создаем от мастера ветку, например Java3_lesson2 (ветка создается внизу справа, на этот момент должно выглядеть как "Git: master", т.е. ветка где мы сейчас находимся. После создания справа внизу увидем, что перешли на новую ветку.
- Пишем код, делаем что хотим и как хотим, делаем один-несколько комиков и т.д. В результате делаем push в удаленный репозиторий. Когда будем делать push IDEA подстветит, что в репозитории будет создана новая ветка
- После этого заходим в репозиторий на GitHub и переходим во вкладку Pull Requests и нажимаем на Create New Pull Request 4.1 в Base выбираем ветку куда хотим внести наши изменения 4.2 в Compare выбираем ветку откуда будут браться изменения
- Будут отражены все различия между двумя ветками, проверяем, что все правильно и там все что нужно и нет ничего лишнего и нажимаем Create Pull Request.
Geekbrains-java2
│
└── stage-1 - 1 Курс Java
│
└── stage-2 - 2 Курс Java
│
└── stage-3 - 3 Курс Java
Пакет с кодом по уроку: src/generics.
Когда использовать Generic'и: Когда есть ответ "да" на все или на большинство из следующих вопросов, тогда стоит задуматься о применении Generic'ов:
- Класс и метод. Придётся ли мне написать этот класс или метод для разных типов?
- Класс и метод. Требуется ли мне жесткое ограничение по типу в рамках моего класса или метода? Хочу ли я, что бы в рамках экземпляра объекта или метода можно было работать только с одним типом?
- Метод. Требуется ли мне возвращать типизированный результат работы метода для разных входных типов?
- Метод. Нужна ли у моему методу возможность одинаково обрабатывать несвязанные типы?
Модуль с уроком sqlite-jdbc.
Работа с потоками ввода/вывода. Чтение из файлов, запись в файлы. пакет /homework - пример реализации начитки последних 100 строк из файла.
Описание пакетов урока:
lesson4-multithreading
│
└── p1_base - Базовые примеры создания тредов
│
└── p2_synch_counter - Пример реализации счетчиков
│ │
│ └── Counter и Example_Counter_1 - без синхронизации
│ │
│ └── SynchCounter и Example_SynchCounter_2 - c синхронизацией
│
└── p3_synch_atm - Пример работы с синхронизацией на примере банкомата
│ │
│ └── Example_Synch_1 - без использования синхронизации
│ │
│ └── Example_Synch_2 - с использованием синхронизации
│
└── p4_synch_blocks - пример реализации 3 видов synchronized
│ │
│ └── Example_SB_1 - синхронизация на уровне метода
│ │
│ └── Example_SB_2 - синхронизация на уровне блока кода
│ │
│ └── Example_SB_3 - синхронизация для статических методов
│
└── p6_another_example - Пример использование Atomic-переменных (для поддержки атомарных операций)
│
└── p7_volatile - пример использования переменных volatile
│
└── p8_wait_and_notify - пример использования переменных volatile
│ │
│ └── DataManager - пример использования notify
│ │
│ └── DataManagerProcessing - пример использования notifyAll\
│
└── p11_interesting_things - примеры некоторых особенностей работы потоков
│
└── p12_executor_service - пример реализации ExecutorService
lesson5-multithreading2
│
└── AtomicCounter - пример реализация счетчика на Atomic-переменных (для поддержки атомарных операций)
│
└── CyclicExample - пример использования CyclicBarrier
│
└── ProdConsExample - пример использование очереди ArrayBlockingQueue - задача производителя/потребителя
│
└── SimpleCDL - пример использования защелки CountDownLatch
│ │
└── SimpleSemaphore - пример использования семафора Semaphore