Задача №0
Opened this issue · 0 comments
Задача для разминки. Никаких баллов не приносит, peer code review не требуется. Нужна для того, чтобы убедиться, что вы можете работать с кодом и гитхабом.
Сценарий
- Поставить git, Java 17, gradle, любимую IDE или редактор.
- Посмотреть в этот каталог в репозитории project0. Там вы найдёте класс
TaskSetup
, который создаёт "базу данных" с двумя таблицамиtable1
иtable2
, каждая из которых состоит из трех столбцов, и заполняет их данными. Будем считать, что в таблицеtable1
столбцы называютсяid, address, weather
, а в таблицеtable2
--id, date, buzzwords
. Фактически атрибутtable1.id
является ключом, аtable2.id
является внешним ключом дляtable1.id
- Склонировать репозиторий https://github.com/dbms-class-2022/project0 к себе на рабочую машину. Делать форки репозитория на гитхабе не нужно. Ключевое слово:
git clone
. Клонируйте через SSH, потому что через HTTPS вы не сможете сделатьgit push
. - Сделать свою ветку (branch), названную
task0-<ваша фамилия>
, напримерtask0-barashev
. Постарайтесь, чтоб из названия ветки было понятно, как зовут её автора. Ключевое слово:git checkout -b task0-my-last-name
- Написать код, решающий задачу
- Сделать git push в репозиторий https://github.com/dbms-class-2022/project0.
- Сделать pull request в репозитории https://github.com/dbms-class-2022/project0.
Задача
Написать в виде JUnit теста код, который выдаёт результат, эквивалентный запросу
SELECT id, date, weather FROM table1 JOIN table2 ON table1.id=table2.id WHERE EXTRACT(YEAR FROM date) = 2024
Это можно сделать прямо в классе DumbTest
или же в своём классе. Язык -- Kotlin или Java -- не важен.
Результат -- тройки Record3<Int, Date, String>
-- напечатайте в System.out
Важные ограничения: нельзя использовать для хранения данных в RAM ничего, кроме страниц PageCache и переменных константного размера (то есть, не зависящие от размера исходных данных или кеша). Идея "давайте прочитаем всё записи с диска в ArrayList в память и там сделаем два вложенных цикла" не работает. Кеш и storage нужно использовать те, которые создает TaskSetup
при инициализации и заполнении таблиц.
После окончания работы алгоритма напишите в System.out
значение storage.totalAcessCost
Never asked questions
Как читать записи из массива байт?
Примерно так:
new Record3(RecordsKt.intField(), RecordsKt.dateField(), RecordsKt.stringField()).fromBytes(byteArray)