Algoritms Flashcards Preview

Java > Algoritms > Flashcards

Flashcards in Algoritms Deck (27)
Loading flashcards...
1

чтение linked list

LinkedList list = new LinkedList();
while (true)
{
int value = NextValue();
if (value != 0xFFFF)
{
list.Add(value);
}
else
{
break;
}
}

2

Реализуйте алгоритм обхода бинарного дерева

Собственно обход дерева, как и все обходы графов ( а дерево это обычный неориентированный граф ) делается двумя методами: в глубину (Depth-first) и в ширину (Breadth-first).

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

Если в глубину тоберешь левый элемент рекурсивно, пока есть потом правый пока есть

если в ширину, то сначала левый и правый, потом в каждом из них левый и правый и т.д

3

Jackson

ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
Student student = mapper.readValue(jsonString, Student.class);
jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);

4

автоуаковка и минусы

Автоупаковка это обертка int в Integer....минусы - больше требует памяти и больше времени исполнения

5

канает ли такой код?
public static void test(int ...a) {
System.out.println("int...");
}

да канает

6

Что выведет на экран следующая программа?
public class Test {
public static void main(String[] args) {
System.out.println("4/2=" + 4/2 == "4/2=2");
}
}

true т.к происходит сравнение двух одинаковых строк

В соответствии со спецификацией Java 7 выражение "4/2=" + 4/2 == "4/2=2" является константным выражением (constant expression).
Значения константных выражений вычисляются на этапе компиляции, и у данного выражения должно быть значение true.

7

i=1;
i = i++;
чему будет в итоге равно i

i=1 т.к i передало еденицу, а лишь потом инкрементировалось

8

public class Funcs extends java.lang.Math {
///что здесь не так?
}

java.lang.Math финализирован и от него не унаследуешься

9

Float.NaN == Float.NaN вернет false или true

false Т.к В Java NaN'ы несравнимы между собой

10

Integer a = 120;
Integer b = 120;
Integer c = 130;
Integer d = 130;
System.out.println(a==b);
System.out.println(c==d);

Для более эффективного использования памяти, в джаве используются так называемые пулы. Есть строковый пул, Integer pool итд. Когда мы создаем объект не используя операцию new, объект помещается в пул, и в последствии, если мы захотим создать такой же объект (опять не используя new), новый объект создан не будет, а мы просто получим ссылку на наш объект из пула.
Особенность Integer-пула — он хранит только числа, которые помещаются в тип данных byte: от -128 до 127. Для остальных чисел пул не работает.

11

String hello = "Hello", lo = "lo";
System.out.print((testPackage.Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " "); // runtime
System.out.println(hello == ("Hel"+lo).intern());

1. Строковые литералы в одном классе представляют собой ссылки на один и тот же объект.
2. Строковые литералы в разных классах, но в одном пакете представляют собой ссылки на один и тот же объект.
3. Строковые литералы в разных классах и разных пакетах всё равно представляют собой ссылки на один и тот же объект )).
4. Строки, получающиеся сложением констант, вычисляются во время компиляции и далее смотри пункт первый.
5. Строки, создаваемые во время выполнения НЕ ссылаются на один и тот же объект. (поэтому четвертый вывод — false)
6. Метод intern в любом случае возвращает объект из пула, вне зависимости от того, когда создается строка, на этапе компиляции или выполнения. (Поэтому последний вывод — true).

12

static void method(long a, long b) {
System.out.println("inside long");
}
static void method(Integer a, Integer b) {
System.out.println("inside INTEGER");
}
public static void main(String[] args) {
int a = 2;
int b = 3;
method(a,b);
}

какой меод запустится

в пятой джава первый т.к нет автоуппаовки, а не в пятой второй, т.к с автоупаковкой имеет высший приоритет

13

КАк описать в POJO @Override toSgtring??? код в студию!

@Override
public String toString() {
return String.format("{id: %s, name: %s, checked: %s}", id, name, checked);
}

14

как прочитать CSV файл

try (Reader reader = Files.newBufferedReader(Paths.get("file.csv"));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withFirstRecordAsHeader()
) {
for (CSVRecord csvRecord : csvParser) {
// Access
String name = csvRecord.get("MyColumn");
// (..)
}

15

Записать CSV файл

String str = "Hello";
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
writer.write(str);

writer.close();

16

Из нижеследующих - какие названия переменных вызовут ошибку?
int _a;
int $c;
int ______2_w;
int _$;
int this_is_a_very_detailed_name_for_an_identifier;

int :b;
int -d;
int e#;
int .f;
int 7g;

последние пять перменных...

17

корректна ли запись double d = .5;

Да. для литералов с плавающей точкой можно не задавать целую часть, т.е. следующее правильно

18

Будет ли работать следующий код???
byte s = 2;
char c1 = b;

НЕТ! надо помнить, что к char неявно не приводится переменная любого типа.

19

чем отличается int[] i от int i[]

НИчем - одно и тоже

20

Как инициализировать массив сразу с перменными

// агрегатная инициализация
int[][] scores = {{1, 2}, {1, 2, 3, 4}, {1, 2, 3}};

21

ПОчему не работает этот код?
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2;

Потому что результат интегральных выражений с типом ниже int дает редультат int....а int ты не сможешь присвоить в более низкий byte b3

22

Что делают методы библиотеки java.lang.Math:
ceil()
floor()
random()
abs()
max()
min()
round()
sqrt()
toDegrees()
toRadians()
tan()
sin()
cos()

ceil() Возвращает наименьшее целое число, которое больше аргумента.
floor() Возвращает наибольшее целое число, которое меньше или равно аргументу.
random() рандом
abs() (модуль) числа
max() Возвращает больший из аргументов.
min() Возвращает меньший из аргументов.
round() округление
sqrt() корень
toDegrees() перевод в градусы
toRadians() перевод в радианы
tan() тангенс
sin() синус
cos() косинус

23

Does the following hashCode() implementation legal?

publicint hashCode() {
return 1;
}

Да, потому что для объектов, равных через equals(), hashCode() должен возвращать одинаковое значение(выполняется). Для объектов же, не равных через equals(), hashCode() может возвращать одинаковое значение.

24

Given the following,

1. publicclass X {
2. publicstaticvoid main(String [] args) {
3. X x = new X();
4. X x2 = m1(x);
5. X x4 = new X();
6. x2 = x4;
7. doComplexStuff();
8. }
9. static X m1(X mx) {
10. mx = new X();
11. return mx;
12. }
13. }

After line 6 runs. how many objects are eligible for garbage collection?

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

25

можно ли поток запустить дважды

не

26

что можно сказать о результате выполнения следующего кода?
public
class StartClass {
publicstaticvoid main(String[] args) {
Integer i1 = 1000; // преобразовывается в Integer i1 = Integer.valueOf(1000);
Integer i2 = 1000; // преобразовывается в Integer i2 = Integer.valueOf(1000);
System.out.println(i1 == i2);
System.out.println(i1 == 1000);
}
}

false
true
С целью не потерять обратную совместимость с предыдущими версиями джавы при первом сравнении проверяется, ссылаются ли i1 и i2 на один и тот же объект. Не ссылаются.

27

что можно сказать о результате выполнения следующего кода?
public
class StartClass {
publicstaticvoid main(String[] args) {
Integer i1 = 10;
Integer i2 = 10;
System.out.println(i1 == i2);
System.out.println(i1 == 10);
}
}

Здесь сравнение i1 с i2 дает положительный результат, потому что при autoboxing в случае, когда соотвествующее значение примитивного типа принадлежит определенному интервалу, для одинаковых примитивных значений возвращается один и тот же объект. 10 – число из этого интервала, поэтому при autoboxing ссылки i1 и i2 связываются с одним и тем же объектом Integer. Такой эффект происходит при autoboxing Boolean, autoboxing Byte, Short, Integer, Long для значений из [-128; 127], autoboxing Character для значений из [‘\u0000’; ‘\u007F’]. На Double и Float это не распространяется