Контрольная работа по "Информатике". 243
I. ООП
1.
Назовите основные принципы
2. Что такое наследование?
3. Что такое полиморфизм? Какие проявления полиморфизма в Java Вы знаете?
4. Что такое инкапсуляция?
II. Java core
1. Опишите модификаторы доступа в Java.
2. Чем абстрактный клас отличается от интерфейса? В каких случаях Вы бы использовали абстрактный класс, а в каких интерфейс?
3.
Может ли объект получить
4.
Какие существуют типы
5. Что такое autoboxing?
6. Что такое Generics?
7.
Каким образом передаются
8. Какие методы есть у класса Object? Какие методы можно переопределять, а какие нет?
9.
Правила переопределения
10.
Правила переопределения
11.
Правила переопределения
12.
Что такое конструктор по
13.
Опишите метод Object.finalize(
14. Чем отличаются слова final, finally и finalize?
15. Опишите иерархию исключений.
16. Что такое checked и unchecked Exception?
17. Как создать свой unchecked Exception?
18. Что такое Error?
19. Опишите работу блока try-catch-finally.
III. Collections framework
1. Назовите основные интерфейсы коллекций и их имплементации.
2. Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
3. Чем отличается HashMap от Hashtable?
4. Чем отличается ArrayList от Vector?
5. Обясните отличия между HashSet, LinkedHashSet, TreeSet.
6.
Каким образом можно
7. Особенности интерфейса Set.
8.
Каким образом можно
9. Как правильно удалить элемент из ArrayList?
IV. Multithreading
1. Каким образом можно создать поток?
2. Какие способы синхронизации в Java?
3. Как работают методы wait и notify/notifyAll?
4. Чем отличается работа метода wait с параметром и без параметра?
5.
Как работает метод Thread.
6.
Как работает метод Thread.
7. Что такое dead lock?
8.
Как правильно завершить
9.
На каком объекте происходит
синхронизация при вызове
10.
Для чего используется
V. JDBC
1. Этапы работы с базой данных с использованием JDBC?
2. Как создать Connection?
3. Чем отличается Statement от PreparedStatement?
4.
Как вызвать хранимую
5.
Как правильно закрыть
VI. JSP, Servlets
1. Чем отличается redirect от forward?
2. Как сделать redirect незаметно для пользователя?
3. Какие скоупы переменных существуют в JSP?
4. Какие есть методы отправки данных с клиента на сервер? Чем они отличаются?
5. Методы сервлета (обычно имеется ввиду HttpServlet).
6. Чем статический include отличается от динамического? (вопрос по JSP)
VII. Базы данных
1. Что такое нормализация.
2. Какие есть типы связей в базе данных. Приведите пример.
3. Что такое primary key (первичный ключ)?
4. Что такое foreign key (внешний ключ)?
5. Что такое индексы в базе данных? Для чего их используют? Чем они хороши и чем плохи?
XII. SQL
1. Какие есть типы JOIN'ов. Кратко опишите каждый из типов.
2. Что такое LEFT JOIN, RIGHT JOIN? Чем они отличаются?
3. Для чего используется слово HAVING?
4. Задача: есть две сущности АВТОРЫ и КНИГИ, связь М-М (многие к многим). Создайте структуру таблиц для этих сущностей и напишите запрос, который выберет всех авторов, которые НЕ являются соавторами ни к одной из книг.
Привет всем=)
Отрыл тут один файлик у себя на компе, решил поделиться, думаю новичкам будем интересно)
В общем типичные вопросы на собеседованиях по вакансии Junior Java Developer и мои ответы на них.
Кто дополнит\раскритикует - буду только рад :)
Начнемс...
1.Приведите несколько причин почему вы именно выбрали Java?
-Встроенная поддержка многопоточности;
- Автоматическая сборка мусора;
- Объектно-ориентированный язык;
-
Возможность создание веб
2.
Каковы основные различия
-Платформа java работает поверх других аппатарных платформ
Платформа Java имеет 2 составляющие:
- Java Virtual Machine (JVM) - "JVM" представляет собой программу, переносимую на различные аппаратные платформы. Байт код является машинным языком JVM.
- Java Application Programming Interface (API Java)
3. В чем разница между C + + и Java?
- В джаве отказались от указателей, указатели по своей природе сложны в ипользовании, а в джава стремились все упростить.
-
Джава не поддерживает
-
Джава не поддерживает
Данный метод сборщик мусора вызывает перед освобождением памяти. Не рекомендуется использовать этот метод для освобождения ресурсов, так как мы не знаем когда сборщик мусора вызовет этот метод.
- Весь джава код заключен в классах, в джаве нет глобальных переменных и функция.
- С++ предполагает ручное управление памятью, в то время как в джава присутствует автоматический сборщик мусора.
4. Расскажите про классы- загрузчики и про динамическую зарузку классов.
Любой класс, используемый в джава программу так или иначе был загружен в контекст программы каким-то загрузчиком.
Все виртуальные машины джава включают хотябы один загрузчик классов, так называем базовый загрузчик. Он загружает все основные классы, это классы из rt.jar. Интересно то, что этот загрузчик никак не связан с программой, тоесть мы не можем получить например у java.lang.Object имя зарузчика, метод getClassLoader() вернет нам null.
Следующий загрузчик – это загрузчик расширений, он загружает классы из $JAVA_HOME/lib/ext.
Далее по иерархии идет
Для примера предположим что у нас есть некий пользовательский класс MyClass и мы его используем. Как идет его загрузка… :
Сначала
системный загрузчик пытается найти
его в своем кэше загрузок его,
если найден – класс успешно загружается,
иначе управление загрузкой передается
загрузчику расширений, он также проверяет
свой кэш загрузок и в случае неудачи
передает задачу базовому загрузчику.
Тот проверяет кэш и в случае
неудачи пытается его загрузить,
если загрузка прошла успешно –
загрузка закончена. Если нет – передает
управление загрузчику расширений. Загрузчик
расширений пытается загрузить класс
и в случае неудачи передает это
дело системному загрузчику. Системный
загрузчик пытается загрузить класс
и в случае неудачи возбуждается
исключение java.lang.
Вот так работает загрузка классов в джава. Так называемое делегирование загрузки.
Если в системе присутствуют пользовательские загрузики, то они должны быть унаследованы от класса java.lang.ClassLoader .
Что же такое статическая и что такое динамическая загрузка класса?
Статическая загрузка класса происходит при использовании оператора «new»
Динамическая загрузка происходит «на лету» в ходе выполнения программы с помощью статического метода класса Class.forName(имя класса). Для чего нужна динамическая загрузка? Например мы не знаем какой класс нам понадобится и принимаем решение в ходе выполнения программы передавая имя класса в статический метод forName().
5. Для чего в джаве статические блоки?
Статические блоки в джава выполняются до выполнения конструктора, с помощью них инициализируют статические поля к примеру.
static final int i;
static{
i=10;
}
Еще один ньюанс, блок статической инициализации может создаваться сам при компиляции программы:
Например public static int MAX = 100;
Будет создан код:
Public static int MAX;
static{
MAX = 100;
}
6.
В чем преимущества объектно-
Они представляют реальные объекты в жизни, например, Машина, Джип, Счет в банке и тд… Инкапсуляция, наследование и полиморфизм делает его еще мощнее.
7. Как использование объектно – ориентерованного подхода улучшает разработку программного обеспечения?
Основные преимущества:
-
повторное использование кода(
-
реальное отображение
8.
Имеется выражение «является»
и «имеет». Что они
«является» - наследование
«имеет» - композиция
В качестве примера предположим что у нас есть классы Строение, Дом и Ванная комната. Так вот Дом является строением, что нельзя сказать про Ванну, которая не является домом. А вот Дом имеет\включает в себя Ванну.
Если вы хотите использовать повторно код, то не обязательно использовать наследование. Если нет отношения «является», то лучше тогда использовать композицию для повторного использования кода.
Не используйте наследование для получение полиморфизма, если нет ключевой зависимости «является». Используйте интерфейсы для полиморфизма.
Из спецификации можно узнать, что
Ассоциация обозначает связь между объектами.
Агрегация и композиция это частные случаи ассоциации.
Агрегация предполагает, что объекты связаны взаимоотношением "part-of" (часть).
Композиция
более строгий вариант
Например,
мотоцикл -> cумка с багажём - ассоциация. Отношение "имеет".
мотоцикл -> колесо - композиция.
группа по интересам -> человек - агрегация. человек часть группы, но может принадлежать нескольким разным группам.
9.
Что вы подразумеваете под
полиморфизмом, инкапсуляцией
Полиморфизм означает
В
чем преимущество полиморфизма? Он
позволяет добавлять новые
Также использование полиморфизма называют динамическим связыванием объектов.
Рассмотрим пример полиморфизма:
Имеется классы: Фигура, круг и треугольник.
Круг и треугольник наследуется от фигуры соответственно.
Каждый класс имеет метод «рисовать». В круге и треугольнике этот метод переопределен.
Так вот, создаем объект с типом «Фигура» и присваиваем ей ссылку на объект типа «Круг» и вызываем на этом объекте метод «рисовать». В итоге вызывается метод класса «Круг», а не класса «Фигура» как ожидалось.
Фигура ф = new Круг();
Ф.рисовать();
Также вместо класса родителя «Фигура» к примеру можно использовать интерфейс «Фигура», определив там метод рисовать. Этот интерфейс мы имплементируем в классах «Круг» и «Треугольник». Далее на интерфейсе создаем объект и присваиваем ему ссылку на объект какого-то из реализующих этот интерфейс классов.
Это удобно например если у нас есть некий метод:
public void drawShape(Фигура ф){
ф.рисовать();
}
Обратите внимание что в метод мы передаем параметр с типом интерфейса, т.е. мы не знаем какой именно тип объекта будем, но реализация будет таже. Далее мы можем просто создать еще класс, к примеру «Трапеция», имплементировать и имплементировать интерфейс «Фигура» и просто передать экземпляр класса в метод, ничего не меняя в реализации и вызове.
Наследование
это включение поведения(
В результате этого мы избегаем дублирования кода и процесс исправления ошибок в коде также упрощается.
В джава есть два вида наследования:
- наследование классов. Каждый наследник может иметь толко одного родителя.
-наследование
интерфейсов. Интерфейс может
иметь сколько угодно
Некоторые тонкие ньюансы по поводу наследования интрефейсов и классов:
Мы имеем два интерфейса с одинаковыми по имени полями. Имплементируем эти интерфейсы на каком-то классе.
Как нам вызвать поля этих интерфейсов? У нас неоднозначность.
Необходимо объект класса привести к нужному интерфейсу.
Класс к = new Класс();
((Интефейс1) к).поле;
Хорошо, что будет если мы имеем метод с одинаковой сигнатурой в интерфейсах и реализуем эти интерфейсы на классе. Как нам в классе реализовать два метода с одинаковой сигнатурой???
Ответ: никак, мы просто реализовываем один общий метод в классе.
Это является недостатком, так как нам может потребоваться разная реализация.
И третий случай: У нас есть класс и интерфейс с одинаковым по сигнатуре методом. Мы наследуемся от этого класса и имплементируем этот интерфейс. Что нам нужно делать? ведь необходимо реализовать метод интерфейса по всем правилам.
И вот тут интересно, компилятор не выдает ошибок, так как метод уже у нас реализован в классе родителе.
Инкапсуляция - это свойство которое позволяет закрыть доступ к полям и методам класса другим классам, а предоставлять им доступ только через интерфейс(метод).
10.
Для чего нужен оператор «
Это так называемый оператор
утверждений. Он проверяет
assert status: “message error”;
Тут
проверяется булевская
11.
В чем разница между
Абстрактный класс это класс,
который помечен как «abstract»
Экземпляр абстрактного класса нельзя создать.
Класс, который наследуется от абстрактного класса может реализовывать абстрактные методы, а может и не реализовывать, тогда класс наследник должен быть тоже абстрактным. Также если класс наследник переопределяет реализованный в абстрактном классе родители метод, его можно переопределить с модификатором абстракт! Т.е отказаться от реализации. Соответственно данный класс должен быть также абстрактным также.
Что касается интерфейса, то в нем находятся только абстрактные методы и константы. При реализации интерфейса, класс обязан реализовать все методы интерфейса. Иначе класс должен быть помечен как абстрактный.
Интересный момент, интерфейс может содержать внутренние классы! И не абстрактные методы в них.
Что же использовать Интерфейс или Абстрактный класс?
Абстрактный класс используется когда нам нужна какая-то реализация по умолчанию. Интерфейс используется когда классу нужно указать конкретное поведение. Часто интерфейс и абстрактный класс комбинируют, т.е. имплементируют интерфейс в абстрактном классе, чтоб указать поведение и реализацию по умолчанию. Это хорошо видно на примере свига:
AbstractTableModel implements TableModel{
}
MyTableModel extends AbstractTableModel{
}
Мы создаем свою модель таблицы с определенным поведением и уже с реализацией по умолчанию.
12.
Почему в некоторых
Это так называемые интерфейсы –маркеры. Они просто указывают что класс относится к определенной группе классов. Например интерфейс Clonable указывает на то, что класс поддерживает механизм клонирования.
Степень абстракции в данном случае доведен до абсолюта. В интерфейсе вообще нет никаких объявлений.
13.
Объясните понятие
Переопределение
методов действует при
Несколько ньюансов по этому поводу:
Модификатор доступа в методе класса наследника должен быть НЕ уже чем в классе родителе, иначе будет ошибка компиляции.
Описание исключения в переопределенном методе класса наследника должен быть НЕ шире чем в классе родителе, иначе ошибка компиляции.
Метод обьявленный как «private» в классе родителе нельзя переопределить!
Перегрузка методов – это когда в классе есть методы с одинаковым именем, но с разными входными параметрами.
14. Расскажите про Collection framework?
В основе фреймворка лежит два интерфейса, это «Collection» и «Map».
Сollection расширяет три интерфейса: List, Set, Queue.
List – хранит упорядоченные елементы(могут быть одинаковые);
Имеет такие реализации как LiskedList, ArrayList и Vector.
Vector синхронизирован, и по этому в одном потоке, он работает медленней остальных реализаций.
ArrayList – его преимущество в навигации по коллекции.
LinkedList – Его преимущество в во вставке и удалении элементов в коллекции.
Set – коллекции, которые не содержат повторяющихся елементов.
Основные реализации: HashSet, TreeSet, LinkedHashSet
TreeSet – упорядочивает элементы по их значениям;
HashSet – упорядочивает элементы по их хэш ключах, хотя на первый взляд может показаться что элементы хранятся в случайном порядке.
LinkedHashSet – хранит элементы в порядке их добавления
Queue – интерфейс для реализации очереди в джава.
Основные реализации: LinkedList, PriorityQueue.
Очереди работают по принципу FIFO – first in first out.
Map – интерфейс для реализации так называемой карты, где елементы хранятся с ихними ключами.
Основные реализации: HashTable, HashMap, TreeMap, LinkedHashMap
HashTable – синхронизированна, объявлена уставревшей.
HashMap – порядок елементов рассчитывается по хэш ключу;
TreeMap – элементы хранятся в отсортированном порядке
LinkedHashMap – элементы хранятся в порядке вставки
Ключи в Мар не могут быть одинаковыми!
Синхронизировать
не синхронизированные коллекции и
карты можно посредством класса
Collections.synchronizedMap(
15 Как сравниваются елементы коллекций?
Для сравнения элементов коллекций используется метод equals() и hashcode();
Эти методы унаследованы от класса Object.
Если наш пользовательский
Если два объекта эквивалентны, то и хэш коды этих объектов тоже должны быть равны
Если поле не используется в equals(), то оно и не должно использоваться в hashcode().
15. Какая основная разница между String, StringBuffer, StringBuilder?
String – неизменяемый класс, тоесть для для добавление данных в уже существующую строку, создается новый объект строки.
StringBuffer и StringBuilder могут изменятся и добавление строки не такое дорогостоющее с точки зрения памяти. Первы – синхронизированный, второй – нет. Это их единственное различие.
Правда если нам нужно сделать подстроку строки, то лучше использовать String, так как ее массив символов не меняется и не создается заново для новой строки. А вот в StringBuffer и StringBuilder для создания подстроки создается новый массив символов.
Какова основная разница между передачей по ссылке и по значению?
В java параметры в методы передаются по значению, тоесть создаются копии параметров и с ними ведется работа в методе. В случае с примитивными типами, то при передачи параметра сама переменная не будет меняться так как в метод просто копируется ее значение.
А вот при передачи объекта копируется ссылка на объект, тоесть если в методе мы поменяем состояние объекта, то и за методом состояние объекта тоже поменяется. Но если мы этой копии ссылки попытаемся присвоить новую ссылку на обьект, то старая ссылка у нас не изменится!
В случае же кода мы передаем String, то состояние не будет менятся, так как String неизменяемый.
16. Что такое сериализация? Как Вы исключите поля из сериализации? transient что значит?
Сериализация – это процес чтения или записи объекта. Это процесс сохранения состояния объекта и считывание этого состояния.
Для реализации сериализации нужен интерфейс – маркер Serializable
Для того чтоб исключить поля из сериализуемого потока, необходимо пометить поле модификатором transient
17.
Расскажите про потоки ввода-
Потоки ввода-вывода бывают двух видов:
- байтовый поток(InputStream и OutputStream);
- символный поток(Reader и Writer);
Это
все абстрактные классы – декораторы,
которым можно добавлять
InputStream in = new FileInputStream(new File(“file.txt”));
18 Расскажите про клонирование объектов. В чем отличие между поверхностным и глубоким клонированием?
Чтобы
объект можно было клонировать, он должен
реализовать интерфейс
myObj.clone() создаст нам клон нашего объекта, но этот клон будет поверхностный.
Что значит поверхностным? Это значит что клонируется только примитивные поля класса, ссылочные поля не клонируются!
Для того, чтоб произвести глубокое клонирование, необходимо в клонируемом классе переопределить метод clone() и в нем произвести клонирование изменяемых полей объекта.
19
чем разница между переменно
экземпляра и статической
Статические переменные инициализируются при загрузке класса класслодером, и не зависят от объекта. Переменная экземплра инициализируется при создании класса.
Пример: Например нам нужна глобальная переменная для всех объектов класс, например число посещений пользователей определенной статьи в интернете. При каждом новом посещении статьи создается новый объект и инкрементируется переменная поещений.
20. Приведите пример когда можно использовать статический метод?
Статические
методы могут быть использованы для
инициализации статических
21.Какие бывают модификаторы доступа в джава?
-public(используется в классах, конструкторах, интерфейсах, внутренних классах, методах и полях класса) – Модификатор доступа общественный, доступен всем.
-protected(используется конструкторах, внутренних классах, методах и полях класса) – Модификатор доступа на уровне пакета и в иерархии наследования
-private(используется конструкторах, внутренних классах, методах и полях класса) – Доступ разрешен только в текущем классе
-friend(используется в классах, конструкторах, интерфейсах, внутренних классах, методах и полях класса) - на уровне пакета
Заметьте что protected не равен friend, их нельзя сравнивать!
22.
Где и как вы можете
Например в качестве паттерна Синглетон. В том же классе создается статический метод. Где и создается экземпляр класса, конечно если он уже не создан, тогда он просто возвращается методом.
23. Что такое final модификатор? Объясните другие модификаторы.
Нельзя наследоваться от файнал класса. Нельзя переопределить файнал метод. Нельзя изменить сначение файнал поля.
volatile – указывает на то, что поле синхронизировано для нескольких потоков
synchronized – указывает на то что метод синхронизированный или же в методе может находится такой блок синхронизации.
transient – указывает на то, что переменная не подлежит сериализации
native – говорит о том, что реализация метода написана на другой программной платформе
24. Что такое final, finally и finalize()?
final – Нельзя наследоваться от файнал класса. Нельзя переопределить файнал метод. Нельзя изменить сначение файнал поля.
finally – используется при обработке ошибок, вызывается всегда, даже если произошла ошибка(кроме System.exit(0)). Удобно использовать для освобождения ресурсов.
finalize() – вызывается перед тем как сборщик мусора будет проводить освобождение памяти. Не рекомендуется использовать для освобождения системных ресурсов, так как не известно когда сборщик мусора будет производить свою очистку. Вообще данный метод мало кто использует. Единственно что можно использовать этот метод для закрытия ресурса что должен работать на протяжении всей работы программы и закрываться по ее окончанию. Еще можно использовать метод для защиты от так называемых «дураков», проверять, освобождены ли ресурсы, если нет, то закрыть их.
25. Расскажите про модель памяти в джава?
В Джаве память устроена
- куча
- стек
В стеке происходит весь процесс выполнения программы, а также хранятся примитивные типы полей и переменных.
Куча состоит из статического контекста и самой кучи
В
статическом контексте
Перейдем к куче. Куча состоит из двух частей:
-Так называемая новая куча
- старая куча
Новая куча в свою очередь состоит из двух частей:
-Eden(назовем ее первая) куча
- Survival(выжившая) куча
Итак, как работает гебедж коллектор?
Во-первых что стоит сказать… у сборщика мусора есть несколько алгоритмов работы, он не один.
Когда происходит очистка памяти? Если память в Первой куче полностью заполнена, то туда идет сборщик мусора и делает свою работу) Какую именно, зависит от обстоятельств… Например если в первой кучи много мусора(т.е. объектов с нулевой ссылкой), то сборщик мусора помечает эти объекты, далее те что остались объекты со ссылками он их переносит в Выжившую кучу, а в первой куче он просто все удаляет.
Ситуация другая… в первой кучи мало мусора, но очень много рабочих объектов. Как поступает в этом случае сборщик мусора?
Он помечает мусор, удаляет его и оставшиеся объекты компонует.
Также следует заметить что при нехватке места в Выжившей куче, объекты переносятся в старую кучу, там хранятся как правило долго живущие объекты.
Также следует заметить что сборщик мусора вызывается сам периодически, а не только когда памяти не хватает.
26.
Расскажите про внутренние
Внутренний класс – это класс, который находится внутри класса или интерфейса. При этом он получает доступ ко всем полям и методам своего внешнего класса.
Для чего он может применятся? Например чтоб обеспечить какую-то дополнительную логику класса. Хотя использование внутренних классов усложняет программу, рекомендуется избегать их использование.
Какие внутренние классы бывают?
Есть так называемый вложенный (с модификатором static)
А также есть анонивный внутренний класс.
27
. Расскажите про привидение
Приведение типов это установка типа переменной или объекта отличного от текущего. В ждава есть два вида приведения:
- автоматическое
- не автоматическое
Автоматическое происходит например:
byte->
short->int->long->float->
тоесть если мы расширяем тип, то явное преобразование не требуется, приведение происходит автоматически. Если же мы сужаем, то необходимо явно указывать привидение типа.

- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"
- Контрольная работа по "Информатике"