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

Автор работы: Пользователь скрыл имя, 28 Мая 2013 в 00:03, контрольная работа

Описание

6. В чем преимущества объектно-ориентированных языков программирования?
Они представляют реальные объекты в жизни, например, Машина, Джип, Счет в банке и тд… Инкапсуляция, наследование и полиморфизм делает его еще мощнее.
9. Что вы подразумеваете под полиморфизмом, инкапсуляцией и динамическим связыванием?
Полиморфизм означает способность переменно данного типа, которая ссылается на объекты разных типов, при этом вызывается метод, характерный для конкретного типа ссылки на объект.

Работа состоит из  1 файл

Вопросы на собеседованиях.docx

— 43.88 Кб (Скачать документ)

I. ООП

1. Назовите основные принципы ООП.

2. Что такое наследование?

3. Что такое полиморфизм? Какие  проявления полиморфизма в Java Вы знаете?

4. Что такое инкапсуляция?

 

II. Java core

1. Опишите модификаторы доступа  в Java.

2. Чем абстрактный клас отличается от интерфейса? В каких случаях Вы бы использовали абстрактный класс, а в каких интерфейс?

3. Может ли объект получить доступ  к private-переменной класса? Если, да, то каким образом?

4. Какие существуют типы вложенных  классов? Для чего они используются?

5. Что такое autoboxing?

6. Что такое Generics?

7. Каким образом передаются переменные  в методы, по значению или по  ссылке?

8. Какие методы есть у класса  Object? Какие методы можно переопределять, а какие нет?

9. Правила переопределения метода  Object.equals().

10. Правила переопределения метода  Object.hashCode().

11. Правила переопределения метода  Object.clone().

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. Каким образом можно синхронизировать  методы HashMap, ArrayList?

7. Особенности интерфейса Set.

8. Каким образом можно отсортировать  коллекцию?

9. Как правильно удалить элемент  из ArrayList?

 

IV. Multithreading

1. Каким образом можно создать  поток?

2. Какие способы синхронизации  в Java?

3. Как работают методы wait и notify/notifyAll?

4. Чем отличается работа метода  wait с параметром и без параметра?

5. Как работает метод Thread.yield()? Чем отличаются методы Thread.sleep() и Thread.yield()?

6. Как работает метод Thread.join()?

7. Что такое dead lock?

8. Как правильно завершить работу  потока? (Иногда говорять, убить поток).

9. На каком объекте происходит  синхронизация при вызове static synchronized метода?

10. Для чего используется ключевое  слово volatile?

 

V. JDBC

1. Этапы работы с базой данных  с использованием JDBC?

2. Как создать Connection?

3. Чем отличается Statement от PreparedStatement?

4. Как вызвать хранимую процедуру?

5. Как правильно закрыть Connection?

 

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 работает поверх других аппатарных платформ

Платформа Java имеет 2 составляющие:

- Java Virtual Machine (JVM) - "JVM" представляет собой программу, переносимую на различные аппаратные платформы. Байт код является машинным языком JVM.

- Java Application Programming Interface (API Java)

 

3. В чем разница между C + + и  Java?

 

- В джаве отказались от указателей, указатели по своей природе сложны в ипользовании, а в джава стремились все упростить.

- Джава не поддерживает множественного  наследования, так как оно порождает  больше проблем чем решает. Вместо этого в джаве можно реализовывать множественное наследование интерфейсов.

- Джава не поддерживает деструкторы,  но имеется метод finallyze().

Данный  метод сборщик мусора вызывает перед  освобождением памяти. Не рекомендуется  использовать этот метод для освобождения ресурсов, так как мы не знаем когда сборщик мусора вызовет этот метод.

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

- С++ предполагает ручное управление памятью, в то время как в джава присутствует автоматический сборщик мусора.

 

4. Расскажите про классы- загрузчики и про динамическую зарузку классов.

 

Любой класс, используемый в джава программу так или иначе был загружен в контекст программы каким-то загрузчиком.

Все виртуальные машины джава включают хотябы один загрузчик классов, так называем базовый загрузчик. Он загружает все основные классы, это классы из rt.jar. Интересно то, что этот загрузчик никак не связан с программой, тоесть мы не можем получить например у java.lang.Object имя зарузчика, метод getClassLoader() вернет нам null.

 

  Следующий загрузчик – это  загрузчик расширений, он загружает  классы из $JAVA_HOME/lib/ext.

 

  Далее по иерархии идет системный  загрузчик, он загружает классы, путь к которым указан в переменно класпаз.

 

  Для примера предположим что у нас есть некий пользовательский класс MyClass и мы его используем. Как идет его загрузка… :

Сначала системный загрузчик пытается найти  его в своем кэше загрузок его, если найден – класс успешно загружается, иначе управление загрузкой передается загрузчику расширений, он также проверяет  свой кэш загрузок и в случае неудачи  передает задачу базовому загрузчику. Тот проверяет кэш и в случае неудачи пытается его загрузить, если загрузка прошла успешно –  загрузка закончена. Если нет – передает управление загрузчику расширений. Загрузчик  расширений пытается загрузить класс  и в случае неудачи передает это  дело системному загрузчику. Системный  загрузчик пытается загрузить класс  и в случае неудачи возбуждается исключение java.lang.ClassNotFoundException.

Вот так работает загрузка классов в  джава. Так называемое делегирование загрузки.

 

Если  в системе присутствуют пользовательские загрузики, то они должны быть унаследованы от класса 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" (часть).

Композиция  более строгий вариант агрегации. Дополнительно к требованию part-of накладывается условие, что "часть" не может одновременно принадлежать разным "хозяевам", и заканчивает своё существование вместе с владельцем.

 

Например,

мотоцикл -> cумка с багажём - ассоциация. Отношение "имеет".

мотоцикл -> колесо - композиция.

группа  по интересам -> человек - агрегация. человек часть группы, но может принадлежать нескольким разным группам.

 

9. Что вы подразумеваете под  полиморфизмом, инкапсуляцией и  динамическим связыванием?

  Полиморфизм означает способность  переменно данного типа, которая  ссылается на объекты разных  типов, при этом вызывается  метод, характерный для конкретного  типа ссылки на объект.

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

Также использование полиморфизма называют динамическим связыванием объектов.

 

Рассмотрим  пример полиморфизма:

Имеется классы: Фигура, круг и треугольник.

Круг  и треугольник наследуется от фигуры соответственно.

Каждый  класс имеет метод «рисовать». В круге и треугольнике этот метод  переопределен.

Так вот, создаем объект с типом «Фигура» и присваиваем ей ссылку на объект типа «Круг» и вызываем на этом объекте  метод «рисовать». В итоге вызывается метод класса «Круг», а не класса «Фигура» как ожидалось.

 

Фигура  ф = new Круг();

Ф.рисовать();

 

Также вместо класса родителя «Фигура» к  примеру можно использовать интерфейс «Фигура», определив там метод рисовать. Этот интерфейс мы имплементируем в классах «Круг» и «Треугольник». Далее на интерфейсе создаем объект и присваиваем ему ссылку на объект какого-то из реализующих этот интерфейс классов.

 

Это удобно например если у нас есть некий метод:

 

public void drawShape(Фигура ф){

ф.рисовать();

}

Обратите  внимание что в метод мы передаем параметр с типом интерфейса, т.е. мы не знаем какой именно тип объекта будем, но реализация будет таже. Далее мы можем просто создать еще класс, к примеру «Трапеция», имплементировать и имплементировать интерфейс «Фигура» и просто передать экземпляр класса в метод, ничего не меняя в реализации и вызове.

 

Наследование  это включение поведения(методы) и состояния(поля) базового класса в производный от него.

В результате этого мы избегаем дублирования кода и процесс исправления ошибок в коде также упрощается.

 

В джава есть два вида наследования:

- наследование классов. Каждый  наследник может иметь толко одного родителя.

-наследование  интерфейсов. Интерфейс может  иметь сколько угодно родителей.

 

Некоторые тонкие ньюансы по поводу наследования интрефейсов и классов:

 

Мы  имеем два интерфейса с одинаковыми  по имени полями. Имплементируем эти  интерфейсы на каком-то классе.

Как нам вызвать поля этих интерфейсов? У нас неоднозначность.

Необходимо  объект класса привести к нужному  интерфейсу.

 

Класс к = new Класс();

((Интефейс1) к).поле;

 

Хорошо, что будет если мы имеем метод с одинаковой сигнатурой в интерфейсах и реализуем эти интерфейсы на классе. Как нам в классе реализовать два метода с одинаковой сигнатурой???

Ответ: никак, мы просто реализовываем один общий метод в классе.

Это является недостатком, так как нам  может потребоваться разная реализация.

 

И третий случай: У нас есть класс  и интерфейс с одинаковым по сигнатуре  методом. Мы наследуемся от этого  класса и имплементируем этот интерфейс. Что нам нужно делать? ведь необходимо реализовать метод интерфейса по всем правилам.

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