- •1. Жизненный цикл приложения Java. Компиляция. JiTкомпиляция. Исполнение.
- •2. Классы. Абстрактные классы. Интерфейсы. Наследование.
- •3. Классы и интерфейсы стандартной библиотеки. Списки. Сортировка.
- •4. Классы и интерфейсы стандартной библиотеки. Ассоциированные массивы. Словари.
- •5. Классы и интерфейсы стандартной библиотеки. Потоки ввода-вывода. Файловый ввод-вывод.
- •6. Параллельные процессы. Синхронизация.
- •Синхронизация по ресурсам и событиям
- •Синхронизация по ресурсам
- •7. Параллельные процессы. Управление потоками.
- •Синхронизация по событиям
- •Создание и запуск потока выполнения
- •Поля и методы, заданные в классе Thread
- •Важнейшие константы и методы класса Thread:
- •Важнейшие методы объектов типа Thread:
- •8. Параллельные процессы. Управление памятью потока.
- •Хранение переменных в памяти
- •Блокировки
- •9. Jdbc, драйверы строка соединения, класс DriverManager, интерфейс Connection.
- •10. Jdbc, создание sql запросов, интерфейсы Statement, PreparedStatement Класс Statement.
- •Выполнение запроса через объект Statement
- •Закрытие объектов Statement
- •11. Jdbc, обработка полученных результатов, интерфейсы ResultSet, ResultSetMetaData.
- •Строки и курсоры
- •Колонки
- •Типы данных и их преобразование
- •Использование потоков для очень больших значений
- •Значения null в результатах
- •12. Объектно-реляционное отображение. Создание персистентных классов при помощи jpa
- •13. Объектно-реляционное отображение. Подключаемы провайдеры персистенции.
- •14. Кастомизация мэппинга персистентных классов на поля и таблички бд.
- •15. Объектно-реляционное отображение. Отображение реляционных связей many-to-many, one-to-many, one-to-one.
- •16. Объектно-реляционное отображение. Жизненный цикл персистентных объектов (entity lifecycle)
- •17. Объектно-реляционное отображение. Интерфейс EntityManager.
- •18. Объектно-реляционное отображение. Создание запросов на jpql, sql
- •19. Работа с xml в Java. Правильно сформированные (well-formed) и корректные (valid) xml документы
- •Понятие корректно сформированных (well-formed) xml-документов
- •Создание действительных (valid) xml-документов. Определение типа документа (dtd)
- •20. Jaxp, основные группы api.
- •21. Работа с xml документами посредством sax.
- •22. Работа с xml документами посредством dom.
- •23. Сравнение sax и dom подходов к обработке xml документов.
- •24. Jaxb, отображение Java класса, отображаемого на xml.
- •25. Создание jaxb контекста, маршалинг и демаршалинг.
- •26. Сервлеты, создание, жизненный цикл
- •27. Http запросы get, post, put, delete, head
- •28. Интерфейс servlet, класс HttpServlet
- •29. Создание rest сервисов, jax rs
- •30. Связка jaxb и jax rs, переключение типов возвращаемого контента (xml, json)
- •33. Оптимизация jvm
Блокировки
В основном хранилище для каждого объекта поддерживается блокировка (lock), над которой можно произвести два действия – установить (lock) и снять (unlock). Только один поток в один момент времени может установить блокировку на некоторый объект. Если до того, как этот поток выполнит операцию unlock, другой поток попытается установить блокировку, его выполнение будет приостановлено до тех пор, пока первый поток не отпустит ее.
Операции lock и unlock накладывают жесткое ограничение на работу с переменными в рабочей памяти потока. После успешно выполненного lock рабочая память очищается и все переменные необходимо заново считывать из основного хранилища. Аналогично, перед операцией unlock необходимо все переменные сохранить в основном хранилище.
Важно подчеркнуть, что блокировка является чем-то вроде флага. Если блокировка на объект установлена, это не означает, что данным объектом нельзя пользоваться, что его поля и методы становятся недоступными,– это не так. Единственное действие, которое становится невозможным,– установка этой же блокировки другим потоком, до тех пор, пока первый поток не выполнит unlock.
В Java-программе для того, чтобы воспользоваться механизмом блокировок, существует ключевое слово synchronized. Оно может быть применено в двух вариантах – для объявления synchronized-блока и как модификатор метода. В обоих случаях действие его примерно одинаковое.
Synchronized-блок записывается следующим образом:
synchronized (ref) { ...}
Прежде, чем начать выполнять действия, описанные в этом блоке, поток обязан установить блокировку на объект, на который ссылается переменная ref (поэтому она не может быть null). Если другой поток уже установил блокировку на этот объект, то выполнение первого потока приостанавливается до тех пор, пока не удастся выполнить операцию lock.
После этого блок выполняется. При завершении исполнения (как успешном, так и в случае ошибок) производится операция unlock, чтобы освободить объект для других потоков.
9. Jdbc, драйверы строка соединения, класс DriverManager, интерфейс Connection.
Кроме классов с методами доступа к базам данных для каждой СУБД необходим драйвер JDBC — промежуточная программа, реализующая методы JDBC. Существуют четыре типа драйверов JDBC.
-
JDBC-ODBC "мост". Драйверы данного типа реализуют доступ к базе данных, используя механизм ODBC (Open Database Connectivity). При использовании такого драйвера будет необходимо установить на каждом рабочем месте клиентскую часть базы данных. В некоторых случаях потребуется еще и ODBC-драйвер. JDBC-ODBC "мост" наиболее приемлем для использования в корпоративных сетях, а также для реализации на Java серверной части приложения с так называемой "трехуровневой" архитектурой. (пример: JavaSoft)
-
Драйвер, написанный с использованием native-методов. Этот драйвер преобразует JDBC-вызовы в вызовы архитектурно-зависимой клиентской части Oracle, Sybase, Informix, DB2 и других баз данных. Это требует, как и в случае использования JDBC-ODBC "моста" установки на каждое клиентское место некоторого программного обеспечения. (IBM)
-
Драйвер клиент-серверной архитектуры с клиентской частью, реализованной на Java. Драйвер данного типа преобразует JDBC-вызовы к сетевому протоколу, независимому от базы данных, которые затем преобразуются сервером к протоколу конкретной базы данных. Сервер имеет возможность подключить своих Java клиентов к различным базам данных. Использование конкретного протокола зависит от производителя. Многие компании уже при создании своих программных продуктов учитывают возможность использования JDBC. (IDS Software)
-
Драйвер, реализованный на Java и использующий протокол конкретной базы данных. Данный драйвер реализует непосредственный доступ клиента к полям базы данных, что является наилучшим решением при использовании баз данных в корпоративной сети. Поскольку этот механизм зависит от реализации базы данных, компании-производители берутся сами за создание драйверов JDBC. (Imaginary)
Подключение Java-программы к реляционной СУБД с помощью JDBC выполняется в три этапа:
-
Установка связи между Java-программой и диспетчером базы данных.
-
Передача SQL-команды в базу данных с помощью объекта Statement.
-
Чтение полученных результатов из базы данных и использование их в программе.
Работа с классом DriverManager
Для подключения к базе данных среда выполнения Java должна загрузить соответствующий драйвер указанной базы данных. Загрузка и выгрузка таких драйверов осуществляется с помощью класса DriverManager.

Стандартный способ получения соединения - это вызов метода DriverManager.getConnection. Этому методу передается строка, содержащая т.н. "URL". Класс DriverManager, представляющий собой уровень управления в JDBC, пытается найти драйвер, который может соединиться к БД с помощью данного URL. Класс DriverManager содержит список зарегистрированных классов Driver, и при вызове метода getConnection он проверяет каждый драйвер и ищет среди них тот, который "умеет" соединятся с БД, указанной в URL. Метод connect драйвера использует этот URL для установления соединения.
Перед обращением к базе данных следует установить нужный драйвер.
После того как драйвер установлен, надо связаться с базой данных. Методы связи описаны в интерфейсе connection. Экземпляр класса, реализующего этот интерфейс, можно получить одним из статических методов getConnection () класса DriverManager, например:
Class.forName("com.mysql.jdbc.Driver").newInstance();
String host = "jdbc:mysql://localhost:3306/";
String database = "vinogradovadz?useUnicode=true&characterEncoding=utf8";
String user = "root";
String password = "gfhjkm";
connection = DriverManager.getConnection(host+database,user,password);
JDBC-URL
JDBC-URL предоставляет способ указания БД и определенного драйвера, который устанавливает соединение с данной БД.
Стандартный синтаксис JDBC URL показан ниже. Он имеет три части, разделенных двоеточием:
jdbc:<subprotocol>:<subname>
JDBC URL состоит из:
jdbc - протокола. Протокол, используемый в JDBC URL - всегда jdbc.
<subprotocol> (подпротокола) - это имя драйвера или имя механизма соединения с БД. Подпротокол может поддерживаться одним или несколькими драйверами. Лежащий на поверхности пример подпротокола - это "odbc", отведенный для URL, обозначающих имя источника данных ODBC. Например, для доступа к БД через мост JDBC-ODBC нужно использовать URL такого вида:
jdbc:odbc:fred
В этом примере подпротокол задан как "odbc", а подимя "fred" является локальным источником данных.
<subname> (подимени) - это идентификатор БД. Значение подимени может менятся в зависимости от подпротокола, и может также иметь подподимя с синтаксисом, определяемым разработчиком драйвера. Назначение подимени - это предоставление всей информации, необходимой для поиска БД Например, если БД находится в Интернет, то в состав подимени JDBC-URL должен быть включен сетевой адрес, подчиняющийся следующим соглашениям:
//hostname:port/subsubname
Предполагая, что "dbnet" - это протокол соединения к хосту в Интернет, JDBC-URL может выглядеть так:
jdbc:dbnet://wombat:356/fred
