Если оператор return содержится и в блоке catch и в finally какой из них главнее

Если оператор return содержится и в блоке catch и в finally какой из них главнее thumbnail

Список вопросов и ответов по теме “Исключения в Java”.

К списку вопросов по всем темам

Вопросы

1. Дайте определение понятию “исключение”
2. Какова иерархия исключений.
3. Можно/нужно ли обрабатывать ошибки jvm?
4. Какие существуют способы обработки исключений?
5. О чем говорит ключевое слово throws?
6. В чем особенность блока finally? Всегда ли он исполняется?
7. Может ли не быть ни одного блока catch при отлавливании исключений?
8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
10. Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?
11. В чем особенность RuntimeException?
12. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
13. Какой оператор позволяет принудительно выбросить исключение?
14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
15. Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
16. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
17. Что вы знаете о OutOfMemoryError?
18. Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?
19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.
20. Какая конструкция используется в Java для обработки исключений?
21. Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
22. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Ответы

1. Дайте определение понятию “исключение”

Исключение – это проблема(ошибка) возникающая во время выполнения программы. Исключения могут возникать во многих случаях, например:

  1. Пользователь ввел некорректные данные.
  2. Файл, к которому обращается программа, не найден.
  3. Сетевое соединение с сервером было утеряно во время передачи данных. И т.д.

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

2. Какова иерархия исключений.

Иерархия Исключений Java

Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable. Его потомками являются подклассы Exception и Error.

Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемые и предсказуемые. Например, произошло деление на ноль в целых числах.

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине. Программа дополнительную память всё равно не сможет обеспечить для JVM.

В Java все исключения делятся на два типа: контролируемые исключения (checked) и неконтролируемые исключения (unchecked), к которым относятся ошибки (Errors) и исключения времени выполнения (RuntimeExceptions, потомок класса Exception).

Контролируемые исключения представляют собой ошибки, которые можно и нужно обрабатывать в программе, к этому типу относятся все потомки класса Exception (но не RuntimeException).

3. Можно/нужно ли обрабатывать ошибки jvm?

Обрабатывать можно, но делать этого не стоит. Разработчику не предоставлены инструменты для обработки ошибок системы и виртуальной машины.

4. Какие существуют способы обработки исключений?

В Java есть пять ключевых слов для работы с исключениями:

  1. try – данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке.
  2. catch – ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений.
  3. finally – ключевое слово для отметки начала блока кода, которой является дополнительным. Этот блок помещается после последнего блока ‘catch’. Управление обычно передаётся в блок ‘finally’ в любом случае.
  4. throw – служит для генерации исключений.
  5. throws – ключевое слово, которое прописывается в сигнатуре метода, и обозначающее что метод потенциально может выбросить исключение с указанным типом.

Общий вид конструкции для “поимки” исключительной ситуации выглядит следующим образом:

try{

//здесь код, который потенциально может привести к ошибке

}

catch(SomeException e ){ //в скобках указывается класс конкретной ожидаемой ошибки  

//здесь описываются действия, направленные на обработку исключений

}

finally{

//выполняется в любом случае ( блок finally  не обязателен)

}

Подробнее https://www.quizful.net/post/java-exceptions

5. О чем говорит ключевое слово throws?

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

6. В чем особенность блока finally? Всегда ли он исполняется?

Когда исключение передано, выполнение метода направляется по нелинейному пути. Это может стать источником проблем. Например, при входе метод открывает файл и закрывает при выходе. Чтобы закрытие файла не было пропущено из-за обработки исключения, был предложен механизм finally.

Ключевое слово finally создаёт блок кода, который будет выполнен после завершения блока try/catch, но перед кодом, следующим за ним. Блок будет выполнен, независимо от того, передано исключение или нет. Оператор finally не обязателен, однако каждый оператор try требует наличия либо catch, либо finally. Код в блоке finally будет выполнен всегда.

7. Может ли не быть ни одного блока catch при отлавливании исключений?

Такая запись допустима, если имеется связка try{} finally {}. Но смысла в такой записи не так много, всё же лучше иметь блок catch в котором будет обрабатываться необходимое исключение.

String x = “z”;

try {

   x=”234″;

} finally {

    x = “Finally”;

}

8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?

Блок finally выполняется не всегда, например в такой ситуации:

try {

    System.exit(0);

} catch(Exception e) {

    e.printStackTrace();

} finally { }

Здесь finally недостижим, так как происходит системный выход из программы. Общими словами: когда jvm умирает, ей не до finally (отсюда можете придумать другие примеры как убить jvm и ответить на вопрос в заголовке).

9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?

В Java 7 стала доступна новая конструкция, с помощью которой можно перехватывать несколько исключений одним блоком catch:

try {  

} catch( IOException | SQLException ex ) {  

  logger.log(ex);

  throw ex;

}

10. Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?

Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked) (смотрите картинку в начале статьи). Это свойство присуще «корневищу» (Throwable, Error, Exception, RuntimeException) и передается по наследству. Никак не видимо в исходном коде класса исключения.
В дальнейших примерах просто учтите, что— Throwable и Exception и все их наследники (за исключением наследников Error-а и RuntimeException-а) — checked
— Error и RuntimeException и все их наследники — unchecked
checked exception = проверяемое исключение, проверяемое компилятором.

Тема достаточно обширная для того, чтобы уместить ее в одном ответе. К примеру, можно разобрать примеры Головача: https://habrahabr.ru/company/golovachcourses/blog/225585/

И еще с quizful.net

1. Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода. Unchecked могут не обрабатываться и не быть описанными.
2. Unchecked исключения в Java – наследованные от RuntimeException, checked – от Exception (не включая unchecked).

Читайте также:  Яйцо какие витамины содержатся

Checked исключения отличаются от Unchecked исключения в Java, тем что:
1)Наличиеобработка Checked исключения проверяются на этапе компиляции. Наличиеобработка Unchecked исключения происходит на этапе выполнения.

11. В чем особенность RuntimeException?

public class RuntimeException extends Exception – базовый класс для ошибок во время выполнения. Относится к необрабатываемым исключениям (uncatchedunchecked). Как сказано в описании класса – это суперкласс, исключения которого могут быть выброшены во время нормальной работы JVM.

12. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?

Необходимо унаследоваться от базового класса требуемого типа исключений (например от Exception или RuntimeException).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public class ExcClass extends Exception {

    private String someString;

    public ExcClass (String string) {

        this.someString = string;

        System.out.println(“Exception ExcClass”);

    }

    public void myOwnExceptionMsg() {

        System.err.println(“This is exception message for string: ” + someString);

    }

}

public class TestExc {

    public static void main(String[] args) {

        try {

            String s = “SomeString”;

            throw new ExcClass(s);

        } catch (ExcClass ex) {

            ex.myOwnExceptionMsg();

        }

    }

}

//Вывод

Exception ExcClass

This is exception message for string: SomeString

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

13. Какой оператор позволяет принудительно выбросить исключение?

throw new Exception();

14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?

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

public void someMethod() throws Exception {

    }

15. Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?

Может и оно будет передано в виртуальную машину Java (JVM).

16. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?

Вернется из блока finally.

    public static void main(String[] args) {

       String what =  method();

        System.out.println(what);

    }

    public static String method() {

        try {

            return “SomeString”;

        } catch(Exception ex) {

            return “Catch message”;

        } finally {

            return “Finally message”;

        }

    }

//Вывод

Finally message

17. Что вы знаете о OutOfMemoryError?

OutOfMemoryError выбрасывается, когда виртуальная машина Java не может выделить (разместить) объект из-за нехватки памяти, а сборщик мусора не может высвободить ещё.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места.

1. java.lang.OutOfMemoryError: Java heap space
Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые программно в вашем приложении. Размер задается параметрами -Xms и -Xmx. Если вы пытаетесь создать объект, а места в куче не осталось, то получаете эту ошибку. Обычно проблема кроется в утечке памяти, коих бывает великое множество, и интернет просто пестрит статьями на эту тему.

2. java.lang.OutOfMemoryError: PermGen space
Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.

3. java.lang.OutOfMemoryError: GC overhead limit exceeded
Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и GC постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit, но, конечно же, её надо не отключать, а либо решать проблему утечки памяти, либо выделять больше объема, либо менять настройки GC.

4. java.lang.OutOfMemoryError: unable to create new native thread

Выбрасывается, когда нет возможности создать еще потоки.

Подробнее в статье https://habrahabr.ru/post/117274/

18. Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?

SQLException предоставляет информацию об ошибках доступа к базе данных или других ошибках связанных с работой с базами данных.

SQLException относится к checked исключениям, а значит проверяется на этапе компиляции.

Споры об этом типе исключения идут о том, что разработчику приходится постоянно обрабатывать это исключение в коде, хотя большая часть ошибок возникает во время выполнения программы, т.е., по мнению многих, лучше бы отнести его к unchecked runtime исключениям.

try {

    // make some SQL call(s)

} catch {SQLException e) {

    // log the exception

    return; // and give up

}

Аргумент Joshua Bloch из Effective Java Second Edition такой: сделав SQLException проверяемым – это попытка заставить разработчиков обработать исключение и обернуть его в новом уровне абстракции.

19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.

Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине.

За примером посмотрите картинку иерархии исключений в начале статьи. Как пример – OutOfMemoryError.

20. Какая конструкция используется в Java для обработки исключений?

Можно использовать try-catch-finally и c 7й Java try-with-resources. Первый способ:

try{

//здесь код, который потенциально может привести к ошибке

}

catch(SomeException e ){ //в скобках указывается класс конкретной ожидаемой ошибки  

//здесь описываются действия, направленные на обработку исключений

}

finally{

//выполняется в любом случае ( блок finally  не обязателен)

}

Try с ресурсами:

try(открываем файл и т.п. здесь){

//…

}

//после блока файл закроется автоматически.

Пример:

Старый способ

BufferedReader br = new BufferedReader(new FileReader(path));

   try {

            return br.readLine();

        } finally {

            if (br != null) {

                br.close();

            }

        }

JDK 7

try (BufferedReader br =

                   new BufferedReader(new FileReader(path)) ) {

        return br.readLine();

    }

Так же смотрите ответ к “Какие существуют способы обработки исключений?”

21. Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?

Ответ аналогичный случаю с двумя return – будет обработано в finally блоке. Если было выброшено два исключения – одно в try, второе в finally, то исключение в finally “проглотит” исключение выше (см. пример). Если до блока finally исключение было обработано, то мы можем получить информацию об исключении в блоке try и тем самым не потерять исключение, которое впоследствии может быть перезаписано в finally другим исключением.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

public class TestExc {

    public static void main(String[] args) {

        Exception ex = twoExceptionsMethod();

        System.out.println(ex.getClass());

        String s = twoExceptionsMethod2();

        System.out.println(s);

    }

    public static Exception twoExceptionsMethod() {

        try {

            return new IndexOutOfBoundsException();

        } finally {

            return new NullPointerException();

        }

    }

    public static String twoExceptionsMethod2() {

        try {

            throw new NullPointerException();

        }catch (NullPointerException ex) {

            System.out.println(ex.getMessage()+ ” catchBlock”);;

        }

        finally {

            Exception ex2 = new Exception();

            return ex2.getMessage() + “finallyBlock”;

        }

    }

}

//Вывод

class java.lang.NullPointerException

null catchBlock

null finallyBlock

22. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?

Общее правило – обрабатывать исключения нужно от “младшего” к старшему. Т.е. нельзя поставить в первый блок catch(Exception e) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет попадать под ExceptionName extends Exception.

Таким образом сначала нужно обработать public class FileNotFoundException extends IOException, а затем уже IOException.

Читайте также:  В каком питании содержится витамин в12

    public static void ioExcAndFileNotFoundEx() {

        try {

            //TODO: some code

            String x = “abc”;

            if (x.equals(“abc”)) {

                throw new IOException();

            } else {

                throw new FileNotFoundException();

            }

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.getMessage();

        }

    }

К списку вопросов по всем темам

77

74888 Total Views 10 Views Today

Views:
61 279

Источник

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

Цель – собрать не только вопросы (что-то их очень много в интернете), но и ответы на них в одном месте.

По поводу указания авторства читайте на главной странице раздела Interview

Оглавление:

  1. Типы данных, переменные, операторы, циклы, массивы
  2. ООП
  3. Исключения
  4. Коллекции
  5. Строки
  6. Потоки ввода/вывода
  7. Потоки выполнения/многопоточность

Java Enterprise Edition: Перейти в раздел вопросы и ответы для интервью по Java EE.

1. Типы данных, переменные, операторы, циклы, массивы (перейти в раздел)

  1. Сколько ключевых слов зарезервировано языком, что это за слова, какие из них не используются?
  2. Из каких символов может состоять имя переменной (корректный идентификатор)?
  3. Что значит слово “инициализация”?
  4. На какие основные группы можно поделить типы данных?
  5. Какие примитивные типы вы знаете?
  6. Что вы знаете о преобразовании примитивных типов данных, есть ли потеря данных, можно ли преобразовать логический тип?
  7. Какими значениями инициализируются переменные по умолчанию?
  8. Как передается значение переменной (по ссылке/значению)?
  9. Что вы знаете о функции main, какие обязательные условия ее определения?
  10. Какие логические операции и операторы вы знаете?
  11. В чем разница краткой и полной схемы записи логических операторов?
  12. Что такое таблица истинности?
  13. Что такое тернарный оператор выбора?
  14. Какие унарные и бинарные арифметические операции вы знаете?
  15. Какие побитовые операции вы знаете?
  16. Какова роль и правила написания оператора выбора (switch)?
  17. Какие циклы вы знаете, в чем их отличия?
  18. Что такое “итерация цикла”?
  19. Какие параметры имеет цикл for, можно ли их не задать?
  20. Какой оператор используется для немедленной остановки цикла?
  21. Какой оператор используется для перехода к следующей итерации цикла?
  22. Что такое массив?
  23. Какие виды массивов вы знаете?
  24. Что вы знаете о классах оболочках?
  25. Что такое автоупаковка (boxing/unboxing)?
к оглавлению

2. ООП (перейти в раздел)

  1. Назовите принципы ООП и расскажите о каждом.
  2. Дайте определение понятию “класс”.
  3. Что такое поле/атрибут класса?
  4. Как правильно организовать доступ к полям класса?
  5. Дайте определение понятию “конструктор”.
  6. Чем отличаются конструкторы по-умолчанию, копирования и конструктор с параметрами?
  7. Какие модификации уровня доступа вы знаете, расскажите про каждый из них.
  8. Расскажите об особенностях класса с единственным закрытым (private) конструктором.
  9. О чем говорят ключевые слова “this”, “super”, где и как их можно использовать?
  10. Дайте определение понятию “метод”.
  11. Что такое сигнатура метода?
  12. Какие методы называются перегруженными?
  13. Могут ли нестатические методы перегрузить статические?
  14. Расскажите про переопределение методов.
  15. Может ли метод принимать разное количество параметров (аргументы переменной длины)?
  16. Можно ли сузить уровень доступа/тип возвращаемого значения при переопределении метода?
  17. Как получить доступ к переопределенным методам родительского класса?
  18. Какие преобразования называются нисходящими и восходящими?
  19. Чем отличается переопределение от перегрузки?
  20. Где можно инициализировать статические/нестатические поля?
  21. Зачем нужен оператор instanceof?
  22. Зачем нужны и какие бывают блоки инициализации?
  23. Каков порядок вызова конструкторов и блоков инициализации двух классов: потомка и его предка?
  24. Где и для чего используется модификатор abstract?
  25. Можно ли объявить метод абстрактным и статическим одновременно?
  26. Что означает ключевое слово static?
  27. К каким конструкциям Java применим модификатор static?
  28. Что будет, если в static блоке кода возникнет исключительная ситуация?
  29. Можно ли перегрузить static метод?
  30. Что такое статический класс, какие особенности его использования?
  31. Какие особенности инициализации final static переменных?
  32. Как влияет модификатор static на класс/метод/поле?
  33. О чем говорит ключевое слово final?
  34. Дайте определение понятию “интерфейс”.
  35. Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
  36. Почему нельзя объявить метод интерфейса с модификатором final или static?
  37. Какие типы классов бывают в java (вложенные… и.т.д.)
  38. Какие особенности создания вложенных классов: простых и статических.
  39. Что вы знаете о вложенных классах, зачем они используются? Классификация, варианты использования, о нарушении инкапсуляции.
  40. В чем разница вложенных и внутренних классов?
  41. Какие классы называются анонимными?
  42. Каким образом из вложенного класса получить доступ к полю внешнего класса?
  43. Каким образом можно обратиться к локальной переменной метода из анонимного класса, объявленного в теле этого метода? Есть ли какие-нибудь ограничения для такой переменной?
  44. Как связан любой пользовательский класс с классом Object?
  45. Расскажите про каждый из методов класса Object.
  46. Что такое метод equals(). Чем он отличается от операции ==.
  47. Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?
  48. Если equals() переопределен, есть ли какие-либо другие методы, которые следует переопределить?
  49. В чем особенность работы методов hashCode и equals? Каким образом реализованы методы hashCode и equals в классе Object? Какие правила и соглашения существуют для реализации этих методов? Когда они применяются?
  50. Какой метод возвращает строковое представление объекта?
  51. Что будет, если переопределить equals не переопределяя hashCode? Какие могут возникнуть проблемы?
  52. Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode?
  53. Как вы думаете, будут ли какие-то проблемы, если у объекта, который используется в качестве ключа в hashMap изменится поле, которое участвует в определении hashCode?
  54. Чем отличается абстрактный класс от интерфейса, в каких случаях что вы будете использовать?
  55. Можно ли получить доступ к private переменным класса и если да, то каким образом?
  56. Что такое volatile и transient? Для чего и в каких случаях можно было бы использовать default?
  57. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?
  58. Имеет ли смысл объявлять метод private final?
  59. Какие особенности инициализации final переменных?
  60. Что будет, если единственный конструктор класса объявлен как final?
  61. Что такое finalize? Зачем он нужен? Что Вы можете рассказать о сборщике мусора и алгоритмах его работы.
  62. Почему метод clone объявлен как protected? Что необходимо для реализации клонирования?
  63. Знакомы ли Вам какие-либо паттерны проектирования?
  64. Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
  65. Что можете сказать про MVC? Нарисуйте диаграмму и объясните, как MVC работает.
  66. Напишите функцию вычисления факториала.
  67. Дана функция вычисления чисел Фибоначчи, известно, что она работает. Найдите логическую ошибку. Оцените сложность получившегося алгоритма.
к оглавлению

3. Исключения (перейти в раздел)

  1. Дайте определение понятию “исключение”
  2. Какова иерархия исключений.
  3. Можно/нужно ли обрабатывать ошибки jvm?
  4. Какие существуют способы обработки исключений?
  5. О чем говорит ключевое слово throws?
  6. В чем особенность блока finally? Всегда ли он исполняется?
  7. Может ли не быть ни одного блока catch при отлавливании исключений?
  8. Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
  9. Может ли один блок catch отлавливать несколько исключений (с одной и разных веток наследований)?
  10. Что вы знаете об обрабатываемых и не обрабатываемых (checked/unchecked) исключениях?
  11. В чем особенность RuntimeException?
  12. Как написать собственное (“пользовательское”) исключение? Какими мотивами вы будете руководствоваться при выборе типа исключения: checked/unchecked?
  13. Какой оператор позволяет принудительно выбросить исключение?
  14. Есть ли дополнительные условия к методу, который потенциально может выбросить исключение?
  15. Может ли метод main выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?
  16. Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”?
  17. Что вы знаете о OutOfMemoryError?
  18. Что вы знаете о SQLException? К какому типу checked или unchecked оно относится, почему?
  19. Что такое Error? В каком случае используется Error. Приведите пример Error’а.
  20. Какая конструкция используется в Java для обработки исключений?
  21. Предположим, есть блок try-finally. В блоке try возникло исключение и выполнение переместилось в блок finally. В блоке finally тоже возникло исключение. Какое из двух исключений “выпадет” из блока try-finally? Что случится со вторым исключением?
  22. Предположим, есть метод, который может выбросить IOException и FileNotFoundException в какой последовательности должны идти блоки catch? Сколько блоков catch будет выполнено?
Читайте также:  В каких лекарствах содержится магний для чего
к оглавлению

4. Коллекции (перейти в раздел)

  1. Дайте определение понятию “коллекция”.
  2. Назовите преимущества использования коллекций.
  3. Какие данные могут хранить коллекции?
  4. Какова иерархия коллекций?
  5. Что вы знаете о коллекциях типа List?
  6. Что вы знаете о коллекциях типа Set?
  7. Что вы знаете о коллекциях типа Queue?
  8. Что вы знаете о коллекциях типа Map, в чем их принципиальное отличие?
  9. Назовите основные реализации List, Set, Map.
  10. Какие реализации SortedSet вы знаете и в чем их особенность?
  11. В чем отличия/сходства List и Set?
  12. Что разного/общего у классов ArrayList и LinkedList, когда лучше использовать ArrayList, а когда LinkedList?
  13. В каких случаях разумно использовать массив, а не ArrayList?
  14. Чем отличается ArrayList от Vector?
  15. Что вы знаете о реализации классов HashSet и TreeSet?
  16. Чем отличаются HashMap и TreeMap? Как они устроены и работают? Что со временем доступа к объектам, какие зависимости?
  17. Что такое Hashtable, чем она отличается от HashMap? На сегодняшний день она deprecated, как все-таки использовать нужную функциональность?
  18. Что будет, если в Map положить два значения с одинаковым ключом?
  19. Как задается порядок следования объектов в коллекции, как отсортировать коллекцию?
  20. Дайте определение понятию “итератор”.
  21. Какую функциональность представляет класс Collections?
  22. Как получить не модифицируемую коллекцию?
  23. Какие коллекции синхронизированы?
  24. Как получить синхронизированную коллекцию из не синхронизированной?
  25. Как получить коллекцию только для чтения?
  26. Почему Map не наследуется от Collection?
  27. В чем разница между Iterator и Enumeration?
  28. Как реализован цикл foreach?
  29. Почему нет метода iterator.add() чтобы добавить элементы в коллекцию?
  30. Почему в классе iterator нет метода для получения следующего элемента без передвижения курсора?
  31. В чем разница между Iterator и ListIterator?
  32. Какие есть способы перебора всех элементов List?
  33. В чем разница между fail-safe и fail-fast свойствами?
  34. Что делать, чтобы не возникло исключение ConcurrentModificationException?
  35. Что такое стек и очередь, расскажите в чем их отличия?
  36. В чем разница между интерфейсами Comparable и Comparator?
  37. Почему коллекции не наследуют интерфейсы Cloneable и Serializable?
к оглавлению

5. Строки (перейти в раздел)

  1. Какие “строковые” классы вы знаете?
  2. Какие основные свойства “строковых” классов (их особенности)?
  3. Можно ли наследовать строковый тип, почему?
  4. Дайте определение понятию конкатенация строк.
  5. Как преобразовать строку в число?
  6. Как сравнить значение двух строк?
  7. Как перевернуть строку?
  8. Как работает сравнение двух строк?
  9. Как обрезать пробелы в конце строки?
  10. Как заменить символ в строке?
  11. Как получить часть строки?
  12. Дайте определение понятию “пул строк”.
  13. Какой метод позволяет выделить подстроку в строке?
  14. Как разбить строку на подстроки по заданному разделителю?
  15. Какой метод вызывается для преобразования переменной в строку?
  16. Как узнать значение конкретного символа строки, зная его порядковый номер в строке?
  17. Как найти необходимый символ в строке?
  18. Можно ли синхронизировать доступ к строке?
  19. Что делает метод intern()?
  20. Чем отличаются и что общего у классов String, StringBuffer и StringBuilder?
  21. Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?
  22. Почему строка неизменная и финализированная в Java?
  23. Почему массив символов предпочтительнее строки для хранения пароля?
  24. Почему строка является популярным ключом в HashMap в Java?
  25. Напишите метод удаления данного символа из строки.
к оглавлению

6. Потоки ввода/вывода (перейти в раздел)

  1. Какие существуют виды потоков ввода/вывода?
  2. Назовите основные предки потоков ввода/вывода.
  3. Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer?
  4. Что вы знаете о RandomAccessFile?
  5. Какие есть режимы доступа к файлу?
  6. В каких пакетах лежат классы-потоки?
  7. Что вы знаете о классах-надстройках?
  8. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
  9. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
  10. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
  11. Какой класс предназначен для работы с элементами файловой системы (ЭФС)?
  12. Какой символ является разделителем при указании пути к ЭФС?
  13. Как выбрать все ЭФС определенного каталога по критерию (например, с определенным расширением)?
  14. Что вы знаете об интерфейсе FilenameFilter?
  15. Что такое сериализация?
  16. Какие условия “благополучной” сериализации объекта?
  17. Какие классы позволяют архивировать объекты?
к оглавлению

7. Потоки выполнения/многопоточность (перейти в раздел)

  1. Дайте определение понятию “процесс”.
  2. Дайте определение понятию “поток”.
  3. Дайте определение понятию “синхронизация потоков”.
  4. Как взаимодействуют программы, процессы и потоки?
  5. В каких случаях целесообразно создавать несколько потоков?
  6. Что может произойти если два потока будут выполнять один и тот же код в программе?
  7. Что вы знаете о главном потоке программы?
  8. Какие есть способы создания и запуска потоков?
  9. Какой метод запускает поток на выполнение?
  10. Какой метод описывает действие потока во время выполнения?
  11. Когда поток завершает свое выполнение?
  12. Как синхронизировать метод?
  13. Как принудительно остановить поток?
  14. Дайте определение понятию “поток-демон”.
  15. Как создать поток-демон?
  16. Как получить текущий поток?
  17. Дайте определение понятию “монитор”.
  18. Как приостановить выполнение потока?
  19. В каких состояниях может пребывать поток?
  20. Что является монитором при вызове нестатического и статического метода?
  21. Что является монитором при выполнении участка кода метода?
  22. Какие методы позволяют синхронизировать выполнение потоков?
  23. Какой метод переводит поток в режим ожидания?
  24. Какова функциональность методов notify и notifyAll?
  25. Что позволяет сделать метод join?
  26. Каковы условия вызова метода wait/notify?
  27. Дайте определение понятию “взаимная блокировка”.
  28. Чем отличаются методы interrupt, interrupted, isInterrupted?
  29. В каком случае будет выброшено исключение InterruptedException, какие методы могут его выбросить?
  30. Модификаторы volatile и метод yield().
  31. Пакет java.util.concurrent
  32. Есть некоторый метод, который исполняет операцию i++. Переменная i типа int. Предполагается, что код будет исполнятся в многопоточной среде. Следует ли синхронизировать блок?
  33. Что используется в качестве mutex, если метод объявлен static synchronized? Можно ли создавать новые экземпляры класса, пока выполняется static synchronized метод?
  34. Предположим в методе run возник RuntimeException, который не был пойман. Что случится с потоком? Есть ли способ узнать о том, что Exception произошел (не заключая все тело run в блок try-catch)? Есть ли способ восстановить работу потока после того как это произошло?
  35. Какие стандартные инструменты Java вы бы использовали для реализации пула потоков?
  36. Что такое ThreadGroup и зачем он нужен?
  37. Что такое ThreadPool и зачем он нужен?
  38. Что такое ThreadPoolExecutor и зачем он нужен?
  39. Что такое «атомарные типы» в Java?
  40. Зачем нужен класс ThreadLocal?
  41. Что такое Executor?
  42. Что такое ExecutorService?
  43. Зачем нужен ScheduledExecutorService?
к оглавлению
Этот список из 300+ вопросов (без ответов) был найден на сайте https://becomejavasenior.com/ . Там же указаны другие авторы.

208

121317 Total Views 11 Views Today

Views:
82 056

Источник