Ticker

15/recent/ticker-posts

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

Yorum Gönder

0 Yorumlar