Файл: Вопросы к ревью 1.odt

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 16

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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


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


1 байт


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


на пальцах
3. Какие классы-обертки знаешь?


boolean

Boolean

byte

Byte

char

Character

double

Double

float

Float

int

Integer

long

Long

short

Short



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


Пул строк (string pool) - это механизм, который используется для повторного использования строковых объектов в Java. При создании строки в Java, если она уже существует в пуле строк, то вместо создания нового объекта будет возвращен ссылка на уже существующий объект в пуле. Это позволяет сэкономить память и ускорить выполнение программы, так как не создаются дубликаты строк.
5. Разница между String, StringBuilder и StringBuffer?


  1. String - это неизменяемый (immutable) класс, то есть после создания экземпляра этого класса его значение нельзя изменить. Это означает, что каждый раз, когда выполняется какая-либо операция со строкой, создается новый объект строки. Использование большого количества строк в программе может привести к значительному снижению производительности.

  2. StringBuilder - это изменяемый (mutable) класс, который используется для создания изменяемых строк. Это означает, что объект StringBuilder может изменять свою длину и содержимое без создания новых объектов. Использование StringBuilder более эффективно, чем String, если необходимо многократно изменять значение строки в программе.

  3. StringBuffer - это также изменяемый (mutable) класс, но он является потокобезопасным (thread-safe) и синхронизированным (synchronized). Это означает, что он может использоваться в многопоточных приложениях безопасно, но его использование может снижать производительность при работе в однопоточных приложениях. Если нет необходимости в потокобезопасности, то лучше использовать StringBuilder, т.к. он работает быстрее, чем StringBuffer.

В целом, выбор между этими тремя классами зависит от требований вашей программы и специфики задачи. Если вы работаете со строками, которые не нужно изменять, то лучше использовать String.
Если вам нужно изменять строки, то лучше использовать StringBuilder, если ваша программа потокобезопасна, то можно использовать StringBuffer.

6. Какая максимальная длина массива?
Аппаратные ограничения - максимальная длина массива зависит от аппаратных ограничений компьютера, на котором выполняется программа.

  1. Ограничения оперативной памяти - создание массива требует выделения определенного количества памяти. Если память недостаточна, то массив нельзя создать. Максимальный размер массива зависит от доступной оперативной памяти.

  2. Ограничения JVM - JVM (Java Virtual Machine) устанавливает свои ограничения на размер массива. Эти ограничения могут быть разными для разных реализаций JVM и могут изменяться в зависимости от версии Java.

В целом, максимальный размер массива в Java может быть достаточно большим, но может быть ограничен как аппаратными ограничениями, так и ограничениями памяти и JVM. В Java нет жестко заданного максимального размера массива, однако для создания массивов большого размера рекомендуется использовать специальные библиотеки для работы с большими данными, такие как Apache Spark, Hadoop или Cassandra.

7. Почему 0.1 + 0.7! = 0.8?

В языке программирования Java числа типа float и double представляются в формате с плавающей запятой (floating point), который может приводить к неточностям в некоторых арифметических операциях. Это связано с тем, что некоторые десятичные дроби не могут быть точно представлены в двоичной системе счисления, используемой для хранения чисел в компьютере.

В частности, в случае 0.1 + 0.7, оба числа имеют периодическое двоичное представление, что приводит к тому, что при сложении этих чисел может произойти потеря точности. В результате, результат операции 0.1 + 0.7 может быть не точно равен 0.8, а быть чуть меньше или больше этого значения.

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

8. При сложении char short какой результирующий тип получим?
При сложении char и short, результатом будет значение типа int.

Это происходит из-за того, что в Java есть так называемые "правила продвижения типов" (type promotion rules), которые определяют, какие типы будут продвинуты до более крупного типа, чтобы выполнить арифметическую операцию.



В данном случае, char и short считаются "узкими" типами (narrow types), а int считается "широким" типом (wide type). Поэтому, при выполнении операции сложения, char и short будут автоматически продвинуты до типа int, чтобы выполнить арифметическую операцию.

9. Отличие сокращенных логических операторов и полных
В языке программирования Java существуют два типа логических операторов: полные (&&, ||) и сокращенные (&, |).

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

10. Максимальная размерность многомерного массива
Спецификация виртуальной машины Java устанавливает ограничение размерности не более 255:

An array type descriptor is valid only if it represents 255 or fewer dimensions.
11. Все примитивные типы и их размеры



  1. byte - 1 байт, знаковый тип данных, хранит значения от -128 до 127.

  2. boolean - 1 байт, логический тип данных, может хранить только true или false.

  3. char - 2 байта, беззнаковый тип данных, хранит символы Unicode.

  4. short - 2 байта, знаковый тип данных, хранит значения от -32 768 до 32 767.

  5. int - 4 байта, знаковый тип данных, хранит значения от -2 147 483 648 до 2 147 483 647.

  6. float - 4 байта, тип данных с плавающей точкой, хранит дробные значения в диапазоне от 1.4e-45 до 3.4e+38.

  7. long - 8 байт, знаковый тип данных, хранит значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.

  8. double - 8 байт, тип данных с плавающей точкой, хранит дробные значения в диапазоне от 4.9e-324 до 1.8e+308.


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

Например, если переменная типа int приводится к типу short, которому требуется меньше памяти, то могут произойти потери данных, если значение переменной int находится вне диапазона значений переменной short. Аналогично, если переменная типа double приводится к типу float, то может произойти потеря точности, так как тип float хранит меньшее количество знаков после запятой, чем тип double.


13. Какие данные мы рискуем потерять при явных приведениях?
При явном приведении типов в Java мы можем потерять данные, если значение переменной, хранящейся в одном типе данных, приводится к другому типу данных, которому требуется меньше памяти. В этом случае мы рискуем потерять старшие биты, которые не умещаются в младшие биты нового типа.

Например, если переменная типа long приводится к типу int, то мы можем потерять старшие 32 бита значения, так как тип int хранит только 32 бита, в то время как тип long хранит 64 бита. Аналогично, если переменная типа float приводится к типу int, то мы можем потерять дробную часть значения.

14. Что такое Autoboxing, unboxing и когда они происходят автоматически?
Autoboxing и unboxing - это механизмы, которые позволяют автоматически преобразовывать между примитивными типами данных и их соответствующими классами оболочек (wrapper classes) в Java.
15. Что такое continue и break? Расширенная версия?
continue и break - это ключевые слова в языке программирования Java, которые используются для управления выполнением циклов и условных операторов.

16. Чем отличается метод от функции?
Функция это самостоятельная сущность. Метод это часть класса(объекта) и без него не употребляется.

В Java термин "метод" используется для обозначения функции, которая определена внутри класса.

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


  • В цикле for мы можем изменять значение переменной счетчика, что может быть полезно в некоторых сценариях. В цикле for each мы не можем изменять значение элементов массива или коллекции.

  • Цикл for each может использоваться только для перебора элементов массивов или коллекций. Цикл for может использоваться для выполнения любых действий, которые необходимы в определенном числе итераций.

  • for цикл более эффективен, когда мы хотим выполнить операции с индексами массива или коллекции. for each цикл удобнее использовать, когда нам не нужен доступ к индексам и мы хотим просто выполнить некоторый код для каждого элемента.




19. Инкременты, декременты, отличия.
Бывают префиксные и постфиксные, различие только в вычислениях

a = b -x++

x измениться после выполнения присвоения

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

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

Преимущество изящность решения, например факториалов
21. Циклы

  • циклы for;

  • циклы while;

  • циклы do… while;

  • и циклы foreach.


22. Условные операторы
В языке Java используются следующие условные конструкции: if..else и switch..case

if бывает тернарный

if условие ? То : Иначе
23. Неизменяемые типы
В Java существуют неизменяемые типы данных, которые нельзя изменять после создания. Неизменяемость означает, что значения таких типов не могут быть изменены, после того как они были созданы. Вот некоторые из таких типов:

  1. String - строки в Java являются неизменяемыми объектами. Это означает, что вы не можете изменить содержимое строки после ее создания.

  2. Integer, Double, Boolean и другие обертки примитивных типов данных - эти типы данных также являются неизменяемыми, и вы не можете изменить их значения после их создания.