Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники 2020-2021 / Билеты.docx
Скачиваний:
70
Добавлен:
15.06.2021
Размер:
1.2 Mб
Скачать

Билет 1.

Преимущества и недостатки концепции языка Java. Средства повышения производительности.

Преимущества

  • Программы в байт-коде переносимы между платформами, что ускоряет разработку программ

  • Многопоточность в составе языка

  • «Истинное ООП»

  • Пакеты, интерфейсы, автодокументирование, сборка мусора

  • Повышенная защищенность пользователя ПО (запрещен прямой доступ к адресам памяти)

Недостатки

  • Требуется написать VM для каждой платформы или ОС (=~ написанию компилятора)

  • Медленная работа программы в VM по сравнению с C/C++

Исполнение кода через интерпретацию медленнее в 10-20 раз (для Java 1.0 1996 г.) по сравнению с аналогичной откомпилированной программой на C или C++. Для преодоления этого ограничения были созданы два инструмента:

1. Just-in-time компиляция — JIT. 1997 г. JDK 1.1.

JRE компилирует программу (целиком или частями) в машинный код, который затем исполняется с «родной» скоростью процессора.

2. Адаптивный оптимизирующий JIT-компилятор - HotSpot. 2000 г. JDK 1.3.

Встроенный профилировщик выделяет ресурсоемкие участки кода (в том числе зависимые от входных данных) и компилирует их на лету в машинный код, который затем исполняется при вызове этих участков.

В обоих случаях полная компиляция кода программы в машинный не выполняется

В результате этих решений Java8 медленнее C++ в 1.5-2 раза (по данным тестов на примере матричных вычислений)

Ооп в Java. Наследование

Класс – удобный кирпичик программы, который содержит внутри себя и управление собою с сохранением промежуточных состояний и реализацию.

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

Наследование — это механизм в программировании, в том числе и в Java, который позволяет описать новый класс на основе уже существующего. Класс-наследник при этом получает доступ к полям и методам родительского класса.

Реализуется с помощью ключевого слова extends.

Билет 2.

Сборщик мусора в Java. Назначение, принцип работы

Сборка мусора  —  это процесс восстановления заполненной памяти среды выполнения путем уничтожения неиспользуемых объектов.

В таких языках, как C и C++, программист отвечает как за создание, так и за уничтожение объектов. Иногда программист может забыть уничтожить бесполезные объекты, и выделенная им память не освобождается. Расходуется все больше и больше системной памяти, и в конечном итоге она больше не выделяется. Такие приложения страдают от “утечек памяти”.

После определенного момента памяти уже не хватает для создания новых объектов, и программа нештатно завершается из-за OutOfMemoryErrors.

В C++ для сборки мусора можно воспользоваться методом delete(), а в C  —  методом free(). В Java сборка мусора происходит автоматически в течение всего времени работы программы. Это устраняет необходимость выделения памяти и, следовательно, позволяет избежать утечек.

Сборка мусора в Java  —  это процесс, с помощью которого программы Java автоматически управляют памятью. Java-программы компилируются в байт-код, который запускается на виртуальной машине Java (JVM).

Когда Java-программы выполняются на JVM, объекты создаются в куче, которая представляет собой часть памяти, выделенную для них. 

Пока Java-приложение работает, в нем создаются и запускаются новые объекты. В конце концов некоторые объекты перестают быть нужны. Можно сказать, что в любой момент времени память кучи состоит из двух типов объектов.

Живые  —  эти объекты используются, на них ссылаются откуда-то еще.

Мертвые  —  эти объекты больше нигде не используются, ссылок на них нет.

Сборщик мусора находит эти неиспользуемые объекты и удаляет их, чтобы освободить память.

ООП в Java. Методы: синтаксис, перегрузка, переопределение, наследование.

Допустимые модификации методов:

1. Наследование

2. Перегрузка

3. Переопределение

4. Обращение к методу суперкласса (кл. слово super)

//Код суперкласса

//Устанавливает автора

public void setAuthor(String Name) {

this.Name = Name;

}

//Перегрузка — изменение типа и/или числа аргументов

public void setAuthor(String Name, int Age) {

this.Name = Name;

this.Age = Age;

}

//Код класса наследника

//Переопределение — полное совпадение по имени и аргументам

public void setAuthor(String Name) {

super.setName(Name); //Можно вызвать метод суперкласса

this.Age = 0;

}

Билет 3.

Простые и ссылочные типы данных.

В Java глобально существуют две основных группы типов: Простые и Ссылочные. Ссылочные типы данных это ссылки на объекты. Простые типы данных были оставлены в Java для повышения быстродействия.

Простые типы данных: boolean, char, byte, short, int, long, float, double, void

Ссылочные типы данных: статические массивы, динамические массивы, строки, классы-обертки.

ООП в Java. Конструкторы: синтаксис, перегрузка, переопределение, наследование.

Допустимые модификации конструкторов:

1. Наследование

2. Перегрузка

3. Переопределение

4. Обращение к конструктору суперкласса (кл. слово super)

//Код суперкласса

//Конструктор класса

public Author(String Name) {

this.Name = Name;

}

//Перегрузка — изменение типа и/или числа аргументов

public Author(String Name, int Age) {

Author(Name); //Можно вызвать конструктор из конструктора

this.Age = Age;

}

//Код класса наследника

//Переопределение — полное совпадение по имени и аргументам

public Author(String Name) {

super.Author(Name); //Обязательно при наличии аргументов у конструктора суперкласса

this.Age = 0;

}

Билет 4.

Простые типы и классы-обертки.

В языке Java существует два типа переменных: простые, например int и boolean, а также ссылочные типы вроде Integer и Boolean (классы-обертки). Для каждого примитивного типа существует, соответствующий ему ссылочный тип.

Классы-обертки являются неизменяемыми: это означает, что после создания объекта его состояние (значение поля value) не может быть изменено; и задекларированы, как final (от этих классов невозможно наследоваться).

Java автоматически производит преобразования между примитивными типами и их обертками:

Integer j = 1; // autoboxing

int i = new Integer(1); // unboxing

Процесс преобразования примитивных типов в ссылочные называется автоупаковкой (autoboxing), а обратный ему — автораспаковкой (unboxing).

ООП в Java. Полиморфизм.

Полиморфизм является одним из фундаментальных понятий в объектно-ориентированном программировании наряду с наследованием и инкапсуляцией. Слово полиморфизм греческого происхождения и означает "имеющий много форм". 

Использование методов с одинаковыми названиями для разных классов.

Билет 5.

Тип данных - «Cтрока».

Строковый тип данных — основан на объектном подходе. Строка это объект типа

(класса) String. Поэтому работа со строкой возможна через методы объекта String.

Строки являются неизменяемыми объектами. Поэтому, например, метод преобразования строки к нижнему регистру примененный к строке - str.toLowerCase() не приводит к изменению символов в ней и требуется такая запись str = str.toLowerCase(). Переменная str слева от знака присваивания ссылается уже на другой объект, нежели переменная str, к которой применяется метод toLowerCase().

Первый объект, содержащий строку str останется «болтаться в памяти» без ссылки и через какое-то время будет уничтожен сборщиком мусора.

Хотя присвоение значения производится по ссылке, но поскольку строки это часто используемый тип данных, для них (единственных в Java) определены перегруженные операторы которые внешне реализуют интерфейс присвоения по значению.

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

Соседние файлы в папке Заочники 2020-2021