Algorytmy na rozmowie kwalifikacyjnej

0

Niedługo będę się starał o pracę na juniora Java. Czytałem, że często na rozmowach rekruterzy proszą o zaimplementowanie danego algorytmu. Ta strona http://www.algorytm.org chyba ponad 100 algorytmów. Których polecacie się uczyć?

3

Są książki typu "cracking coding interview", które opisują te najczęściej spotykane zadania/algorytmy na rozmowach kwalifikacyjnych. Jest to trochę kucie pod egzamin, ale póki nie masz kilku lat doświadczenia to raczej nie możesz wybrzydzać, że takie pytania są trochę durne i nijak się mają do codziennej pracy statystycznego programisty.

0

Jest to trochę kucie pod egzamin, ale póki nie masz kilku lat doświadczenia to raczej nie możesz wybrzydzać, że takie pytania są trochę durne i nijak się mają do codziennej pracy statystycznego programisty.

Świeta racja!

1

Ja lubie takie pytania, bo lubie prace z inteligentnymi ludzmi. Ważne zeby to nie byla podstawa rekrutacji, tylko dodatek. Prosty algorytm i proste zadanie na złożoność obliczeniową dużo mówi o kandydacie i bardzo sobie chwalę, że jest to u mnie część rekrutacji na programistów i testerów.

0

Ja z kolei chciałbym się dowiedzieć czy na rekrutacji zdarzają się zadania z matematyki?

7

Tak, mi kazali np. udowodnić że dla równania a^n + b^n = c^n dla a, b, c nie istnieją liczby naturalne większe od 2 które spełniałyby to równanie. Było ciężko ale ostatecznie dostarczyłem im spójny dowód i dostałem pracę.

0
loza_szydercow napisał(a):

Tak, mi kazali np. udowodnić że dla równania a^n + b^n = c^n dla a, b, c nie istnieją liczby naturalne większe od 2 które spełniałyby to równanie. Było ciężko ale ostatecznie dostarczyłem im spójny dowód i dostałem pracę.

Istnieją! Tylko dowód gdzieś mi się zapodział

0

Problem na rekrutacjach jest taki, że osoby pytające o algorytmy sprawiają wrażenie, jakby miały je wykute na pamięć, zupełnie bez zrozumienia tematu.
np. Na jednej rozmowie gość kazał mi posortować liczby z przedziału 1~100, to posortowałem je RADIXEM, a on na to, że powinienem był posortować Quicksortem, "bo jest najszybszy".
Gość miał wkute, że złożoność obliczeniowa jest nlnn, ale już to kiedy się on nadaje, ani to, że Radix ma złożoność n to już zupełnie nie wiedział.
Jak powiedziałem o tym, że quicksort wielowątkowo się zupełnie nie nadaje, to chyba przkroczyłem jakąś barierę, bo zaczął się dziwnie emocjonalnie zachowywać.

Same zadania algorytmiczne też nie bardzo mają sens bo:

  1. Przydatne algorytmy mają juz gotowe, przetestowane i zoptymalizowane implementacje, więc to trochę jakby pisać mavena od nowa(w sumie w JS tak robią, ale to jeszcze nie znaczy, że to dobry pomysł)
  2. Nikt logiczny nie może oczekiwać, że ktoś zestresowany w godzinę wymysli jakiś sensowny algorytm
  3. Odwalenie pamięciówki bez zrozumienia tematu - bo to jest prawdzane - jest beznadziejnym pomysłem.

Trochę się posprzeczaliśmy, a firma później nawet nie odpisała więc trochę hejtuję i nie sugeruj się za bardzo tym co napisałem.

@loza_szydercow
10/10 :D

0
programista0k napisał(a):

Niedługo będę się starał o pracę na juniora Java. Czytałem, że często na rozmowach rekruterzy proszą o zaimplementowanie danego algorytmu. Ta strona http://www.algorytm.org chyba ponad 100 algorytmów. Których polecacie się uczyć?

Na pewno każdy szanujący sę koder powinien umieć szczelić z palca heapsortem,
implementacją tablicy haszującej i operacjami na niej, listą jedno i dwukierunkową i operacjami na niej, implementacją grafu. Takie tam podstawowe podstawy z 1szego roku studiów. Ale wątpię co by na programistę Java, czyli funkcję małpy kodującej pytali o tak "zaawansowane" rzeczy. xD Chyba, a jak tak to pewnie rozmawiamy o posadzie gdzie zaczyna się wynagrodzenie o jakiś tysiak więcej niż normalnie na juniora. xD

0
Uczynny Młot napisał(a):

Ja z kolei chciałbym się dowiedzieć czy na rekrutacji zdarzają się zadania z matematyki?

Tak. Na jakichś, na jakieś stanowisko, na pewno.

0
Trzeźwy Kret napisał(a):

Problem na rekrutacjach jest taki, że osoby pytające o algorytmy sprawiają wrażenie, jakby miały je wykute na pamięć, zupełnie bez zrozumienia tematu.

To znacy, że jesteś za dobry do tej firmy xD

np. Na jednej rozmowie gość kazał mi posortować liczby z przedziału 1~100, to posortowałem je RADIXEM, a on na to, że powinienem był posortować Quicksortem, "bo jest najszybszy".

A umiał to udowodnić za pomocą dowodu? xD

Gość miał wkute, że złożoność obliczeniowa jest nlnn, ale już to kiedy się on nadaje, ani to, że Radix ma złożoność n to już zupełnie nie wiedział.
Jak powiedziałem o tym, że quicksort wielowątkowo się zupełnie nie nadaje, to chyba przkroczyłem jakąś barierę, bo zaczął się dziwnie emocjonalnie zachowywać.

A umiał się przyznać do niewiedzy?

Same zadania algorytmiczne też nie bardzo mają sens bo:

  1. Przydatne algorytmy mają juz gotowe, przetestowane i zoptymalizowane implementacje, więc to trochę jakby pisać mavena od nowa(w sumie w JS tak robią, ale to jeszcze nie znaczy, że to dobry pomysł)

Nie przesadzajmy, na programistę niskopoziomowego mają jak najbardziej. I w kilku innych przypadkach zapewne również. Ale to nie są stanowiska gdzie szare małpy kodujące kiedykolwiek wetkną chociaż swój czubek nosa.

  1. Nikt logiczny nie może oczekiwać, że ktoś zestresowany w godzinę wymysli jakiś sensowny algorytm
  2. Odwalenie pamięciówki bez zrozumienia tematu - bo to jest prawdzane - jest beznadziejnym pomysłem.

Jes, yt ys!

Trochę się posprzeczaliśmy, a firma później nawet nie odpisała więc trochę hejtuję i nie sugeruj się za bardzo tym co napisałem.

Jak to polskie janusze ajti. Jeśli zaginasz rekrutera znaczy, że jesteś lepszy od większości pracowników, bo zwykle betek nie przydzielają do odsiewania kandydatów.

0

@Brunatny Kura
Sądzę, że gość po prostu był nieprzygotowany do rekrutacji, bo może nie miał czasu albo został nominowany na ochotnika.

Zupełnie nie czuję się lepszy niż większość pracowników tamtej firmy, a przynajmniej nie w faktycznej pracy, bo forntu np nie umiem wcale, a backendowych frameworków też jakoś za dużo nie znam.
Dziwne tylko, że gość pytał z tego czego sam nie rozumiał.

Nie umiał udowodnic, że, Quicksort byłby szybszy, bo w tamtym przypadku(and-64, i tylko 100 różnych wartości, tablica cała w pamięci i tak) Radix był (naj?)szybszy, więc nie dało się udowodnić inaczej.

Nie przesadzajmy, na programistę niskopoziomowego mają jak najbardziej. I w kilku innych przypadkach zapewne również. Ale to nie są stanowiska gdzie szare małpy kodujące kiedykolwiek wetkną chociaż swój czubek nosa.

Fakt, założyłem język wysokopoziomowy.

0
Trzeźwy Kret napisał(a):

Fakt, założyłem język wysokopoziomowy.

Ja też. Większość programowania kernelowego obecnie wykonuje się w języku wysokopoziomowym, którym jest C.

0
Trzeźwy Kret napisał(a):

@Brunatny Kura
Sądzę, że gość po prostu był nieprzygotowany do rekrutacji, bo może nie miał czasu albo został nominowany na ochotnika.

Zupełnie nie czuję się lepszy niż większość pracowników tamtej firmy, a przynajmniej nie w faktycznej pracy, bo forntu np nie umiem wcale, a backendowych frameworków też jakoś za dużo nie znam.
Dziwne tylko, że gość pytał z tego czego sam nie rozumiał.

Z taką wiedzą o algorytmach zawracasz sobie dupę webdevem?

0

@ Brunatny Kura
Backend Javovy i trochę opsu.
Nie mniej jednak frameworków do backendu jest dużo, a ja znam tylko jakiś skrawek z którym pracowałem, więc na 100% jakby chciał to mógłby mnie bez trudu zagiąć merytorycznie w tematach przydatnych w faktycznej pracy.

1
Wesoły Rycerz napisał(a):

@ Brunatny Kura
Backend Javovy i trochę opsu.
Nie mniej jednak frameworków do backendu jest dużo, a ja znam tylko jakiś skrawek z którym pracowałem, więc na 100% jakby chciał to mógłby mnie bez trudu zagiąć merytorycznie w tematach przydatnych w faktycznej pracy.

Japrdl. Co za czasy, gdy o byciu lub nie "dobrym programistą" decysuje znajomosc na pamiec dokumentacji, buguw i bledow projektowych frameworkow, a nie umiejestnosci konstruktywnego i tworczego myslenia w polaczeniu z wiedza teoretyczna z podstawowych zagadnien informatycznych. Z tego potem rodza sie seniorzy co jak im zabierzesz framework Od razu spadają do poziomu juniora.

0

Podstawowa znajomośc algorytmów powinna być żeby ludzie wiedzieli kiedy stosować LinkedList a nie ArrayList.

7

mysle ze zakodowanie jakis prostych algorytmow powinno byc na rozmowie niezaleznie od tego czy to entry level czy java ninja senior architect. wiekszosc rekrutatorow raczej zadaje proste rzeczy, ktore powinienes juz umiec (bo przeciez chcesz byc profesjonalista, nie?). jesli pytaja o kosmosy to znaczy ze a) nie chcesz tam pracowac bo nie maja pojecia co robia lub b) to za wysokie stanowisko dla ciebie

0

Najczęściej jak są algorytmy to jest codility: https://codility.com/programmers/lessons/1-iterations/

1

nie wiem czy najczesciej, ja tam sie tylko pare razy spotkalam. imo codility to kretynizm i ciezko mi sobie wyobrazic powody dla ktorych mialabym rozwazac prace w firmie ktora tego uzywa.

0

@katelx:
Jakie algorytmy powinienem znac jako programista java?
Wystarczy mi sama znajomosc tego do czego algorytm jest, do czego nie jest, jakie ma wady i zalety, czy musze go tez pamietac?

0

No i jak tu niby "programiści Java" piszą takie rzeczy to siara później powiedziec że programuje się w Javie :D

0
scibi92 napisał(a):

No i jak tu niby "programiści Java" piszą takie rzeczy to siara później powiedziec że programuje się w Javie :D

Bo to tacy programiści z samokształcenia nieobciążeni zbędną teorią.

0

Bo to tacy programiści z samokształcenia nieobciążeni zbędną teorią.

No ale właśnie chodzi o to że wykuł teorię a nie umie naiwnej implementacji napisać. Zresztą nikt nie mówi że będziesz musiał robić bubble sorta w pracy ale to że będziesz pisał algorytmy na podobnym poziomie może być faktem, takie bardziej sprawdzenie czy umiesz operować na kolekcjach.

0

Ja ostatnio mam (nie)przyjemność odpytywać ludzi podczas rekrutacji i powiem że to jest ciężka batalia.
Trafiają się goście, który naprawdę wymiatają ze znajomości javy, naprawdę rozumieją o czym mówią - takie sprawiają wrażenie.
Potem prościutki kod do napisania rekurencyjnie - no i tu rozmowa się kończy.

Widzę, że nie lubicie codility ale to jest naprawdę fajne narzędzie z punktu widzenia rekruterów. Ostatnio nam zabrali i trzeba każdego odpytywać :(. Nie po to aby gnębić kandydatów czy kogoś poniżać - zwyczajnie aby uniknąć sytuacji jak powyżej. Taka rozmowa zajmuje czas wielu osób, które muszą ją przygotować, przeprowadzić i to wszystko pozdzwaniać.
A potem przychodzi gość, który nie rozumie rekurencji, albo "tak w zasadzie to ja ostatnie parę lat to tak biernie javy używam".

Nigdy nam się nie zdarzyło NIE zatrudniać kogoś kto pisze brutal forca ale wyjaśnia ze to jest n^2, n^n bo za mało czasu i teraz bardziej chce oddać działający kod, ale jest w stanie pogadać co można by z tym zrobić aby zejść ze złożonością.

A z drugiej strony jak przyjdzie gostek, który naprawdę wymiata to ma okazję się pochwalić/błysnąć przy algorytmach.

2

Jak ktoś idzie do pracy związanej z webówką a dostaje test codility to owa firma sobie jaja robi z kandydata. Raz, że te testy nie są proste, dwa zajmują masę czasu, trzy są całkowicie pozbawione sensu. Ile razy programista siedzący w webie wykorzysta algorytm rekurencji? większość rzeczy jest już dawno zaimplementowana i budowanie od zera list czy hash map to sobie można trenować w domu czy na 1 roku studiów..

testy z algorytmiki są dobre, ale jeżeli wymaga tego faktycznie zakres obowiązków, a nie trzeba umieć bo trzeba i kropka.

nie każdy programista jest dobrym algorytmikiem, co nie znaczy, że nie jest programistą, bo może znać świetnie architekturę, wydajne sposoby budowania całości systemów...

2

Miałem już kilka rekrutacji gdzie jako kandydat odpuszczałem rozmowę gdy tylko padała prośba o zakodowanie czegoś na kartce. Z całą uprzejmością ale sorry - jeśli ktoś ma moje referencje, projekty, do tego wcześniej sensownie rozmawiamy na temat różnych rozwiązań i praktycznych problemów z nimi związanych to jak pada coś takiego to czuję jakby ktoś tu do końca nie był poważny.

Pair programming rozumiem i akceptuję, zadania rekrutacyjne do zrobienia na spokojnie również. Kodowanie na kartce - nie. Takie samo zdanie mam o rekrutacjach gdzie pojawia się Codility. Trzeba się szanować.

0
loza_szydercow napisał(a):

Miałem już kilka rekrutacji gdzie jako kandydat odpuszczałem rozmowę gdy tylko padała prośba o zakodowanie czegoś na kartce. Z całą uprzejmością ale sorry - jeśli ktoś ma moje referencje, projekty, do tego wcześniej sensownie rozmawiamy na temat różnych rozwiązań i praktycznych problemów z nimi związanych to jak pada coś takiego to czuję jakby ktoś tu do końca nie był poważny.

W Google starzy wymiatacze, naprawdę dobrzy kodują NA TABLICY, piszą i tłumaczą co robią, dlaczego tak itd.

2

Jakie algorytmy powinienem znac jako programista java?
Wystarczy mi sama znajomosc tego do czego algorytm jest, do czego nie jest, jakie ma wady i zalety, czy musze go tez pamietac?

imo przede wszystkim wypada rozumiec jak dzialaja podstawowe kolekcje, do czego i dlaczego ich uzywac. przy takiej wiedzy implementacja 90% zadan rekrutacyjnych powinna byc mozliwa.

Potem prościutki kod do napisania rekurencyjnie - no i tu rozmowa się kończy.

ok, tez jestem zdania ze dobry dev powinien umiec uzywac rekursji ale to powinien byc ewentualnie element malo znaczacego testu na logiczne/analityczne myslenie a nie cos co decyduje o byc albo nie byc w firmie. java to nie jest jezyk w ktorym korzysta sie z rekurencji i ktos kto nie bawi sie w haskelle najprawdopodobniej nie ma powodu aby po studiach rekurencji uzywac do implementacji rozwiazan. a nawet gdyby to robil (t.j. rekursje w javie) to porzadne code review powinno go oduczyc takich glupot.

Widzę, że nie lubicie codility ale to jest naprawdę fajne narzędzie z punktu widzenia rekruterów.

nie jest fajne bo wiekszosc zadan na codility udowadnia jedynie [nie]umiejetnosc rozwiazywania zadan na codility, rownei dobrze mozecie robic kandydatom testy na iq

Ostatnio nam zabrali i trzeba każdego odpytywać :(. Nie po to aby gnębić kandydatów czy kogoś poniżać - zwyczajnie aby uniknąć sytuacji jak powyżej. Taka rozmowa zajmuje czas wielu osób, które muszą ją przygotować, przeprowadzić i to wszystko pozdzwaniać.

chcecie zatrudnic profesjonaliste ktoremu bedziecie placic sporo pieniedzy (skoro umie rekurencje ;)) i ktory jeszcze wiecej dla was zarobi a tniecie koszty na jednej z wazniejszych rzeczy - pierwszym wrazeniu.
jak mi firma wyjezdza z tekstem ze bardzo lubia moje cv i chca ze mna sie spotkac ale najpierw musze zrobic zadanko online i moze psychotest to kaze im sie gonic i to wlasnie polecam kazdemu, moze wtedy sie naucza :)
kandydatowi tez zajmuje czas zeby sie przygotowac, przyjsc i pogadac z wami. chcecie dobrych ludzi to utrzymujcie jakies standardy, nie wazne czy jestescie 5 osobowym elitarnym startupem czy czescia wielkiego korpo - imo to straszne januszowanie podchodzic do tego w sposob jaki opisujesz. jak wam szkoda czasu na rekrutacje to zaplaccie agencji ktora wylowi wam dobrych kandydatow.

A potem przychodzi gość, który nie rozumie rekurencji, albo "tak w zasadzie to ja ostatnie parę lat to tak biernie javy używam"

protip - mozecie oszczedzic czasu sobie i kandydatowi robiac phone screening 15-30 minut odsiewajac rekurencjofobow w kulturalny sposob

W Google starzy wymiatacze, naprawdę dobrzy kodują NA TABLICY, piszą i tłumaczą co robią, dlaczego tak itd.

i co z tego?

0
katelx napisał(a):

java to nie jest jezyk w ktorym korzysta sie z rekurencji

Człowiek cale życie się uczy a tego nie wiedział.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.