-Büyük şirketlerin (google,apple,amazon,facebook vb) interviewleri küçük şirketlerindekilere göre daha tahmin edilebilir ve önceden çalışılabilir oluyor.
-Bazen interviewler çalışacağınız şirketin domaini ile iligi sorular içerebiliyor. Bu sebeple bu domainleri öncesinden araştırmanız size görüşmede fayda sağlayacaktır. Örneğin google mülakatı öncesi web search'in nasıl çalıştığı gibi.
-Şirketlerin size assignment vermesi kendileri için bir fayda sağlayabiliyor. Sizden outsorce hizmeti almış gibi oluyorlar. Bunu kafanıza takmayın, bu işin doğasında var.
-Telefon interviewlerinden kişiler ortalama %25 başarı sağlıyorlar. Ardından yerinde görüşmeye çağrılıyorlar. Yerinde görüşmeden (on-site) baarılı bir şekilde geçiş ve işe başlamaya hak kazanma genelde %10 seviyesinde oluyor.
-Telefon interview'inde görüşmeci sizi görüşmenin başında tanımak istiyor ve geçmişte yaptığınız projelerden bahsetmenizi istiyor. Bu safhada görüşmeci sizin bu interview'den geçip geçmeciğini hemen hemen tahmin edebiliyor. Ardından telefonda online kod mülakatı başlıyor.
-Telefonda online mülakattda yazdığınız kod için temel olarak dört kritere bakılıyor:
1-Kodlama
2-Veri yapıları algoritmalar
3-Dizayn(Big o Analiz gibi, OO design gibi)
4-İletişim
-Teknik açıklamalar yaparken sizden, ne çok basit düzeyde ne de çok complex anlaşılmaz İngilizce konuşmamınızı bekliyorlar.
-Juniorlara genelde kodlama sorulurken, senior ve manager seviyesinde olanlara sistem dizayn, software dizayn, management gibi konularda sorular soruluyor.
-On site görüşmler genel sabah 9'da başlıyor ve akşam 5'e kadar devam ediyor. Öğle yemeği de interview'e dahil. Ekip sizinle tanışıyor ve birlikte çalışıp çalışamıyacağına karar veriyor. Telefon interview'inde de yaşanan bu benzer süreç, sizin agresifi utangaçi dengeli gibi, hangi ruh halinizde olduğunuzu ve iletişiminizi ölçüyorlar.
-Görüşmelerde çok iyi performans gösterseniz bile, şımarık bir yapınız varsa sizi eliyorlar.
-Sonuçta kurumsal bir yerle görüşüyorsunuz. Kurumsal bir şirketin kurumsallığınını eleştiriyorsanız sonuçta o görüşmede olmamalısınız. OOyunu kurallarına göre oynamalı ve baştan kuralları kabul etmelisiniz.
-Herbir görüşmecinin genelde tüm adaylara sorduğu birkaç soru oluyor.
-Görüşmeciler bazen sordukları sorunun cevabını kendileri de bilmiyor. Adayların soruya yaklaşımlarını merak ediyorlar.
-;Startup tarzı şirketlergenelde adaylardan belli teknolojilerde uzman olmalarını bekliyorlar ve sorularını bu teknolojiler üzerinden soruyorlar. Büyük teknolji şirketleri ise genel kavramlardan sorular sorup adayın herhangi bir teknolojiye uyum sağlayıp sağlayamayacaklarını ölüçüyorlar.
-Referans işe girmekte çok etkili. Herşeyi kendiniz ispat etmeye çalışmanız biraz daha zor olacaktır. Bir referansınız varsa kapılar size daha hızlı açılacaktır.
-Referans veren kişinin de sizin üzerinizden ödül alabileceğini unutmayın. Ayrıca şirket de uygun çalışan bulmuş olacak. Sonuçta bu kazan-kazan-kazan ilişkisi oluyor.
-Linkedinden recuierterlar bulup işe yerleşmek de ayrı bir çözüm. Burada önyazı önem kazanıyor. Önyazınızı şirketlerin herbirne özel yazarsanız şansınız daha da artacaktır.
-Önceden yapmış olduğunuz projeler de sizi işe alımda şansınızı artırıyor. Open source projeler de önemli fakat, production ortamında çalışan projelere katkı sağlamanız daha fazla önem arzediyor.
-Gelişigüzel öğrendiğiniz ve projelerde kullanmadığınız programlama dilleri size görüşmede çok fazla katkı sağlamıyor. Bir iki hafta typescript, ruby gibi diller öğrenmeniz çok da önemli değil. Sonuçta işe girer ve ihtiyaç duyarsanız bir dili iki haftada öğrenebilirsiniz.
-Mezun olunca ilk hedefiniz google facebook gibi yerler olmasın. Evet başarabilirsiniz ama şansınız az olacaktır. Onun yerine basamak basamak ilerlemeye çalışın. Girilmesi daha kolay yerlere girip projelerden öğrenebileceğiniz kadar öğrenmeye çalışın.
- Bazen problemleri recurisive yönden bazen iterative yönden çözmek isteyebilirsiniz. Recurisve ile çözerken stack problemlerini düşünmelisiniz.
-Problemleri Java gibi dillerle çözmek, sınıflar ve interfaceler yazmak OOP'ye uygun olabilir. Eğer bu yolla soruları çözüyorsanız bazen complex yardımcı sınıfların var olduğunu sayabilir ve bunu görüşmeciye söyleyebilirsiniz. Şöyle bir sınıfım var ve bana şunları sağlıyor diyip esas problemi çözen sınıfın kodlarını bu varsayımsal sınıfın apisiyle yazabilirsiniz.
-Fakat bu gibi soruların çözümlerinde saf OOP kullanmak yerine fonksiyonel bir şekilde Python gibi dillerle yazmak size ekstra zaman kazandıracaktır.
-Problem çözümü sırasında görüşmeci ile olan iletişiminiz önemlidir. Çünkü bu takım içinde kuracağınız iletişim için ipucu verecektir. Tek başınıza analiz yapıp soruyu çözmeniz iyi bir iletişim için kötü bir yoldur.
-Problemlerin çözümünde time ve space complexity arasında bir seçim çoğu zaman vardır. Görüşmeciye sorular sorarak hangisinin yazdığımız sistem için daha önemli olduğunu sormalıyız. Misal bu işlem kaç milyon kayıt üstünde yürütülecek, tepki süresi en fazla ne kadar olabilir gibi.
-Problemleri farklı data structurelarla ve algoritmalarla çözmek farklı time complexity ve space complexity verecektir. Soruları herhangi bir şekilde çözebilirsiniz. Ama tercihleriniz size farklı sonuçlar verecektir.
-Çözdüğünüz problemin O(N)'ini görüşmeci size sorduğunda tahmin edip bir değer vermemelisiniz. Tahmin yerine kendinizden emişn bir şekilde değeri vermeli ve bu değeri nasıl elde ettiğinizi söylemelisiniz.
-Bilgisayar bilimlerinde genel olarak bilinen algoritmaları bilmeniz size görüşmeler için büyük fayda sağlayacaktır. Sıralama, arama, string işleme algoritmaları gibi. Bu algoritma sorularını leetcode, hackerrank gibi sityeler üzerinde bulup çözebilirsiniz. Yaptığınız çözümler size genel bir görüş sağlayacak ve farklı problem çözümlerinde hızlanmanızda etkili olacaktır.
-Herşeyi Array ile çözmeye çalışmayın. Array problemin çözümlerinde çok önemli olsa da Hasmap, queue, stack de bir o kadar önemlidir. Ayrıca String soruların çözümlerinde trie'ler de çok önemlidir.
-Yapacağınız görüşmeyi interviewer ile yaparsınız. Ama ayrıca bir kurul ve alım müdürü mevcuttur. Eğer interviewr ile kötü ilişkiler kurarsanız diğer ikisinde de kötü etki bırakırsınız.
-Görüşmeci ile yaptıuğınız soru çözümlerinde soruyu biliyorsanız, bilmiyormuş gibi acı çekme numarasına, her detayı tekrar tekrar tekrarlamanıza gerek yoktur. Bu bir nevi rol yapmaktır ve anlaşılabilir. Soruyu biliyorsanız hızlıca çözün ve bitirin.
-Soru çözümlerinde çok fazla detaya ve uç case'lere girmemeye çalışın. Görüşmeci zaten uç noktaları ihtiyaç duyarsa size soracaktır. Herşeyi test etmeye çalışmayın.
-Görüşme sonrası görüşmeci size "son bir sorunuz var mı?" dediğinde, "işinizin en zor kısmı nedir?" gibi olumsuz sorular sormayın. Onun yerine şirketin kullandığı veya piyasada var olan yeni teknolojiler hakkında şirketin görüşleri gibi olumlu sorular sorun.
-Yine görüşme sonrası son sorunuz var mı dendiğinde "Çözümüm iyi miydi?" gibi sorular sormayın.
-On-site görüşmelerde tahtada farklı renkli kalemlerle yazınızı düzeltmeye çalışmayın. Bu size vakit kaybettirecektir. Ayrıca tahtada sol üst köşeden başlayın. Bu şekilde tahtada yeterli alanınız olacaktır.
-CV'inize hakim olun ama CV'nin de her zaman çok detaylı incelenmediğini düşünün ve kenndinizi tanıtma kısmına önem verin. Kibrili olmayan bir şekilde kendinizi ve projelerinizi iyi anlatmaya çalışın. Unutmayın ilk etki ve sörüşme sonu son etki önemlidir.
-CV'inizi her zaman güncel tutmaya çalışın. 2-3 aylık eski CV'lerinizi göndermemeye çalışın.
-CV'nizi bir sayfayı geçirmeyeye çalışın. Aslında burada CV diyorum fakat Amerikada CV için genelde akademik insanların yaptığı yayınları listeleyen 10-15 sayfalık metinler olarak kabul ediyorlar. Amerikada resume kullanmayı tercih ediyorlar.
-Grafiker olmadığınız için CV'nizi renkli ve farklı şekillerle yapmanıza gerek yok.
-Ms Office Word gibi sertfaksyonlarınızı CV'nize eklemyin. eğer 5-10 yıllık mühendis iseniz stajınızı, girdiğiniz hacathlonları CV'nizden silin. Önemli projelerinizi ön plana çıkarmaya çalışın.
-Bildiğiniz teknolojilerin yanına expert-advanced gibi derecelemdirmeler koyun.
-Eğer bir interview'den geçemezseniz sonrası için korkak olmayın. Unutmayın yapabileceğiniz birçok görüşme ve girebilieceğiniz birçok şirket var.
Görüşmeler için en çok yapılan 10 hata :
1- Soru çözme pratiklerinizi sadece leetcode gibi platformlarla bilgisayar üzerinde yapmayın. Gerçek görüşmelerdeki gibi ya tahta kullanın ya da kağıt üstünde de kendinizi deneyin.
2-Davranışsal sorularda ezbere gitmeyin. Bu sohbet yerine sanki biryerden okuyormuş hissi verir. Genel bir kalıp aklınızda olsun ama sohbetin akışını bozmayın. Güzel hikayeler biriktirin ve yeri geldikçe kullanın.
3- Arkadaşlarınızla mock interview yapmamak sizi gerçek görüşmelerde antremansız bırakacaktır. Utanmayıın ve üşenmeyin, arkadaşlarınızla sahte görüşmeler yapın ve ustalaşın.
4-Teknik soru tiplerini ezberlemeyin. Binlerce soru olduğunu unutmayın. Temel veri yapılarını ve problem çözme yollarını kavrayın.
5-Problemleri sessizce görüşmeciyle iletişim kurmadan çözmeyin. Görüşmecinin sizin analizlerinize de puan verdiğini unutmayın. Ayrıca çözerken yanlış bir yola girerseniz, görüşmeci size rehberlik edip sizi doğru çözüme yönlendirecektir.
6-Soruları çözerken hızlı olun ama aşırı acele etmeyin. Çok hata yapıp düzeltmeye çalıştığınızda saçma bir çözüm üretmeniz mümkündür.
7-Clean code yazmamakta ayrı bir hatadır. Görüşmecinin sizin kodunuzun fotoğrafını aldığını ve görüşme kuruluna ilettiğini unutmayın. Kodunuz sade ve açıklayıcı olmalıdır.
8- Kodunuzu gözden geçirip hatalarınızı düzeltmemekte bir hatadır.
9-Hatalarınızı düzeltmek için de acele etmeyin. Şöyle bir geri çekilin ve kodunuzu iyice değerlendirin ve hatalarınızı ve clean olmayan kodunuzu bu şekilde düşünerek düzeltmeye çalışın.
10-Zor bir soru geldiğinde vazgeçmeyin. Unutmayın görüşmeci sizi zor sorulara nasıl tepki verdiğinizi ölçmek isteyecektir. Ayrıca vazgeçmezseniz size bazı sinyaller vererek yardımcı olacaktır. Ayrıca bu soru sizin için zor ise herkes için de zordur.
-Veri yapıları ve algoritmalar görüşmeler için kritik öneme sahip. Konuları iyice kavradıktan sonra leetcode tarzı sitelerde bol bol soru çözmek gerekiyor. Arkadaşı 'ın tavsiyesiyle başladığım Scott Barrett'in https://www.udemy.com/user/scott-barrett-16/ Data Structures and Algorithms kursları. Ben Java versiyonunu seçtim. Eğitmen görseller için 1 sene uğraşmış. Veri yapıları ve algoritmaları görseller sayesinde çok daha hızlı kavrıyorsunuz.
-Eğer Java Developersanız, veri yapıları ve algoritmalar için bu kitap da sizin için uygun olabilir.
- Ayrıca Mosh'un data structure and algorithms kursu da iyi. https://codewithmosh.com/p/data-structures-algorithms
-Bu kaynaklara çalışırken leetcode.com uygulamasından sorular çözerek görüşmelere hazırlanabilirsiniz.
System Design :
-Bu bölümde özellikle senior mühendislere sorulan sistem dizayn soruları ele alınıyor.
-Mobil ve web gibi farklı teknolojilerin sistem dizaynı farklı oluyor.
-Eğer web dizayn ediyorsanız:
Load Balancing Caching Content Delivery Networks (CDN) Databases and Indexing Redundancy and Replication Database Sharding SQL vs NoSQL API design Mobile systems design
-Bu konuyla iligili de yazılmış güzel kitaplar mevcut.
-Sistemin darboğazları,kısıtlar gibi konular da sistem dizayn için önemli.
-Görüşmeler de genel sorulan sorulardan olan twitter gibi bir sistemi nasıl dizayn edersiniz sorusu. Elbetteki sizden bir saat de böyle bir sistemi dizayn etmenizi beklemiyorlar ama yukarıda bahsettiğim konularda genel olarak bir resim ortaya çıkarmanızı bekliyorlar. Bu noktada sizin bakış açınızı ve bilginizi merak ediyorlar. Bunu bir hackathon gibi düşünebilirsiniz.
Devam edecek....