You are on page 1of 3

Egzamin I termin, 31.01.

2020 Prowadzący: Arkadiusz Sokołowski

Pytanie 1
Jaki wpływ mają typy generyczne na wydajność w czasie działania programu (runtime)?
(poniżej przykład użycia ArrayList z typem generycznym i bez niego)
public class Question1 {
List list1 = new ArrayList();
List<String> list2 = new ArrayList<>();

public static void main(String[] args) {


for (arg: args) {
list1.add(arg);
list2.add(arg);
}
list1.forEach(System.out::println);
list2.forEach(System.out::println);
}
}

Pytanie 2
Dla poniższego fragmentu kodu, która zasada SOLID została złamana?
Uzasadnij odpowiedź i zaproponuj modyfikacje (można używać pseudo kodu).
class LazyStudent {
public void studyWithManyBreaks();
}
class GoodStudent {
public void studyHard();
}

public class Lecturer {


private final LazyStudent student1;
private final GoodStudent student2;

public Lecturer() {
this.student1 = new LazyStudent();
this.student2 = new GoodStudent();
}

public void teach() {


student1.studyWithManyBreaks();
student2.studyHard();
}
}
Egzamin I termin, 31.01.2020 Prowadzący: Arkadiusz Sokołowski

Pytanie 3
Napisałeś i uruchomiłeś podany niżej fragment kodu. Po uruchomieniu, na konsoli program wypisał
true. Przekazałeś program koledze, a on zgłasza, że program wypisał na konsoli false. Używacie tej
samej wersji Javy (”11.0.4”).
Co jest przyczyną problemu i jak można go wyeliminować?
public class DoTests{
private static boolean testPi(){
return String.format(“%f”, Math.PI).equals(“3,141593”);
}

public static void main(String[] args) {


boolean result = testPi();
System.out.println(“RESULT: “ + result);
}
}

Pytanie 4 (Może być wiele poprawnych odpowiedzi)


@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{ }
@MyAnnotation
public class MyClass {
public static void main(String[] args) {
Annotation[] annotations = MyClass.class.getAnnotations();
for(Anotation a: annotations) System.out.println(a);

}
Co wypisze powyższy kod zawarty w pliku MyClass.java?
a) Nic,
b) @MyAnnotation()
c) Myclass.class
d) Nic nie wypisze i wyrzuci wyjątek

Pytanie 5 (Może być wiele poprawnych odpowiedzi)


@Target(ElementType.TYPE)
public @interface MyAnnotation {
String[] value() default {};
}
Dla tak zdefiniowanej adnotacji, które poniższe użycia są prawidłowe i się skompilują?
a) @MyAnnotation class MyClass{};
b) @MyAnnotation(”A”) class MyClass{};
c) @MyAnnotation({”A”}) class MyClass{};
d) @MyAnnotation({”A”, ”B”}) class MyClass{};
Egzamin I termin, 31.01.2020 Prowadzący: Arkadiusz Sokołowski

Pytanie 6 (Może być wiele poprawnych odpowiedzi)


Aby stworzyć i poprawnie uruchomić procesor adnotacji działający w czasie kompilacji należy:
a) stworzyć klasę dziedziczącą po klasie javax.annotation.processing.AbstractProcessor,
b) podać nazwę klasy procesora w ściśle określonym pliku, umieszczonym w bibliotece *.jar
zawierającą ten procesor,
c) uruchomić procesor adnotacji odrębną komendą przed uruchomieniem kompilatora,
d) plik z procesorem należy skopiować do katalogu annotations w katalogu domowym JDK

Pytanie 7
Czym jest relacja happens-before w kontekście wielowątkowości?
Zdefiniuj relację, przedstaw i opisz 2 przykłady jej występowania w Javie.

Pytanie 8
Opisz gdzie można zdefiniować i jakie są różnice w stosunku do standardowych metod, następujące
rodzaje metod: metoda abstrakcyjna (abstract method), metoda domyślna (default method) oraz
metoda finalna (final method).

Pytanie 9
private static long sum1() {
long sum = 0L;
for (long i = 0; I <= Integer.Max_VALUE; i++)
sum += i;
return sum;
}

private static Long sum2() {


Long sum = 0L;
for (long i = 0; I <= Integer.Max_VALUE; i++)
sum += i;
return sum;
}

Metoda sum1() wykonuje się w około 0.65 sekundy, natomiast metoda sum2() – około 6.5 sekund, na
tej samej instancji JVM. Wyjaśnij dlaczego?

Pytanie 10
Zdefiniuj i omów różnice między dziedziczeniem (extends) a implementacją (implements) w Javie?

Pytanie 11
Podaj i omów przykład niezachowania zasady podstawiania Liskov (Liskov substitution) ze
standardowej biblioteki Javy.

You might also like