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

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

Описание

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

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

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

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

 

В случае же с объектами, то мы можем  сделать автоматическое приведение от наследника к родителю, но никак  не наоборот, тогда вылетит ClassCastException

 

28. Чем отличается процесс от  потока?

 

Процесс - это объект,которому операционная система выделяет уникальное адресное пространство. Это происходит при запуске прораммы.Также создается поток в этом процессе. А вернее группа потоков маин.

29. Какие способы запуска потоков  вы знаете?

 

- Наследоваться от класса Thread, создать объект и вызвать метод старт.

- Имплементировать интерфейс Runnable, создать объект класса Thread ив качестве параметра конструктору передать объект нашего класса.

 

30. В каких состояниях может быть  поток в джава?

 

Как вообще работает поток?

У нас ест текущий поток, в котором  выполняется метод main. Этот поток имеет свой стек и этот стек начинается с вызова метода main.

Далее в методе main мы создаем новый поток, что происходит… создается новый поток и для него выделяется свой стек с первоначальным методом run().

Когда мы запускаем несколько потоков, то мы не можем гарантировать определенный порядок их вызовов. Планированием  потоков занимается планировщик  потоков JVM, выбирая из пулов потоков  поток. Мы даже не можем гарантировать  что если первый поток начался  выполнятся первым, то он и закончит выполнятся первым, он может закончить выполнятся последним.

Еще такой ньюанс, что поток, который закончил свое выполнение, не может быть повторно запущен! Он находится в состоянии «мертвый», а для запуска потока нового потока, объект должен находится в состоянии «новый».

 

Потоки  имеют такие состояния:

-новый(это когда только создали экземпляр класса Thread)

-живой  или работоспособный(переходит в это состояние после запуска метода start(), но это не означает что поток уже работает! Или же он может перейти в это состояние из состояние работающий или блокированный)

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

- Ожидающий (waiting)/Заблокированный (blocked)/Спящий(sleeping). Эти состояния характеризуют поток как не готовый к работе. Я объединил эти состояния т.к. все они имеют общую черту – поток еще жив (alive), но в настоящее время не может быть выполнен.

Другими словами поток уже не работает, но он может вернутся в рабочее состояние.

Поток может быть заблокирован, это может  означать что он ждет освобождение каких-то ресурсов. Поток может спать, если встретился метод sleep(long s) , или же он может ожидать, если встретился метод wait(), он будет ждать пока не вызовится метод notify() или notifyall().

 

- мертвы(состояние когда метод run() завершил свою работу)

 

31. Что значит усыпить поток?

 

Перевести поток в спящее состояние можно  с помощью метода sleep(long ms) ms – время в миллисекундах.

При вызове этого метода, поток переходит  в спящее состояние, после сна, поток  переходит в пул потоков и  находится в состоянии «работоспособный», т.е. не гарантируется что после пробуждения он будет сразу выполняться. Также поток не может усыпить другой поток, так как метод sleep – это статический метод! Вы просто усыпите текущий поток и не более того! Также метод sleep() может возбуждать InterruptedException().

 

32. Что значит приоритет потока?

 

Приоритет потока – это число от 1 до 10, в  зависимости от которого, планировщик  потоков выбирает какой поток  запускать. Однако полагаться на приоритеты для предсказуемого выполнения многопоточной  программы нельзя!

 

33. Что делает метод yield()?

 

Метод yield() пытается сказать планировщику потоков, что нужно выполнить другой поток, что ожидает в очереди на выполнение. Метод не пытается перевести текущий поток в состояние блокировки, сна или ожидания. Он просто пытается его перевести из состояние «работающий» в состояние «работоспособный». Однако выполнение метода может вообще не произвести никакого эффекта.

34. Расскажите про метод join()?

 

Метод join() вызывается для того, чтобы привязать текущий поток в конец потока для которого вызывается метод. Тоесть второй поток будет в режиме блокировки пока первый поток не выполнится.

 

35. Расскажите про синхронизацию  потоков.

 

Представьте себе ситуацию что два потока одновременно изменяют состояние какого-то объекта, это недопустимо. Для этого необходимо синхронизировать потоки. Как это сделать? Ключевое слово synchronized позволяет это сделать установив в сигнатуре метода. Или же в методе можно описать блок synchronized, только в качестве параметра необходимо передать объект, который будет блокироватся.

 

Представьте себе ситуацию когда один поток ждет пока разблокируется объект… а если это ждут несколько потоков? Нет гарантии что тот объект что больше всех ждал снятия блокировки будет выполнятся первым.

 

Статические синхронизированные методы и нестатические  синхронизированные методы не будет  блокировать друг друга, никогда. Статические  методы блокируются на экземпляре класса Class в то время как нестатические методы блокируются на текущем экземпляре (this). Эти действия не мешают друг другу.

 

wait() – отказывается от блокировки

остальные методы сохраняют блокировку

 

36 .Что такое взаимная блокировка ?

Это когда один поток А получил блокировку на объект А1, а поток В получил блокировку на объект В1. В то время как поток А пытается получит блокировку на объект В1, а поток В на А1.

 

37 Что такое потоки –демоны в джава?

 

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

 

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

 

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

 

Также доступ к приватным переменным можно  осуществить через механизм отражений.


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