Вы находитесь на странице: 1из 24

Dzmitry Vasin / JD01_08_2018

Clone wiki
Wiki
JD01_08_2018 / 1. Введение в Java. Git View History

История Java
Официальная хронология событий, предшествующих и происходивших вокруг языка

Набор изменений относительно каждой версии языка

Сайт JCP, где можно отслеживать состояния планируемых изменений в языке

Сайт Open JDK, где можно узнать об инструментах, проектах платформы и взаимодействовать с JCP

Официальные руководства по использованию стандартной библиотеки

Спецификация языка и виртуальной машины

Спецификация первой стабильной версии Java

Теория
Установка JDK 8

HelloWorld

Компиляция программы
javac HelloWorld.java - компилируем программу
javac -encoding utf8 HelloWorld.java - компиляция исходных кодов, в которых присутствует
кириллица
javac -sourcepath src src/HelloWorld.java - компиляция с указанием директории с исходными
кодами
javac -d output HelloWorld.java - компиляция с указанием директории размещения class-файлов
javac -cp lib.jar HelloWorld.java - компиляция с зависимостями

Запуск программы
java HelloWorld - запускаем программу
java -cp output HelloWorld.java - запуска программы с указанием class-файлов
java -cp lib.jar HelloWorld - запуск программы с зависимостями
java -jar hw.jar - запуск, используя MANIFEST файл
java -cp hw.jar HelloWorld - запуск без MANIFEST файла

Команда jar
jar cfe hw.jar HelloWorld HelloWorld.class - создаем jar вместе с MANIFEST файлом
jar tf hw.jar - читаем содержимое
jar xf hw.jar - распаковываем содержимое

Команда javap
javap -v HelloWorld.class - смотрим байткод

Знакомимся со Stepik
https://stepik.org/lesson/12756/step/1?unit=3102
https://stepik.org/lesson/12756/step/1?unit=3103
https://stepik.org/lesson/12756/step/1?unit=3104

Знакомимся с Hackerrank
https://www.hackerrank.com/challenges/welcome-to-java

Git
1. Установка Git:
Скачиваем архив по ссылке.
Распаковываем содержимое в удобное место. Или копируем его туда после распаковки.
Добавляем путь к bin директории нашего содержимого в системную переменную Path .
2. Создаём аккаунт на github.com или bitbucket.org. Здесь нужно будет размещать свои проекты.
3. Интерактивно знакомимся с основными командами и возможностями Git на try.github.io и на
githowto.com. В последствии за подсказками можно обращаться к git cheatsheets.
4. Очень важно разобраться cо слиянием через rebase и редактированием коммитов.
5. Для более детального погружения читаем Pro Git.

Задачи
1. Создать локальный репозиторий. Написать программу, которая записывает в стандартный поток
вывода сообщение "Hello World!" и сделать коммит.
2. Создать ветку "dev". Сделать в ней изменение, которое дополнительно к сообщению "HelloWorld!"
выводит сообщение "Hello World from dev branch!" с новой строки.
3. Переключиться на "master" ветку. Сделать в ней изменение, которое дополнительно к сообщению
"HelloWorld!" выводит сообщение "Hello World from master branch!" с новой строки.
4. Смержить в ветку "master" ветку "dev" через простой merge. Разрешить конфликты так, чтобы остались
изменения сделанные в двух ветках.
5. Создать ветку "feature" и переключиться на неё. Сделать в ней изменение, которое дополнительно к
трём предыдущим сообщениям выводит сообщение "Hello World from feature branch!" с новой строки.
6. Переключиться на ветку "master". Сделать в ней изменение, которое дополнительно к трём
предыдущим сообщениям "HelloWorld!" выводит сообщение "Hello World from master branch again!" с
новой строки.
7. Смержить в ветку "master" ветку "feature" через rebase. Разрешить конфликты так, чтобы остались
изменения сделанные в двух ветках.
8. Создать репозиторий на github-е, связать локальный репозиторий с репозиторием на github-е и
сделать push.
Также вам нужно опубликовать все три ветки. В ветке dev у вас должно быть 2 коммита, в ветке feature
5, в мастере 6.

Updated 2018-09-03
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 2. Основные типы. String. Условные операторы View History

Теория
Типы данных
Преобразование типов
Логические и условные операторы
Арифметические операторы и операции
Работы со строками

Проходим Stepik
https://stepik.org/lesson/12759/step/1?unit=3107
https://stepik.org/lesson/12760/step/1?unit=3108

Решаем задачи на Hackerrank


https://www.hackerrank.com/challenges/java-stdin-and-stdout-1
https://www.hackerrank.com/challenges/java-if-else
https://www.hackerrank.com/challenges/java-stdin-stdout
https://www.hackerrank.com/challenges/java-datatypes
https://www.hackerrank.com/challenges/java-int-to-string
https://www.hackerrank.com/challenges/java-strings-introduction
https://www.hackerrank.com/challenges/java-substring

Задачи
1. Создайте любое число. Определите, является ли последняя цифра числа семеркой.
2. Имеется прямоугольное отверстие размерами a и b (размеры задать любые), определить, можно ли
его полностью закрыть круглой картонкой радиусом r (тоже подставляем любое значение).
3. Имеется промежуток времени в секундах. Следует вывести его на страницу используя формат с
указанием часов, минут и секунд.
4. Имеются три числа — день, месяц, год. Вывести в виде трех чисел дату следующего дня.
5. Создайте переменную типа String c любым текстом (не сильно короткое). Далее выведите на экран
количество символов в данной строке. Далее разделите строку пополам, в результате у вас должно
быть 2-е новых переменных типа String с частями из изначальной строки. Полученные строки
выведите на экран.
6. Имеется строка, которая содержит символы ? и символы #. Замените все символы ? на HELLO, а # -
удалите. Результат вывести на экран.
7. Имеется целое число (любое), это число — сумма денег в рублях. Вывести это число, добавив к нему
слово «рублей» в правильном падеже.
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 3. Массивы. Циклы View History

Теория
Массивы
Многомерные массивы
Операторы цикла
Сортировка массивов

Stepik
https://stepik.org/lesson/12761/step/1?unit=3109
https://stepik.org/lesson/12762/step/1?unit=3110

Hackerrank
https://www.hackerrank.com/challenges/java-loops-i
https://www.hackerrank.com/challenges/java-loops
https://www.hackerrank.com/challenges/java-end-of-file
https://www.hackerrank.com/challenges/java-1d-array-introduction
https://www.hackerrank.com/challenges/java-2d-array
https://www.hackerrank.com/challenges/java-negative-subarray
https://www.hackerrank.com/challenges/java-1d-array
https://www.hackerrank.com/challenges/java-string-compare
https://www.hackerrank.com/challenges/java-string-reverse
https://www.hackerrank.com/challenges/java-anagrams

Задачи
1. Создайте массив с 10-ю переменными целочисленного типа. Используя оператор for, найдите и
выведите на экран наименьшее и наибольшее значение в массиве.
Далее замените наименьшее значение на 0, а наибольшее значение на 99 и выведите получившийся
массив на экран в виде:
[23, 0, 34, 99, 43534].
2. Создайте массив с 10-ю переменными целочисленного типа. Далее найдите дубликаты и выведите их
количество.
Пример: есть массив {2, 3, 4, 7, 6, 5, 7, 3, 7, 20} - в данном массиве цифра 3 и 7 повторяются.
В результате выполнения программы на экран нужно вывести: [3] - повторений 2, [7] - повторений 3.
3. Напишите программу, которая печатает массив, затем инвертирует(то есть меняет местами первый
элемент с последним, второй — с предпоследним и т.д.) и вновь печатает.
4. Написать программу, определяющую образуют ли цифры некоторого числа строго возрастающую
последовательность. Например: 123 – образуют, 212 – не образуют.
5. Создайте массив типа int. Отсортируйте массив по убыванию либо по возрастанию удобным для вас
спсобом. Результат вывести на экран.

Updated 2018-08-18
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 4. Классы. Объекты. Методы View History

Теория
Классы
Объекты
Методы
Внутренние классы
Модификаторы доступа

Stepik
https://stepik.org/lesson/12765/step/1?unit=3113
https://stepik.org/lesson/12766/step/1?unit=3114

Hackerrank
https://www.hackerrank.com/challenges/java-date-and-time
https://www.hackerrank.com/challenges/java-biginteger
https://www.hackerrank.com/challenges/java-biginteger
https://www.hackerrank.com/challenges/java-primality-test

Задачи
1. Создайте массив с 10-ю переменными типа int. Значения необходимо вводить с клавиатуры в
отдельном методе. (Метод для ввода) Затем выведите все значения на экран также в отдельном
методе в виде: "значение" | "значение 2" | "значение 3" | и тд. (Метод для вывода) Далее отсортируйте
массив по возрастанию способами из статьи или любыми другими алгоритмами. (Метод сортировки)
Результат сортировки вывести на экран. (Используем уже упомянутый метод для вывода)
2. Вам необходимо создать программу с собственным классом Пациент. В классе вам нужно описать
переменные характерные для данной сущности, например у пациента могут быть переменные ФИО,
возраст, диагноз и тд. В классе должны быть обязательно переменные типов int, String, boolean. Далее
в главном классе вы должны создать минимум 3 объекта Пациента и заполнить их данными из
консоли (ввод данных сделать в отдельном методе). После ввода данных вы должны вывести данные
на экран в следующем виде: Пациент “ФИО” - Возраст = “возраст” Далее вы должны дать
пользователю возможность найти пациента по фамилии и по возрасту. Это значит, что в консоли
должно появится предложение найти пользователя по ФИО или по возрасту. Пользователь вводит
нужное имя, и программа отображает всех пациентов с данным именем (тоже самое сделать для
возраста). Опять же поиск происходит в отдельных методах.
3. Создать класс и объекты описывающие промежуток времени. Сам промежуток в классе должен
задаваться тремя свойствами: секундами, минутами, часами. Сделать методы для получения полного
количества секунд в объекте, сравнения двух объектов (метод должен работать аналогично compareTo
в строках). Создать два конструктора: получающий общее количество секунд, и часы, минуты и
секунды по отдельности. Сделать метод для вывода данных.

Updated 2018-08-22
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 5. ООП в Java View History

Теория
Наследование
Полиморфизм
Инкапсуляция
Интерфейсы
Абстрактные классы
Анонимные классы
Работа с датами
Расчёт количества дней между датами

Stepik
https://stepik.org/lesson/12764/step/1?unit=3112
https://stepik.org/lesson/12769/step/1?unit=3117
https://stepik.org/lesson/14513/step/1?unit=4147

Hackerrank
https://www.hackerrank.com/challenges/java-inheritance-1
https://www.hackerrank.com/challenges/java-inheritance-2
https://www.hackerrank.com/challenges/java-abstract-class
https://www.hackerrank.com/challenges/java-interface
https://www.hackerrank.com/challenges/java-method-overriding
https://www.hackerrank.com/challenges/java-method-overriding-2-super-keyword
https://www.hackerrank.com/challenges/java-instanceof-keyword

Задачи
1. Необходимо создать абстрактный класс "Фигура" и классы наследники: "Квадрат", "Прямоугольник",
"Треугольник" и "Круг". В абстрактном классе создайте абстрактный метод "расчета площади". В
классах конкретных фигур у вас должны быть необходимые поля для задания параметров фигур.
Инициализацию нужно сделать через конструкторы. В итоге должна получится программа, где имеются
все типы фигур с нужными параметрами сторон, углов и рассчитываются площади этих фигур.

2. Создайте класс Студент с полями имя, фамилия, дата рождения. Поле даты рождения должно быть
типа Date. Создайте дополнительный класс. У этого класса есть поле, в котором содержится список
Студентов. Но тип этого массива должен быть такой, чтобы получать доступ информацию о дате
рождения Студента полиморфно. Это необходимо для того, чтобы у нас была возможность получать
информацию о дате рождения с помощью этого класса не только для Студентов. Создайте
соответствующий интерфейс. Также этот класс должен реализовывать 2 интерфейса. Один позволяет
заполнять данные студентов из консоли. День рождения должен вводиться в виде строки, затем
конвертироваться в Date и записываться в объект Студент (SimpleDateFormat). Другой интерфейс
рассчитывает средний возраст всех студентов. И выводит результат в следующем виде: 50 лет 3
месяца 5 дней 10 часов и 5 минут.

3. Необходимо создать классы, описывающие Банкомат. Набор купюр, находящихся в банкомате, должен
задаваться тремя свойствами: количеством купюр номиналом 20, 50 и 100. Создайте интерфейсы,
которые описывают методы добавления и снятия денег в банкомате. На вход передается сумма денег,
например, 150. В этом методе вы распределяете сумму по номиналам. Если пришло 150, то в итоге
вам нужно 1 раз добавить в/отнять из переменной, в которой хранится количество купюр по 100, и 1
раз добавить в/отнять из переменной с количеством купюр по 50. Сумму распределяем так, чтобы
максимально заполнить бОльшими купюрами. Обработайте ситуацию с суммой не кратной нашим
номиналам. Создайте интерфейсы, описывающие методы для вывода количества денег в банкомате,
один выводит сумму всех денег, другой количество купюр каждого номинала. Создайте интерфейсы с
методами, которые печатают название банка и название производителя банкомата. Реализуйте
базовый абстрактный банкомат с основными возможностями на ваше усмотрение. И, наконец,
создайте класс самого банкомата, например, какого-то конкретного банка, он должен реализовывать
нужные интерфейсы и наследоваться от базового абстрактного банкомата. В этом задании у вас есть
возможность самостоятельно придумать логику того, какие классы какие интерфейсы будут
реализовывать. Постарайтесь сделать максимально модульно, чтобы когда другой банк попросит
сделать для них свой банкомат, вы могли быстро все реализовать.

Updated 2018-08-30
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 6. Исключения View History

Теория
Общие понятия
try-catch-finally
checked/unchecked
java.util.logging

Stepik
https://stepik.org/lesson/12772/step/1?unit=3120
https://stepik.org/lesson/12773/step/1?unit=3121
https://stepik.org/lesson/12774/step/1?unit=3122

Hackerrank
https://www.hackerrank.com/challenges/java-exception-handling-try-catch
https://www.hackerrank.com/challenges/java-exception-handling

Задачи
Необходимо написать простой калькулятор в консоли, у которого будет 6 операций на ваш выбор. Числа и
операции необходимо вводить с консоли. Придумайте свой формат ввода. Не забываем использовать ООП
подход. Помните, что методов в одном классе не должно быть много. Если их уже больше 2-х, то пора
задуматься как разбить эти классы. Также нужно создать несколько своих исключений: например, которые
отслеживают ошибки некорректного ввода значений или которые возникают при расчете значений.
Постарайтесь придумать ситуации с проверяемыми и непроверяемыми исключениями. Можно также
использовать исключения из стандартной библиотеки.

Updated 2018-08-22
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 7. Коллекции. Списки View History

Теория
ArrayList
LinkedList
Паттерн Итератор
Generics и wildcards

Вопросы с собеседований

Топ 10 вопросов о коллекциях в Java


Популярные вопросы о коллекциях
Расширенный вариант вопросов о коллекциях

Stepik
https://stepik.org/lesson/12775/step/1?unit=3123
https://stepik.org/lesson/12776/step/1?unit=3124

Hackerrank
https://www.hackerrank.com/challenges/java-arraylist
https://www.hackerrank.com/challenges/java-list
https://www.hackerrank.com/challenges/java-generics
https://www.hackerrank.com/challenges/java-iterator

Задачи
Вам необходимо разработать модуль системы проектирования помещений. У помещения есть такие
параметры как площадь и освещенность. Известно, что предметы в помещении не должны занимать более
70% площади. Также известно, что освещенность помещения не должна выходить за пределы 300-4000 лк.
Каждое окно даёт освещенность помещения 700 лк, каждая лампочка даёт такую освещенность, как указано
в её параметрах. Создайте структуру классов и интерфейсов, позволяющую создавать здания, состоящие из
помещений. Сами помещения создаются с указанием их площади и количества окон. Для помещений можем
добавлять произвольное количество лампочек, безусловно, пока не будет превышена максимальная
освещённость в 4000 лк. И также можем добавлять произвольное количество различных предметов, пока их
суммарная площадь не превышает 70% площади помещения. При попытке превысить освещённость должно
быть порождено исключение IlluminanceLimitException. А при попытке превысить 70% площади
добавляемым предметом должно быть порождено исключение SpaceLimitException. Предполагается, что
использовать вашу библиотеку будут примерно так:
Здание здание = new Здание(""Здание 1"");
здание.добавитьКомнату(""Комната 1"", 100, 3); //100 - площадь, 3 - количество окон
здание.добавитьКомнату(""Комната 2"", 5, 2);
здание.добавить(1, new Лампочка(150)); //1 - индекс команты в массиве
здание.добавить(1, new Лампочка(250));
здание.добавить(1, new Стол(""Стол письменный"", 3)); //3 - занимаемая предметом площадь
здание.добавить(1, new КреслоМягкое(""Кресло мягкое и пушистое"", 10));
здание.информация();

Пример вывода здание.информация():


Здание 1
Комната 1
Освещённость = 2500 (3 окна по 700 лк, лампочки 150 лк и 250 лк)
Площадь = 100 м^2 (занято 13 м^2, свободно 87 м^2 или 87% площади)
Мебель:
Стол письменный (площадь 3 м^2)
Кресло мягкое и пушистое (площадь 10 м^2)
Комната 2
Освещённость = 1400 (2 окна по 700 лк)
Площадь = 5 м^2 (свободно 100%)
Мебели нет

Updated 2018-09-08
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 8. Коллекции. Отображения. Множества View History

Теория
HashMap
HashSet, TreeSet
Comparable и Comparator
HashMap, HashSet популярные вопросы

Hackerrank
https://www.hackerrank.com/challenges/phone-book
https://www.hackerrank.com/challenges/java-hashset
https://www.hackerrank.com/challenges/java-comparator
https://www.hackerrank.com/challenges/java-sort

Задача
Имеется текст, который задается с командной строки. Предположим, что в этом тексте не может быть знаков
препинания. Все слова разделены пробелами. Необходимо вывести список всех слов без повторений в
порядке возрастания длины. Далее при вводе слова из этого списка мы должны получить число, которое
говорит сколько раз это слово встречается в оригинальном тексте. Обработайте ситуацию, когда вводим
отсутствующее в списке слово. Все значение частотных характеристик слов вычисляются на этапе
обработки текста и хранятся в отдельной структуре. Не забываем использовать интерфейсы и распределять
реализацию по различным классам.

Updated 2018-09-05
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 10. Аннотации и Reflection API View History

Теория
Введение в Reflection API
Reflection API туториал
Аннотации
Примеры использования аннотаций
Аннотации и Reflection

Задачи
Необходимо написать программу, которая создаёт объекты только на основании информации о его объекте
класса. Все эти классы, которые необходимо создавать, следуют части Java Bean конвенции - для всех
полей есть setter-методы и дефолтные конструкторы.

Помимо создания, нужно заполнить эти объекты случайными данными. Поля необходимые для заполнения,
должны быть помечены аннотацией @Generate , которую вы создадите сами. Заполнение данных
происходит путем вызова setter-методов.

У Вас должен быть интерфейс с одним методом, реализация которого умеет создавать такие объекты со
случайными данными.

Реализуйте генерацию случайных данных для типов int, boolean, String, Date. И это должны быть
действительно случайные данные. Создайте два разных класса, у которых есть какие-либо из этих полей.

Updated 2018-10-09
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 11. Потоки ввода и вывода View History

Потоки ввода и вывода


Чтение и запись файлов с помощью FileInputStream и FileOutputStream
Чтение и запись файлов c помощью FileReader и FileWriter
Запись файлов с помощью PrintStream и PrintWriter
Запись и чтение примитивных типов в/из файлов
Запись и чтение объектов в/из файлов

Stepik
https://stepik.org/lesson/12782/step/1?unit=3129
https://stepik.org/lesson/12783/step/1?unit=3130
https://stepik.org/lesson/12784/step/1?unit=3131
https://stepik.org/lesson/12785/step/1?unit=3132

Задачи
Необходимо создать программу, имитирующую регистрацию пациентов в поликлинике. Наша "регистратура"
должна обладать следующими функциями:

1.Добавление одного пациента через консоль. Стандартная реализация через Scanner.

2.При старте приложения загрузка коллекции пациентов из файла с данными в текстовом формате. Формат
файла:

Paul;Mccartney;18.06.1942;true
Michael;Jackson;29.08.1958;false

3.При старте приложения загрузка коллекции пациентов из файла с данными в бинарном формате. Этот
файлы вы должны использовать для реализации 4-й функции.

4.Сохранение получившегося во время работы программы списка пациентов в локальный файл. Сохранение
реализуется через DataOutputStream.

Не забудьте учесть, что пациенты в нашей регистратуре должны быть уникальными. Уникальность
определяем по первым трём полям. Если при добавлении существующего пациент в нашу "базу данных", его
состояние здоровья меняется, нужно поправить имеющуюся запись.

Updated 2018-10-09
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 12. XML. DOM, SAX, StAX парсеры View History

Теория
Общие моменты про XML и парсеры
DOM, SAX, StAX парсеры
Структурированное руководство по всем парсерам

Задачи
Необходимо реализовать программу из прошлой темы, только вместо текстового и бинарного файла
использовать XML формат для чтения и хранения информации.
Один файл читаем DOM парсером, а другой SAX или StAX-ом. Можно наоборот. Главное использовать два
разных подхода.

Updated 2018-10-09
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 13. Maven. JUnit View History

Теория
Установка Maven
Создание простого проекта с помощью Maven
Управление зависимостями в Maven
Цикл сборки проектов в Maven

Плагины в Maven

Тестирование с помощью JUnit

Правила JUnit

Тестирование с помощью JUnit и Hamcrest


Примеры Hamcrest в различных случаях

Updated 2018-10-23
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 14. JSON. GSON, Jackson библиотеки View History

Теория
Общая теория про JSON библиотеки
Сравнение JSON библиотек
GSON
Jackson
Jackson сериализация объектов
Jackson десериализация объектов
Создание исполняемого jar с зависимостями

Задачи
Необходимо реализовать программу из позапрошлой темы, только вместо XML формата использовать JSON
формат для чтения и хранения информации. Один файл читаем GSON библиотекой, другой Jackson-ом.
Можно наоборот. Главное использовать две разных библиотеки.

В каждой библиотеки пользуемся data-bind подходом для сериализации/десериалиации объектов в json.


В JSON документе поле date нужно указывать в следующем формате dd-MM-yyyy, а поле healthy
указывается в формате здоров/не здоров.
Поэтому для этих полей нужно написать свои обработчики, отличные от стандартных

Updated 2018-10-26
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 15. Многопоточность. Базовые понятия View History

Теория
Создание и управление потоками
Синхронизация с помощью ключевого слова synchronized
Взаимодействие потоков с помощью wait, notify, notifyAll

Или читаем первые 5 тем по многопоточности данного блога

Частые вопросы по состоянию потоков


Вопросы про дедлоки и правильность использование wait, notify, notifyAll

Задачи
Необходимо написать программу, моделирующую работу касс в магазине. Общее количество покупателей
может быть больше, чем количество касс. Одновременно не может обрабатываться больше покупателей,
чем имеется касс. Если на текущий момент отсутствуют покупатели, желающие оплатить товар, то потоки
"касс" переходят в режим ожидания. Как только покупатель решает оплатить покупки, необходимо разбудить
ожидающие потоки. У каждого покупателя есть набор товаров, которые должны быть выведены в процессе
обслуживания. Создайте интерфейс для товаров и сами товары.

Updated 2018-10-21
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 16. Многопоточность. Дополнительные возможности View History

Теория
Обзор пактеа java.util.concurrent.*
Executors
Locks
Producer Consumer решение
Читаем про ArrayBlockingQueue и LinkedBlockingQueue
Про volatile и atomics

Про Singleton-ы

Перечисления в Java
Реализации Singleton-а
Правильные реализации Singleton-а

Дополнительный материал

Ещё раз про ReentrantLock


Ещё раз про Semaphore
Читаем про Synchronizers

Задачи
Для задачи из предыдущей темы необходимо реализовать создание потоков с помощью одного из
фабричных методов класса Executors. Использовать эти потоки нужно через полученный ExecutorService.

Также синхронизацию потоков реализуйте с помощью 3-х разных подходов: ReentrantLock, Semaphore и
BlockingQueue.

Updated 2018-11-15
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 17. SQL View History

Теория
Скачиваем и распаковываем MySQL сервер
Инициализируем директорию данных
Запускаем сервер MySQL с пользователем root
Запускаем SQL shell с пользователем root
Туториал покрывает самые частые операции
Нормальные формы таблиц баз данных
Примеры выражений по темам можно найти здесь

Основные темы документации для изучения

Создание базы данных


Использование созданной базы
Структурв таблицы
Создание таблицы
Изменение полей таблицы
Вставка данных в таблицу
Обновление данных в таблице
Выборка данных из таблицы
Выборка данных из таблиц с помощью JOIN-ов
Вложенная выборка данных из таблиц
Cоздание индексов для полей таблиц

Updated 2018-11-09
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 18. JDBC View History

Теория
Введение в JDBC
Реализации Connection pool-ов
Использование HikariCP
Реализации RowSet интерфейса
Выполнение запросов в группе
Flyway документация
Пример Flyway миграции
Управление фазой запуска maven плагина

Updated 2018-11-25
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 19. Servlets View History

Теория
Просто и мало о HTTP
Сложно и много о HTTP
Настройка Tomcat
Развёртывание приложения
Введение в Servlets
Регистрация Servlet, первые 2 пункта
Инициализация конеткстных параметров Servlet
Sessions и Cookies
Редирект vs перенаправление
Исполняемое веб приложение
Servlet аннотации
Простой HTTP-запрос на Java через HttpURLConnection

Updated 2018-11-30
Dzmitry Vasin / JD01_08_2018
Clone wiki
Wiki
JD01_08_2018 / 20. JSP. JSTL View History

Теория
JSP
JSTL
MVC паттерн
Front Controller паттерн

Updated 2018-11-30