Java Types Flashcards

1
Q

Назовите Целочисленные типы

A

byte, short, char, int, long

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Назовите типы с плавающей точкой

A

float, double

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Какие типы данных в Java вы знаете

A

Целочисленные типы, типы с плавающей точкой, логический(boolean)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

максимальное значение в типе byte

A

127

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

максимальное значение в типе short

A

32к

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

максимальное значение в типе char

A

1 символ

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

максимальное значение в типе int

A

2млрд

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

максимальное значение в типе long

A

19-ти знач.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

отличие float от double

A

float в 2 раза меньше, double точнее

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

“строковые” классы

A

String/StringBuffer /StringBuilder

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

String

A

бъект, что представляет последовательность символов. Для создания и манипулирования строками Java платформа предоставляет общедоступный финальный (не может иметь подклассов) класс java.lang.String. Данный класс является неизменяемым (immutable) — созданный объект класса String не может быть изменен.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

StringBuffer

A

Строки являются неизменными, поэтому частая их модификация приводит к созданию новых объектов, что в свою очередь расходует драгоценную память. Для решения этой проблемы был создан класс java.lang.StringBuffer, который позволяет более эффективно работать над модификацией строки. Класс является mutable, то есть изменяемым — используйте его, если Вы хотите изменять содержимое строки. StringBuffer может быть использован в многопоточных средах, так как все необходимые методы являются синхронизированными.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

StringBuilder

A

ласс, что представляет изменяемую последовательность символов. Класс был введен в Java 5 и имеет полностью идентичный API с StringBuffer. Единственное отличие — StringBuilder не синхронизирован. Это означает, что его использование в многопоточных средах нежелательно. Следовательно, если вы работаете с многопоточностью, Вам идеально подходитStringBuffer, иначе используйте StringBuilder, который работает намного быстрее в большинстве реализаций.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Можно ли наследовать строковый тип?

A

Классы объявлены final, поэтому наследоваться не получится.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

конкатенация строк.

A

объединение строк

stringBuffer.append(“DDD”).append(“EEE”);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

преобразовать строку в число?

A

Integer.valueOf(x);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

сравнить значение двух строк?

A

equals();

18
Q

обрезать пробелы в конце строки?

A

s.trim()

19
Q

заменить символ в строке?

A

replace()

20
Q

получить часть строки?

A

substring()

21
Q

пул строк

A

Пул строк – это набор строк, который хранится в памяти Java heap. Мы знаем, что String это специальный класс в Java, и мы можем создавать объекты этого класса, используя оператор new точно так же, как и создавать объекты, предоставляя значение строки в двойных кавычках.
Диаграмма ниже объясняет, как пул строк размещается в памяти Java heap и что происходит, когда мы используем различные способы создания строк. Пул строк помогает экономить большой объем памяти, но с другой стороны создание строки занимает больше времени. Когда мы используем двойные кавычки для создания строки, сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка.
Тем не менее, когда мы используем оператор new, мы принуждаем класс String создать новый объект строки, а затем мы можем использовать метод intern() для того, чтобы поместить строку в пул, или получить из пула ссылку на другой объект String с таким же значением.
String s1 = “Cat”;
String s2 = “Cat” //будут одинаковые сылки;
String s3 = new String(“Cat”); ///ссылка будет отличаться

22
Q

разбить строку на подстроки по заданному разделителю?

A

split()

23
Q

Можно ли синхронизировать доступ к строке?

A

String сам по себе потокобезопасный класс. Если мы работаем с изменяемыми строками, то нужно использовать StringBuffer.

24
Q

intern()?

A

Когда метод intern() вызван, если пул строк уже содержит строку, эквивалентную к нашему объекту, что подтверждается методом equals(Object), тогда возвращается ссылка на строку из пула. В противном случае объект строки добавляется в пул и ссылка на этот объект возвращается.

25
Q

Как сравнить String и StringBuffer?

A

Привести их к одному типу и сравнить.

26
Q

Почему строка неизменная и финализированная в Java?

A

Строковый пул возможен только потому, что строка неизменна в Java, таким образом виртуальная машина сохраняет много места в памяти(heap space), поскольку разные строковые переменные указывают на одну переменную в пуле. Если бы строка не была неизмененяемой, тогда бы интернирование строк не было бы возможным, потому что если какая-либо переменная изменит значение, это отразится также и на остальных переменных, ссылающихся на эту строку.
Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае любой хакер может изменить значение ссылки и вызвать проблемы в безопасности приложения.
Так как строка неизменная, она безопасна для многопоточности и один экземпляр строки может быть совместно использован различными нитями. Это позволяет избежать синхронизации для потокобезопасности, строки полностью потокобезопасны.
Строки используются в Java classloader и неизменность обеспечивает правильность загрузки класса при помощи Classloader. К примеру, задумайтесь об экземпляре класса, когда вы пытаетесь загрузить java.sql.Connection класс, но значение ссылки изменено на myhacked.Connection класс, который может осуществить нежелательные вещи с вашей базой данных.
Поскольку строка неизменная, её hashcode кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в Map и его обработка будет быстрее, чем других ключей HashMap. Это причина, почему строка наиболее часто используемый объект в качестве ключа HashMap.

27
Q

Почему массив символов предпочтительнее строки для хранения пароля?

A

Строка неизменяемая в Java и хранится в пуле строк. С тех пор, как она была создана, она остается в пуле, пока не будет удалена сборщиком мусора, поэтому, когда мы думаем, что закончили работу с паролем, он остается доступным в памяти некоторое время, и нет способа избежать этого. Это риск безопасности, поскольку кто-либо, имеющий доступ к дампу памяти сможет найти пароль в виде чистого текста.
Если мы используем массив символов для хранения пароля, мы можем очистить его после того, как закончим с ним работать. Таким образом, мы можем контролировать, как долго он находится в памяти, что позволяет избежать риска безопасности, свойственного строке.

28
Q

Почему строка является популярным ключом в HashMap в Java?

A

Поскольку строки неизменны, их хэшкод кэшируется в момент создания, и не требует повторного пересчета. Это делает строки отличным кандидатом для ключа в Map и они обрабатываются быстрее, чем другие объекты-ключи HashMap. Вот почему строки преимущественно используются в качестве ключей HashMap.

29
Q

Какие существуют виды потоков ввода/вывода?

A

байтовые(java.io.InputStream, java.io.OutputStream) и символьные.( java.io.Reader, java.io.Writer;)

30
Q

InputStream

A

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

31
Q

OutputStream

A

Класс OutputStream — класс для вывода данных: в массив байтов, в файл или канал.

32
Q

абстрактные классы Reader и Writer,

A

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

33
Q

RandomAccessFile

A

Предназначен для работы с файлами, поддерживая произвольный доступ к их содержимому, как чтения так и записи

При использовании RandomAccessFile необходимо знать структуру файла. Класс RandomAccessFile содержит методы для чтения и записи примитивов и строк UTF-8.

метод seek() позволяет переместиться к определенной позиции и изменить хранящееся там значение.

Класс RandomAccessFile наследуется напрямую от Object и не наследуется от вышеприведенных базовых классов ввода\вывода.

34
Q

режимы доступа к файлу В RandomAccessFile

A

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

35
Q

Что вы знаете о классах-надстройках?

A

Классы-надстройки наделяют существующий поток дополнительными свойствами. Примеры классов: BufferedOutputStream, BufferedInputStream, BufferedWriter — буферизируют поток и повышают производительность.

36
Q

Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?

A

Для чтения байтовых данных (не строк) применяется класс DataInputStream. В этом случае необходимо использовать классы из группы InputStream.

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

Класс DataInputStream позволяет читать элементарные данные из потока через интерфейс DataInput, который определяет методы, преобразующие элементарные значения в форму последовательности байтов. Такие потоки облегчают сохранение в файле двоичных данных.

Конструктор: DataInputStream(InputStream stream)
Методы: readDouble(), readBoolean(), readInt()

37
Q

Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?

A

Для этого используются классы, позволяющие буферизировать поток:

java. io.BufferedInputStream(InputStream in) || BufferedInputStream(InputStream in, int size),
java. io.BufferedOutputStream(OutputStream out) || BufferedOutputStream(OutputStream out, int size),
java. io.BufferedReader(Reader r) || BufferedReader(Reader in, int sz),
java. io.BufferedWriter(Writer out) || BufferedWriter(Writer out, int sz)

38
Q

Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?

A

OutputStreamWriter — мост между классом OutputStream и классом Writer. Символы, записанные в поток, преобразовываются в байты.
putStreamReader — аналог для чтения. При помощи методов класса Reader читаются байты из потока InputStream и далее преобразуются в символы.

39
Q

Какой класс предназначен для работы с элементами файловой системы (ЭФС)?

A

отличие от большинства классов ввода/вывода, класс File работает не с потоками, а непосредственно с файлами. Данный класс позволяет получить информацию о файле: права доступа, время и дата создания, путь к каталогу. А также осуществлять навигацию по иерархиям подкаталогов. Класс java.io.File может представлять имя определённого файла, а также имена группы файлов, находящихся в каталоге. Если класс представляет каталог, то его метод list() возвращает массив строк с именами всех файлов.

Для создания объектов класса File можно использовать один из следующих конструкторов:
File(File dir, String name) — указывается объект класса File (каталог) и имя файла
File(String path) — указывается путь к файлу без указания имени файла
File(String dirPath, Sring name) — указывается путь к файлу и имя файла
File(URI uri) — указывается объекта URI, описывающий файл

40
Q

Какой символ является разделителем при указании пути к ЭФС?

A

Для различных систем символ разделителя различается. Вытащить его можно используя file.separator, а так же в статическом поле File.separator. Для Windows это ‘\’.

*На stackoverflow встречал утверждение со ссылкой на документацию, что можно безопасно использовать слэш ‘/’ для всех систем. В комментарии читатель подтвердил это.

41
Q

интерфейс FilenameFilter?

A

Интерфейс FilenameFilter применяется для проверки попадает ли объект File под некоторое условие. Этот интерфейс содержит единственный метод boolean accept(File pathName). Этот метод необходимо переопределить и реализовать.