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

да. Вопросы к ревью 1 Какая размерность у boolean


Скачать 153.74 Kb.
НазваниеВопросы к ревью 1 Какая размерность у boolean
Дата27.09.2022
Размер153.74 Kb.
Формат файлаdocx
Имя файлаNo1 (2).docx
ТипДокументы
#700904

Вопросы к ревью №1


  1. Какая размерность у boolean?


8 (при использовании в массивах), 32 (при использовании не в массивах). Но на самом деле Boolean будет занимать больше памяти и это будет зависеть от конкретной реализации JVM. Обычно на это тратится столько же, сколько на int.


  1. Переведи число X (любое) из десятичной в двоичную, и число Y (любое) из двоичной в десятичную





  1. Какие классы-обертки знаешь?



Обертка — это специальный класс, который хранит внутри себя значение примитива(объекты классов-оберток являются неизменяемыми (Immutable)).
Нужны для реализации дженериков (в коллекциях).

______




  1. Расскажи про pool строк и pool примитивов



StringPool. Это такое место, где хранятся строки, можно назвать это кэшем строк.Строки сравниваются быстрее, чем через equals(но так делать не надо). == сравнивает по ссылке, а кешированные строки находятся в одном месте.

При кешировании Integer.Целочисленное кэширование работает только при автоупаковке. При создании целочисленного объекта с помощью конструктора кэширование не работает. Автоупаковка (autoboxing) – это автоматическое преобразование, выполненное компилятором Java из примитива в соответствующий ему тип класса оболочки Java. 

При создании в пуле идет поиск строки:
-если НЕ находит - создается строка, возвращается ссылка
-если находит - возвращает ссылку найденной строки.

При этом использование оператора new заставляет класс String создать новый объект, даже если такая строка уже есть в пуле. После этого можем использовать метод intern(), чтобы поместить этот объект в пул строк.

Пул примитивов (пул интов) - Integer хранится в heap, но ссылки на объекты хранятся в stack.


  1. Разница между String, StringBuilder и StringBuffer?


String - неизменяемый, потокобезопасный;
StringBuffer - изменяемый, потокобезопасный (используется в многопоточке);
StringBuilder - изменяемый, потоконебезопасный.
______________


Класс String – последовательность символов. Он неизменяемый(Immutableи finalкласс). Объекты любых классов можно привести к строковому представлению через toString.

Для изменения объектов String есть класс StringBuilder (изменяемый). Объект класса StringBuffer может содержать в себе определенный набор символов, длину и значение которого можно изменить через вызов определенных методов.

Конкатенация строк через StringBuilderв Java выполняется с помощью метода append (может принимать в себя практически любой тип данных).appendвозвращает объект, на котором был вызван.
6. Какая максимальная длина массива?

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

Максимальный размер массива ограничивается памятью jvm. Но есть ограничение на число индексов (элементов): Integer.MAX_VALUE-2 (?) –в jvmhotspot–примерно 2 млрд записей.
7. Почему 0.1 + 0.7! = 0.8?

Подобно тому, как в десятичной системе нельзя точно представить результат деления 1/3, так и в двоичной системе невозможно точно представить 1/10. Если вам нужно исключить ошибки округления, следует использовать класс BigDecimal
8. При сложении char short какой результирующий тип получим?

byte не преобразуется автоматически (не явно) в тип char, хотя тип byte имеет ширину 8 бит, а char 16, тоже самое касается и преобразования типа short в char. Это происходит потому, что byte и short - знаковые типы данных, а char - беззнаковый. Поэтому в данном случае требуется использовать явное приведение типов.

____

Любые арифметические операции над типом short на выходе дают int (результат автоматически кастуется в int). В случае же с x1 += x2 по факту происходит x1 = (short) (x1 + x2)

При вычислении выражения (a @ b) аргументы a и b преобразуются в числа, имеющие одинаковый тип:

  • если одно из чисел double, то в double

  • иначе, если одно из чисел float, то в float

  • иначе, если одно из чисел long, то в long

  • иначе, оба числа преобразуются в int

То есть, все целочисленные литералы в выражениях, а так же типы byteshort и char расширяются до int.




9. Отличие сокращенных логических операторов и полных

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



_____________

Кроме стандартных операторов AND (&) и OR (|) существуют сокращённые операторы && и ||

В отличие от двойных, одиночные & и | называются операторами полной схемы вычислений. Значения их операндов могут быть как только булевыми, так и только целочисленными (вместе с оператором ^ они используются в побитовых операциях).

В чём разница

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

То есть иногда результат выражения однозначно определён уже по первому операнду:

  1. Если первый операнд && равен false, то второй не вычисляется, так как уже понятно, что результат всего выражения будет false.

  2. Если первый операнд || равен true, то второй не вычисляется, так как уже понятно, что || вернёт true.

&& и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях.
10. Максимальная размерность многомерного массива

Спецификация виртуальной машины Java устанавливает ограничение размерности не более 255 (ограничение по памяти). Т.е. объявление массива с размерностью 256 вызовет ошибку.

11. Все примитивные типы и их размеры


12. Потери при неявных приведениях

Неявное приведение может произойти при условии, что типы совместимы, и размер “принимающего” типа больше чем у того, который преобразуется (так называемое “преобразование с расширением”

Явное приведение – сужение - применяется операция преобразования типов. Обычно это сужающие преобразования от типа с большей разрядностью к типу с меньшей разрядностью:



long a = 4;

int b = (int) a

Нужно указать тип явно.

У дробных float и double при сужении к целочисленному типу будет отброшена дробная часть.


13. Какие данные мы рискуем потерять при явных приведениях?

При повышении типа byte>short; short>int; int>long; float>double; char>int информация не потеряется.

При сужении возможна потеря информации.
14. Что такое Autoboxing, unboxing и когда они происходят автоматически?

Java автоматически делает преобразования между примитивными типами и их обертками. Процесс преобразования примитивных типов в ссылочные (int->Integer) называется autoboxing (автоупаковкой), а обратный ему — unboxing (автораспаковкой).

15. Что такое continue и break? Расширенная версия?

К операторам перехода в java относят три оператора: break, continue и return.
break; – выход из цикла (не затрагивает внешний цикл).
continue; – заканчивает выполнение кода в этом теле цикла. Переход к следующей итерации.


Расширенный break – это break метка. Метка - это как правило любое подходящее из пространства имен java имя, предваряющее блок кода. При этом после применения этом блоке кода break с меткой приведет к тому, что код продолжит выполняться с места после блока с соответствующей меткой.
firstBlock:{

secondBlock:{

thirdBlock:{

System.out.println("We will see it always");

if(bool) {

breaksecondBlock;

}
16. Чем отличается метод от функции?

Метод - это функция или процедура, принадлежащая какому-то классу или объекту.Функция - фрагмент программного кода (подпрограмма), к которому можно обратиться из другого места программы.

17. Что такое массив и какие на нём есть ограничения?

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

Максимальный размер массива ограничивается памятью jvm. Но есть ограничение на число индексов (элементов): Integer.MAX_VALUE-2 (?) –в jvm hotspot–примерно 2 млрд записей.

18. Отличия for от for each

For-each — это разновидность цикла for, которая используется, когда нужно обработать все элементы массива или коллекции (пройтись по каждому элемементу).
Cчётчик в такой конструкции не применяется, итерационная переменная перебирает элементы массива или коллекции, а не значения индекса.

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




19. Инкременты, декременты, отличия.

Инкремент – увеличение п. на единицу, декремент – уменьшение.

Если ++ стоит до п., то оператор вернет знач-е после изменения, а если ++ стоит после п., то вернет значение до изменения.

20. Что такое рекурсия? Недостатки и преимущества?

Рекурсия – многократный вызов метода в теле этого же метода для перехода к следующему шагу рекурсии. Часто применяется при расчете факториала (есть соглашение, что 0! = 1), или при вызове файла с поддиректориями (чтобы их обойти).
Недостатки – рекурсия выполняется медленнее, чем цикл с итерациями, и занимает больше места в стеке (все параметры копируются в стек). Есть риск переполнения стека (при бесконечной рекурсии). Требует больше памяти.

Преимущества – простой наглядный алгоритм для обхода древовидных структур, замена большого числа вложенных циклов. Алгоритм легче читается (человеком).

21. Циклы

В Java используются циклы

  • for,

  • while,

  • do-while

do-while всегда выполнится хотя бы один раз, т.к. проверка идет после тела цикла.
22. Условные операторы

Условные операторы (if, if-else) реализуют нелинейную логику выполнения программы (в зависимости от условий).
23. Неизменяемые типы
String и все классы – обертки. От них невозможно наследоваться.


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