Главная страница

Подготовка к ревью на junior java dev. Книга Уорбэртон Функциональное программирование в массы java8


Скачать 483.96 Kb.
НазваниеКнига Уорбэртон Функциональное программирование в массы java8
АнкорПодготовка к ревью на junior java dev
Дата19.04.2022
Размер483.96 Kb.
Формат файлаdocx
Имя файлаreview (q1212).docx
ТипКнига
#484853
страница3 из 7
1   2   3   4   5   6   7

Ревью: Обработка ошибок, исключения, отладка

4х видео про исключения от Алишева на ютубе (https://www.youtube.com/watch?v=DElNhj71YCk&t=96s),

Источник на javastudy(ответы на половину вопросов) - https://javastudy.ru/interview/exceptions/

Смотреть только тему исключений - https://jsehelper.blogspot.com/2016/01/java-core-3.html

Статья Головача на тему исключений - https://habr.com/ru/company/golovachcourses/blog/225585/

Видео по теме исключений: https://www.youtube.com/watch?v=ZspkReG8L2E&ab_channel=Followthewhiterabbit

https://www.youtube.com/watch?v=KLAf5EEdZ-s

https://www.youtube.com/watch?v=mLpMtc62530&ab_channel=%D0%A3%D1%80%D0%BE%D0%BA%D0%B8Java

https://www.youtube.com/watch?v=edlQcZpxfwo&ab_channel=%D0%93%D0%BE%D1%88%D0%B0%D0%94%D1%83%D0%B4%D0%B0%D1%80%D1%8C

https://www.youtube.com/watch?v=e1Balqbin84&ab_channel=%D0%A3%D1%80%D0%BE%D0%BA%D0%B8Java

https://www.youtube.com/watch?v=LzwZT7Yko04&ab_channel=%D0%98%D0%B7%D1%83%D1%87%D0%B0%D0%B5%D0%BCJava

https://www.youtube.com/watch?v=N4fmELeXw5I&ab_channel=%D0%98%D0%B7%D1%83%D1%87%D0%B0%D0%B5%D0%BCJava

https://www.youtube.com/watch?v=mLpMtc62530&ab_channel=%D0%A3%D1%80%D0%BE%D0%BA%D0%B8Java

https://www.youtube.com/watch?v=KLAf5EEdZ-s&ab_channel=Followthewhiterabbit

https://habr.com/ru/company/golovachcourses/blog/225585/

Список вопросов, которые спрашивают на ревью:

Иерархия исключений? – Object – Throwable – Exception/Error – Exception (IOException/RunTimeException)

Чем отличаются исключения от обычных классов? - Классы-ошибки, расширяющие класс Error, свидетельствуют о возникновении сложных ситуаций в виртуальной машине Java. ... Имена классов-ошибок, по соглашению, заканчиваются словом Error. Классы-исключения, расширяющие класс Exception, отмечают возникновение обычной нештатной ситуации, которую можно и даже нужно обработать.

Все ключевые слова и всё что с ними связано? – Try/Catch/Fynally/Throw/throws

Всё исключения и как генерировать различные виды исключений? – throw new ();

Как создать, выбросить, поймать свое исключение? – создать свой класс и наследоваться от Exception/RunTimeException в зависимости от того, какую ошибку нужно обработать.

Где возможно вызывать исключения? – в классе, методе, в любом блоке try-catch-finally

Конструкция try-finally? - В конструкции Try-Finally, инструкция Finally гарантированно выполнится, абсолютно независимо оттого, что произойдет в предложении Try. Однако, предложение Finally фактически не обрабатывает никаких исключений

Можно ли обрабатывать разные исключения в одном блоке catch? – можно через знак | (прямая черта)

Обязателен ли блок finally? А catch? Когда будет выполнен finally? – конструкция может быть как try/catch так и try/finally (т.е. без catch или finally, но что-то одно обязательно должно быть). Finally будет выполнен всегда, за исключением редких случаев.

Когда не будет выполнен finally(4 случая)? –

Если упала JVM,

Бесконеччный цикл в JVM (в блоке try/catch).

Была вызвана команда System.exit,

Еесли это поток демон, все не-демон потоки завершились, то он завершится до finally

Будет ли выполнен finally при Error? – да, при ошибке типа Error блок finally также будет выполнен

Разница try catch и if Какой return вернется? Из try или finally? – если оператор return написан и в try и в finally, то выполнится return в finally

Что если в конструкции try finally вылетело исключение сначала в try а потом в finally? Какое исключение вылетит? Что будет с другим? – в случае если исключение вылетело и в try и в finally, то вылетит то, исключение, которое случилось в finally (как и с оператором return). Другое исключение оно просто «проглотит», если не было блока catch.

Расскажи про информацию, которая находится внутри исключения? Как с ней работать? –

Исключение содержит в себе stacktrace(стектрейс вызовов), т.е. последовательность вызванных функций, а также номер строки, на которой возникла ошибка.

Что возвращает getStackTrace()? – возвращает массив StackTraceElement[] в котором содержатся элементы трассировки стека

Какое правило должно соблюдаться при использовании нескольких блоков catch (с одним try)? – от меньшего к большему. Первыми должны ловиться наименьшие в иерархии исключения. Иначе будут «недостижимые» исключения, которые никогда не будут выполнены программой.

Какое правило должно соблюдаться при попытке поймать несколько исключений в одном catch? – если мы ловим несколько исключений, одно из которых является родителем другого, то мы должны оставить только родителя, иначе компилятор будет ругаться. Исключения прописываются через разделитель |. Переменная объекта ex (Exception ex) является final

Зачем создавать свой класс и наследовать его от Exception? – для создания СОБСТВЕННЫХ проверяемых исключительных ситуаций, которые не предусмотрены JVM или компилятором и последующей обработки этих ситуаций

Что такое ошибка, а что такое исключительная ситуация? – исключительная ситуация – ситуация которую мы можем предсказать и обработать. Ошибка возникает на уровне JVM и не может быть обработана программистом (закончилась память в компьютере или переполнен стек – и взять её неоткуда, поэтому и обрабатывать смысла нет)

Что нужно делать программисту, если в коде происходит деление на ноль? – это ошибка кода, которую программист должен убрать. Или убрать деление на 0 или добавить проверочное условие.

От каких классов Throwable и его подклассов нельзя наследоваться? – технически от класса Error наследоваться не принято, т.к. это ошибки JVM (серьезные ошибки, которые программист итак обработать не может)

Какую информацию можно получить из StackTraceElement? – актуальную. информация о текущем состоянии «стека вызовов функций» Когда одна функция вызывает другую, Java-машина помещает в этот стек новый элемент StackTraceElement. Когда функция завершается этот элемент удаляется из стека.

Можно ли так написать try { throw new Object(); }? – это будет ошибкой, т.к. Object не является исключением, хотя и является родителем Throwable. Вся работа с исключениями начинается с класса Throwable

В чём разница между проверяемыми исключениями и непроверяемыми? В чём разница с точки зрения синтаксиса и идеологическая при использовании? – checked(проверяемые исключение) мы должны или обработать с помощью try/catch или пробросить дальше добавлением в сигнатуру throws. Непроверямые ни обрабатывать ни делать что-либо ещё не нужно.

Можно ловить и checked и unchecked, но ловить unchecked не нужно. Обрабатывать нужно только checked исключения. Unchecked исключения RunTimeException это больше ошибка кода (программиста), которую нужно исправить

Какое назначение класса Throwable? - Класс Throwable есть базовым для всех стандартных классов исключений Java. Этот класс предоставляет ряд методов, которые можно использовать или переопределять в собственных классах обработки исключений. Эти классы должны быть унаследованы от класса Exception, который унаследован от класса Throwable 

Методы класса Throwable? –

getCause()
getMessage()

addSuppressed()

getSuppressed()

printStackTrace()
Что происходит если не обработать исключение? - Если не было предпринято дополнительных действий, то поток, в котором было выброшено и не обработано исключение, остановится, и распечатает стектрейс в вывод System

Что такое подавленные исключения? - Подавленные исключения -это дополнительные исключения, которые возникают в операторе try-with-resources ( введенном в Java 7 ) при закрытии ресурсов AutoCloseable. Поскольку при закрытии ресурсов AutoCloseable может возникнуть несколько исключений, дополнительные исключения присоединяются к основному исключению как подавленные исключения .

Как достать подавленное исключение? - Вы можете получить подавленные исключения, вызвав метод Throwable.getSuppressed(Throwable e) из исключения, созданного блоком try.

Что такое ресурс в конструкции try-with-resources? - любой объект, класс которого реализует интерфейс java.lang.AutoCloseable или java.io.Closable.

Что если исключение вылетело сначала в try, а потом в close в конструкции try-with-recources? Какое исключение вылетит? Что будет с другим? - Если исключение будет выброшено в основном коде и в методе close(), то приоритетнее будет первое исключение, а второе исключение будет подавлено, но информация о нем сохранится (с помощью метода Throwable.addSuppressed(Throwable exception), который вызывается неявно Java компилятором

Когда происходит закрытие ресурса в конструкции try-with-resources если в try возникло исключение: до перехода в catch или после того как catch отработает? – сначала вызывается метод close(), а потом уже обрабатывает исключение (catch);

Какие есть уровни логирования и для чего они нужны? – Уровни логирования – это степень серьезности наших сообщений

  • SEVERE (ошибка-ужас-ужас) - юбая ошибка / исключение, которое является или может быть критическим

  • WARNING (предупреждение) - любое сообщение, которое может предупредить нас о потенциальных проблемах, например когда пользователь пытался войти в систему с неправильными учетными данными - что может указывать на атаку, если это происходит часто или в короткие периоды времени

  • INFO (информационное сообщение) – о нормальном ходе исполнения программы

  • CONFIG – логгирование конфигурационных параметров

  • FINE – совсем детальное логгирование о действиях программы

  • FINER – совсем детальное логгирование о действиях программы

  • FINEST – совсем детальное логгирование о действиях программы

В логгере есть ещё Форматтер (Formatter), Хэндлер (Handler), setLevel.

Метод log() или все методы с названием уровней логгирования: (метод warning(), info(), config() и т.д.), getLogger();

Логгирование позволяет ответить на вопросы, что происходило, когда и при каких обстоятельствах. Без логов сложно понять, из-за чего появляется ошибка, если она возникает периодически и только при определенных условиях

Обязательно ли передавать в метод getLogger() имя класса? Почему так принято? -  

Это один из используемых контрактов (соглашений) в языке программирования.

На каждый класс создаётся только один логгер.

Логгеры выстраиваются в иерархию соответственно именам

У каждого класса есть своё индивидуальное имя и можно задавать настройки логгирования вплоть до класса.

Причины, по которой многие люди используют тип класса:

Прост в использовании. Вам не нужно беспокоиться о дублировании имен

Легко проверить класс ведения журнала, так как имя журнала будет отображаться в файле журнала

Когда вы распространяете свой класс, люди могут захотеть перенаправить ведение журнала из вашего класса в конкретный файл или в другое место

Сообщения каких уровней мы увидим, задав уровень INFO? – все, что выше INFO – Info/ Warning, Severe

Как Java понимает какой уровень главнее при установке .setLevel(). по наименьшему уровню приоритета. Чем более свободней левел, тем больший приоритет для него.

Какую информацию можно получить из StackTraceElement?

У элемента тип StackTraceElement есть следующие методы и как следствие можно получить следующие данные:

getClassName() получить имя класса

getFileName() получить имя файла

getLineNumber() получить номер строки

getMethodName() получить имя метода

hashCode() возвращает хэшкод объекта

isNativeMethod()

toString() возвращает строковое представление объекта

Чем отличается close от autoclosable?

в autoclosable не throws IOException, а расширен до Exception.

Ревью: Ввод-вывод, доступ к файловой системе

  1. Какие существуют виды потоков ввода/вывода? - Разделяют два вида потоков ввода/вывода: байтовые и символьные.

Система ввода/вывода: http://developer.alexanderklimov.ru/android/java/io.php

  1. Назовите основные предки потоков ввода/вывода - Байтовые: java.io.InputStream, java.io.OutputStream; Символьные: java.io.Reader, java.io.Writer;

  2. Что общего и чем отличаются следующие потоки: InputStream, OutputStream, Reader, Writer? –

Базовый класс InputStream представляет классы, которые получают данные из различных источников:- массив байтов- строка (String)- файл- канал (pipe): данные помещаются с одного конца и извлекаются с другого- последовательность различных потоков, которые можно объединить в одном потоке- другие источники (например, подключение к интернету).

Класс OutputStream - это абстрактный класс, определяющий потоковый байтовый вывод. В этой категории находятся классы, определяющие, куда направляются ваши данные: в массив байтов (но не напрямую в String; предполагается что вы сможете создать их из массива байтов), в файл или канал.
Символьные потоки имеют два основных абстрактных класса Reader и Writer, управляющие потоками символов Unicode.

Класс Reader - абстрактный класс, определяющий символьный потоковый ввод.

Класс Writer - абстрактный класс, определяющий символьный потоковый вывод. В случае ошибок все методы класса передают исключение IOException.

  1. Что вы знаете о RandomAccessFile? - Класс RandomAccessFile наследуется напрямую от Object и не наследуется от вышеприведенных базовых классов ввода\вывода. Предназначен для работы с файлами, поддерживая произвольный доступ к их содержимому.

Работа с классом RandomAccessFile напоминает использование совмещенных в одном классе потоков DataInputStream и DataOutputStream (они реализуют те же интерфейсы DataInput и DataOutput). Кроме того, метод seek() позволяет переместиться к определенной позиции и изменить хранящееся там значение.
При использовании RandomAccessFile необходимо знать структуру файла. Класс RandomAccessFile содержит методы для чтения и записи примитивов и строк UTF-8.

  1. Какие есть режимы доступа к файлу? - RandomAccessFile может открываться в режиме чтения ("r") или чтения/записи ("rw"). Также есть режим "rws", когда файл открывается для операций чтения-записи и каждое изменение данных файла немедленно записывается на физическое устройство.

  2. 1   2   3   4   5   6   7


написать администратору сайта