Rozmowa kwalifikacyjna w Google

W 2007 roku dwa razy otarłem się o rozmowę kwalifikacyjną z Google. Przed dalszą lekturą polecam zapoznanie się z pierwszą i drugą historią.

Rok kończyłem zawiedziony. Nie udało się, a było tak blisko. Miałem jednak silne postanowienie próbowania w kolejnym.

Próbować nie musiałem.

3 stycznia w mojej skrzynce czekał list zatytułowany „Hello from Google„.

Rozmowa kwalifikacyjna w Google

Google o mnie pamięta!

Odezwała się Maria, otwierając maila kilkoma ciepłymi słowami wstępu, które brzmiały tak miło, że nie mogę ich nie zacytować:

Hi XXXX,

Happy New Year from everyone here at Google. I hope you enjoyed spending the festive season with your family and friends and are looking forward to an exciting year 2008.

Dalej, kilka słów przypomnienia – „spotkaliśmy się na wykładzie…”zapamiętała mnie!

Kolejny akapit: rekrutacja w Krakowie dobiegła końca. Maria jednak zadała sobie trud, by porozmawiać z kilkoma pracownikami i poszukać dla mnie odpowiedniego projektu. Pierwsze odpowiedzi na moje CV były bardzo pozytywne.

Marii udało się znaleźć dla mnie propozycję stażu na wakacje w Szwecji, w zespole zajmującym się zagadnieniami komunikacji oferowanej przez Google. Praca wymagała znajomości Flasha (w którym miałem już spore doświadczenie), zaś zespół… Zajmował się tym, czego ja już dokonałem i opisałem w CV (oczywiście, nie tylko).

Maria poprosiła o jak najszybszą odpowiedź, czy taka propozycja mi odpowiada.

Nadzieje rosną…

Oczywiście, Google’om nie mówi się „nie”, więc już po dwóch dniach szef zespołu w Szwecji miał okazje wyrazić swoją aprobatę na temat mojej kandydatury.

Zapytywał jednak, czy mógłbym przylecieć na początku czerwca lub w środku sierpnia (na trzy miesiące), bowiem wakacje w Szwecji są w lipcu i sierpniu, przez co większość ekipy by była nieobecna, a chcą uniknąć dołączania się do projektu w trakcie jego realizacji.

Odpisałem, że porozmawiam z moim dziekanem na temat możliwości przesunięcia sesji normalnej lub poprawkowej. Zanim to zrobiłem, Maria kulturalnie przeprosiła za takie trudności – ma klasę.

Po trzech dniach byłem już po rozmowie z Pełnomocnikiem Dziekana ds. Informatyki Stosowanej WFAIS UJ. Jak można się spodziewać po Uniwersytecie, zostałem zapewniony, że nie będzie trudności. Mało tego: jeśli odbędę ten staż, otrzymam dodatkowe punkty ECTS!

Reakcja Marii była… Sami oceńcie 😉


me: Yeah, the University is very fond of Google 🙂
Maria: YAY!!!

Przy okazji poszukiwań informacji o Google w Internecie, trafiłem na informację, że studenci i absolwenci UJ w 2005 roku mieli okazję wyjechać na praktyki do siedziby Google w Dubilinie. Właśnie dlatego kocham UJ!

Mógłbym napisać równie dużo na temat tego, jak miło można prowadzić konwersację w oparciu o moje rozmowy z Marią. Absolutnie zdeklasowała osoby, które mnie rekrutowały do IBM.

Mam rozmowę!!!

Następnego dnia Maria uraczyła mnie mailem: będę miał rozmowę kwalifikacyjną! Przekazała to w taki sposób, że byłem pewien – nie tylko ja tu jestem ogromnie podekscytowany! Nie omieszkała dodać: „fingers crossed” 🙂

Podałem kilka dogodnych terminów na rozmowę telefoniczną i Maria ustawiła mnie z jednym z inżynierów oprogramowania z tamtejszego zespołu, Mikaelem, na piątek 18 stycznia. Oto jej wskazówki (z gotowca):

Od tej rozmowy zależeć będzie, czy będziemy kontynuować proces rekrutacji. Rozmowa potrwa 45 minut i odbędzie się w języku angielskim.

 

Tematy, które może chcieć poruszyć Twój rozmówca, to między innymi:

– koncepcje podstaw budowy komputerów

– rozwiązywanie problemów, zdolności do analitycznego i projektowego myślenia, kompetencje związane z techniką

– programowanie, tak teoretyczne, jak praktyczne (w danym języku lub pseudokodzie)

– problemy logiczne i algorytmy

– projektowanie systemów

– zdolności projektowania i wdrażania algorytmów oraz znajomość Flasha

Innymi słowy, mogą mnie zapytać o wszystko.

Nie musisz znać pełnej i optymalnej odpowiedzi. Chcemy poznać Twój tok myślowy, dlatego ważne jest, byś wyrażał go słowami.

To z pozoru retoryczne zdanie jest kluczem do interviews z Google. Należy je traktować w pełni dosłownie – jak się później okazało, nie interesuje ich tyle, jakie języki znam, lecz jak dogłębnie. Nie chwalono mnie za genialny algorytm, lecz za to, jak „wpadałem” na jego usprawnienie. Podkreślam: tok myślowy jest kluczem w rozmowach z Google.

Musisz także posiadać stałe łącze oraz komputer pod ręką. Zapoznaj się z writely.com, ponieważ wraz z rozmówcą będziecie używać tamtejszych arkuszy do wymiany wiadomości i kodu.

Po tym można poznać, że mają stare gotowce 😉 Writely zostało bowiem kupione już dobrych wiele miesięcy temu przez Google i przekształcone w Google Docs & Spreadsheets. Otrzymałem także drugi mail informujący o utworzeniu wspólnego arkusza dla mnie i Mikaela pod podanym adresem.

Chociaż Twój rozmówca raczej o to nie zapyta, zachęcam do zapoznania się z produktami i usługami Google, co pomoże przybliżyć Ci idee towarzyszące rozwojowi firmy:

Produkty

Laboratoria

Korporacja

Reklamy

Dobry film informacyjny można także znaleźć na YouTube.

Przyglądnąłem się tym linkom na 30 minut przed rozmową. Niewiele pomogły, ale i tak warto odwiedzić.

Pamiętaj, że ta rozmowa ma określić co WIESZ, a nie, czego nie wiesz. Jeśli masz wątpliwości, nie wahaj się poprosić o sprecyzowanie pytania – rekrutujący z radością rozjaśni sprawę!

To jest ważny punkt, z którego trochę korzystałem. Bardzo istotne jest, by zrozumieć, jakiej odpowiedzi oczekuje rozmówca. Każde jego słowo musi być zrozumiałe.

Oczywiście, aż do momentu rozmowy, Maria wspierała mnie i wręcz kibicowała. Nigdy się z takim podejściem nie spotkałem, ale mogę powiedzieć, że jest świetne.

Nadchodzi czwartek, dzień przed rozmową…

Do trzech razy sztuka, się mawia.

Chciałbym, jednak tym razem dorwała mnie choroba. Gorączka wykluczyła jakiekolwiek algorytmiczne myślenie – czy można mieć większego pecha?

Późnym wieczorem wysłałem w tej sprawie maila do Marii (osoby pracujące w Google mają bardzo elastyczny czas pracy). Na szczęście, była bardzo wyrozumiała. Jeśli nazajutrz nie poprawi mi się, mam napisać, a ona będzie „happy to re-schedule”.

Pech chciał, że w piątek (i sobotę) czułem się równie źle. Maria wyraźnie przejęła się moim stanem zdrowia i zagadywała, jak się czuję.

Zajrzała do kalendarza Mikaela (tak, w Google używa się Google Calendar do ustalania spotkań!) i ustaliła rozmowę na wtorek, 22 stycznia.

O pracy jako rekruter

Jak widać, z Marią rozmawiało mi się świetnie.

Zafascynowany tym, jak radosna może być osoba na jej stanowisku, zacząłem wypytywać, jak dostać taką pracę.

Dowiedziałem się, że nie trzeba pracować wcześniej jako programista. Maria, zanim trafiła do Google, nabyła doświadczenie w rekrutacji ludzi z sektora IT w dużej niemieckiej firmie. Obowiązkowo jednak osoby zajmujące się rekrutacją muszą być dobre „technicznie”. Dowiedziałem się także, że głównym obowiązkiem Marii nie jest wcale rekrutacja – zajmuje się bowiem Stosunkami z Uniwersytetami.

Maria studiowała Biznes ze spacjalizacją na HR (w wolnym tłumaczeniu: zasoby ludzkie 😉 ) i rekrutację w Europie Wschodniej, tak więc całkiem konkretne rzeczy.

Zaznaczyła jednak, że w Google pracują różni ludzie. Jeden z pracowników był dobry w organizowaniu ogromnych imprez, inny właśnie skończył studia.

At Google it really does not matter too much what you have done. It is more important what you can do…the right attitiude.

Dla niejęzycznych: w Google nie jest istotne co już zrobiłeś, lecz czego możesz dokonać. Odpowiednia postawa.

Dodała także, że pewne zrozumienie i doświadczenie pomaga 😉 Sprawa ma się lekko inaczej w stosunku do programistów, ponieważ od tych wymaga się technicznych umiejętności…

Bardzo mnie podekscytowało to, w jaki sposób przedstawiła tą posadę Maria. Wiem już, co będzie moim drugim priorytetem po skończeniu doktoratu z informatyki: HR.

Maria dodała także, iż nawet jako programiści w Google, poznajemy dużo osób – wszyscy garną się na kampusy 🙂

Pierwsza rozmowa kwalifikacyjna z Google

Po trzech próbach, w końcu dostałem interview!

We wtorek zapewniłem sobie odpowiedni komfort i ciszę przed komputerem, otwarłem też niezbędne witryny: ling.pl, translate.pl (do tłumaczeń – nie przydały się), Gmail oraz… A jakże by inaczej: Google.com!

Mikael miał zadzwonić na mój domowy numer (przez komórkę gorzej słychać, może się wyładować itp.) o 15:30. O godzinie 15:00 stwierdziłem, że Google Docs to kiepski pomysł na wymianę kodu – zmiany nie są chyba widoczne w czasie rzeczywistym, lecz po zapisaniu arkusza. Jak jednak zdobyć adres rozmówcy?

W arkuszu utworzonym przez Marię zgłębiłem ustawienia udostępniania. Ujrzałem adres Mikaela i zagadałem. Okazało się, że on także miał właśnie to zrobić (miał pewne problemy z dostaniem się na Google Docs. erm 😛 ).

Szybka wymiana zdań i… Dzwoni! Alarm, że ktoś się włamuje do mieszkania 😀

Pomyślałem tylko „OMG” i poszedłem sprawdzić, co jest grane.

Okazuje się, że spadek napięcia w sieci powodował uruchomienie się alarmu. Wróciłem na stanowisko, szybkie wyjaśnienie i…

me: This is ok, you can call when you’re ready

3:32 PM Mikael: ring ring neo

Pytania z rozmowy kwalifikacyjnej

Zaczęło się od ustalenia rzeczy, które już były ustalone: na kiedy bym mógł przyjechać, jakie języki umiem… Ktoś ewidentnie nie czytał mojego CV 😉

Wreszcie, przeszliśmy do konkretów. Najpierw trochę teorii (poniższe odpowiedzi nie są pełnymi, które udzielałem):

Jak wytłumaczyłbyś nietechnicznej osobie, co dzieje się po wpisaniu adresu w przeglądarce i wciśnięciu Entera?

Co dzieje się naprawdę?

Na pierwsze pytanie dosyć łatwo odpowiedzieć.

Przy drugim powiedziałem trochę o DNSach, parsowaniu adresów (TLDki itp.), przesyłaniu plików przez różne protokoły itd.

Strona www działa powolnie. Jakie mogą być tego przyczyny? Jak temu zaradzić jako użytkownik i jako webmaster?

Tu miałem pole do popisu 🙂

Przez dobre kilkanaście minut nawijałem o możlwiościach przyspieszenia działania witryn i powodach ich powolności. Niektóre pomysły wyraźnie zaskoczyły (pozytywnie) Mikaela – odpowiedź była wyczerpująca nawet dla mnie 🙂

Dostajesz za zadanie napisanie aplikacji w języku, którego nie znasz. Masz dwa tygodnie. Co robisz?

Przekonałem Mikaela, że znając kilka języków, wystarczy poznać syntax nowego, by w nim pisać. Podałem, skąd i w jaki sposób bym zdobywał wiedzę.

Dodajmy, że masz to napisać na systemie, którego nie znasz. Co wtedy robisz?

Odpowiedziałem, że większość platform znam, zaś poznanie kolejnych przy dobrych umiejętnościach językowych to kwestia czasu.

Jak wziąłbyś się za napisanie serwera http?

Byłem szczery: nic takiego nigdy nie pisałem, więc nie znałem popularnych architektur. Mogłem jednak powiedzieć coś na temat ogólnego pisania serwerów i równoważenia obciążenia na kilka maszyn, co chyba w końcu zadowoliło rozmówcę.

Minęło 25 minut rozmowy…

Teraz sobie trochę pokodujemy. Powiedzmy, że mamy robota, który porusza się po schodach. Mamy także dostępną funkcję boolean step() i jej prawdpodobieństwo równe p, że wynikiem jej wywołania będzie wejście o stopień wyżej, oraz 1-p, że robot cofnie się o jeden stopień. Jak zaprojektujesz funkcję void StepUp() by mieć pewność, że po jej wywołaniu będziemy na wyższym schodku?

Pierwsze rozwiązanie, jakie zaproponowałem, opierało się na indeksowaniu schodków. Prawdopodobieństwa użyłem jedynie do oszacowania, ile iteracji będzie koniecznych do pojawienia się robota na wyższym schodku.

Pomińmy teraz prawdopodobieństwo. Jak zaprojektujesz tą funkcję, by nie korzystała z liczników?

Z początku nie wiedziałem co ma na myśli, mówiąc „without counters”, ale słusznie domyśliłem się, że chodzi o pozbycie się indeksowania schodków, czyli nie wiemy, na którym obecnie jesteśmy stopniu.

Przez 10 minut napisałem na chacie Gmaila cztery funkcje, udoskonalane wraz z kolejnymi wnioskami Mikaela. W końcu doszedłem do rozwiązania, które zaskoczyło nie tylko jego, ale nawet mnie, gdy później się nad nim zastanawiałem.

Można powiedzieć, że udało mi się błysnąć geniuszem 😉

Celowo nie będę przedstawiał swojego kodu – sami się zastanówcie 😉

Ależ ten czas leci. To wszystkie pytania, jakie dla Ciebie przygotowałem… A jakie Ty masz dla mnie?

Pytań zbytnio nie miałem, jednak miałem kontakt mailowy z Mikaelem, gdybym na jakieś wpadł. Zapytałem tylko:

Sam wymyślałeś te pytania, czy macie jakąś bazę?

Okazało się, że pytania gdzieś usłyszał. Wszyscy programiści w Google mają obowiązek przeprowadzania takich rozmów kwalifikacyjnych, więc wewnątrz firmy wymieniają się pomysłami.

To bardzo ciekawe podejście, bowiem każdy ma swój wkład w rozwój firmy, a w dodatku jego praca nie ogranicza się do klepania kodu.

Aha… Jak mi poszło? 😉

Odpowiedź była dosyć wymijająca – w ciągu kilku dni miał się ktoś ze mną skontaktować. Średnio mnie to ucieszyło, ale cóż począć…

Miałem wrażenie, że nieźle odpowiedziałem na zadane mi pytania i powinni się jeszcze odezwać.

Pożegnałem się z Mikaelem, wymieniając kilka ciepłych słów (choć sam rozmówca wydawał się być zmęczony – nie sądzę jednak, by mną).

Trochę wniosków

Przede wszystkim potwierdziło się, że w Google nie liczy się co już wiem, ale co mogę się dowiedzieć. Mikael wyjaśnił mi, że nie jest istotne, jakie języki umiem, bo i tak prędzej czy później zlecą mi coś, co będzie wymagało nauczenia się nowego. To według mnie dobra polityka – nie zatrudniać specjalistów od jednego języka, lecz osoby pojętne, które będą się rozwijać i mają chęć do nauki, wyzwań i poznawania nowych technologii.

Dowód ku temu pojawił się już w trakcie rozmowy. Mikael zaproponował, bym pisał kod w C lub jego następcach, ja natomiast zaproponowałem PHP, którego on nie znał (który jednak ja zdecydowanie preferuję) – oczywiście, zgodził się. Czasem mu tłumaczyłem mój kod, więc on także uczył się w trakcie tej rozmowy.

Może się wydawać, że pytań było niewiele, jednak rozmowa faktycznie trwała lekko ponad 45 minut.

Poziom angielskiego Mikaela był wystarczający. Zrobił jeden, czy dwa błędy, jednak mówił płynnie. Nie jest więc prawdą, że pracownicy Google muszą umieć perfekcyjnie angielski. Mało tego – wszystkie osoby z Google, z jakimi miałem przyjemność rozmawiać, miały inną narodowość. To słychać po akcencie i widać po nazwiskach. Pracują jednak wspólnie i poczułem tą przyjazną atmosferę przez telefon.

W trakcie rozmowy wpadałem na różne pomysły usprawnienia sposobów komunikacji w Google. Nie będę ich zdradzał, ale Mikaelowi podobała się taka pomysłowość – chyba poczuł, że faktycznie wniosę coś tak do zespołu, jak efektów jego prac.

Ciąg dalszy nastąpi…

Po dwóch dniach w mojej skrzynce czekał mail z pozytywną oceną mojej rozmowy i zaproszeniem na kolejną.

O tym jednak przy okazji kolejnego wpisu 😉

59 przemyśleń nt. „Rozmowa kwalifikacyjna w Google”

  1. Ciekawe. Rispekt jak się dostaniesz. Zdradzisz jak napisać tą stepUp? Bo szczerze nie mam pojęcia.
    Rozwiązanie, że wykonać step i potem sprawdzić gdzie się jest raczej nie wchodzi w rachubę, czy nie?

  2. Po części dobrze myślisz, ale jednak nie o to chodzi. W pierwszym przypadku tego pytania tak, ale jeśli usuniemy możliwość sprawdzania, na którym stopniu obecnie jesteśmy, to Twój pomysł nie zrealizuje się.

  3. step() zwraca TRUE jeśli wejście się powiedzie, a FALSE, jeśli się nie powiedzie? Wtedy starczy jednolinijkowe:
    void StepUp() {
    while(step()); // koniecnie ze średnikiem na końcu
    } // return nie trzeba przy funkcji typu void

    Dobrze myślę, czy nie o to chodzi?

  4. Niezupełnie, ponieważ jeśli wykonaliśmy step() a on zwrócił false, to już jesteśmy na stopniu o 1 niższym niż zaczęliśmy. Dajmy, że za drugim razem step() zwróci 1. Wtedy Twój StepUp() się zakończy, a będziemy na tym stopniu, co przed wywołaniem funkcji.

  5. Pisałem wcześniej komentarz niezalogowany i nie wiem co się z nim stało.
    Jeżeli prawdopodobieństwo wyrażamy w liczbach ze zbioru wartości (0,1), to p-1 musi się równać 0, a p 1. Dlatego wystarczy, że funkcja stepUp() będzie wywoływała funkcję step() :).

  6. … jej już czekam na kolejna część tej opowieści, najpierw czytałam o postępowaniu kwalifikacyjnym w IBM … teraz o Twoim marzeniu ! pracy w Google mam nadzieje ze sie wszystko sie spełni wg Twoich planów i zamierzeń ! Pati
    PS. „fingers crossed” :):D

  7. Człowieku, nie idź pracować do gugla.

    Tam się zmarnujesz.

    Zacznij pisać thrillery, Browna i Krajewskiego ciupasem poślesz na bezrobocie 🙂

  8. czyta się te Twoje historie jak dobry thriller. tym bardziej przeraziło mnie to, że dziś rano w swojej skrzynce znalazłem maila o temacie „Hello from Google”…

  9. gооgle oferuje do komunikacji komunikator ? którego btw nigdy na oczy nie widziałem… skoro flash to będą kolorowe jeżdżące, gwiżdżące, pierdzące wodotryski zachwalające białość papieru toaletowego ? 🙂 btw, jak to wygląda w chwili obecnej, w ogóle nie ma reklam ?

  10. Nie tylko komunikator. Jest też chat gmailowy. Wykorzystuja XMPP w kilku miejscach.

    Flash zeby to nie wygladalo jak Psi.

    Jedyne reklamy jakie widzialem zwiazane z komunikacja oferowana przez Google pojawialy sie kolo tresci odczytywanego maila w GMailu. W dodatku byly trafne i przydatne.

  11. Mnie po nic, ale Google nie celuje w informatykow ze swoimi produktami, tylko we wszystkich ludzi. A wszyscy ludzie nie umia rejestrowac sie w transportach, nie pojmuja sensu JIDow itp…
    Dla nich trzeba zaokraglonych naroznikow, ladnych animacji i prostego interfejsu z ladnymi emotami.

  12. Grrr, mogłeś już walnąć historię do końca 😉 choć już teraz jestem skłonny stwierdzić, że na wakacje jedziesz do Google ;D, ale ciekawe, ciekawe ;D

    Nie mogę się doczekać następnych części ;D

  13. Gdybym te wszystkie wpisy skleił do jednego, to by zajmował dwa razy więcej niż ta strona włącznie z komentarzami 😉
    Nikomu by się nie chciało tak dużo czytać 😛
    Wszystko trzeba dawkować 😉
    No i czasu niezbyt mam na pisanie – sesja trwa… :/ Także kolejny wpis w niedziele prawdopodobnie.

  14. @DrLex: też dobrze. Ja coś właśnie w tym stylu zrobiłem. Wydaje mi się, że powinno działać dużo szybciej niż rekurencja zaproponowana przez Mateusza, bowiem jego sposobem tworzy się struktura drzewiasta w stylu binarnym… (nie dosłownie, rzecz jasna).

  15. A wracając do zadania to czy „p” było jakoś ustalone bo gdyby przyjąć, że p = 0.1 to marnie widzę wspięcie się na schodek.

  16. Właśnie jogger przeżył przez ten wpis „wykop effect” i zdychał przez godzinę. Btw mógłbyś chociaż gdzieś podać, że ten blog jest na joggerze.

  17. też zdarzylo mi się mieć kontakt z google i moje wrażenia są raczej odmienne(sami znalezli mnie w sieci, nigdy sie do nich nie zglaszalem). moze dlatego że nie napalalem sie tak bardzo bo to firma jak każda inna. Wpierw zadzwonila do mnie kobietka z HR umówila sie na rozmowe i na koncu zadala kilka pytań które byly bardzo teoretyczne i generalnie kosmiczne. Odnioslem wrażenie że nie ma zielonego pojecia o co pyta. Namawiala mnie też usilnie żeby się zdecydowac na Mountain View bo tam jest tak fajnie i szukaja tylu specjalistow a w Irlandii gdzie mi zalezalo szukali niewielu. (pożniej dowiedzialem sie od znajomego że zycie w MV jest kilka razy droższe niż w innych miejscach w USA i że obojętnie jaką kase by mi zaproponowali bylo by mało)
    Po tym trafilem na rozmowe z kims „technicznym” , gość zadawał mi podobne pytania (raczej prostsze niż pani z HR) tylko ku mojemu zdumieniu oczekiwal totalnie prostych odpowiedzi i raczej oklepanego schematu. Probowalalem go zagadac co oni moga mi zaoferowac, jakie sa warunki pracy, mozliwosci rozwoju itp. Odpowiedzi byly w stylu ze praca jest fajna ale kazdy robi to co musi i nie ma mozliwosci rozwijania sie w innych kierunkach. Dowiedzialem sie tez ze poszlo mi spoko i niedlugo ktos sie odezwie zeby mnie zaprosic na nastepny egzamin. Po jakimś czasie dowiedzialem się że jednak nie szukają ludzi o moim profilu.
    Generalnie nie mam nic do google , firma jest calkiem spoko ale zawsze warto dopytać sie o warunki, szczegóły i nie napalać sie na logo. Chyba że dla kogoś najważniejsze jest że pracodawca jest trendy 😉

  18. dzieki za wrzucenie na wykop – rss wrzucil mi cos o guuglu i nie moglem nie wejsc 😉

    ps. googlowi nie mowi sie nie 😛
    powodzenia

  19. jeszcze długa droga. Zapewniam. Jeszcze czeka Cię cała seria rozmów, wizyty w siedzibie itp. Spokój i chłodne spojrzenie na sprawę pozwoli uniknąć ewentualnych życiowych rozczarowań. Powodzenia!
    Co do IBM – pewnie jako redaktor pasowałeś im bardziej do działu ID – czyli dokumentowanie, manuale itp. (raczej mało ciekawe). Zapewniam jednak, że i w IBMie można dostać ciekawą posadkę developerską.

  20. Co do tej rekurencji to jednak bym się bał o przepełnienie stosu. Jednak bylbym za:

    void stepUp() {
    int i = 0;
    while(i < 1) {
    i += step() ? 1 : -1;
    }
    }

    podobnie jak DrLex

  21. Tak szczerze powiedziawszy, to jak prawdopodobieństwo będzie odpowiednio małe to ten nasz integer się przekręci, przekręci się i long itp. Zatem najlepiej będzie używać symulowanego zapisu potęgowego. Jak zmienna iterująca przekroczy swój zakres np. 2^32 wtedy inkrementujemy zmienną potęgową i zerujemy zmienną iterującą. I kiedy ta znowu pesymistycznie przekroczy 2^32 inkrementujemy znowu zmienną potęgową (bo 2^32 + 2^32 = 2^33). Gdy zmienna interująca osiąga minimum -(2^32) zmienną potęgową analogicznie zmniejszamy.
    Oczywiście tym tokiem rozumowania możemy dla super pesymistycznego przypadku stworzyć listę kolejnych wykładników 2^n, 2^n^n, 2^n^n^n …

    Podstawowe założenie musi być jednak takie, że p > 0

    Gdybym był rekrutującym w Google to takiego rozwiązania bym oczekiwał. Może nie od razu całego rozwiązania, ale przynajmniej wyobraźni u testowanego gościa, żeby przynajmniej poprawne założenia wprowadził.

  22. He he… google.. fajnie 🙂

    A co do zadania? Przede wszystkim zauważę że pytanie jest BARDZO lakonicznie i niedokładnie sformułowane 😉 Zauważcie że funkcja step() zwraca wartość boolean (1 lub 0) i niewiele TO ma wspólnego z prawdopodobieństwem wejścia wyżej. Jest to po prostu informacja o tym ŻE FUNKCJA SIĘ WYKONAŁA (czyli praktycznie nic przydatnego)!!! Natomiast (najwidoczniej) mamy do dyspozycji prawdopodobieństwo wykonania danej czynności przez funkcję step() w postaci podanej przez „rekrutującego” zmiennej ‘p’. Praktycznie rzecz ujmując można sumować te prawdopodobieństwa aż do uzyskania wartości 1… można też próbować mnożyć… z matematycznego punktu widzenia ani jedno rozwiązanie, ani też drugie nie jest poprawne… dodatkowo należało by uwzględnić fakt że osoba może zrobić krok „w dół” – więc ważniejsza była by realna wartość prawdopodobieństwa wejścia wyżej uwzględniająca również możliwość równoczesnego zejścia niżej (coś jak „różnica prawdopodobieństw”) – i zabawa w „sumowanie” takich wskaźników… aż do 1. Ale tak jak pisałem… sumowanie nie jest DOBRYM rozwiązaniem… ani też odejmowanie.. ani też mnożenie.. 😉 Na dodatek zauważcie – że MOŻE zajść sytuacja że NIGDY nie posuniemy się na ten wyższy stopień… algorytm może wówczas działać w nieskończoność…

    …A rozwiązanie… ?? 🙂

    Powodzenia na rozmowach! Mam nadzieję że doczekamy się pozytywnego zakończenia 🙂

  23. Jest jeszcze jedna możliwość spojrzenia na funkcję ‘boolean step()’… która faktycznie mogła wyniknąć w czasie rozmowy – to zwrócenie ‘1’ gdy wejdziesz wyżej.. i ‘0’ gdy zejdziesz niżej… wówczas powyższe rozwiązania mają sens 🙂

    Kiedy kolejny etap.. i kolejna część artykułu?
    pzdr.

  24. jezeli tak zalezy ci na pracy w Google to nic innego tylko zbieraj sie do wyjazdu do irlandii i na 99% bedziesz mial rozmowe w ich biurze. – z wlasnego dosw.;) pozdrawiam

  25. Jak to jest, że masz 20 lat studiujesz, starasz się o pracę i piszesz o studiach doktoranckich? Jesteś geniuszem czy coś przeoczyłem?
    Tak czy inaczej, gratulacje. Będą z Ciebie ludzie.

  26. DrLex – pytanie źle sformułowane… niedoprecyzowane. Funkcje często zwracają jeden mówiąc że „wykonałam się poprawnie” – tak też na początku zrozumiałem… Zagadnienie było by ciekawsze jeśli otrzymywał byś jako daną prawdopodobieństwo tego że w danym kroku poszedłeś do góry (p). Ale jeśli funkcja informuje Ciebie zwróconą wartością że spowodowała wejście lub zejście robota (1 lub 0) – a ten ruch charakteryzuje się tylko tym że jest losowy… no to jest dużo łatwiej – rozwiązanie w jednej linijce 😉 Pzdr.

  27. A coś takiego nie będzie dobre?

    void StepUp()
    {
    while(!Step())
    StepUp();
    }

    Wersja z samym If’em zamiast while nie zadziała, bo jeśli w pierwszym wywołaniu zejdzie w dół a w drugim wejdzie to będzie na tym samym schodku na tym samym schodku. A w tych waszych nierekurencyjnych rozwiązaniach macie liczniki o które mogło chodzić Mikael’owi.

  28. Zgadzam sie z Bigosem – oto prawdopodobnie im chodziło.
    W rozwiązaniach iteracyjnych zawsze będą liczniki.

  29. Nie mam pojęcia o informatyce ale przeczytalem te trzy częśći z otwartą gębą. Jesteś genialny chlopie. Ale jak oni się zastanawiają czy cię przyjąć to znaczy, że tam pracują sami kosmici.

  30. Nie jestem genialny w zadnym wypadku. Prawda jest taka, ze na te pytania umie odpowiedziec wiekszosc studentow informatyki. Tylko niewielu wierzy, ze moga sie dostac do Google i nie probuja.

  31. jaś: dzięki, przywracasz mi wiarę w ludzi 😉
    Zar: fajnie to wszystko opisałeś (przeczytałem wszystkie 3 części tej opowieści), ale z tym kultem Google, to ciut przesadziłeś (nie tylko Ty). Nawet jeśli praca w tej firmie to marzenie Twojego życia (a nie życia każdego informatyka – co pragnę podkreślić) to i tak do wszystkiego powinieneś podchodzić spokojnie, głównie po to, żeby niczego nie schrzanić (no i żeby nie dać się wrobić nic w głupiego).
    Życzę więc więcej opanowania i powodzenia.

  32. Jako autor bloga, ktory publikuje z duzymi przerwami, generalnie ignoruje ten fakt, bo staram sie jak moge, by pisac czesto i nic wiecej nie moge zrobic.

    Ale jako Czytelnik, ktorego zainteresowala dana seria artykulow, a ktory musi czekac wieki na kolejny odcinek, to chyba Cie zar zaraz rozszarpie! My chcemy kolejnych czesci, my chcemy… 😉

  33. Zmobilizowalem sie na Wasze wnioski i napisalem czwarta czesc sagi 😉
    Obecnie nabiera mocy urzedowej. Publikacja jutro, jak wstane – czyli pewnie po poludniu 😉
    Dziekuje za ta motywacje!

  34. Moj poprzedni komentarz został usunięty 🙂 Szkoda. Wykonywałeś zadawane Ci sztuczki z uśmiechem na ustach a nagradzany brawami traktowałeś tresurę jako wyzwanie!! Żałosne!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *