behavioural interview etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
behavioural interview etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Google, Facebook, Amazon gibi şirketlerle iş görüşmeleri için hazırlanan Tech Interview Pro'dan çıkardığım özet




Tech Interview Pro'da şimdiye kadar izlediklerim ve anladıklarım. (Yanlış çevirirsem kusura bakmayın)
-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.




Davranışsal sorular :

-Davranışsal sorularda aklınıza sadece ne kadar istekli, hevesli, takım oyuncusu oludğunuz gibi gibi şeyler aklınıza gelmesin.

-Görüşmecinin asıl merak ettiği zor durumnlarla nasıl başa çıktığınız ve takım içindeki iletişimi nasıl kurduğunuz, aldığınız kararlardan sonra nasıl geri dönüşler aldığınızdır.

-Mesala Netflix ile görüşmeye giriyorsanız web sitesinden çalışanlarına tüm sorumlulupu yükleme ve takımlarda açık iletişim kurma ve geri dönüşler sağlama gibi felsefeleri vardır. Bu özelliklere ne kadar uyuyorsunuz? Bunu görüşmeden önce değerlendirmelisinizdir.

-Başarısızlık yazılım mühendisliği için bir gerçektir. Bu başarısızlık sonucu ne yaptınız, neler öğrendiniz gibi sorular size yöneltilecektir.

-Görüşme öncesi hikayeleriniz hazır olsun. Görüşme sırasında size yöneltilen sorular sonucu bu hikayeleri anlatın. 
-Ayrıca size takım içinde fikir ayrılıklarında nasıl başa çıktığınızı ve iletişimi nasıl sağladığınız sorulacaktır. Askeri bir sistemde çalışsaydınız emirle kendi dediğinizi yaptırabilirdiniz. Ama yazılım dünyasında konuları nasıl tartışarak bir çözüm bulduğunuzu hikayelerinizle anlatmalısınız.

-Ayrıca size varsayımsal durumlar için sorular gelecektir. Bu durumda nasıl davranırdınız gibi. Bu sorulara da hazır olun ve yaşladığınız benzer durumlara göre bu sorunu nasıl ele alabileceğinizi görüşmeciye anlatın.

-Junior mühendisler için öğrenmeye açık olmak konusu daha önemlidir. Size bu tür sorular gelebilir ve yeni konuları öğrenmek için nasıl yollar izlediğinizi görüşmeciye anlatabilirsiniz.

Size gelebilecek bazı soru tipleri :

Başarısızlıklarınızdan neler öğreniyorsunuz?

Size yapılan geri dönüşleri nasıl karşılıyorsunuz ve bunları davranışlarınızı değiştirmede nasıl kullanıyorsunuz?

Öğrenme yollarınız, kaynaklarınız ve isteğiniz nasıl?

İnsanlarla yaşadığınız fikir ayrılıklarını nasıl çözüyorsunuz, bu gibi durumlarda nasıl bir iletişim yolunu seçiyorsunuz?

Bulunduğunuz projelerde teknik olarak ilginç bulduğunuz ve size çok şey öğreten projeniz nedir?

Motivasyonunuzu nasıl sağlığyorsunuz, çalışmayı sadece bir iş ve kazanma aracı olarak mı görüyorsunuz? (Şirket kültürünü benimesemek ve bu doğrultuda katı sağlamak gibi özellikleri duymak hoşlarına gidecektir.)

Gerekli durumlarda insiyatif alıyor musunuz ve liderlik yapıyormusunuz? (Hangi düzeyde yazılımcı olursanız olun sizden bu özellikleri duymak ve hikayelerinizi dinlemek hoşlarına gidecektir.)

Belirsiz duırumlarda nasıl bir yol izliyorsunuz? Sorular sorup belirsizliği nasıl gideriyorsunuz?

-Ama görüşmeciyi çok sıkmayın ve gerçek olmayan veya çok uzun hikayeler anlatmayın.

Şu yolu izleyebilirsiniz :

1-Karşılaştığınız sorun
2-Ne yaptınız(Çözümünüz)
3-Sonuç ne oldu

Bu adımlardan biri eksik olursa çok güçlü bir hikayeniz olmaz. STAR yaklaşımını internetten araştırabilirsiniz. Ayrıca turkninja.com'da davranışsal sorular adlı yazıda bulabilirsiniz.





Coding Interview:

-Bu kısımda leetcode.com'da sorular çözülüyor.

-BigO analizi, space complexity,Array, ArrayList, LinkedList, HashMap, BinaryTree, Heap, Graphs, Deep First Search, Soritngs, Searching gibi yapılar ele alınıyor.

-Bu konular için siz de internette bazı kaynaklar kullanarak kendinizi geliştirebilirsiniz.

Örnek Kaynaklar :

-Cracking the coding interview : Bu kitap çok ünlü. Bazı firmalar(spotify gibi) sadece bu soruların içinden sorular sorup interview süreçlerini ilerletiyor. Kitapta interview süreçleri ve teknik sorular mevcut.







-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

gibi konuları bilmenizi bekliyorlar.

-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.

-Sistemi tasarlarken görüşmeciye esas amacın neler olduğunu sormalııınız. Düşük respose time'mı, availablity mi, consistency mi, security mi. bu özelliklerin önceliği sistemden sisteme farklılık gösteririr.

-bit.ly sitesini deziayn etme de populer sorulardandır.

-Junior mühendislere api design gibi daha basit disign soruları geliyor.

-Load Balancer : Yatay ölççekli bir mimaride, isteklere cevap veren web server'ların önünde yükü dağıtan, istekleri bu web serverlara yönlendiren bir bilgisaar vardır. Bu bilgisayar çeşitli algoritmalar kullanarak bu istekleri bu web serverlara iletirler. Bu algorştamalar gelen istekleri sırayla dağıtan veya web servlerdaki yüke göre dağıtan veya farklı scriptler çalıştıran alfgoritamalar olabilir Bu şekilde yatay ölçeklendirmeyle scaling ve availability mümkün olur. Load balancerların singe of failure dezavantajı vardır. Bunu aşmak için dns serverlarda tanımlı uygulamanın birden fazla load balancerıın ip adresi tutulabilir.Aslında dns serverlar da bir load balancer'dır. Load balancerlar ayrıca bir cache yapısı ile birlikte gelen aynı isteklere web server'lara gitmeden cache'den cevap verebilirler. Load balancer'ın bir dezavtajı sisteme ekstra bir karmaşıklık getirmesidir. Bazı firmalar bu sebep dikey ölçeklendirmeyi tercih ederler. Ayrıca microservice mimarileri dooğası gereği kendi load balancingini kendi içlerinde hallederler, bu durumda da load balancing makinalarını ihtiyaç olmaz.Load balancingi web serverlaın önüne kyabildiğiniz gibi DB'lerin önüne de koyup yükü paylaştırabilirsiniz. Load balancing görüşmelerde sorulan kolay kavramlardan biridir.

-Caching: Eğer uygulama serverından daha önce hesaplattığımız kompleks, db query gerektirebilen bir işlemi tekrar tekrar istiyorsak, bu durumda tekrar hesaplatma yerine cache yapılarını kullanırız. Bu şekilde response zamanını ve işlem zamanını büyük ölçüde düşürebiliriz. Burada frontend cachelerinden bahsetmiyoruz. Cache server bir makinada olabileceği gibi, dağıtık bir şekilde scaleable de olabilir. Bazı bilindik cache sağlııyıcıları memcache, redis ve cassandradır. Cache değerleri memory'de tutarak DB'nin birçok yükünü alabilir. Data memory'de tutulduğu için kalıcı değildir fakat okuma ve yazma diske göre çok hızlıdır. Bir sorgu yaptığınızı ve bunun DB serverda birden fazla join yaparak hesaplandığını düşünün. Ve bu isteği sürekli yaptığınızı düşünün. Bu işlemler yerine ilk sorgu çalıştırıldıktan sonra sonuç cache'e yazılır ve gelen yeni istekte bu hesaplanma tekrar yapılmaz ve cache'den dönülür. Ayrıca anlık geçici değer tutmalarda da cache DB'ye göre avantajlıdır. Örneğin sitenizin anlık ziyaretçi sayısını tutut-yorsanız, DB'ye yazıp DB'yi sürekli lock'lamak yerine cache'e yazarak increment işlemi hızlı bir şekilde gerçekleştirebilirsiniz. Cache'ler (key,value) şeklinde değerler tutarlar. API'si çok basittir. get(key) ve set(key,value) şeklindedir. Gayet basit bir yapıları vardır. Cache'lerde değerler kalıcı değildir. Bu sebeple değerli datalarınızı sadece cache'de tutamazsınız. DB'ye de kaydeytmeniz gerekmektedir.(perisistence). Mesela uygulama kullanıcısının kendi uygulama ayarlarını değiştirdiğini düşünelim. Sadece cache'i güncellemek kullanıcının ayarlarını daha sonralar için kaybetmesine neden olacaktır. Consistency için cache'inizi DB ile validate etmelisiniz.Misal yeni değerler insert edildiğinde önce cache ardından db güncellenelir. Bu işlemi önce cache'i güncelleyip response dönüp cron job veya kuyruk ile DB'yi asenkron olarak da güncelleyebiliriz. Ama asenkron yöntemde consistency'i garanti edemeyiz. Senkron yöntemde ise update işlemi daha yavaştır.Cache invalidaiton için birçok yöntem vardır. Detaylar için buraya bakabilirisiniz. 

CDN: Content Distrubition Network'ün kıslatmasıdır. Uygulamanın statik dosyalarını farklı bölgelerde bulunan serverlarda tutarak, kullanıcının hangisine yakın olmasına bağlı olamasına bağlı olarak hizmet verirler. Bu statik dosyalar resim, js dosyası, css dosyası, video ve hatta html bile olabilir. Misal Türkiye'den amazon.com'a istek atıyorsunuz, amazon uygulamasının statik dosyalarının bulunduğu Türkiye'ye en yakın olduğu CDN server'ından size bu dosyalar iletilir. CDN bir cache gibi çalışır. CDN için iki farklı yöntem vardır. Push ve Pull based. Pull based'de bir dosyaya ilk istek yapılana kadar CDN'e dosya gönderilmez ve gönderildikten sonra sonraki isteklerde bu dosyalar cache'de tutulur. Push based'de ise uygulama geliştiriceilerin dosyaları manuel olarak bu serverlara göndermeleri gerekir. CDN'de js gibi dosyaların versiyonları tutulur ve bu şekilde güncel olmayan dosyaların kullanıcıya gönderilmeleri engellenir. Amazon cloud'da CDN servisine CloudFront denir.

Databases : Verileri sakladığımız yapılara db deriz. Farklı DB çeşitleri vardır Relational ve NOSQL databaseler. Genel olarak relationallar üzerine konuşacağız. DB'de hızlı sorgular yapma istiyorsak index yapsını kullanırız. Bu sorgu yaptığımız db alanının binary tree gibi yapılara kaydedilmesi işlemidir. Bu şekilde log n zamanında sorgular gerçekleştirebiliriz. Indexler read işlemini hızlandırı fakat insert ve update işlemlerinde index yaopsısın her defasında güncellenmesi gerekitiğinden read işlemleri sık olan yapılar için daha uygundur. Bir tabloda bir alan indexlendiği gibi birden fazla alan da composite olarak indexlenebilirler.


Devam edecek....

Yazılım mühendisleri için davranışsal görüşme soruları (Behavioral Interviews: for Software Engineers)

 Merhaba bu yazımda sizlere, teknik mülakattan önce işveren için adayı tanıma konusunda yol gösterici olan, davranışsal interview sorularına biraz kendi mesleki hayatımdan ve bazen kurgusal olarak örnekler vermeye çalışacağım.

Davranışsal görüşmede nasıl başarılı olunur?

1) Hazırlıksız gelme

Size hangi davranışsal mülakat sorularının sorulacağını önceden bilemezsiniz. Bununla birlikte, her zaman yaptığınız gibi yine de bir röportaj için hazırlanmanız gerekir. Aksi takdirde, mülakatı yapan kişide en iyi izlenimi bırakmadan kendi sözlerinizle ya da aklınıza gelen ilk şeyi söyleyerek mırıldanırsınız.
Şirketi araştırmaya ek olarak, büyük mesleki başarılarınızı ve zorluklarınızı hatırlamak için zaman ayırın. Hatta bunları bir yere yazabilirsiniz, böylece işe alma müdürü size başarılı ekip çalışması örneklerini sorarsa, zaten bir cevabınız oluşmuş olur.

2) STAR yaklaşımını kullanın


Kariyer danışmanları, STAR yaklaşımının davranışsal mülakat sorularına yanıt vermenin etkili bir yolu olduğunu belirtmektedir. Bilgilendirici ve kapsamlı bir cevap vermek için izlemeniz gereken belli bir yapıyı ifade eder.
- S (Situation) - durum - içinde çalışmanız gereken bağlamı ana hatlarıyla belirtin;
- T (Task) - görev - tamamlamanız gereken görevi, çözmeniz gereken sorunu veya belirlenen hedefi tanımlayın;
- A (Action) - eylem - yukarıda belirtilen görevi tamamlamak için gerçekleştirdiğiniz belirli eylemleri anlatın;
- R (Result) - sonuç - eylemlerinizle hangi sonucu başardığınızı açıklayın.
STAR tekniği neden işe yarıyor? Sadece konunun etrafında dolaşmadan odaklanmış bir cevap vermenize yardımcı olmakla kalmaz, aynı zamanda hedefe ulaşmak için hangi becerileri uyguladığınızı göstermenize de olanak tanır.

3) Rakamları ve gerçek olayları kullanın

STAR yaklaşımına göre hikayeyi anlatırken, onu kesin rakamlar ve belirli sonuçlarla enjekte edin. Ayrıca ünlü müşterinin veya sektörde etkili bir kişi olan patronun adını da bırakabilirsiniz. "Tanıttığım yeni yönetim tekniği ile zamandan tasarruf ettik" demek yerine, "Ekip görevleri% 10 daha hızlı tamamlamaya başladı" deyin. Gerçekler, sonuçlara odaklanmanızı ve güvenilir bir şekilde inşa ettiğinizi gösterir.

4) Kültürel uyumunuzu gösterin

Görüşme için hazırlanırken, web sitesini, sosyal medya sayfalarını ve orada çalışan kişilerin hikayelerini kullanarak şirketin kurumsal kültürünü araştırın. İşe alan kişinin sorularını yanıtlarken, mükemmel bir kültürel uyum olarak karşımıza çıkmak için farklı açılardan yararlanın. Örneğin, şirket bireyselliği ve rekabeti teşvik ediyorsa, stresi kendi katkınıza ve çabalarınıza koyun. Şirket ekip çalışmasına değer veriyorsa, içinde çalıştığınız ekibin başarısını gösteren hikayeleri anlatın.

5) Vücut diliniz üzerinde çalışın

Daha önce beden dilinin ve sözlü olmayan sinyallerin önemini duyduğunuzu biliyoruz. Ancak, tekrar edilmeye değer. Mesele şu ki, omuzlarınız devrilmiş ve bacak bacak üstüne atılmış olarak otururken kendinizi harika bir müzakereci ve en iyi performans gösteren biri olarak tanımlarsanız, görüşmeci tutarsız bir izlenim edinir. Bu yüzden mülakat anlaşması için ipuçları bile çok önemlidir.
Ünlü bir yaşam koçu Antony Robbins, daha güvenli görünmek ve hissetmek için "güçlü poz verme" yi öneriyor. Ofise girmeden önce, 2 dakika Süpermen gibi ellerinizi kalçalar üzerinde tutun. Bu pozu almak testosteron seviyenizi% 20 artırır ve stresi azaltır.

6) Negatif olmaktan kaçının

Görüşmenin yalnızca başarılarınızı kapsaması pek olası değildir. Görüşmeci, çatışmaları, zor durumlardaki çözümünüz ve başarısızlıkları nasıl ele aldığınızı görmek isteyecektir (bu arada, konuyla ilgili bazı uzman tavsiyelerini burada bulabilirsiniz: http://resumeperk.com/blog/conflicts-at-work-most-common-types),  Dolayısıyla, muhtemelen müşteriden bir şikayet aldığınızda, projeyi zamanında teslim edemediğinizde veya iş için maliyetli olduğu ortaya çıkan bir hata yaptığınızda durum size sorulacaktır. "Asla hata yapmam" gibi bir şeye yanıt vermekten kaçının. Bu durumda hata yaptığınızı veya yanlış davrandığınızı kabul etmelisiniz, ancak durumdan öğrendiğiniz derslere odaklanmalısınız. Örneğin bilgi eksikliğinden dolayı bir hata yaptıysanız ileride bu tür hatalardan kaçınmak için kurumsal eğitim aldığınızı belirtebilirsiniz.

7) Önemsenecek noktalarınızı öğrenin ve bunları gösterin

Uzmanlar, ödevinizi yaparken sizi benzer niteliklere sahip adaylardan ayıran üç ana özelliği yazmanızı tavsiye ediyor. Örneğin, başkalarının tavsiye almak için başvuracağı bir kişi olmanız ya da  pazarlama girişimleri sunan gerçekten yetenekli bir iletişimci olabilmeniz gibi. 
Doğru soru ortaya çıktığında bu yetkinliklerden bahsedin. Davranışsal soruların doğru ya da yanlış cevapları olmadığından, düşüncelerinizi bir araya getirmek için birkaç saniyenizi ayırmanız sorun değildir (nefes alabilir veya biraz su yudumlayabilirsiniz).


Davranışsal sorular ve cevaplar ingilizce olacak, ayrıca Türkçe açıklama ve çeviriler eklenecektir.

01. Tell me about one of the most technically challenging projects you have done.

(Bitirmiş olduğunuz, teknik olarak en zorlu projelerden birini anlatın.)

Answer: Most of the projects that I was involved in were technically challenging. But if I had to choose one I would say Digital Agency Project in Anadolu Sigorta was the most challenging. When we started this project, the technologies we were using were just becoming popular in 2017 (Jhipster, Spring Boot, Angular 4, Elasticearch, Yarn, Liquebase, Mapstruct) and we didn't have too much knowledge about these technologies and we had to integrate them with Anadolu Sigorta SOA services. The project domain was also complex.

02. Tell me about one of your failed projects. What did you learn? What could you do differently?

(Bana başarısız projelerinizden birini anlatın. Ne öğrendin? Neyi farklı yapabilirdin?)

Answer: I can give an example of a big task of a project where things didn't go exactly the way I wanted. In Garanti Investment web project financial dictionary implementation was an important part of the project. I was not as well skilled at javascript as backend technologies. And I didn't have a lot of knowledge of clean code nor was I aware of its importance. I successfully finished the dictionary implementation, but it took too long and it hadn't been implemented with clean code principles and effective way. Our team leader decided to implement it from the scratch by himself.

After that completion of the task, I realized the importance of clean code and writing effective javascript code.

03. Tell me about the project that you are most proud of. What was the most significant accomplishment of your entire career?

(Bana en çok gurur duyduğun projeden bahset. Tüm kariyerinizin en önemli başarısı neydi?)

Answer: If had to choose one I would say the project I am most proud of was emlakjet.com rebuilding project. We analysed the legacy project, understood the domain, migrated the database from MySQL to PostgreSQL, implemented the project with the modern framework, and completed the project successfully before the deadline.

04. Tell me about a time that you found a creative solution to a problem.

(Bana bir soruna yaratıcı bir çözüm bulduğunuz zamanı anlatın.)
Answer: In my last project RiskMobile, we had performance and memory issues. We came up with some solutions for these :
Increased free heap memory space by up to %50 calculating report String size before transforming base64 StringBuilder.
Increased report photo upload speed by up to %80 using the parallel upload.
An increased report read time up to %80 by lazy loading.

05. Tell me about a time when you had a conflict with your teammate or manager: how did you resolve it, and what did you learn?

(Takım arkadaşın veya yöneticinle bir çatışma yaşadığın bir zamandan bahset: Bunu nasıl çözdün ve ne öğrendin?)

Answer: Usually, conflicts happen between analysts and developers. In such cases, I have a private conversation with the analyst to try to understand him/her and tell him/her about my task-related dilemmas. I try to find a solution together without making it a personal issue.

06. Tell me about a time that you were behind on a project and you knew that you could not meet the deadline. Tell me about a time when you changed priorities to meet a deadline.

(Bana bir projede geride kaldığınız ve son teslim tarihine yetişemeyeceğinizi bildiğiniz bir zamandan bahsedin. Son teslim tarihine uymak için önceliklerinizi değiştirdiğiniz bir zamandan bahsedin.)

Answer: In a new version of the Alcatel OSOS project, we had defects to solve and new features to add. Towards the end date, we were far behind these goals. We have postponed less critical new features to the next version and put it first to solve problems that matter to the customer. After solving the problems, we applied the most valuable new features and successfully released the version.

07. Tell me about a time that you had to implement a workaround (vs. a solution) for a critical issue to meet a deadline and as a result, you introduced technical debt. What did you do with the technical debt after the deadline?

(Son teslim tarihini karşılamak için kritik bir sorun için bir geçici çözüm (çözüm yerine) uygulamak zorunda olduğunuz ve bunun sonucunda teknik borç getirdiğiniz bir zamandan bahsedin. Son teslim tarihinden sonra teknik borcunuzla ne yaptınız?)

Answer:We are developing a complex feature for an e-commerce platform - an advanced search system that uses machine learning algorithms to predict and suggest user interests.

A few days before the deadline, we discover a significant issue. The machne learning model isn't training correctly, and resolving the problem would require considerable time for debugging, retraining, and validation - time we don't have.

With the deadline fast approaching, we decide to implement a workaround: instead of using the machine learning model, we develop a simpler rule-based system for the search feature. While it's not as accurate or efficient, it serves the purpose for the time being, and we manage to ship the feature on time. However, this creates technical debt in our codebase - we now have a less optimal feature that will need to be upgraded in the future.

After the deadline has passed, we don't ignore the technical debt we've accrued. We understand that while the workaround was necessary at the time, it's not a sustainable or long-term solution. We discuss the matter with the project manager and propose a plan to repay this debt. The plan includes:

Identifying the Problem: We document the details of the technical debt, its cause, and what parts of the system it affects.

Planning the Solution: We design a strategy for fixing the ML model issue. This involves debugging the problem, implementing the fix, retraining the model, and validating its results.

Scheduling: We plan out a timeline for the work, considering other project requirements and deadlines.

Implementation: We work on the issue according to the schedule, replacing the rule-based system with the intended machine learning model.

Testing and Verification: We rigorously test the new system to ensure it works as expected and improves upon the old system.

Documentation: We update all relevant documentation to reflect the changes made and document the lessons learned to prevent a similar occurrence in the future.0


8. Why do you want to leave your current job? Could you mention some general issues in your current job? Have you taken any action to mitigate/resolve those issues? 

(Mevcut işinizden neden ayrılmak istiyorsunuz? Şu anki işinizle ilgili bazı genel sorunlardan bahsedebilir misiniz? Bu sorunları hafifletmek / çözmek için herhangi bir önlem aldınız mı?)

Answer:"I have had a rewarding journey at my current company and I've learned a lot, but I believe it's time for me to take on new challenges and further develop my skill set. There are a few reasons behind my decision to look for a new opportunity.

One ofthe main issues has been the limited opportunities for growth and advancement in my current role. I have a deep interest in working with emerging technologies like artificial intelligence and machine learning, but my current job does not provide the space to explore these areas. I value continuous learning and professional development, and unfortunately, it's been challenging to find those opportunities in my current role.

Another factor has been the lack of balance between work and personal life. I understand that there will be times when extra hours are necessary, especially in software development, but it has become a consistent trend rather than the exception. This has, in turn, affected my work-life balance.

I've certainly taken steps to address these issues. Regarding the growth opportunities, I've tried to incorporate learning into my personal time and have taken online courses to stay abreast with the latest technologies. However, this doesn't provide the same benefits as practical, on-the-job experience would.

In terms of the work-life balance issue, I've had open discussions with my team lead and manager about it. We've tried to distribute workload more evenly and hire additional team members to manage the workload. But the pace of the company and the resource constraints have made it difficult to bring about substantial change.

Given these circumstances, I believe it would be beneficial for my career and personal growth to explore new opportunities where I can leverage my skills and passion for emerging technologies, while also maintaining a healthier work-life balance. I'm excited about the opportunities that your company provides in both these aspects."


09. Why do you want to join us? What do you know about our company?

(Neden bize katılmak istiyorsun? Şirketimiz hakkında ne biliyorsun?)

Answer:  "I'm really impressed with your company's reputation for innovation and commitment to using the latest technologies to create impactful products. As an engineer passionate about working with cutting-edge technology, it's exciting to see the breadth of projects your team takes on.

Your company's focus on artificial intelligence and machine learning, for instance, is particularly appealing to me. In my previous role, I didn't get much opportunity to explore these areas, and I'm eager to dive into this field. I've taken some online courses and done personal projects, but working with your team would provide a more in-depth, practical experience that I am looking for.

I've also read about your company's emphasis on maintaining a healthy work-life balance for your employees. This aligns with my personal values and my belief in the importance of a balanced lifestyle for productivity and creativity.

I'm also aware of your company's strong commitment to giving back to the community, which I find admirable. I appreciate that you go beyond just doing business and strive to make a positive impact in society.

Furthermore, your company culture, which encourages collaboration, continuous learning, and innovation, is very appealing. I believe this kind of environment will help me grow as a professional and contribute more effectively to the team.

In summary, I want to join your company because I believe it aligns with both my professional goals and personal values. I'm excited about the prospect of contributing to and learning from a team that's pushing boundaries in technology, all while maintaining a sustainable work-life balance and making a positive impact on the community."


10. If you have worked in many companies for short periods of time (< 2yrs), why do you switch your jobs so frequently?

(Kısa süreler için (<2 yıl) birçok şirkette çalıştıysanız, neden işlerinizi bu kadar sık değiştiriyorsunuz?)

Answer:"I appreciate your concern about the frequency of job changes in my history. I believe it's crucial to clarify that these changes were not made lightly, but were carefully considered steps in my career progression.

Early in my career, I had the opportunity to work in different start-ups, each offering unique projects and technologies. These opportunities allowed me to broaden my skill set and understand various facets of software engineering. My goal was to gain diverse experience in a relatively short amount of time, and these roles offered me the chance to do just that.

In a couple of instances, the startups I was working for underwent significant changes, such as acquisition or restructuring, which led to my decision to move on sooner than anticipated.

While it may seem that I've moved jobs frequently, each move was a strategic decision to broaden my knowledge base, increase my experience with different technologies and industries, and adapt to unforeseen circumstances.

I've always made sure to leave on good terms, having delivered significant contributions and after ensuring a smooth transition. I believe the varied experiences have made me more adaptable, versatile, and capable as a software engineer.

Having said that, I am now looking for a longer-term opportunity where I can grow deeper roots, continue to learn and contribute significantly. Your company, with its innovative projects and stability, seems like an excellent fit for this next phase of my career."


11. What is your weakness?

(Zayıf yönün nedir?)

Answer:"I think one of my weaknesses has been overcommitting myself. I am very passionate about my work and I tend to get excited about new projects or challenges, so sometimes I take on more tasks than I should. This can lead to longer hours and increased stress levels as I strive to deliver on all my commitments.

However, I've been working actively to improve in this area. I've started using project management tools and techniques to better manage my workload, and I'm becoming more conscious about the commitments I take on. I've also been learning to delegate effectively and have open discussions with my team and superiors about workload distribution and deadlines.

Recognizing this weakness has been a valuable realization for me, and while I am still a work in progress, I am committed to continuing to improve my time management and workload balancing skills. This self-improvement will not only increase my productivity but also maintain the quality of work I am known for."

12. What is your strength?

(Güçlü yönün nedir?)

Answer: I believe that my greatest strength is the ability to solve problems quickly and efficiently. I can see any given situation from multiple perspectives, which makes me uniquely qualified to complete my work even under challenging conditions. That problem solving allows me to be a better communicator. I am just as comfortable speaking to senior executives as I am junior team members. I think my ability to see all sides of an issue will make me a great asset to the team.

13. What is your current salary, or what is your salary expectation?

(Mevcut maaşınız veya maaş beklentiniz nedir?)

Answer:

14. What does your typical day look like at your current job?

(Mevcut işinizde tipik bir gününüzü nasıl geçirirsiniz?)

Answer:

15. Describe one of the biggest mistakes you have made in your job, and what did you learn?

(İşinizde yaptığınız en büyük hatalardan birini anlatın ve bu hatadan ne öğrendinizi söyleyin?)

Answer:

16. Describe a situation in which you were faced with a major obstacle in order to complete a project. How did you deal with it? What steps did you take?

(Bir projeyi tamamlamak için büyük bir engelle karşı karşıya kaldığınız bir durumu anlatın. Bununla nasıl başa çıktın? Hangi adımları attın?)

Answer:

17. How do you solve ambiguous problems?

(Belirsiz sorunları nasıl çözersiniz?)

Answer:

18. How do you see yourself in five (or ten) years? What skills do you want to learn?

(Kendinizi beş (veya on) yılda nasıl görüyorsunuz? Hangi becerileri öğrenmek istiyorsun?)

Answer: In several years, I see myself involved in architecting complex Java applications. Beyond that is too far away to think of right now.

19. Tell me about a time that you supervised/trained other engineers.

(Bana diğer mühendisleri denetlediğiniz / eğittiğiniz bir zamandan bahsedin.)

Answer:

20. Tell me about a time that you changed or improved the culture of your company or team.

(Şirketinizin veya ekibinizin kültürünü değiştirdiğiniz veya geliştirdiğiniz bir zamandan bahsedin.)

Answer:

21. Tell me about a time that you took the initiative.

(Bana inisiyatif aldığınız bir zamandan bahsedin.)

Answer:

22. Do you read any related blogs?

(İlgili herhangi bir blog okuyor musunuz?)

Answer:

23. Describe a time when you made a suggestion to improve something within the project that you were working on.

(Üzerinde çalıştığınız proje içinde bir şeyi iyileştirmek için bir öneride bulunduğunuz bir zamanı anlatın.)

Answer:

24. Give me an example of a time when you noticed a small problem before it turned into a major one. Did you take the initiative to correct it? What kind of preventive measures did you undertake?

(Küçük bir problemi büyük bir problem haline gelmeden önce fark ettiğiniz bir zamana örnek verin. Düzeltmek için inisiyatif aldınız mı? Ne tür önleyici tedbirler aldınız?)

Answer:

25. How will you adjust yourself in a fast-paced environment?

(Hızlı tempolu bir ortamda kendinizi nasıl ayarlarsınız?)

Answer:

26. What is your learning process like? How do you learn new skills?

(Öğrenme süreciniz nasıl? Yeni becerileri nasıl öğrenirsiniz?)

Answer:

27. What don’t you like in a job?

(Bir işte neyi sevmezsin?)

Answer:

28. When do you consider a project to be successful?

(Bir projenin ne zaman başarılı olduğunu düşünürsünüz?)

Answer:

29.Tell me about a time when you had to present a complex programming problem to a person that didn’t understand technical jargon. How did you ensure that the other person understood you?

(Bana teknik jargonu anlamayan bir kişiye karmaşık bir programlama problemi sunmanız gereken bir zamandan bahsedin. Diğer kişinin sizi anladığından nasıl emin oldunuz?)

Answer:

30.Tell me about a time you had to work on several projects at once. How did you handle that?

(Aynı anda birkaç proje üzerinde çalışmanız gereken bir zamandan bahsedin. Bunu nasıl hallettiniz?)

Answer:


31.Describe a situation in which you have experienced a significant project change that you weren’t expecting. What was it? How did that impact you, and how did you adapt to this change? How did you remain productive through the project?

( Beklemediğiniz önemli bir proje değişikliği yaşadığınız bir durumu açıklayın. Bu neydi? Bu sizi nasıl etkiledi ve bu değişime nasıl uyum sağladınız? Proje boyunca nasıl üretken kaldınız?)

Answer:


32.Tell me about a time when you had to work with a difficult person to accomplish a goal. What was the biggest challenge? How did you handle it?

(Bir hedefe ulaşmak için zor bir insanla çalışmanız gereken bir zamandan bahsedin. En büyük zorluk neydi? Bunu nasıl hallettin?)

Answer:


Kaynaklar : CRACKING THE BEHAVIORAL INTERVIEWS FOR SOFTWARE ENGINEERS, FIRST EDITION ,  https://devskiller.com/45-behavioral-questions-to-use-during-non-technical-interview-with-developers/ ,  https://resumeperk.com/blog/behavioral-interview-questions---and-how-to-answer-them 


Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo