Ali Öksüz

Ali Öksüz

26-08-2022

19:42

Merhaba arkadaşlar. Amazon mülakat tecrübemi çok soran oldu (2 kişi). O yüzden flood yapayım dedim. Baştan söylemek istiyorum. Yazdıklarım benim tecrübelerime dayalı olacak. Yani nasıl hazırlanılır fikrinden ziyade ben ne yaşadım? Buna göre yazacağım.

İlk yaptığım şey işe başvurmak (Thanks captain obvious). Peki nereden başvuru yapacaksın? Amazon'un kendi websitesi var diye. Burada her lokasyon ve her iş dalı için ilanlar paylaşılıyor. İlan kesin vardır demiyorum ama varsa burada paylaşılır.

Ben başvuruyu yaparken toplu başvuru yaptım hep. Yani tek seferde 20 - 30 başvuru yapıyordum. Siz de böyle yapın. Elinizi korkak alıştırmayın. Ben ilk iş teklifimi alamana kadar 96 kere red yedim Amazondan. İnanmayan resme baksın. Bir tane hired yetti ama.

Önceki twitteki resimde de gördüğünüz gibi pek seçici de değildim. ABD, Kanada, Irlanda hatta resimde görülmeyen İngiltere, Almanya ve Hollanda gibi lokasyonlar da var. Siz de aynısını yapabilirsiniz. En kötü red yersiniz ama bu da başka ilana başvurmak için bahaneniz olur.

Ben de biraz eşek inadı var. O yüzden size de bu inadı tavsiye ederim. Böyle şeylerde yardımcı oluyor haha.

Neyse başvuruyu yaptınız ve özgeçmişiniz ilk testi geçti ve mülakat başlayacak. Nedir bu mülakatın adımları? İlk adım Online Assessment denilen adım. Yani online test. Bu test içinde 2 aşama var. Birincisi ve en çok zaman kaplayanı kodlama soruları.

Diğer aşama ise daha kısa süren davranışsal (behavioral) bir bölüm. Bu online testi hackerrank denilen bir platformdan yapıyorsunuz. Kodlama kısmında 2 yada 3 adet soru oluyor ve bu soruları ortalama 90 dakika gibi bir sürede çözmeniz isteniyor.

Peki sorular nasıl? Benden ne isteniyor? Öncelikle sorular klasik take home assessment'lardan baya farklı. Size express/spring kullanarak endpoint yap denmiyor. Sorular basit tabirle algoritma soruları. Nedir algoritma soruları?

Ben şunu şunu yapmak istiyorum bunun için kod yaz! Güzel ama bazı şartlar var. Bunun ilk şartı efficent kod yazmak yani yazdığınız kod hatasız çalışabilir ancak bu konun belli bir sürenin altında çalışması lazım. Yoksa timeout oluyor ve hata veriyor.

Yani time complexity değeri önemli. Benim gibi yazılıma alan değiştirerek başlayan biriyseniz "Ali time complexity ne ya?" demeniz normal. Youtube'da 3 saate Netflix falan geliştirirler ama içinde bu complexity olayını anlatmazlar.

Araştırmanız için size anahtar kelime vereyim. "Big O notation" Hatta "Data structures and Algorithms" derslerine de bakabilirsiniz. MIT üniversitesinin güzel bir başlangıç seviye kursu mevcut. Şuraya linkini bırakıyorum.

Bunun yanında her soru için 25 tane test case var. Bunlardan sadece bir kaçı gözükür vaziyette. 20 tanesi falan hidden yani gizli. Bunun sebebi aslında basit. Adayın edge case denilen olayları düşünüp düşünmediğini ölçmek.

Bütün test case'ler geçerse güzel olur. Mesela bende bütün testler geçmişti her soru için. Ama testi tamamlamak için hepsinin geçmesine gerek yok. Bazı testler fail olurken yine de testi submit edebilirsiniz.

Bu durumda diğer aşamaya geçip geçmediğinizi belirlemek için Amazondan bir mühendis yazdığınız kodu inceliyor. Bu arada bütün test case'lerin geçmesi diğer aşamaya geçtiniz demek de değil. Yine elenebilirsiniz. Bir çok faktör var göz önünde bulundurulan.

Peki güzel aşamayı anlattın ama biz bu sorulara nasıl hazırlanmalıyım? Bu tür sorular için bir site var. Bu site, algoritma sorularının bible'ı diyebileceğimiz bir site. Hemen bu siteye girip soru çözmeye başlaman lazım. Ama bir dakika!

Ben girdim ama bu sitede binlerce soru var. Nasıl başlamam gerekiyor bilmiyorum. Neyse ki bu sorunla karşılaşan ilk insan sen değilsin. Kullanıcının biri bir liste hazırlamış. Adı Blind75 listesi. Leetcode'u biliyorsanız baya meşhur bir liste aslında.

Listenin asıl olayı farklı türden soruları bir araya getirip kısa zamanda farklı tarzdan soruları görmüş olmanızı sağlaması. İçinde kolay sorular da var hard core zor sorular da var. Kolaydan başlayıp zora doğru gitmeniz lazım.

Bu listeye bağlı kalmak zorunda değilsiniz tabiki kafanıza göre istediğiniz soruyu çözün. Ama ben bana faydalı olduğu için paylaştım.

Siteye gittiniz ve soruları çözmeye başladınız. Ama bir sorun var. "Ali ben kolay bir soru seçtim ama 1 saattir aklıma çözüm gelmiyor hani kolaydı bu!". Öncelikle bu durum çok normal.

Ben de bu pozisyondaydım. Bu sorular alışılagelmiş durumdan çok farklı ve bu sorulara göre düşünmeyi öğrenmek zaman alan bir süreç. En az 3 ay pratik yapmanız lazım ve (bence) rahat hareket edebilmek için 6 ay gerekli.

Peki bu sorular için nereden yardım alabilirim? Benim kişisel tavsiyem Youtube'da NeetCode kanalını takip etmek. Kendisi (bence) çok iyi anlatıyor. Kendisi de şu anda zaten Google'da çalışıyor.

İlk başlarda bu kanalda gördüğünüz çözümleri kopyala yapıştır yapabilirsiniz. Bu ayıp değil. Ben de böyle başladım. Ama önemli olan zamanla mantığını oturtmak. Yoksa mülakatta önünüze gelen soruları çözemezsiniz.

Neyse Online Assessment aşamasından çok fazla bahsettik ama burada bahsettiğim algoritmik sorular leetcode vs diğer aşamalarda da kullanılacak o yüzden önemli.

Online test aşamasını geçtiniz. Tebrikler. Çok az kişi bu aşamayı geçiyor(muş. Bana öyle dediler ne kadar doğru bilmiyorum). Diğer aşama artık bir insanla olacak. Bu aşamaya Phone Interview (Telefon Mülakatı) deniliyor.

Adında telefon geçtiğine bakmayın. Zoom gibi bir video call uygulamasıyla giriyorsunuz. Bu aşama bir saat sürüyor. Karşınızdaki kişi Amazonda çalışan bir mühendis. Bu aşama aslında ısınma turu. Final mülakata benziyor ama daha kısa. Peki ne soruluyor bu aşamada?

Öncelikle sizin temel bilgisayar bilimler (CS) bilginiz ölçülüyor. Yukarıdaki twitlerde MIT kursu linki bırakmıştım. O faydalı bunun için mesela. Ardından tıpkı online test aşamasında sorulduğu gibi bir yada iki adet algoritmik soru soruluyor.

Bunu güzelce cevaplayıp neyi neden yaptığınızı karşınızdaki mühendise açıklamanız lazım. Canlı kodlama şeklinde oluyor bu. Bu sorulara da tıpkı online test aşamasındaki gibi leetcode üzerinden hazırlanabilirsiniz.

Bu sorudan sonra artık Amazonun Leadership principles dediği yani liderlik prensipleri soruları var. Aslında diğer şirketlerdeki behavioral aşama gibi düşünün bu soruları.

“Peki Ali nedir bu prensipler onu da açıklar mısın?” Tabiki neden açıklamayayım? Güncel olarak 16 tane liderlik prensibi var. Bunların listesi şurada:

“Peki bu prensiplere nasıl hazırlanacam ben?” Bu prensipler öcü değil. Başta biraz farklı gelebilir ama bunlar aslında davranışsal sorular. Örneğin; “Hiç şunu yaşadın mı?” yada “Şunu nasıl çözdün?” Tarzında sorular. Asıl fark verilen cevapta aranan özelliklerde yatıyor.

Davranışsal bir aşama olduğu için soruların tek bir doğru cevabı yok. Bu sorular için önerim Youtube’da Dan Croitor diye bir abimiz var ve bu konu hakkında videolar çekiyor. Bence gayet kaliteli.

Peki bu telefon mülakatını da geçtik. Sonra? Bundan sonrası Onsite yani final mülakat. Bu aşamada ben 4 tane 1 saatlik mülakata ardı ardına girdim. 4 x 1 yani. Ama 5 tane giren de var. Değişiyor bu.

“Ne soruluyor peki? 4 saat sen ne yaptın?” Ben kendimde ne soruldu bunu söyleyemem tabiki ama genel olarak bahsedebilirim. İlk olarak önceki aşamalarda sorulan algoritmik sorular soruluyor. Önceki aşamadaki sorulara çok benzer şekilde yine live coding şeklinde geçiyor.

Buna nasıl çalışılacağından önce bahsettim o yüzden geçiyorum.

Diğer bir konu System Design. System design kendi içinde ikiye ayrılıyor. High Level Design ve Low Level Design şeklinde.

Low Level Design aslında OOP design. Burada sizde bir iş isteniyor. Ancak kodunu öyle bir yazmanız lazım ki; Gelecekte başka takımlar bu koda bir özellik eklemek istediği zaman sadece o özelliği ekleyerek bunu başarabilsinler. Senin yazdığın koda dokunulmadan olsun bu.

Bu aslında şu twitte attığım konuya çok benzer. Alıntıdaki twitime ve oradaki soruya bakabilirsiniz. Tabiki mülakatta sorular bu kadar direkt değil ama fikir verebilir.

Diğeri ise High Level Design dedik. Nedir bu? Örneğin sana şey soruluyor. Twitter gibi bir sosyal medya ağını nasıl tasarlardın?

Burada aslında kod yazma falan yok. Her şey pseudo işliyor. Sen şunu şunu yapardım, database olarak şunu kullanırdım, Şöyle bir servisim olurum vs kendi düşünceni söylüyorsun.

Karşındaki kişi de soruyor. Niye? Yani neden DB olarak X kullandık mesela? Neden Queue var? O soruyor sen de cevaplıyorsun. Medya depolama için ne kullanırsın? Ben S3 kullanırım mesela. Peki resimleri direkt S3ten mi çekerim? Hayır CDN kullanırım vb.

Burada artık scaling mevzusu da baya önemli? Sistemi nasıl scale edersin? Horizontal Scaling, Vertical Scaling, Load Balancer vs anahtar kelime olabilir araştırma için.

Bunun yanında Database nasıl scale edilir? Sharding, Replication vs. Anahtar kelime olması açısından yazıyorum bunları. CAP teoremi mesela (@denizirgin abi söylemişti bunu da bana).

Peki System Design nasıl çalışırım? Youtube’da bolca kaynak mevcut. Ancak özellikle önermek istediğim bir kişi var.

Adı Alex Xu (@alexxubyte). Bileniniz mutlaka vardır ama bilmeyenler için söyleyeyim. Bu adam System Design konusunun üstadı olmuş. İçi dışı bilgi bu adamın. Gelse yüzüme tükürse bir şeyler öğrenirim o derece.

Kitabı var bu abimizin. System Design Interview diye. Ben aldım çok beğendim. Kitabın dili o kadar sade ki. Ben bile anladım olayı yani siz düşünün.

Bu arada bütün bu aşamalarda size liderlik prensipleri soruları soruluyor bir iki tane. Her aşamada var bu prensip soruları. Ancak kendine has bir aşaması da oluyor. Bir saat boyunca size “Hiç X zorluğunu yaşadın mı?” vs sorular soruluyor. Bu da başka bir aşaması.

Bir de bar raiser denilen bir aşama var. Amazonda şöyle bir olay var. İşe alınabilmeniz için sizin performansınızın şirkette çalışan kişilerin ortalamasından daha yüksek olması lazım. Bu sayede çıta her gün daha da yükseliyor ki bar raising olayı da buradan geliyor.

Bar raiser gizli bir kişilik. Size ben bar raiser’ım diye açıklama yapılmıyor. Herhangi birisi olabilir yani.

Neyse başka da aşama yok zaten. Sorularınız olursa yine bana yazabilirsiniz. Elimden geldiğince dönüş yapmaya çalışırım.

Bu arada yazdıklarımın hepsi SDE yani Software Development Engineer rolleri için. Diğer rollerde durum nedir bilmiyorum.



Follow us on Twitter

to be informed of the latest developments and updates!


You can easily use to @tivitikothread bot for create more readable thread!
Donate 💲

You can keep this app free of charge by supporting 😊

for server charges...