Rekrutacja - pytania do kandydata

Rekrutacja - pytania do kandydata
pedegie
  • Rejestracja:około 11 lat
  • Ostatnio:ponad rok
  • Postów:204
3

Rozmowa z miesiąc temu, giełdy, brokery, dużo, szybko:

  1. Wspolbieznosc, modele wspolbieznosci, lock / wait free struktury danych, memory barries (semantyka UNSAFE.putOrdered(..), MESI), sporo o lockach, thread locale, agent / aktor model, funkcyjne programowanie
  2. JIT Hotspot - wymień optymalizacje i warunki potrzebne do zajścia
  3. GCs HotSpot
  4. Heap, Offheap, native off-heap, jak sie tam dostac z poziomu javy, w jakich sytuacjach warto / trzeba
  5. kernel bypass io, rdma, mmu - od strony praktycznej, co mozna zrobic i kiedy warto przy tym grzebac
  6. safepointy i sampling dla low-latency mierzenia wydajnosci
  7. Jak zidentyfikowac waskie gardlo aplikacji oraz jak naprawic - tutaj glownie rozmowa o narzedziach typu iostat, vmstat, jmeter, jitwatch, hdrhistogram, JFR (mialem podac jakies ktore uzywac asyncgetcalltrace), jmapy i cos tam jeszcze pewnie.
  8. 10kk problem

Blizej kodu to: RFP, Akka i w sumie tyle, malo o biblioteki pytali

W razie watpliwosci co do wyboru kandydata, test na platformie devskiller

edytowany 2x, ostatnio: pedegie
Zobacz pozostałe 4 komentarze
M0
na jakie to stanowisko ?
pedegie
@Pinek: właśnie wcale nie, rozmowa była raczej mimo wszystko na luzie, tak jak napisał @KamilAdam z tym, że "jak utrzymać N połączeń" a nie "obsłużyć requestów jednocześnie" - tj łatwiej. tak udało się przejść, zaczynam od 2-go @filemonczyk to brokek giełdowy w modelu MM @mariusz00 senior java / c++ dev
M0
@pedegie: szacun za ogarnianie tematu, po pytaniach widać że łatwo nie było. Tak przypuszczałem że to pytania na mida troche za trudne
99xmarcin
Nieźle, przynajmniej takie pytania gwarantują jakość ekipy. Aż chce się aplikować :D
99xmarcin
Co ciekawe w narzędziach do wydajności nie podali flame-graph'ów ani io-flame-graphów ani async-profiler'a, a już myślałem że dobra firma :P
Korges
  • Rejestracja:prawie 5 lat
  • Ostatnio:3 minuty
  • Postów:549
0

Co byście powiedzieli w takiej sytuacji:
Mamy request: jeden mikroserwis woła kolejne, mamy typowy chain. Coś po drodze się wywala. Jak najlepiej dostarczyć informacje co się wywaliło i dlaczego. Jak to najszybciej sprawdzić. Co można zrobić żeby temu zapobiec.

edytowany 1x, ostatnio: Korges
Zobacz pozostałe 5 komentarzy
superdurszlak
no ja bym celował w Sagę jako pattern na takie "chainy" + pokminił czy lepszy będzie wariant z choreografią czy orkiestracją z jednego miejsca. Circuit breaker to raczej po to żeby nie wyrypało się po całości, jak już raz coś walnie i zacznie się robienie retry... retry retry.... Dodatkowo wspomnieć o exponential backoff przy retry żeby uniknąć przeciążenia i nie pogarszać. A @mariusz00 też ma troszkę racji (ale nie z F12 xd), bo jak już coś się wyrypie to dobre metryki, logi i monitoring to podstawa. Bo jak inaczej stwierdzisz, co się stało jak dostaniesz HTTP 500...
M0
Racja Baant, a w sytuacji jesli któraś metoda na backendzie się wywala z jakiegoś micro, to wydaje mi się że powinnień lecieć odpowiedni log z jakiego to micro. Zależy też chyba jakie jest zagnieżdzenie tych mikroserwisów
superdurszlak
ale tego loga nie zobaczysz klikając f12 xd
M0
nie no lajt, nie chodziło mi że w f12 zobacze logi, heh :D wg mnie, to taki pierwszy etap, aby sprawdzic status i zobaczyc ew w jakie miejsce się kierować
ZG
ostatnio walczylem z takim bledem, gdzie nawet nie bylo wspomniane jaki to serwis, szukanie zajelo mi uwaga 4 tygodnie, po czym nie bylem go i tak w stanie ponowic, a to byl projekt z innej "spolki", do tego brak dokumentacji, do tego nieznane mi biblioteki i caly nowy crm stal w miejscu, pytanie czy mozna to bylo zrobic szybciej?
WS
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:28
0

ktoś może coś jeszcze, jakieś pytania? :-)

Reverse
  • Rejestracja:prawie 5 lat
  • Ostatnio:około 4 lata
  • Postów:41
4

@wsxx: ja ostatnio miałem kilka rozmów na seniora php dev i miałem takie pytania:

  • Co to interfejs i klasa abstrakcyjna, jaka między nimi jest różnica
  • Jaka jest różnica między private, a protected
  • Co to jest REST i na czym się opiera
  • Co to jest Entity Manager
  • Jakie znam usługi do kolejkowania i po co się je stosuje, jaki rozwiązują problem
  • Jakie są typy wzorców projektowych
  • Jakie są wzorce projektowe, wymień te które znasz i opisz jaki problem rozwiązują
  • W jaki sposób byś uniknął duplikowania kodu do obsługi wyjątków w Symfony
  • Jakie znasz polecenia GIT, jaka jest różnica między merge, a rebase
  • W jaki sposób można wykonać niestandardową operację na bazie danych
  • Co to jest SOLID, KISS, DRY i co oznaczają
  • W jakim celu stosuje się TDD i czy warto
  • Jakie bundle Symfony najczęściej stosujesz
KamilAdam
W jaki sposób można wykonać niestandardową operację na bazie danych Co to jest niestandardowa operacja na bazie danych?
Reverse
@KamilAdam: tzn pomijając persist, flush, remove. Niestandardowe zapytanie tzn użycie query builder, które pozwala Ci na budowanie własnych zapytań
BraVolt
Np. truncate zamiast delete?
somekind
Czyli niestandardowa oznacza taką, której ORM nie obsługuje?
KamilAdam
Smutne. Czyli teraz już napisanie selecta jest niestandardową umiejętnością i to w dodatku na seniora :(
Reverse
@KamilAdam: chodziło im o to, że przy pomocy podstawowych metod repozytorium nie wyciągniesz np danych z dwóch tabel które nie mają relacji, tak to tłumaczyli
KamilAdam
@Reverse: co rozumiesz przez relację? w Bazach danych relacja to matematyczna nazwa na tabelę. Pewnie chodzi Ci o klucz obcy. Co pozwalają teraz ORMy, zwłaszcza w PHP, to nie mam pojęcia. ORMów od dawna nie dotykałem i się z tego powodu cieszę
Reverse
@KamilAdam: relację czyli OneToMany, OneToOne, ManyToMany w ORM.
somekind
To nie są relacje tylko krotności związków encji.
Miang
mamy pytanie na seniora co to jest relacja. gorzej jak zacznie ględzić o swoim chłopaku/dziewczynie ;)
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

TL;DR
Nie zapominajmy o pytaniach typu "ile jabłek zmieści Pan do tej torby" (różne mogą być cele stawiania tych pytań).
Tu przykład na rozmowę Pythona:
https://www.dailymotion.com/video/x2t2rqh

BraVolt
  • Rejestracja:prawie 6 lat
  • Ostatnio:prawie 4 lata
  • Lokalizacja:Warszawa
  • Postów:2918
2

Jakie pytania? Nie ma tak głupiego pytania, którego nawet sobie nie wyobrażasz, a jednak możesz zostać zapytany.

BTW, zadawanie pytań z pozoru bez sensu ma sprawdzić, jak sobie ktoś radzi w nietypowej sytuacji, czy następny pytanie (a w racy problem) pogłębi stres i frustrację?

Ludzie techniczni będą drążyć i szukać kandydatów pod kryterium: jak sobie już kiedyś poradził z sytuacją A, B i C z którymi mieliśmy problem w naszej firmie.

Ludzie stawiający na umiejętności miękkie wiedzą, że będą też problemowe sytuację D, E, F więc nie ma sensy drążyć jak ktoś sobie radził w konkretnym przypadku A ale ważne jak w ogóle poradzi sobie z nietypowymi, nie znanymi jeszcze problemami D, E, F.

Na przykład: "Swojego zdania będę bronił jak niepodległości" - dwóch seniorów z takim podejściem w dwóch mających współpracować ze sobą zespołach to proszenie się o problemy.
Technicznie ktoś może wymiatać i mieć skopiowane do głowy pół StackOverflow ale nie-technicznie odpada.


"Kiedy wiedzieć czy zacząć nauke Springa? bo w czystej Javie to nic ciekawego nie zrobie chyba"
Ein Volk, ein Reich, ein Kwa-Kwa ***** ***
WS
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:28
0

może ktoś miał ostatnio rekrutacje jakieś i się podzieli pytaniami?
Preferowane technologie backendowe i devopsowe :)

PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
1

Ostatnio, oprócz standardowych pytań o skalowalność czy GC w javie, miałem ciekawe pytanie - nie pamiętam dokładnie jak brzmiało, ale chodziło mniej więcej o coś takiego:

Kopiuj
Mamy klasę

class Point {
   int x;
   int y;
}

Czy jest możliwe napisanie metody hashCode w taki sposób, 
żeby mieć pewność, że nie będzie kolizji (czyli że każdy unikalny obiekt dostanie unikatowy hash code)?
edytowany 2x, ostatnio: Pinek
Zobacz pozostałe 14 komentarzy
JM
jackson-mike
Da się, dopisując pole ID i gwarantując jego unikalność XD
S9
W sumie się da, można zrobić tak że masz ograniczony zakres intów jaki przyjmujesz a dla reszty rzucasz wyjątkiem w konstruktorze xDDDDDDD
vpiotr
Drugie rozwiązanie to dla wybranej rozdzielczości ponumerować piksele, dla full HD masz raptem 2 mln wartości i hashCode zwraca nr piksela.
PI
Jaka rozdzielczość wariacie, x i y ograniczone są jedynie w Twojej głowie
p_agon
Uwaga oglaszam wynik @scibi_92: 0 | 1 @Pinek
WS
  • Rejestracja:ponad 4 lata
  • Ostatnio:około rok
  • Postów:28
0

Może podzielicie się ostatnio otrzymanymi pytaniami od strony backendu?
Tylko prosiłbym o pytania typowo techniczne, a ew dyskusja w komentarzach pod danym postem

Mati Ihs
  • Rejestracja:ponad 5 lat
  • Ostatnio:około 2 miesiące
  • Postów:3
2

Porekrutowałem się ostatnio i mogę powiedzieć, że pomiędzy poszczególnymi rozmowami jest ... przepaść. Pytania na mida w javie:

  1. Co się stanie jak zaimplementujemy w klasie hashcode który zwraca za każdym razem tą samą wartość
  2. Pule wątków a rdzenie procesora
  3. Volatile i Synchronized
  4. Jak indeksy wpływają na responsywność zapytań bazodanowych
  5. Sesje a requesty
  6. Składnia endpointów Restowych
  7. TCP/UDP
    ...do tego code review, projektowanie klienta chata i problem algorytmiczny ( z liczeniem złożoności swojego rozwiązania).
    Druga rozmowa:
  8. SQL injection
  9. Kiedy byś użył singletona (w ogóle, he he)
CZ
9. W praktyce zawsze :P
MA
@Mati Ihs: piszesz, że jest przepaść pomiędzy rozmowami. Te pytania pochodzą z tej trudniejszej czy łatwiejszej rozmowy?
Mati Ihs
@marlukk: Te dwa ostatnie są z drugiej. Mam wrażenie że nic nie sprawdzili.
W0
  • Rejestracja:ponad 12 lat
  • Ostatnio:29 minut
  • Postów:3526
4

Z tych, które ja zadaję - Java:

  1. Krótkie zadanie algorytmiczne, raczej proste (max 30 minut - a i to jest z dużym zapasem)
  2. Pytania o wielowątkowość - zazwyczaj pytam, w jaki sposób ktoś sobie z tym radzi(ł) - opcji jest sporo, jak ktoś zna np. systemy aktorskie, klasy Atomic oraz inne zabawki z util.concurrent to już jest dobrze.
  3. Livelock, deadlock, race condition - czym są, czym się różnią, jak je uzyskać?
  4. State, stateless, immutable - co to jest i czym się różni, wady/zalety.
  5. Dosyć standardowo - "co jeśli hashcode/equal będzie źle napisany?".
  6. Design - zazwyczaj podaję jakiś przykład problemu (mam ich kilka) i pytam, jak to zaprojektować z grubsza.
  7. Kafka - jakie są gwarancje? Jeśli trzeba to o transakcje.
  8. Spring - głównie pytam, w jaki sposób kandydat(ka) korzystał(a) z tego - np. czy konfiguracje przez @ Autowired itp.
  9. SQL/NoSQL - dużo zależy od bazy, ale jeśli jest jakiś SQL to wystarczy, żeby napisał JOINa i opowiedział jak działają indeksy.

Kolejność przypadkowa. Ogólnie staram się nie fiksować na pytania, które da się odhaczyć, ale czy ktoś rozumie co w ogóle mówi. Np. pytanie z pkt. 5 - jeśli ktoś faktycznie nie rozumie jak wygląda kontrakt hashcode/equals to bardzo szybko wywali się gdy spytam o prosty przykład typu "co jeśli equals będzie zwracało false?".

edytowany 2x, ostatnio: wartek01
Mati Ihs
Jakby mnie ktoś kiedyś spytał o deadlock, to mam gotowy dowcip; "jak powiesz co to deadlock, to cię zatrudnimy", "jak mnie zatrudnicie, to powiem co to deadlock". I nikt nigdy kurna nie spytał.
W0
@Escanor16: tak, tj. rekrutują seniorów, ale zasadniczo rzecz biorąc nie widzę przeszkód, żeby zadać te pytania midowi. @Mati Ihs spoko odpowiedź :D
MA
@wartek01: odnośnie 6) podasz jakiś przykład designu o którym wspominasz?
M0
  • Rejestracja:ponad 4 lata
  • Ostatnio:4 miesiące
0

Coś się ciekawego ostatnio pojawiło u Was na rozmowach? Może napiszecie kolejne Wasze pytania jakie mieliście ostatnio na rekrutacjach? Lub pytania jakie Wy jako rekrutujący zadawaliście

RR
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 5 godzin
  • Postów:42
0

Mnie na stanowisko Senior Java Developer zapytano o OLAP - w ogóle nie miałem pojęcia, co to jest... Czy dzisiaj java dev powinien dodatkowo być analitykiem danych?

PR
nie musi, ale warto znać podstawowe akronimy od bazy danych, chociażby czym jest data warehouse
mistrzYoda
Szczęścia nie miałeś.Wiedzieć nie możesz, co czat wylosować może.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)