
Məqalənin başlığı epic fail kimi səslənir, amma əslində hər şey belə oxşar deyil. Ümumilikdə bu hekayə, Google-da olmasa da, çox müsbət başa çatdı. Amma bu, artıq başqa bir məqalənin mövzusudur. Bu məqalədə üç şeydən danışacağam: hazırlıq prosesim necə keçdi, Google-da müsahibələr necə oldu və niyə fikrimcə hər şey göründüyü kimi deyil.
Hər şey necə başladı
Bir soyuq Kipr qış axşamı birdən-birə düşüncəm gəldi ki, klassik Kompüter Elmlərim orta səviyyədən də uzaqdı və bununla nəsə etmək lazımdır. Bu arada, əgər kimsə hələ Kipr axşamının niyə soyuq olduğunu oxumayıbsa, bunu öyrənə bilər. . Bəzi düşüncələrdən sonra əvvəlcə onlayn kurs keçmək qərarına gəldim. Bir vaxtlar tanışlarımdan Robert Sedgewick-in Coursera-dakı kursu haqqında eşitmişdim. Kurs iki hissədən ibarətdir ( və ). Əgər linklər dəyişərsə, müəllifin adıyla internetdə axtarış etmək mümkündür. Hər hissə 6 həftə davam edir. Həftənin əvvəlində mühazirələr təqdim olunur, həftə ərzində isə tapşırıqları yerinə yetirmək lazımdır. Kursun birinci hissəsi əsas məlumat strukturlarını, əsas sıralama növlərini və alqoritmlərin mürəkkəbliyini əhatə edir. İkinci hissə daha irəlidədir, qrafiklərlə başlayır və Linear Programming və Intractability kimi mövzularla sona çatır. Yuxarıda qeyd olunanları düşünərək, bunun mənə lazım olan şey olduğunu düşündüm. Şübhəsiz ki, maraqlı oxucu sual verə bilər ki, burada Google nədir. Doğrudan da, o qədər müddət ərzində əvvəlcə bunun heç bir aidiyyatı yox idi. Amma mənə bir məqsəd lazım idi, çünki 12 həftəlik kursu axşamları məqsəd olmadan keçmək bir az çətin olur. Yeni biliklərin əldə edilməsi üçün hansı məqsəd olmalıdır? Əlbəttə ki, onların praktikada tətbiqi. Gündəlik həyatda bu çətin olsa da, böyük bir şirkətdə müsahibədə asanlıqla mümkündür. Bir az axtarış göstərdi ki, Google (bağışlayın, bu ifadə bir az təkrarlıdır) Avropanın ən böyük şirkətlərindən biridir (mən Avropanı nəzərə alırdım) və burada belə müsahibələr keçirilir. Xüsusilə, onların ofisi İsveçrənin Cenevrə şəhərində yerləşir. Beləliklə, qərar verilib - öyrənirik və Google-da müsahibəyə gedirik.
İlk mərhələyə hazırlıq
12 həftə gözlənilmədən keçdi və mən hər iki kursu başa vurdum. Kurslardan aldığım təəssüratlar müsbətdir və onları maraqlanan hər kəsə tövsiyə edə bilərəm. Mən bu kursları aşağıdakı səbəblərə görə bəyəndim:
- D讲учый讲лючает講ји讲никам讲на讲достаточно讲ясным讲английском
- Müxtəlif material yaxşı struktura salınıb
- Hər alqoritmin ayrıntılarını göstərən əla təqdimatlar
- Materialın yaxşı seçilməsi
- Maraqlı tapşırıqlar
- Tapşırıqlar veb saytında avtomatik yoxlanılır, bu cür hesabat yaradılır.
Mənim kurslar üzərində apardığım iş adətən belə keçir. 1-2 gün ərzində dərsləri dinləyirəm. Sonra materialı bilmək üçün sürətli test keçirdirəm. Həftənin qalan hissəsində bir neçə iterasiyada məşğul oluram. İlk dəfə 30-70% alıram, sonrakılar nəticəni 97-100%-ə çatdırır. Məşq adətən bir alqoritmin həyata keçirilməsini əhatə edir, məsələn və .
Kursları bitirdikdən sonra başa düşdüm ki, bir çox biliklər bir çox ağrılara səbəb olur. Əvvəllər sadəcə heç nə bilmədiyimi bilirdimsə, indi bilmirəm, nəyi bilmədiyimi dərk etməyə başladım.
Hələlik may ayı olduğuna və müsahibəmi payızda planlaşdırdığıma görə, təhsilimə davam etməyə qərar verdim. İxtisas tələblərini nəzərdən keçirdikdən sonra iki istiqamət üzrə paralel getməyə qərar verdim: alqoritmlərin öyrənilməsinə davam etmək və maşın öyrənməsi üzrə əsas kurs keçmək. İlk məqsədim üçün kurslardan kitab rutbəsinə keçməyə qərar verdim və Stiven Skiena (Steven Skiena) tərəfindən yazılan "Alqoritmlər. İnkişaf üçün Rəhbər" (The Algorithm Design Manual) adlı monumental əsəri seçdim. Knutun müasir yanaşmalarına nisbətdə o qədər də monumental olmasa da, yenə də. İkinci məqsədim üçün isə yenidən Coursera-ya daxil oldum və Endryu Ng (Andrew Ng) kursuna qeyd oldum. .
Hələ 3 ay keçdi və kursu və kitabı bitirdim.
Kitabdan başlayaq. Oxumaq olduqca maraqlı, amma çətin oldu. Əslində, kitabı tövsiyə edərdim, amma birbaşa deyil. Ümumilikdə, kitab öyrəndiklərimin daha dərindən izahını verir. Bununla yanaşı, rasionlaşdırmalar və dinamik proqramlaşdırma kimi formal aspektləri kəşf etdim. Təbii ki, əvvəl bunları istifadə etmişdim, amma onların adlarını bilmirdim. Kitabda müəllifin həyatından bəzi əhvalatlar (War Story) da var ki, bu da akademik tədrisi bir az yüngülləşdirir. Kitabın ikinci hissəsini demək olar ki, keçmək olar, orada daha çox mövcud problemlərin və onların həlli metodlarının təsviri gedir. Praktikada müntəzəm istifadə olunarsa, faydalıdır, əks halda dərhal unudular.
Kurs məni çox sevindirdi. Müəllim açıq-aşkar işini bilir və maraqlı danışır. Üstəlik, xeyli hissəsi, yəni xətti cəbr və neyron şəbəkələrinin əsaslarını universitetdən xatırlayırdım, buna görə də xüsusi çətinliklərlə qarşılaşmadım. Kursun strukturu kifayət qədər standartdır. Kurs bir neçə həftəyə bölünür. Hər həftə əvvəlcə dərslər, qısa testlərlə qarışdırılır. Dərslərdən sonra bir tapşırıq verilir ki, bunu tamamlayıb göndərmək lazımdır və avtomatik olaraq yoxlanılır. Qısa olaraq, kursta öyrədilənlərin siyahısı aşağıdakılardır:
— cost function
— linear regression
— gradient descent
— feature scaling
— normal equation
— logistic regression
— multiclass classification (one vs all)
— neural networks
— backpropagation
— regularization
— bias/variance
— learning curves
— error metrics (precision, recall, F1)
— Support Vector Machines (large margin classification)
— K-means
— Principal Components Analysis
— anomaly detection
— əməkdaşlıq filtrasyonu (tövsiyə sistemi)
— stokastik, mini-partiya, partiya gradient azalışları
— onlayn öyrənmə
— xəritəni azaltma
— tavan analizi
Kursdan sonra bu mövzuların hamısını başa düşmək mümkün oldu. İki ildən sonra demək olar ki, hər şeyi unudulmuşdum. Maşın öyrənməsi ilə tanış olmaq istəyənlərə bu kursu tövsiyə edirəm, çünki əsas anlayışları öyrənmək üçün yaxşıdır.
İlk yanaşma
Sentyabr artıq gəlişdiyi üçün müsahibə haqqında düşünməyə başladım. Veb sayt vasitəsilə müraciət etmək, olduqca çətin bir iş olduğundan, Google-da işləyən tanışların axtarışına başladım. Seçimim , ona görə ki, biliklərim yalnız onu bilirdim (hətta şəxsən tanımıram). O, mənim CV-mi təqdim etməyə razılaşdı və qısa müddət ərzində rekriterdən zəng gəlməyi qəbul edərək, onun kalendarında bir slot ayırmağı təklif etdi. Bir neçə gün sonra telefonla danışıq oldu. Hangouts ilə ünsiyyət qurmağa çalışdıq, amma keyfiyyət dəhşətli idi, buna görə telefona keçdik. Əvvəlcə standart "nə, niyə və necə" suallarını sürətlə müzakirə etdik, sonra isə texniki skrininqə keçdik. Bu, "hash map-dakı əlavə etmə çətinliyi nədir", "hansı balanslı ağaclar tanıyırsınız" kimi bir neçə sualdan ibarət idi. Əgər bu mövzularda əsas bilik varsa, çətin deyil. Skrininq yaxşı keçdi və nəticələrə görə bir həftə sonra ilk müsahibəni təşkil etməyə qərar verdik.
Müsahibə də Hangouts vasitəsilə baş tutdu. Əvvəlcə 5 dəqiqə özüm haqqında danışdım, sonra tapşırığa keçdik. Tapşırıq qrafiklə bağlı idi. Mən nə etməli olduğumu tez anladım, amma düzgün alqoritmi seçmədim. Kod yazmağa başladığımda bunu başa düşdüm və daha bir variant seçməyə keçdim, onu tamamlamaqla davam etdim. Müsahibəçi alqoritmin çətinliyi ilə bağlı bir neçə sual verdi, daha tez edə bilib-bilmədiyimi soruşdu. Hər hansı bir şey düşünmədən cavabsız qaldım. Bu vaxt bitti və ayrıldıq. Sonra, təxminən 10 dəqiqə sonra, Deykstra alqoritmini istifadə etdiyim müvafiq tapşırıqda geniş axtarışın istifadə edilə biləcəyini başa düşdüm, bunun daha tez olacağını anladım. Bir müddət sonra rekriter zəng etdi və müsahibənin ümumilikdə yaxşı keçdiyini, daha birini təşkil etməli olduğumuzu bildirdi. Bir həftə sonra daha bir müsahibəni razılaşdırdıq.
Bu dəfə işlər daha pis gedirdi. İlk dəfə müsahibəçi dostcanlı və danışqandı, amma bu dəfə nədənsə sərt idi. Tapşırığı dərhal başa düşə bilmədim, baxmayaraq ki, təqdim etdiyim ideyalar prinsipcə onun həllinə gətirib çıxara bilərdi. Nəticədə, müsahibəçinin bir neçə ipuçlarından sonra həlli başa düşdüm. Bu dəfə yenə geniş axtarış oldu, yalnız bir neçə nöqtədən. Həlləri yazdım, vaxtında bitirdim, amma sərhəd hallarını unutdum. Bir müddət sonra rekruiter zəng edib məlumat verdi ki, bu dəfə müsahibəçi məmnun qalmayıb, çünki onun fikrincə mənə çoxlu ipucları (3 və ya 4 dənə) lazım olub və kodu yazarkən daima dəyişdirmişəm. İki müsahibənin nəticələri ilə irəliləməkdə başa düşdük ki, növbəti müsahibəni bir il sonraya təxirə salmaq qərarına gəldik, əgər mənim belə istəyim olsa. Elə bununla da vidalaşdıq.
Bu hekayədən bir neçə nəticə çıxardım:
- Teoriya yaxşıdır, amma ona sürətlə yönəlmək lazımdır.
- Təcrübə olmadan teoriya kömək etməyəcək. Tapşırıqları həll etmək və kod yazmağı avtomatik hala gətirmək lazımdır.
- Çoxu müsahibəçidən asılıdır. Bunu dəyişmək mümkün deyil.
İkinci cəhətə hazırlıq
Vəziyyəti düşündükdən sonra, bir il sonra mütləq bir daha cəhd etməyə qərar verdim. Hədəfi bir az redaktə etdim. Əvvəlcə əsas məqsədim təhsil idi, Google-da müsahibə isə uzaq bir kökü olaraq görünürdü, indi isə müsahibəni keçmək məqsədim oldu, təhsil isə vasitə.
Beləliklə, yeni plan hazırlanmışdı, onun içində aşağıdakı maddələr var idi:
- Teoriyanı kitablar və məqalələr oxumaqla öyrənməyə davam etmək.
- 500-1000 ədəd algoritmik tapşırığı həll etmək.
- Teoriyanı video izləməklə öyrənməyə davam etmək.
- Teoriyanı kurslar vasitəsilə öyrənməyə davam etmək.
- Digərlərinin Google-da müsahibə keçmə təcrübəsini öyrənmək.
Planı bir il ərzində yerinə yetirdim. İndi hər bir maddə üzrə nələr etdiyimi izah edəcəyəm.
Kitablar və məqalələr
Oxuduğum məqalələrin sayını artıq xatırlamıram, onları həm rusca, həm də ingiliscə oxumuşam. Ən faydalı sayt isə bəlkə də Burada kod nümunələri ilə birlikdə çox sayda maraqlı alqoritmlərin təsvirləri toplanıb.
Oxuduğum kitabların sayı 5-dir: Algorithms, 4-cü nəşr (Sedgewick, Wayne), Introduction to Algorithms 3-cü Nəşr (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview 4-cü nəşr (Gayle Laakmann), Programming Interviews Exposed 2-ci nəşr (Mongan, Suojanen, Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Bunları 2 kateqoriyaya ayırmaq olar. Birincisinə Sedgewick və Cormen-in kitabları daxildir. Bu, nəzəriyyədir. Qalanları müsahibəyə hazırlanmaq üçündür. Sedgewick, kitabda kurslarındakı ilə eyni şeyləri danışır. Sadəcə yazılı şəkildə. Əgər kursu keçmisinizsə, diqqətlə oxumağa ehtiyac yoxdur, amma yenə də bir göz atmaq faydalıdır. Əgər kursu izləməmisinizsə, oxumaq yaxşı olar. Cormen mənə biraz sıxıcı gəldi. Açığı, onu başa düşməkdə çətinlik çəkdim. Oradan yalnız , bəli, az istifadə olunan məlumat strukturları (Fibonacci heap, van Emde Boas tree, radix heap).
Müsahibəyə hazırlanmaq üçün ən azı bir kitab oxumaq lazımdır. Hamısı təxminən eyni prinsiplə qurulub. Böyük texnologiya şirkətlərində müsahibə prosesi təsvir olunur, Kompüter Elmləri ilə bağlı əsas şeylər təqdim edilir, bu əsas şeylərə dair tapşırıqlar, tapşırıqların həlləri və həllərin izahı verilir. Verilən üç kitabdan əsasən, Cracking the Coding Interview-ni tövsiyə edərdim, qalanlarını isə istəyə görə.
Alqoritmik tapşırıqlar
Bəlkə də bu, hazırlığın ən maraqlı hissəsi idi. Əlbəttə ki, sadəcə oturub tapşırıqları həll edə bilərsiniz. Bunun üçün müxtəlif saytlar var. Mən, əsasən, üçünü istifadə etdim: , və . CodeChef-də tapşırıqlar çətinliyə, amma mövzulara görə deyil, bölünüb. Hackerrank-də isə həm çətinliyə, həm də mövzulara görədir.
Amma, mən dərhal özüm üçün daha maraqlı bir yol kəşf etdim. Və bu, yarışlardır (proqramlaşdırma yarışları və ya proqramlaşdırma müsabiqələri). Bütün üç sayt bunu təklif edir. Lakin LeetCode ilə bağlı bir problem var — qeyri-müvafiq vaxt qurşağı. Buna görə bu saytda iştirak etmədim. Hackerrank və CodeChef kifayət qədər çox müxtəlif müsabiqələr təqdim edir, müddəti 1 saatdan 10 günə qədərdir. Fərqli formatların fərqli qaydaları var, amma bununla bağlı uzun-uzadı danışmaq olar. Yarışların əsas mahiyyəti, öyrənmə prosesinə rəqabət elementi əlavə etməkdir (və yenə də tautologiya).
Ümumilikdə, mən Hackerrank-da 37 müsabiqədə iştirak etdim. Onlardan 32-si reytinqli, 5-i isə sponsorlu (birində 25 $ qazandım) və ya əyləncə məqsədli idi. Reytinqli müsabiqələrdə 10 dəfə top 4%-ə, 11 dəfə top 12%-ə və 5 dəfə top 25%-ə daxil oldum. Ən yaxşı nəticələrim 27/1459 3 saatlıq və 22/9721 həftəlik tapşırıqlar üzrə idi.
Hackerrank-da müsabiqələrin sayı azalanda CodeChef-a keçdim. Ümumilikdə 5 müsabiqədə iştirak edə bildim. Ən yaxşı nəticəm 426/5019 on günlük müsabiqədə idi.
Ümumilikdə, yarışlarda və sadəcə olaraq planıma uyğun olaraq, 1000-dən çox tapşırıq həll etməyə qərar verdim. İndi, təəssüf ki, müsabiqə fəaliyyətinə davam etmək üçün boş vaxtım yoxdur, həmçinin vaxtımı ayırmaq üçün heç bir məqsədim də yoxdur. Ancaq bu, əyləncəli idi. Mənimlə maraqlananlara tövsiyə edirəm ki, öz həmfikirli insanlarını tapsınlar. İki nəfər və ya qrup şəklində daha maraqlıdır. Mən bunu dostumla etmişəm, bəlkə də bu səbəbdən belə yaxşı getdi.
Video izləmək
Skiyenin kitabını oxuduqdan sonra, əslində onun nə ilə məşğul olduğunu maraqlandırmağa başladım. Seçwick kimi, o da universitetin professorudur. Bu səbəbdən onun dərslərinə aid video yazıları internetdə tapmaq mümkündür. Mən kursun videolarını izləməyə qərar verdim. . Demək olar ki, bəyəndiyimi söyləyə bilmərəm. Birincisi, videonun keyfiyyəti o qədər də yaxşı deyildi. İkincisi, mən kursda müzakirə olunan tapşırıqları özümdən həll etməyə çalışmadım. Beləliklə, iştirakım o qədər də yüksək olmadı.
Eyni zamanda, tapşırıqları həll edərkən doğru alqoritmi tapmağa çalışarkən Tushar Royun videolarına rast gəldim. O, Amazon-da çalışmışdı və hazırda Apple-da işləyir. Sonradan anladım ki, onun , müxtəlif alqoritmlərin təhlillərini yayımladığı bir kanalı var. Məqalə yazılış zamanında kanal 103 video ehtiva edirdi. Və deməliyəm ki, onun təhlilində keyfiyyətlər yaxşıdır. Başqa müəllimlərin videolarını izləməyə çalışdım, amma bir cür olmadı. Beləliklə, bu kanalı mütləq izləməyə tövsiyə edirəm.
Kursları keçmək
Burada xüsusilə nəsə ilə məşğul olmamışdım. Google-dan Android Developer Nanodegree videosunu izlədim və İTMO-dan bir kurs keçdim. . Nanodegree, olduqca yaxşıdı, amma oradan təzə bir şey öyrənmədim. İTMO-dan olan kursun nəzəri cəhətdən bir qədər sıxışdırılmış olduğunu düşünürəm, amma tapşırıqlar maraqlı idi. Başlamaq üçün bunu tövsiyə etməzdim, amma əsasən ona vaxtımı sərf etdiyimə peşiman deyiləm.
Başqalarının təcrübəsini öyrənmək
Mütləq, bir çox insan Google-a düşməyi cəhd edib. Bəziləri oraya girə bilib, bəziləri isə yox. Bəzi insanlar bu barədə məqalələr yazıblar. Maraqlı olan şeylərdən biri və . İlk halda, bir insanın Software Engineer olmaq və Google-a düşmək üçün öyrənməsi lazım olan şeylərin siyahısını hazırladığını qeyd edərdim. Nəticədə, o, Amazon-a düşdü, amma bu artıq o qədər də əhəmiyyətli deyil. İkinci manual Google mühəndisi Larisa Agarqovanın yazdığıdır (). Bununla yanaşı, .
oxumağa dəyər. Glassdoor-da müsahibə təcrübələri haqqında rəyləri oxumaq mənası var. Onlar hamısı daha-az bənzəyir, amma faydalı məlumatı əldə etmək mümkündür.
Başqa kiçik məqalələrin bağlantılarını verməyəcəyəm, onları Google-da rahatlıqla tapa bilərsiniz.
İkinci cəhd
İşte bir yıl geçti. Eğitim açısından oldukça yoğun bir yıl oldu. Ancak yeni sonbahara çok daha derin teorik bilgiler ve geliştirilmiş pratik becerilerle yaklaşmıştım. Verilen hazırlık süresinin bitmesine birkaç hafta kala, aniden Google'dan bir işe alımcıdan bir e-posta düştü, bana Google'da çalışmak isteyip istemediğimi ve onunla konuşup konuşmayacağımı sordu. Elbette ki karşı çıkmadım. Bir hafta içinde telefonla görüşmeye karar verdik. Ayrıca güncellenmiş öz geçmişimi istediler, buna işte ve genel olarak bir yıl boyunca yaptıklarımın kısa bir açıklamasını ekledim.
Hayat üzerine yapılan sohbetlerden sonra, bir hafta içinde Hangouts ile görüşme yapılmasına karar verildi, her şey geçen yıl olduğu gibi. Bir hafta geçti, görüşme zamanı geldi ancak görüşmeyi yapacak olan kişi gelmedi. 10 dakika geçti, ben artık sinirlenmeye başlamıştım, birden birisi sohbet odasına girdi. Daha sonra anlaşıldı ki, benim mülakatçım bir nedenle gelemedi ve acilen bir yedeği bulundu. Gelen kişi, hem bilgisayar ayarlamaları hem de görüşmeyi yürütme açısından pek hazır değildi. Ama sonra her şey güzel gitti. Soruyu hızlıca çözdüm, olası tuzakları ve bunları nasıl aşabileceğimi açıkladım. Farklı soru alternatifleri ve algoritmanın zorluğunu tartıştık. Sonra 5 dakika daha sohbet ettik, mühendis Münih'te çalışmanın izlenimlerini anlattı (Zürih'te görünüşe göre acil bir yedek bulunamamış), bu şekilde ayrıldık.
Aynı gün benimle iletişime geçen bir işe alımcı, mülakatın harika geçtiğini ve beni ofis mülakatına davet etmeye hazır olduklarını bildirdi. Ertesi gün Hangouts üzerinden görüştük ve detayları tartıştık. Vize almam gerektiği için mülakatı bir ay sonra yapmaya karar verdik.
Belgeleri hazırlarken, mülakata hazırlık hakkında işe alımcıyla sohbet ediyordum. Google'daki standart mülakat 4 algoritmik ve 1 Sistem Tasarımından oluşuyor. Ama ben Android geliştirici olarak başvuruda bulunduğum için, mülakatın bir kısmının Android'e özgü olacağı söylendi. Hangi spesifik konular olacağı hakkında işe alımcıdan net bir bilgi alamadım. Anladığım kadarıyla, bu oldukça yakın zamanda getirilen bir yenilik ve kendisi de pek bilgi sahibi değildi. Ayrıca bana algoritmik mülakat ve Sistem Tasarım mülakatı geçişine hazırlık için iki deneme oturumu kaydedildi. Oturumlar orta derecede faydalıydı. Orada da Android geliştiricilerine ne sorulduğunu kimse anlatamadı. Bu nedenle bu ayki hazırlığım şöyleydi:
- Bir beyaz tahta satın alıp en popüler 2-3 düzine algoritmayı hafızamda yazarak çalışmak. Her gün 3-5 tane. Toplamda her biri birkaç kez yazılmış oldu.
- Her gün kullanmadığım Android ile ilgili çeşitli bilgileri tazelemek.
- Böyük Ölçülü və sair videolara baxaraq
Daha əvvəl qeyd etdiyim kimi, eyni zamanda səyahət üçün sənədlər hazırlayırdım. İlk olaraq, dəvət məktubu hazırlamaq üçün məlumat istədilər. Sonra, Kiprdə İsveçrəyə viza verənlərin kim olduğunu öyrənmək üçün bir müddət çalışdım, çünki İsveçrə səfirliyi bununla məşğul olmur. Məlum oldu ki, bununla Avstriya konsulluğu məşğuldur. Zəng etdim və qəbul üçün qeydiyyatdan keçdim. Orada bir ton sənəd tələb etdilər, amma xüsusi bir şey yox idi. Şəkil, pasport, yaşayış icazəsi, müxtəlif hesabatlar və əlbəttə ki, dəvət məktubu. Bu arada məktub hələ gəlməmişdi. Nəhayət, adi çap olunmuş bir nüsxə ilə getdim və bu, tamamilə işə yaradı. Məktub isə 3 gün sonra gəldi, buna baxmayaraq, Kipr FedEx mənim ünvanımı tapa bilmədi və ona görə də özüm getməli oldum. Eyni zamanda, orada İyun ayından bəri qalan, mənə çatdıra bilmədikləri başqa bir paket aldım (5 ay, Karl). Bununla bağlı heç məlumatım olmadığı üçün, təbii ki, bunun onlarda olduğunu düşünməmişdim. Vizamı vaxtında aldım, sonra mənə otel rezervi etdilər və uçuş variantları təklif etdilər. Variantları biraz düzəldərək rahatlaşdırdım. Birbaşa reys yoxdur, nəticədə ora Afinaya, geri isə Vyana üzərindən uçdum.
Səyahətlə bağlı bütün məsələlər həll edildikdən sonra, bir neçə gün keçdi və mən sonunda Suriya uçdum. Problemlə qarşılaşmadan çatdım. Hava limanından şəhərə qatarla getdim - sürətli və rahat. Şəhərdə bir az itdiyimdən sonra oteli tapdım və yerleşdim. Otel yeməksiz sifariş olunduğu üçün qonşuda axşam yeməyi yedim və yuxuya getdim, çünki uçuş səhər idi və artıq yatmaq istəyirdim. Növbəti gün oteldə səhər yeməyi yedim (ayrı pul müqabilində) və Google ofisinə yollandım. Cehiz Suriya ofislərində Google-un bir neçə ofisi var. Mənim müsahibəm mərkəzi ofisdə deyil idi. Ümumiyyətlə, ofis olduqca adi görünürdü, ona görə də «normal» Google ofisinin bütün gözəlliklərini görə bilmədim. Administrator yanında qeydiyyatdan keçdim və gözləməyə başladım. Bir müddət sonra işə qəbul edən şəxs çıxdı və mənə günün planını izah etdi, sonra müsahibələrin keçirilməsi üçün nəzərdə tutulmuş otağa apardı. Plan üzrə 3 müsahibə, yemək və daha 2 müsahibə var idi.
Müsahibə nömrə bir
İlk mülakat Android üzrə oldu. Üstəlik, algoritmlərlə heç bir bağlılığı yox idi. Amma sürpriz. Hə, elə də alışdım. Məndən müəyyən bir UI komponenti hazırlamağı istədilər. Öncə nəyi və necə edəcəyimizi müzakirə etdik. RxJava-da bir həll hazırlamağı təklif etdim, nəyi və niyə edəcəyimi izah etdim. Dedilər ki, bu yaxşıdır, amma gəlin Android çərçivəsi vasitəsilə edək. Eyni zamanda, bu komponenti istifadə edən bütün Activity-nin kodunu yazaq. Belə bir şeyə hazır deyildim. Bir tərəfdən 30-50 sətirlik bir algoritmi lövhədə yazmaq bir şeydir, amma Android kodunun
İkinci mülakat
Bu dəfə mülakat algoritmlər üzrə oldu. İki müsahibəçi var idi. Birincisi mülakatçıdır, ikinci isə gənc padavan (shadow interviewer). Müəyyən xüsusiyyətləri olan bir məlumat strukturu düşünməli idik. Öncə adətən problemi müzakirə etdik. Müxtəlif suallar verdim, müsahibəçi cavab verdi. Bir müddət sonra yaratdığımız struktura dair bir neçə metodu lövhədə yazmağı xahiş etdilər. Bu dəfə demək olar ki, başa düşdüm, amma bir neçə kiçik səhvlə, onları müsahibəçinin dəstəyi ilə düzəltdim.
Üçüncü mülakat
Bu dəfə System Design, amma yenə də Android. Müəyyən funksionallıqlara malik bir tətbiq hazırlamalı idik. Tətbiqin, serverin və ünsiyyət protokolunun tələblərini müzakirə etdik. Sonra tətbiqi qurarkən hansı komponentlər və ya kitabxanalar istifadə edəcəyimi izah etməyə başladım. Job Scheduler-dən danışarkən bir az boşluq oldu. Səbəb odur ki, onu praktikada istifadə etməmişəm, çünki mən çıxdığı anda tətbiqlərin dəstəklənməsinə keçmişdim, orada belə bir şey üçün vəzifə yox idi. Sonrakı layihələrdə də eyni oldu. Yəni nəzəri cəhətdən bunun nə olduğu, nə vaxt və necə istifadə edildiyi haqqında məlumatım var, amma tətbiqdə heç bir təcrübəm yoxdur. Və müsahibəçiyə bu o qədər də xoş gəlmədi. Sonra kod yazmağı xahiş etdilər. Bəli, tətbiqi hazırlayarkən dərhal kod yazmaq lazımdır. Yenidən Android kodu lövhədə. Yenə də pis alındı.
Nahar
Başqa birinin gəlməsi lazım idi, amma gəlmədi. Google-da da bu cür yanlışlar olur. Nəticədə əvvəlki müsahibəçi, onun həmkarı ilə nahar yeməyə getdim və biraz sonra növbəti müsahibəçi qoşuldu. Nahar olduqca yaxşı idi. Yenə də, bu Cenevrə ofisi olmadığı üçün, kafeterya kifayət qədər adi görünürdü, amma çox xoş idi.
Dördüncü mülakat
Nihayət, saf alqoritmlər. İlk tapşırığı kifayət qədər tez və səmərəli həll etdim, amma bir hədd vəziyyətini qaçırdım, lakin müsahibəçinin köməyi ilə (o, bu hədd vəziyyətini təqdim etdi) problemi tapdım və düzəltdim. Öz-özünə, taxtada kod yazmaq lazım idi. Sonra buna bənzər, amma daha çətin bir tapşırıq verildi. Onun üçün bir neçə qeyri-optimal həll tapdım və demək olar ki, optimala yaxınlaşdım, sadəcə fikrimi tamamlayıb tamamlamaq üçün 5-10 dəqiqə çatmadı. Və onun üçün kodu artıq yaza bilmədim.
Beşinci müsahibə
Yenidən Android müsahibəsi. Maraqlıdır, niyə bütün il boyu alqoritmləri öyrənirdim?
İlk əvvəl bir neçə sadə sual oldu. Sonra müsahibəçi taxtada kod yazdı və içindəki problemləri tapmağı xahiş etdi. Tapdım, izah etdim, düzəltdim. Müzakirə etdik. Daha sonra bir neçə gözlənilməz sual başladı: "X sinifində Y metodunun rolu nədir?", "Y metodunun içində nə var?", "Z sinifi nə edir?". Bəzilərinə cavab verdim, amma sonra dedim ki, son vaxtlar bununla qarşılaşmamışam və təbii ki, kimin, nəyi, necə etdiyini dəqiq xatırlamıram. Bunun ardınca müsahibəçi hal-hazırda nə etdiyimi soruşdu. Və suallar bu mövzuda davam etdi. Burada artıq daha yaxşı cavab verdim.
Sonuncu müsahibə bitdikdən sonra mənim giriş kartımı aldılar, uğurlar dilədilər və yola saldılar. Bir az şəhərdə gəzdikdən sonra axşam yeməyi yedim və otelə getdim, orada yıxıldım yatmağa, çünki uçuş yenidən səhər erkən idi. Növbəti gün Kiprə xəta ilə çatdım. Müsahibə ilə bağlı işə götürən tərəfindən göndərilən geribildirim yazdım və xərclənmiş pulun qaytarılması üçün xüsusi xidmətin formasını doldurdum. Google yalnız biletləri birbaşa ödəyir. Otel, yemək və nəqliyyat namizəd tərəfindən ödənilir. Sonra forma doldururuq, çekləri əlavə edirik və xüsusi bir ofisə göndəririk. Onlar bunu emal edirlər və kifayət qədər sürətlə pulun hesabımıza köçürülməsini təmin edirlər.
Müsahibə nəticələrini emal etmək üçün bir buçuk həftə vaxt ərzində getdi. Sonra mənə bildirildi ki, "bir az aşağıda qaldım". Yəni, biraz çatışmamışdır. Daha dəqiq desək, 2 müsahibə yaxşı keçdi, 2-si bir az yaxşı olmadı, amma Sistem Dizaynı çox bərbad keçdi. Əgər ən azı 3 müsahibə yaxşı keçsəydi, mübarizə apara bilərdim, amma belə heç bir şansım yoxdur. Bir il sonra yeni şans verməyi təklif etdilər.
Əvvəlcə, əlbəttə, kədərləndim, çünki hazırlığa çox enerji sərf etmişdim, və müsahibə zamanı artıq Kiprdən ayrılmağı düşünürdüm. Google-da işləmək və İsveçrəyə köçmək mükəmməl variant kimi görünürdü.
Nəticə
Və burada məqalənin son hissəsinə gəlirik. Bəli, mən Google-da iki dəfə müsahibəni keçə bilmədim. Bu, kədərli. Orada işləmək maraqlı olardı. Amma məsələyə bir də fərqli tərəfdən baxmaq olar.
- Bir buçuk il ərzində proqram təminatını inkişaf etdirməklə bağlı çoxlu şeylər öyrəndim.
- Programlaşdırma yarışmalarında iştirak edərkən böyük zövq aldım.
- Bir neçə günlük Zürihə səfər etdim. Nə vaxt oraya yenidən gedəcəyəm?
- Dünyanın ən böyük IT şirkətlərindən birində müsahibə müddətindən maraqlı təcrübə qazandım.
Beləliklə, son bir il yarımda baş verənləri sadəcə öyrənmə və ya məşq kimi qiymətləndirmək olar. Bu məşqin nəticələri özünü büruzə verdi. Kiprdən ayrılma düşüncəm müəyyən şəraitlərə görə yarandı, mən başqa bir tanınmış şirkətdə bir neçə müsahibəni müvəffəqiyyətlə keçdim və 8 ay sonra köçdüm. Amma bu tamamilə fərqli bir hekayədir. Yenə də düşünürəm ki, öz üzərində işlədiyim bu bir il yarım üçün Google-a, Zürihdəki iki maraqlı günüm üçün təşəkkür etməliyəm.
Nəticə olaraq, deyə bilərəm ki, əgər IT sahəsində fəaliyyət göstərirsinizsə, Google (Amazon, Microsoft, Apple və s.) müsahibələrinə hazırlaşmalısınız. Bəlkə bir gün ora daxil olmağa çalışacaqsınız. Hətta istəməsəniz belə, unutmayın ki, belə bir hazırlıq sizə zərər verməz. O an gəldikdə ki, başa düşəcəksiniz ki, şansın üzünüzə gülməsi ilə belə olsa, bu şirkətlərdən birinin müsahibəsini keçə bilərsiniz, sizin üçün çox daha çox yol açılacaq. Və bu yolda sizə lazım olan hər şey məqsəd, səbr və vaxtdır. Uğurlar arzulayıram 🙂
Mənbə: habr.com
