Élet az informatika fellegvárában

The Silicon Valley life

The Silicon Valley life

Az interjúzásról

2014. június 23. - daneeesh

Az utóbbi 2-3 hónapban aktív szerepet kaptam én is az új jelentkezők interjúztatásában, így végre megtapasztaltam, hogy milyen az egész folyamat másik oldalán lenni és mik azok, amik fontosak egy elsősorban informatikai cégnek itt a jelentkezéskor.

Először is, az önéletrajzot alaposan valószínűleg csak 2-3 ember olvassa el, hacsak nincs benne valami nagyon különleges vagy vicces. Az első ember a HR-es, aki továbbküldi az adott csapat vezetőjének, hogy döntse el, hogy érdemes-e az első körös telefonos interjút felajánlani a jelentezőnek. Amennyiben úgy döntenek, hogy igen, akkor az önéletrajz továbbkerül a telefonos interjúztatóhoz, aki az adott csapat egyik tagja és felméri a terepet, hogy nagyjából mire lehet számítani. Ha az első telefonos interjún jól teljesít az ember, akkor jön a következő telefonos kör egy kicsit nehezebb kérdéssel és ha ez is jól megy, akkor meghívják a jelentkezőt a céghez egy napra további interjúkra. Aki eljut idáig, annak már nem nagyon nézik az önéletrajzát, inkább csak arra kíváncsiak, hogy hogyan teljesítene az adott pozícióban.

A legmeglepőbb dolog a telefonos interjúkban, hogy egy egyszerű dolgon mennyire könnyen el tudnak bukni az emberek. Például:

Data Analyst pozícióba jelentkezőknek tudniuk kell programozni, úgyhogy nálunk a telefonos interjú során kapnak egy egyszerű programozási feladatot, amit a stypi-n keresztül kell megoldaniuk amíg beszélgetnek az interjúztatóval. Ilyen feladat például, hogy írni kell egy programot, ami megfordítja a következő három szót: "rock paper scissors" (kő, papír, olló) és azt adja végeredménynek, hogy "scissors paper rock". Amilyen egyszerűnek tűnik és amilyen egyszerű kéne, hogy legyen szinte mindenkinek, aki számítástechnikát tanult, meglehetősen sokan buknak el ezen, de így könnyen ki lehet szűrni, hogy kit nem érdemes behívni a céghez a későbbiekben.

Aki sikeresen veszi a két telefonos interjút, azt meghívjuk, hogy töltsön velünk egy napot, amikor kapnak egy bemutatót a programról és 3-5 technikai interjún vesznek részt. Ezeket mind az adott csapat tagjai tartják vagy olyanok, akikkel szorosan együtt kellene dolgoznia az illetőnek és különböző témákra épülnek fel. Ilyen témák lehetnek például algoritmusok, hibajavítás a programban, rendszertervezés, közös programozás, stb.  Én eddig egy kivétellel mindig közös programozást tartottam és több okból kifolyólag kevés ember vette sikerrel a kérdésemet.

Röviden a következő a probléma, amire körülbelül 45-50 perce van a jelentkezőnek: adott egy táblázat a bankoktól kapott néhány tranzakcióval, ahol ezek közül hármat egyesíteni kell megadott szempontok alapján, hogy a rendszerünk a későbbiekben megfelelően tudja ezeket feldolgozni. A jelentkező feladata, hogy írjon egy programot a számítógépen - ilyenkor beviszem a laptopom és összekötjük egy TV-vel, hogy mi is lássuk, hogy mi történik-, ami megcsinálja ezt. Az adatokat az interjú előtt könnyen használható formába alakítom át és írtam néhány tesztet, amik ellenőrzik a végén, hogy jó-e a megoldás, így tényleg csak az algoritmus részére kell fókuszálnia az illetőnek.

Hol szoktak leginkább elbukni az emberek?

  1. Nem értik meg a feladatot. Mivel az adatok banki folyamatokat reprezentálnak és nem mindenkinek van pénzügyi háttere, ezért eltarthat egy darabig, amíg átbeszéljük, hogy mi is történik, de ezzel nincs semmi baj, ha valaki jó kérdéseket tesz fel közben és megérti a feladatot. A probléma ott kezdődik, ha valaki túlságosan leegyszerűsíti/megnehezíti a kérdést, elvész a részletekben, vagy miután végigbeszéltük vele, hogy mi történik, mást csinál. Végeredményben a kérdés annyiból áll, hogy meg kell találni három sort, utána pedig egyesíteni kell őket. Ha ez sikerül, akkor belemehetünk egy-két bonyolultabb verzióba is, de általában erre nem marad idő.
  2. Nem használják a kezükben lévő eszközöket. Az interjú során az embereknek teljes kontrolljuk van a számítógép fölött és rendelkezésükre áll egy böngésző, a nyers adatok, egy szövegszerkesztő a programozáshoz, és egy terminál (van ennél jobb magyar kifejezés a unix shell-re?), hogy menetközben tesztelhessék a dolgokat. Nagyon kevesen éltek eddig megfelelően ezekkel az eszközökkel és általában mindenki megragad a szövegszerkesztőnél és a táblázatnál, pedig a böngésző és a terminál is elég sokat tud segíteni. (És arról még nem is beszéltünk, hogy ötödik eszköznek ott van az interjúztató, akitől nyugodtan lehet kérdezni és lehet, hogy a legnagyobb segítséget tudja nyújtani...)
  3. Nem próbálják meg felfedezni az adatokat. Mivel Data Analyst pozícióra jelentkeznek az emberek, így valamennyire elvárjuk, hogy érdekeljék őket a nyers adatok és amennyiben a kezükbe adjuk őket, az első reakció ideális esetben az lenne, hogy elkezdik böngészni azokat. A terminál segítségével megnézhetnék például, hogy pontosan hogyan is dolgozza fel a nyers adatokat a programom és milyen formátumba alakítja át őket. Ez a program python-ban van, úgyhogy minden további nélkül lehet futtatni és kísérletezni vele, azonban sokan nem jönnek rá erre.

Emellett a három dolog mellett még számos egyéb dolgon is el lehet bukni, de ha ezek megvannak, akkor általában minden más is megy. Ez a példa elég konkrét a mi cégünkkel és kérdésünkkel kapcsolatban, de általánosságban elmondható, hogy a legtöbb problémát ez a három dolog okozza mindenhol. Ha valaki megfelelően tudja kezelni a kérdést (máshogy kell egy kezdőnek és egy alelnöknek megközelítenie ugyanazt), rendesen használja az eszközöket, amiket adnak neki, és elegendő érdeklődést mutat az adott területtel kapcsolatban, akkor nagy valószínűséggel akárhol meg fogja állni a helyét az interjú alatt. Persze ha valaki sikerrel veszi az összes akadályt, attól még nem feltétlenül kap állásajánlatot a cégtől, de már egy hatalmast lépést tett, hogy hamarosan új állása legyen és remélhetőleg segített benne ez a kis útmutató is. :)

A bejegyzés trackback címe:

https://siliconvalleylife.blog.hu/api/trackback/id/tr146303918

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

213-as számú elítélt (törölt) 2014.06.23. 21:12:41

"terminál (van ennél jobb magyar kifejezés a unix shell-re?)"

A terminál a ~hivatalos, én legtöbbször ezzel találkozom magyar szövegkörnyezetben.

daneeesh 2014.06.23. 22:06:33

@213-as számú elítélt: itt is azt használják, de gondoltam, hogy a unix shell-t biztosan senki nem érti félre. viszont ezek szerint a terminált se... köszi! :)

pingwin · http://pingwin.blog.hu 2014.06.23. 22:06:57

@213-as számú elítélt: szerintem is, amúgy meg, aki valamennyire is foglalkozik vele így is, úgy is megérti

qwertzu 2014.06.23. 22:59:03

"Ilyen feladat például, hogy írni kell egy programot, ami megfordítja a következő három szót: "rock paper scissors" (kő, papír, olló) és azt adja végeredménynek, hogy "scissors paper rock". "

És itt most tényleg a feladatot a legjobban megoldó
return "scissors paper rock";

programra vagytok kíváncsiak, vagy arra hogy a feladat hülyeségét érzékelve kitalálja, hogy mit is akart az ügyfél?

daneeesh 2014.06.23. 23:20:58

@qwertzu: arra vagyunk kíváncsiak, hogy nem csak "paper rock scissors"-ben (vagy "scissors paper rock"-ban) tud gondolkodni az illető, hanem akármilyen szövegben vagy adatban, amit fel lehet bontani egy listára és ahol meg lehet fordítani egy egyszerű algoritmussal a benne lévő szavak (vagy akármi más) sorrendjét. Ezt nyilván nem egy senior software engineer-től fogja valaki megkérdezni, hanem egy valószínűleg max 1-2 év tapasztalattal rendelkező embertől. Ettől függetlenül meglepően könnyen el lehet bukni ezen a kérdésen...

rushman 2014.06.23. 23:43:16

Stack<String> stack = new Stack<>();
for (String item : Arrays.asList("rock", "paper", "scissors")) {
stack.push(item);
}
while (stack.size() != 0) {
System.out.print(stack.pop() + " ");
}
:)

Stypi helyett egy IDE-t használva lehet, hogy több lenne a siker. A code assist azért sokat tud segíteni egy stresszes interjú közben.

Imbahouse 2014.06.24. 01:22:56

Ez a stypi valamiféle Java nyelv? (utolso kommentelo szintaktikajat neztem csak, telorol vagyok)

daneeesh 2014.06.24. 02:44:43

@rushman: valami ilyesmi, igen. :) Amúgy nyilván figyelembevesszük, hogy stressz alatt vannak, úgyhogy nem is arra megy ez ki, hogy tökéletes legyen a syntax, hanem, hogy jó legyen az algoritmus. És az alapokat IDE nélkül is illik tudni, az inkább csak arra való, hogy meggyorsítsa a munkád a jövőben.

daneeesh 2014.06.24. 02:49:44

@Imbahouse: a stypi egy olyan online szövegszerkesztő, amit többen egyszerre használhatnak és valós időben látják, hogy ki mit csinál. Emellett be lehet állítani mindenféle programozási nyelvet, hogy megfelelően jelölje ki, illetve kezelje a kódot, amit írnak. Így egyszerű azonnal kijavítani kisebb hibákat vagy rákérdezni különböző dolgokra, miközben a telefonon beszéltek.

szaGértő 2014.06.24. 11:42:44

Hát igen, vannak érdekes dolgok. Nekem az idén az volt a csúcs, hogy az irodai asszisztens jelölt nem tudta, hogyan kell megcímezni egy borítékot. ;)

2014.06.24. 12:42:24

@rushman: látom megértetted a post lényegét :D

Sesquatch Hegyi 2014.06.24. 14:20:50

@rushman:

Na akkor én már itt félreértettem a feladatot (bár gondolom lehetne kérdezni) :)

Nem az volt a cél, hogy venni kell bármilyen szöveget és az abban található három szót megfordítani?

Mert akkor elvileg az algoritmusnak meg kell találni a szövegben a szavak elejét és végét is...

Amúgy a bejegyzés érdekes és hasznos. Bocs, hogy ilyen szintre viszem a beszélgetést, de a hülye programozós agyamat baszarintja a kérdés :)

nagyo78 2014.06.24. 16:43:41

String test = "rock paper scissor";
List<String> m_tokkensList = new ArrayList<String>();

StringTokenizer st = new StringTokenizer(test);

while (st.hasMoreTokens()) {
m_tokkensList.add(st.nextToken().toString());
}

for (int i = m_tokkensList.size(); i > 0; i--){
System.out.println(m_tokkensList.get(i-1));
}

Így bármi lehet a forrásban.

daneeesh 2014.06.24. 18:00:58

@Sesquatch Hegyi: De, a feladat lényege, hogy van egy szöveged és megfordítod benne a szavak sorrendjét, viszont egy ilyen megoldás esetében jönnének azok a kérdések, hogy mi van akkor, ha nem egy listát kapsz kézhez, hanem egy String-et, mit csinálsz az extra szóközzel a végén, amit ad ez az algoritmus, stb. De nyilván most nem egy interjún vagyunk, úgyhogy kell mindenbe belemenni... :)

@nagyo78: mi a baj egy egyszerű test.split("\\s+")-el és miért teszed új sorba az összes szót? :)

nagyo78 2014.06.24. 18:08:10

@daneeesh: A test.split() is egy megoldás, nekem a tokenizer volt a szimpatikusabb. A kiíratás meg lehet amilyet csak kívánsz. :) Ha attribútumként kapnám a string-et, akkor először adnék neki egy .trim()-et.
Amúgy net használható az interjún? Mert a működő szintaktikákat onnan szoktam másolni, ha ritkán vagy sosem használt dologról van szó. Mellesleg nem akarok itt okoskodni, csak 2 éve programozom, szóval fejből kevés dolog megy :P

rushman 2014.06.24. 19:37:12

@daneeesh: Úgy érzem, új feladatot kell találnod az interjúra. :)

daneeesh 2014.06.24. 22:14:51

@nagyo78: igazából a stypi ugye egy honlap és neten kell, hogy legyen a jelentkező és mi nem látjuk, hogy mit csinál éppen a számítógépén, úgyhogy akár használhatná is. De ha megmondja, hogy valami szintaktikai dolog épp nem jut eszébe, akkor segítünk, mivel a szintaktikára ott vannak az IDE-k.

@rushman: szerintem ettől függetlenül viszonylag kevesen fognak jelentkezni olyanok, akik tudnak magyarul és olvasták ezt (ha egyáltalán bárki is fog). De természetesen nem csak egy ilyen kérdés van a tárunkban... :)

Imbahouse 2014.06.25. 00:45:51

Mögöttem 8 év áll, de erről a stripyről most hallottam először. Ha már itt vagyok viszont villámkérdés: milyen pozíciókba kerestek harcosokat?

daneeesh 2014.06.25. 08:02:58

@Imbahouse: elég sok pozícióba keresünk embereket, a honlapon fel van sorolva mindegyik és részletes leírás is van róluk :)

azabaj 2014.08.12. 09:43:15

%(rock paper scissor).reverse_each {|i| print i, " " }
süti beállítások módosítása