Truly zaawansowane Java Interview Questions

2

Macie jakieś?

Pytam bo przejrzałem jakieś pierwszych 20 stron google'a pod hasłem "java advanced interview questions" i po pierwsze co mnie wneriwa to 80% z tych pytań tam nie dotyczy javy tylko swinga, zagadnień sprzed Javy 5 (o których już nikt nie będzie pytał) albo jakieś banały typu hashCode/equals, referencje, struktury języka (try/finally/breaking z nested pętli). Dodatkowo 50% pytań w tych stronach pokrywa się ze sobą.

Dlatego pytam, poleci ktoś jakieś hardcore'owe pytania? Jak nie to niestety będę musiał szukać dalej sam.

0

Musiałbyś chyba bardziej sprecyzować czy chodzi Ci o core javę, czy też o jakieś popularne biblioteki i frameworki?

3

Myślę że

  • concurrency - to zawsze jest trudne, czy to niskopoziomowo na poziomie wait/notify czy fork/join czy ExecutorService czy @Async
  • głęboki Hibernate jak np optymalizacja zpaytań, N+1 problem, cachowanie
  • jakimi narzędziami kontrolować użycie zasobów (chyba JMeter czy inne metryki)
  • ogólno architekturowe rzeczy i pytania np dotyczące transakcji w systemie rozproszonym
  • java 8 i konkretne API streamów
2

Przykłady.
Różnica między WeakReference a SoftReference. A jak w ogóle można użyć PhantomReference.

Z tych so się nawet tu ostatnio pojawiło różnica między AtomicInteger a volatale int.

Jak działa ThreadLocal.

Odwieczne pytanie o dynamic proxy (czemu nie działaja adnotacje na this.callOtherAnnotatedMethod() ).

Różnica w działaniu lambd:

 list.forEach( x -> System.out.println(x));

vs

 list.forEach( System.out::println);

Generalnie to pytanie jest o cel pytań... Rekrutujesz ? Na jakie stanowisko?

Sam z tego zestawu wyżej zadałbym tylko o this.call, bo to coś co mastah powinien wiedzieć , się spotkać. Zwłaszcza jak to jakiś springowiec.

Reszta imo za trudna na rozmowę nawet dla dobrego, chyba, że to jakiś magik i mu widać, że dobrze idzie. Programista Java może 10 lat skutecznie i dobrze programować i nie wiedzieć.

Ogólnie zawsze jak się zadaje pytania to się wydają łatwe - przychodzi, nawet niezły gość na rozmowę, to może nie zrozumieć o co pytają, stres zje.
Wole dawać kawałki kodu do rozgryzienia, na kompie. Np. bardzo lubie zadania - zrefaktoruj.

1

@jarekr000000:

Myślisz, że pytania o Soft/Weak referencje i rooty gb, jego strukturę itd pojawiają się na stanowisku javowca webowego ? Kolega miał takie pytania na Androidzie na seniora w Tom Tomie, średnio odpowiedział, ale i tak go przyjęli, ale na Androidzie jest to chyba bardziej zrozumiałe. Ja osobiście poczytałem sobie sporo o tym przed rozmową pół roku temu, ale teraz już to średnio pamiętam. Takich pytań totalnie nie było, ale akurat o ThreadLocal mnie zapytali.

N+1 to chyba zobaczy każdy w logach jak czyta kolekcje i będzie iterował.

Faktycznie ostatnio coraz bardziej dochodzę do tego, że spring to jedna wielka magia.

Jeśli chodzi o wielowątkowość to praktycznie nie używam i przyznaję się, że wiele nie wiem.

Ale skorzystam z tego i zapytam Ciebie o jpa w kontekście cqrsa. Czy da się skonfigurowac jakoś to tak, aby zapytania w części query były zoptymalizowane na READ, a nie READ-WRITE, które jest standardowe(chyba?). Myślałem o tym, że poza widoki zmaterializowanymi lepszym rozwiązaniem do części query byłoby np jooq?

1

To że nie ma takich pytac o WeakReference czy algorytmy GC to tylko świadczy o tym że rekrutacja jest słaba. Takie pytania powinny być od poziomu ogarnietego Juniora, bo ja rozumiem że gościu który dopiero wchodzi w Jave albo koduje w niej 6 mesięcy (komercyjnie czy jakiś prosty open source) ale nie typ co siedzi w niej 2-3 lata oO

EDIT:
A N+1 nawet nie mówcie, jak wspomniałem 2 prace temu o N+1 i fetch joinach to nic nie wiedzieli ludzie co w tym ekosystemie Spring/JEE/Hibernate pisali po 4 lata. Ale w sumie JPA jest zryte totalnie to sie nie dziwie :D

2

Tak jak napisałem wyżej uważam, że te pytania są zwykle za trudne nawet na seniora. Zbyt specyficzna wiedza. Na zwykłą webówkę, bez sensu.
Takie pytania częśto służą przechwaleniu się wiedzą przed rekrytującym się ... i niczemyu wincyj.
Co do jpa w CQRS, nie wiem.
z Jpa korzystam z select new T() . W jednym z serwisów ustawialiśmy też ceonnection.setReadOnly() w puli do czytania. Zupełnie już nie pamiętam czy to naprawdę pomagało (raczej tak, ale nie wiem o ile), to był chory system.

7

imo lepiej dac zadanie nietypowe dla (wiekszosci) javowcow i patrzec jak sobie radzi, np:

  • znajdz deadlocka na podstawie dumpa
  • napisz jakas thread safe kolekcje bez lockow
  • system sie dlawi, zrob zeby byl responsywny bez zmieniania kodu
  • napisz kod podajacy rozmiar L1 cache
  • napisz dowolny kod bez uzywania nulli, dziedziczenia, setterow i adnotacji (no ok, tu troche poplynelam, mimo wszystko chcemy kogos zatrudnic ;))
1

@katelx: no właśnie z tymi bez setterów i adnotacji to tez obawiam się że może być za cięzko :D

0

To ostatnie spoko - jeszcze bez zmiennych, ifów, pętli i exceptionów.

0

Zgadzam się z Jarkiem, kiedy faktyczne korzyści wynikające z użycia Weak/Soft References przeważają nad potencjalnymi problemami które one generują? Co do gc, to według mnie ważniejsze jest kiedy on coś robi i jaki jest wynik jego działania, a nie koniecznie jak on to robi.

0
private int foo() {
return Stream.of("one", "two", "three").mapToInt(String::length).sum();
}

@jarekr000000 takie coś przejdzie?

0

Pytania i tematy jakie padły są świetne. Aż chciałoby się być na takiej rozmowie i czegoś przy okazji dowiedzieć/nauczyć.

Natomiast jedna z rzeczy jakiej nie rozumiem. To fakt, że na samej rozmowie rekrutacyjnej kandydat (w tym przypadku niech będę to ja) dostaję z 3-5 razy ciekawsze zadania niż to co jest w rzeczywistym projekcie do którego się rekrutuje. Najlepsze jest to, że jak się dostaniesz do takiej firmy to potem musisz mieć duuużo szczęścia, by dostać coś na podobnym poziomie.

Zastanawiam czy to nie jest jakaś zagrywka psychologiczna, żeby zmiękczyć kandydata. W stylu - u nas to tylko ciekawe problemy się rozwiązuje.

0

@scibi92:

W jakim celu wg Ciebie trzeba wiedzieć czym jest Weak/Soft i reszta referencji oraz o algorytmach gc ? W sensie .. wiadomo, że lepiej wiedzieć niż nie wiedzieć, ale jaki jest sens wiedzenia o tym przy klasycznych webówkach ? Ja się z tymi pojęciami (podobnie jak kumpel) spotkaliśmy dopiero jak on jest dostał na rozmowie w Amsterdamie na seniora. Wiadomo, że poczytałem wtedy o tym, ale teraz po 4 miechach niewiele pamiętam.

Nie wiem, czy Wy tak lubicie ryć meandry javy gdzieś głęboko w necie lub hardkorowych książkach ?

Nie krytkuję tego, po prostu podziwiam, bo sam raczej trzymam się zasady utraconych korzyści i w tym czasie wolę poczytać książki/tutoriale/ lub obejrzeć filmy o czymś czego obecnie używam lub chcę wprowadzić, aby ulepszać kod. Bo dla przykładu fajnie wiedzieć też np. jakie są rodzaje sortowania i ich zady i walety .. swojego czasu ogarniałem to przed jakąś rozmową i teraz pamiętam może 2% ..

0

@Bambo: A na przykład w takim żeby wiedziec że w Javie tez może powstac problem z memory leakami. Tak, wiem zadziwiające. Poza tym softreference jest przydatny do cachy, np. Guava ma możliwość stworzenia cache który jest mają z soft reference. No i nie wiem, żeby wiedziec co to jest eden w memory modelu i co to mark and swap nie trzeba czytac o tym 2 godzinny dziennie.
Ale my tez mamy inne cele zawodowo-rozwojowe podejrzewam więc może dla mnie tez jest dużo ważniejsze niż dla większości klepaczy, bo może Ty korzystarz ze Springa JPA Guavy ale wiesz pamiętaj że ktoś jeszcze tego Springa, Tomcata czy Guave musi napisac :)

1

Od juniora wymagam żeby coś jakoś umiał sklecić - z pomocą.
Senior musi dla mnie wiedzieć **dlaczego ** rzeczy działają. Nie, że przestawi losowo dwie - trzy linijki, coś skopiuje ze stackoverflow i jeśli zadziała to commit i push.

Zadziwiająco dużo ludzi, całkiem skutecznych, nie zna zasad działania swoich narzędzi. Jak ktoś jest seniorem i mówi, że zna Springa to musi do cholery wiedzieć jakie skutki mają te dynamic proxy.
Nie musi dla mnie znać nawet połowy modułow Springa. Niech wie gdzie szukać.

To samo frontendowiec, wiecie ile seniorów frontendu nie wie jak działa CSS - masakra. Potrafią powiedziec jakim hakiem poprawić layout w IE 7, ale na głupie pytanie
Czy **element ** będzie niebieski czy czerwony? Nie odpowiedzą.

<div class="a"> 
<div class="b">
element
</div>
</div>

.a > div { 
 color : red;
} 

.b {
  color: blue;
}
 

Wiedzie skąd są te wszystkie megabajty śmieciowych CSSów z importantami! ? Bo goście przez 10 lat pisania nie zajrzeli ani razu do specyfikacji.
To samo w JS (np. niesmiertelny problem contextu i this).
Podobne problemy są w Javie - podstawy i ich ogarnianie.

Ogólnie to straszne, ale takimi podstawami się kładzie prawie wszystkich, pewnie mnie też.
W sumie to nawet nie oczekuje, że będzie dobra odpowiedź, ale chcę usłyszec chociaż jak ktoś kombinuje i jak dochodzi do sedna.
(np, w przypadku CSS wystarczy mi, że ktoś wie, że jest reguła i mniej więcej jakie są zasady zgrubne, gdzie tej zasady szukać).

Co do ogólnie trudnych pytań - to jara mnie jak są ciekawe problemy na interview, jeśli to ja jestem przesłuchiwany. Po poziomie pytań oceniam poziom firmy.
Jak ktoś mnie pyta z API jakiś bibliotek to dziękujemy (Choć akurat nawet lepiej na takie pytania odpowiadam, niż na np. algorytmiczne - te zwykle kłade :-) . mam natomiast dobrą pamięć do pierdół).
Nie chcę pracować z gośmi, którzy uważają, że to istotne ile parametrów ma metoda JOptionPane.showMessageDialog.

Wracając do oryginalnego pytania, jeśli ktoś dekaruje, że zajmował się performancem większych systemów na JVM, cachem, wyciekami pamięci itp. to coś o tych Soft,Weak Reference pominien usłyszeć. Ewentualnie powinien sobie poradzić z użyciem.

0

Kilka zadań:

  1. zadeklaruj i tak żeby pętla się nie kończyła:
while (i != i) { 
}
  1. Napisz klasę Enigma tak, żeby poniższy kod wyświetlił false bez nadpisywania "equals".
public class Conudrum {
  public static void main(String[] args) {
  Enigma e = new Enigma();
  System.out.println(e.equals(e));
  }
}

(więcej w "Java Puzzlers").

  1. na wątkach pewnie można każdego zagiąć. Np. w jakich sytuacjach wybierzesz CountDownLatch a w jakich CyclicBarrier.

  2. jakieś prostsze zadania z algorytmów, np. jak policzyć poprawnie Fibonacciego rekurencyjnie. Poprawnie.
    Albo znajdź cykl w liście.

  3. coś z Javy 8 - np. jak odpalić parallel na 50% rdzeni.
    Albo kiedy nie należy stosować distinct / sorted, strumieni ogólnie.
    Kiedy zamieniłbyś lambdę na coś innego. Co by to było?

  4. wymień wszystkie wady klasy Date.

  5. też zrobiłbym refaktoryzację, ale zwykle nikt jej nie zadaje na rozmowach.

1

Nie wiem czy Wy tak na poważnie, ale obecne propozycje to chyba bardziej w ramach ciekawostek. Gdyby tak wyglądała rozmowa na seniora to bym z niej chyba wyszedł :D

0

NIe wiem o co Ci chodzi zadania od @vpiotr i @katelx na znajomośc javy wg mnie całkiem spoko.
Co byś Ty @tdudzik chciał/ proponował ? (Akurat robię rozmowę na seniora znowu w nast. tygodniu).

0

Ej, ale z tymi "wymień wszystkie wady Date" to dobre xD

@vpiotr: to 2 to coś z hashCode() ?

2
tdudzik napisał(a):

Nie wiem czy Wy tak na poważnie, ale obecne propozycje to chyba bardziej w ramach ciekawostek. Gdyby tak wyglądała rozmowa na seniora to bym z niej chyba wyszedł :D

Mam dla Ciebie lepsze pytania po których część ludzi by wyszła:

  • ile jest fortepianów w mieście w którym jesteśmy
  • w zoo są trzy rodzaje kotów: podwórkowy, lew, pantera. Którym Pan jest?
  • gdzie się Pan widzi za 5 albo za 10 lat
  • co Pan może wnieść do naszej firmy? Dlaczego chce Pan u nas pracować?
0

Co do Javy z paraller stream to o takie rozwiązanie chodzi? https://stackoverflow.com/questions/21163108/custom-thread-pool-in-java-8-parallel-stream

@vpiotr

0
scibi92 napisał(a):

Co do Javy z paraller stream to o takie rozwiązanie chodzi? https://stackoverflow.com/questions/21163108/custom-thread-pool-in-java-8-parallel-stream

@vpiotr

Tak, to pytanie nie jest podchwytliwe.

0

W sumie to pamiętam jak @Shalom pisal w największych WTFach programistycznych o tym jak zrobili parallerStreamy i deadlocki powstały przez to xD
O ja bym zadał pytanie jak zrobić memory leak w Javie :)

1

@jarekr000000: zależy czego wymagasz od seniora. Pytanie czy jeżeli ktoś nie zna jakichś "tricków" bo akurat nie czytał "Java Puzzlers" bo zajmował się ciekawszymi tematami to sprawia to, że nie sprosta zadaniom seniora w Twojej firmie? Mimo, że to jest dość popularny problem, to nawet jeżeli ktoś nie wie jak użyć własnej puli w parallel streamie to imho dalej nic specjalnego o kandydacie to nie mówi.

0

Zacznijmy od tego że kandydat nie musi wiedzieć wszystkiego. Generalnie jeślli mamy 10 pytań /zadań trudnych i kandydat odpowie na 5 poprawnie to lepiej ta do rozeznanie niż z 10 pytaniami prostymi i 10 dobrymi odpowiedziami :)

1

@tdudzik pytania, również z głupot służą po prostu so zweryfikowania czym sie człowiek interesuje i na ile zna swoje rzemiosło.
Tzw. programista **od 8:30 do tamtej klasy ** też jest przydatny. Wiem, że nie powierzę mu za wiele w kwestii doboru narzędzi ( bo zwykle zna tylko młotek i to tylko 20% jego zastosowań) Będzie trzeba go troche mocniej pilnować żeby nie wnajdował koła na nowo co drugi dzień.
Czesto natomiast tacy goście natomiast bardzo dobrze dogadują sie z biznesem, łapią szybko dziedzinę. I ogólnie można na nich liczyć, bo robią swoje i nie rozpraszają się głupotami ;-)
Natomiast, jak któregoś dnia zrzyga się produkcja, to na nic taki człowiek sie raczej nie przyda.

0
scibi92 napisał(a):

Zacznijmy od tego że kandydat nie musi wiedzieć wszystkiego. Generalnie jeślli mamy 10 pytań /zadań trudnych i kandydat odpowie na 5 poprawnie to lepiej ta do rozeznanie niż z 10 pytaniami prostymi i 10 dobrymi odpowiedziami :)

W drugim przypadku można sprawdzić z jaką elokwencją kandydat się wypowiada. Czy mówi chaotycznie czy też wypowiada się ładnie, składnie i zrozumiale, że nawet ameba go zrozumie.

jarekr000000 napisał(a):

@tdudzik pytania, również z głupot służą po prostu so zweryfikowania czym sie człowiek interesuje i na ile zna swoje rzemiosło.
Tzw. programista **od 8:30 do tamtej klasy ** też jest przydatny. Wiem, że nie powierzę mu za wiele w kwestii doboru narzędzi ( bo zwykle zna tylko młotek i to tylko 20% jego zastosowań) Będzie trzeba go troche mocniej pilnować żeby nie wnajdował koła na nowo co drugi dzień.
Czesto natomiast tacy goście natomiast bardzo dobrze dogadują sie z biznesem, łapią szybko dziedzinę. I ogólnie można na nich liczyć, bo robią swoje i nie rozpraszają się głupotami ;-)
Natomiast, jak któregoś dnia zrzyga się produkcja, to na nic taki człowiek sie raczej nie przyda.

No cóż, nie każdy chce lub może po pracy programować lub eksplorować ekosystem języka w którym na codzień pracuje. Są tacy, co programowanie traktują jak normalną pracę - przychodzą do biura o 8 i o 16 wychodzą, dążąc do relaksu po pracy. A są też osoby co po godzinach dłubią jakieś swoje rzeczy, które mogą potem zaprocentować.

0

Nie chodzi mi o to, żeby nie zadawać trudnych pytań, a raczej zastanawiam się nad sensem zadawania szczegółowych pytanń dotyczących narzędzia którego się używa. Mi bliższe jest podejście firm typu Google, Facebook itp. gdzie czasem na rekrutacji możesz nawet nie wiedzieć w jakiej technologii będziesz pisać. Dla mnie dobrym inżynierem nie jest osoba która zna wszystkie corner case'y używanej przez siebie technologii (ale na pewno lepiej znać ich więcej niż mniej), a raczej osoba która poradzi sobie w nowej sytuacji dzięki umiejętności analitycznego myślenia i posiadaniu podstawowej wiedzy informatycznej (systemy, sieci, algorytmy, itp.). I mówię tu o typowej pracy, jeżeli ktoś aplikuje do jakiejś szczególnej niszy (np. HFT) to wiadomo, że musi być w tym dobry i mieć spore doświadczenie.

0

@tdudzik: ja wlasnie nie rozumiem tego podejscia. Co z tego ze gosc jest oblatany w algorytmach i strukturach danych jak nie zna biblioteki standardowej, frameworkow, tooli typu maven/jenkins/junit, ide, wzorcow, oop/fp...

1 użytkowników online, w tym zalogowanych: 0, gości: 1