Wpis z mikrobloga

Halo seniorzy #java #programista15k #programista25k - jak mocno stoicie z wiedzą pozakulisową jeśli chodzi o javę/jvm? Czy macie ją usystematyzowaną i wykorzystujecie to w codziennej pracy z crudami?

dzisiaj rzucił mi się w oczy film na youtubie pokazujący przykładową rekrutację na junior java developera, w komentarzach natomiast dyskusja jak mogłyby wyglądać na zadane pytania oczekiwane odpowiedzi na stanowisko seniora. Jakieś tam doświadczenie mam, ale tak z marszu większość rzeczy nie potrafiłbym rozwinąć w sensowny sposób :D
poniżej wspomniany komentarz

Jeśli chodzi o pytania, to są podobne, często takie same - jednak oczekuję się szczegółowej odpowiedzi, konkretnego zrozumienia tematu, przez JVM, OS az po hardware. Na każde z tych pytań można było dać rozbudowana odpowiedź i tego oczekuje się od seniora.


1. GC - jakie są garbage collectory, jakie konkretnie algorytmy wykorzystują, tutaj można przecież poruszyć ogromny obszar związany z zarządzaniem pamięcią w Javie, analizowanie logów GC, profiling - z tego doktoraty ludzie piszą.

2. Kolekcje w javie - kolejny bardzo obszerny temat, o samych listach mozna mowic bardzo duzo,

zlozonosc czy znajomosc internali struktur to za malo, teoria kolejek, algorytmy

3.HashMap vs Set - senior powinien wiedziec, ze w zaleznosci od konfiguracji mapy, podczas kolizji linkedlist'a zamienia sie w Red-Black Tree, algorytmy hashujące, prawdopodienstwo kolizji, kiedy jakiego algorytmu hashujacego uzyc, stad mozna przejsc do sturktur drzewiastych czy grafów - kolejny temat na doktorat

4. j.w

5. equals vs hashcode - tutaj tez mozna wspomniec o nierozwiazywalnym problemie poprawnego nadpisania metody equals w pewnych przypadkach w klasie dziedziczacej (nie da sie tego zrobić), przechodniosc, symetrycznosc, zwrotnosc relacji. Hashcode, w jaki sposob jest wyliczany, jak to mozna robic, jakie sa tradeoff'y. Ataki na hashcode'y w javie powodujace leak'i. Mozna wspomniec o tym ze taki hashcode w ogole w headerze klasy jest zapisany

6. final - referencje / wskazniki, to nie prawda ze == na obiektach porownuje adresy, to nawet nie jest porownanie referencji, mozna przy tej okazji wspomniec o cyklu zycia obiektu w Javie, o przemiesczeniu się go w pamieci podczas pracy GC. Co daje programistom taki final w ogole? dla JVM to ulatwia prace, dlaczego?

7. Niemutowalnosc - shallow / deep copy, po co to w ogole komu, jaki to ma zwiazek z concurrency i JVM?

8. Wyjatki - co zamiast? dlaczego checkd exceptions to fail? Kiedy je w ogole stosowac? Jaki narzut konkretnie powoduje rzucenie wyjatku w JVM, stad mozna przejsc do zagadnien zwiazanych z obszarami debuggingu, unwind stack traceów, skad w ogole taki JVM wie, jaki jest stacktrace w tej wypisce w wyjatku - to tez jest dosyc obszerny temat, kluczowy dla ludzi pracujacych przy optymalizacji kodu.

9. Wzorce projektowe - no ten Singleton to taki broken troche przyklad, ale jak juz go podajemy to tez warto wspomniec ze to jest singleton per class loader, nawet nie per proces, nawet nie per JVM, nie mowiac juz o aplikacji rozproszonej. Poza typowymi wzorcami, senior rozwinie temat o wzorce typowe dla OOP, FP i innych pardygmatow programowania. Sa wzorce projektowe stosowane typowo w concurrency kodzie, w srodowiskach rozproszonych, EIP patterns itp. Mozna cos o anty-patternach wspomniec.

10. Enum'y - Czym sie rozni taki Enum w Javie od takiego np z C++? Te w Javie sa dosyc specyficzne w porownaniu z wiekszoscia jezykow, dlaczego? static vs dynamic binding, virtual table, jump tables, switche, pattern matching (java 5 vs 7 vs 8 vs 17), invokevirtual / invokestatic OP code'y w bytecode

11. deadlock / concurrency - baaardzo obszerny i zlozony temat. Jakie mamy modele concurrency? concurrent vs parallel, starvation, fairness locków, dlaczego synchronized jest deprecated (Loom), blocking vs non-blocking, memory barriers (kompilator / cpu), shared memory, lock-wait free algorithms, CRDT w srodowiskach rozprosznych, jak ordering zagwarantowac w przypadku X i Y, koordynacja procesow, schedulery, pule watkow, testowanie i dowodzenie poprawnosci algorytmow wspolbieznych, context switche, SMT / HyperThread - to są tysiące godzin rozkmin, przegladania projektów open source i pisania e-maili do autorów takich narzędzi jak Netty, JVM, Kernel czy ChronicleQueue, a to zaledwie ułamek wiedzy do nazwania się seniorem w tym obszarze.

12.j/w

13. Kolejny obszerny temat, TDD, BDD, ta definicja unit testu jest imho zła która padła w filmie, integracyjnego też. Testów są również dziesiątki rodzajów, w zależności od firmy każdy ma często co innego mówiąc o testach X. Nie wiem czego tu mozna by po seniorze oczekiwac w tym obszarze - moze jakis FIRST? Oczekiwalbym ze ludzie na poziomie seniora to juz robia TDD, nie korzystaja z mocków.

14. No to az sie prosi o ta odpowiedz z Clock. Jest to jedyny mock dostarczany przez SDK ktory kiedykolwiek powstał, wszedł wraz z java.time pakietem w javie 8 i służy właśnie do rowiązania tego konkretnego problemu wspomnianego w rozmowie.

15. Hibernate (i inne biblioteki wpisane w CV) - no to juz powinnismy bardzo dobrze ogarniac, jak to jest konkretnie zaimplementowane w srodku. N+1, proxowanie kolekcji czy dirty checking to sa pytania dla juniorów.

16. Kafka - to tez bardzo zlozony temat, w zasadzie Kafka to tylko przyklad pewnej grupy problemow ktore nalezalo rozwiazac ale rozomwa o Kafce to raczej rozomwa o rozproszonych srodowiskach jako takich - problemy z concurrency przede wszystkim, wspomniany ordering w zakresie partycji - to pytanie dla seniora, w jaki sposob zagawarantowalby ordering dla kilku partycji dla jakiegos konkretnego przykladu. Jak Kafka to i Zookeeper (w starszych wersjach), dlaczego od niego odchodzą - czym sie rozni taka kafka od Pulsara czy ActiveMQ. Jak w aplikacji korzystającej z Kafki zaimplementowalbys at most once / at least once / exactly once delivery, Kafka-Streams. To dobre miejsce zeby pochwalic sie znajomoscia internali TCP/IP, socketów, epoll,select, poll sys calle itp

17. SQL - teoria mnogosci cala w zasadzie do samych zapytan, nie chcialbym od seniora uslyszec ze w bazie relacyjnej to mamy jakies "tabelki" i "wiersze", albo jakiejs koslawej nomenklatury. Poza select'em, to takie rzeczy jak ACID (z naciskiem na I, jakie mamy odczyty mozliwe przy jakim poziomie izolacji), kiedy optimistic locking, kiedy pesimistic, select for update, distributed lock, deadlocki w bazie danych, explain instrukcje, planery i executory zapytan, jak zaoptymalizowac zapytanie X czy Y na bazie A lub B. Kiedy denormalizowac baze danych, materialized views. Stąd można przejsc do innych modeli storage'ow (obiektowe, kolumnowe, dokumentowe, grafowe czy nawet append logi) wykorzystywanych w bazach danych. Indeksy, fragmentacja, kompaktacja. SQL w srodowisku rozproszonym, replikacja danych (z naciskiem na transakcje), jak zreplikowac transakcje jesli w zapytaniu jest instrukcja pobierajaca current_tiimestamp na inny node? Jak pojdziemy w ta strone, to w zasadzie znowu zrobi sie wywód nt srodowisk rozprosoznych, slave-master, quorum, vector clocks, CRDTs, recovery clustra and so on


Takze podsumowujac, to generalnie pytania moga padać dokladnie te same, ale od seniora oczekuje się, że rozwinie temat bardzo mocno + że ma oprócz tego jakąś specjalizację w której jest na prawdę mocny - czyli jakiś wąski obszar w którym będzie prawdopodobnie najlepszy w organizacji do której zatrudniamy (np concurrency, albo relacyjne bazy danych, algorytmy grafowe, whatever)
gloszenady - Halo seniorzy #java #programista15k #programista25k - jak mocno stoicie ...
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@glos_zenady zależy czego firma oczekuje od seniora. Jeśli jest to kompletny wymiatacz techniczny to pewnie to co wypisałeś musi mieć w malutkim paluszku i być gotowy odpowiedzieć w środku nocy z pistoletem przystawionym do głowy.

Z kolei jeszcze inna firma przymknie oko na braki techniczne u seniora, ale bardziej zwróci uwagę na to czy umie całe SDLC poprawnie zrobić, wdrozyć, usprawnić.

A z tego co wymieniłeś to może w realnej crudologii
  • Odpowiedz
@glos_zenady: Ludzie, którzy uczą się większości z tego na pamięć siedzą po 20 lat w jakimś Comarchu jako „senior” i mają mało wspólnego z dzisiejszymi wdrożeniami (albo z wdrożeniami czegokolwiek w ogóle).

Nawet jezeli robiłem kiedyś jakieś profilowanie GC, to zapomniałem o tym miesiąc później, bo jest 1000 ważniejszych rzeczy do trzymania w głowie. XD

Już nie mówiąc o takich kretynizmach jak to, czy pozycja w pracy ma decydować o
  • Odpowiedz
@glos_zenady: jeśli weźmiemy takiego seniora powiedzmy z expem 5 lat, nie wiem komu się chce aż tyle edukować po pracy. Nie wierzę, że mozna nabyć tyle wiedzy przez same studia czy wykonywanie obowiązków zawodowych.
Jeśli chodzi o seniorów jakich kojarzę, może 5% mogłoby się pochwalić taką wiedzą ( ͡° ͜ʖ ͡°)

Trochę mnie śmieszy jak sobie przypomnę swoją pierwszą rozmowę na poziom seniora. Jeśli trafiłbym na
  • Odpowiedz
@glos_zenady: Ile masz doświadczenia?

Przecież te pytania nie sa jakieś super trudne. Ja jestem devopsem i nie mam dużego doświadczenia z Java i tak na polowe to spokojnie bym odpowiedział.

Chyba problemowej taki, ze „senior” to teraz nic nie znaczy, bo seniorami są ludzie z kilkuletnim doświadczeniem co nie prowadzili żadnego projektu tak naprawdę i przez 3 lata dodają endpointy do cruda.
  • Odpowiedz
mam 2 lata expa i na połowę zagadnień które wymienił mógłbym odpowiedzieć


@ElTalento: @BreathDeath na pewno mówicie o tym poziomie szczegółowości o jakim pisze OP? To raczej nie są rzeczy, które poznaje się w pracy, powiedziałbym że lata doświadczenia niewiele tu mają. Ja takiej teorii uczę się z myślą o zmianie w pracy w przyszłości, w samej pracy to się uczę logiki biznesowej ( ͡° ͜ʖ ͡
  • Odpowiedz
Ja takiej teorii uczę się z myślą o zmianie w pracy w przyszłości, w samej pracy to się uczę logiki biznesowej ( ͡° ͜ʖ ͡°)


@NieBendePrasowac: jak piszesz aplikacje to tak, raczej te rzeczy z sekcji deadlock/concurrency rzadko sie uzywa az tak szczegolowo, ale to co napisal o mockach i w polu kafka i sql to raczej must have. Te internale javy to nwm, bo nie
  • Odpowiedz