Основы
Создать Java проект в IDEA. Настроить форматирование по примеру кода ниже. Написать консольное приложение, читающее данные из аргументов функции main(), а также из System.in, делающее расчет, используя входные данные и модуль Math и выводящее результаты в System.out. Продемонстрировать обработку исключений разного типа. Продемонстрировать использование собственных функций. Запустить приложение из IDEA, а также на Ant написать скрипт, компилирующий и собирающий его в jar и запустить приложение вне IDEA.
Классы и объекты
Написать класс, хранящий какие-либо данные и реализующий методы toString, equals, hashCode. Создать объекты класса и продемонстрировать использование оператора ==, а также 3х методов, перечисленных выше. Объяснить разницу между == и equals.
Коллекции
Написать класс, который хранит объекты вашего собственного класса в виде упорядоченного списка, но позволяет получить их не только по индексу, но также по ключу (например String). Реализовать вставку в конец и в указанное место, удаление по индексу и по ключу, получение по индексу и по ключу. Реализовать функцию поиска и удаления повторяющихся объектов (а) имеющих одну и ту же ссылку и (б) хранящих одни и те же данные.
Наследование и идентификаторы
Продемонстрировать наследование классов, перекрытие полей и методов. Продемонстрировать использование идентификаторов классов, полей и методов (например public или static и т.д.) Объяснить значение.
Интерфейсы
Написать класс, реализующий интерфейс Comparable, и продемонстрировать на примере. Написать свой интерфейс его работу и продемонстрировать на примере. Объяснить смысл интерфейса.
Работа с файловой системой и текстом
Приложение должно прочесть какие-либо параметры из файла .properties в объект типа Properties, просканировать файловую систему по пути, указанному в пропертях, на наличие файлов с расширением txt, создать список, содержащий имена этих файлов, их расположение, размер и число, сколько раз слово Х встречается в этом файле, где слово Х – самое часто встречаемое слово в во всех просканированных файлах.
Работа с XML
Продемонстрировать парсинг XML двумя способами: SAX и DOM и показать на примере, как можно работать с полученными в результате парсинга объектами.
Оконное приложение
Написать 2 оконных приложения: первое использует AWT, второе Swing. Показать работу основных компонентов и событий: окно и события изменения размера, сворачивания и т.д., панель и события мыши, текстовое поле и события клавиатуры.
Работа с БД и JDBC
Написать оконное приложение, работающее с несколькими таблицами в бд, представляющими иерархическую структуру. Реализовать добавление, изменение и удаление данных. Продемонстрировать и объяснить основные java interfaces для работы с БД (Connection, Statement, ResultSet и т.д.) и объектами, реализующие эти интерфейсы (особое внимание уделить работе с ресурсами бд – открытие и закрытие). Использовать PreparedStatement, где необходимо. В некоторых случаях использовать вызов процедур пакета.
Web и EJB приложение
Установить jboss-4.2.3.GA и настроить idea для работы с ним так (через плагин).
1: сделать EJB компонент, который можно вызывать по RMI/JNDI. Компонент принимает на вход объект какого-либо собственного класса с данными и через jboss connection pool (потребуется настройка jboss) и jdbc сохраняет его в какую-либо таблицу (схема/пароль genie_am/ genie_am). Также EJB компонент должен уметь получить объект из бд и вернуть клиенту по RMI. Компонент должен быть запущен на джбосс.
2: сделать сервлет, который будет работать с БД по jdbc, сохранять и загружать данные из таблицы. Настройки соединения с БД должны быть в конфигурации сервлета. Загруженные данные сервлет должен выводить в виде простой (без оформления) html-страницы. Данные для сохранения должны передаваться сервлету параметрами query_string. Сервлет должен быть запущен на джбосс.
Multithreading and sockets
Сделать простое клиент-серверное приложение (т.е. сервер и клиент). Сервер должен быть многопоточным и обслуживать неограниченное число клиентов. Соединение должно использовать классы Socket и ServerSocket. Обмен данными должен быть организован с помощью ObjectInput(Output)Stream. Передаваемые данные – объекты собственных классов. Передача данных должна инициироваться, как клиентом, так и сервером. Т.е., например, так, как работает чат-сервер: клиент А передает данные на сервер для клиента Б, клиент Б подсоединен к серверу, но сам не делает регулярных обращений к нему, а сервер сам отправляет данные, полученные от клиента А клиенту Б.
Пример кода
private void updateData(ArrayList<String> newRows)
{
try
{
if (dataRows.size() == 0)
dataRows.add(new DataRow(newRows.remove(newRows.size() - 1)));
while (newRows.size() > 0)
{
String rowStr = newRows.remove(newRows.size() - 1);
System.out.println("rowStr: " + rowStr);
DataRow row = new DataRow(rowStr);
int idxDiff = (int) Math.round((row.time - lastDataRow().time) / 10000d);
while (idxDiff-- > 1)
dataRows.add(new DataRow((lastDataRow().time + 10000) + ";"));
dataRows.add(row);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}