Практикум на ЭВМ

171 (2019-2020) группа

Максим Журавлев

Студент TODO №1 №2 №3 №4 №5 Тест 1 Тест 2
56 VM 2 3 1 2 1 UML GUI 1 2 UI Зачет Теория
Божнюк Александр
Зверев Константин 12
Назарова Мария 10
Олейников Андрей 6
Саулькина Екатерина 9
Субботин Дмитрий 11
Фаст Никита 8

Задачи

Тест 2. 09.06.20
  1. Теория
Тест 1. 12.05.20
Вопросы к зачету
  1. Зачет
Домашняя работа 5. 05.04.20
[Дополнительно] Почему тяжело написать хороший профилятор для Java
[Дополнительно] Деталь реализации HotSpot - SafePoints
[Дополнительно] О влиянии одной из особенностей архитектуры современных CPU на замеры производительности
[Дополнительно] Что за черт, Javascript
[Дополнительно] Профилирование со сверхсветовой скоростью: теория и практика. Часть 1
[Дополнительно] Всё, что вы хотели знать о стек-трейсах и хип-дампах. Часть 1
Учебное пособие "Основы визуального моделирования" (см. с. 57 и далее)
Шпаргалка по шаблонам проектирования
Обзор JAVA GUI фреймворков
Пример построения 2D изображения с использованием AWT
  1. UI

    Написать приложение, которое на экранной форме строят алгебраическую кривую не ниже второго порядка из нескольких заранее определённых (оси координат и сама кривая). Как минимум у одной кривой порядка N коэффициенты как при XN, так и при YN должны быть ненулевыми. Список кривых отображается в комбобоксе. Реализовать возможность масштабирования показываемого изображения. Классы, реализующие связанную с кривыми математику, следует вынести в отдельную общую библиотеку.

Домашняя работа 4. 25.03.20
[Дополнительно] Об использовании VM для борьбы с ботами
Эрик Липперт о ко(контр-)вариантности
Covariance and Contravariance in Java
What are covariance and contravariance?
[Дополнительно] обзор развития JIT компиляторов
ServiceLoader Java Example
Java Tutorial Creating Extensible Applications
О внедрении зависимостей
Как происходит загрузка классов в JVM
Загрузка классов в Java. Практика - создание приложения с поддеоржкой плагинов без использования ServiceLoader
Еще одна статья о внедрении зависимостей и IoC (без примера использования контейнера). Самый простой и понятный вариант на мой взгляд
О DI и IoC c понятным примером на Spring
  1. Реализовать поддержку плагинов для вашей игры (новые виды AI) или произвольного приложения (новые форматы, новые операции), написанного специально для этой задачи.

  2. Инстанциировать классы вашей игры, используя произвольный IoC контайнер

Домашняя работа 3. 04.03.20
Преобразование примитивных типов в Java
Определение ООП по Алану Кею
Модификаторы доступа
[Дополнительно] Copy on write и small string optimization в C++
  1. Реализовать любую настольную игру (морской бой, крестики-нолики, карточные игры). Среди параметров запуска игры должен быть массив игроков соответствующего размера. Игрок может быть человеком или AI-игроком с несколькими видами поведения (например "умный", "жадный", случайный).

  2. UML

    Нарисовать диаграмму классов игры

  3. GUI

    Реализовать графический интерфейс пользователя для игры: текущее состояние, выбор хода для игрока-человека, отображение хода, сделанного игроком-AI

Домашняя работа 2. 26.02.20
Так много JDK… Какой использовать и чем это грозит?
JVM for dummies
The Java® Virtual Machine Specification
Как собрать и запустить Java программу без IDE
Java Build Tools: Ant vs Maven vs Gradle
Styleguide OpenJDK
Styleguide Google
  1. В исходнном коде OpenJDK найдите место главного цикла - аналог того, что пришлось написать в первой задаче.

  2. Реализовать на выбор одну из иерархий объектов:
    а) Создать абстрактный класс "автомобиль" с некоторым набором характеристик на ваше усмотрение (максимальная скорость, вместимость, страна-производитель и т.д.), а также методом или свойством позволяющим получить полную, агрегированную информацию о модели. Реализовать описание нескольких конкретных моделей автомобилей.
    б) Создать абстрактный класс "Мороженое" с некоторым набором набором характеристик на ваше усмотрение (тип (сливочное, фруктовый лёд), вкус, количество шариков (если применимо) и т.д.), а также методом или свойством позволяющим получить рецепт его приготовления на основе этих характеристик. Реализовать описание нескольких конкретных тортов.
    Вынести базовый класс и реализации в отдельные библиотеки. В основной программе выводить в консоль требуемую информацию через методы или свойства абстрактного класса. Задачу снабдить юнит-тестами.

Домашняя работа 1. 20.02.20
[Дополнительно] Семь видов интерпретаторов виртуальной машины. В поисках самого быстрого
[Дополнительно] saneex.c: try/catch/finally на базе setjmp/longjmp (C99) быстрее стандартных исключений C++¹
[Дополнительно] Вопрос на stakoverflow, который показывает, что столкнуться с влиянием предсказателя ветвлений на производительность можно даже в Java
[Дополнительно] Интерпретаторы байткодов своими руками
  1. VM

    Реализовать интерпретатор следующего миниатюрного ассемблера
    http://edu.vpolozov.name/arhiv/2010-i/vitasm
    На паре разобран подход с тремя проходами:
    - сбор информации о метках,
    - генерация массива инструкций в удобном виде (генерация байткода в памяти),
    - интерпретация байткода.

  2. Посчитать сумму нечетных чисел Фибоначи, не превышающих N (задается константой в исходном коде).

  3. В системе команд есть только один вид условного перехода - br. С его помощью легко построить байткод для
    if (x == y) A else B:
    ldc x
    ldc y
    cmp
    br else
    A
    jmp endif
    else: B
    endif: ret
    Как построить байткод для if (x < y), if (x <= y) ?

© 2014-2020 HwProj