[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:database\u002Fsenior":4,"config":214},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":8,"spec_key":8,"spec_name":8,"locale":9,"cell_total":10,"field_total":11,"seniorities":12,"topics":15,"specs":116,"samples":130},"database","Veritabanı","senior","","tr",1595,2475,[13,14,7],"junior","mid",[16,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110,113],{"key":17,"name":18,"count":19},"backup-recovery","Backup Recovery",75,{"key":21,"name":22,"count":19},"data-modeling","Data Modeling",{"key":24,"name":25,"count":19},"indexing","Indexing",{"key":27,"name":28,"count":19},"mongodb-aggregation","Mongodb Aggregation",{"key":30,"name":31,"count":19},"mongodb-indexes-queries","Mongodb Indexes Queries",{"key":33,"name":34,"count":19},"mongodb-operations","Mongodb Operations",{"key":36,"name":37,"count":19},"mongodb-replication-sharding","Mongodb Replication Sharding",{"key":39,"name":40,"count":19},"mongodb-schema-modeling","Mongodb Schema Modeling",{"key":42,"name":43,"count":19},"mongodb-transactions-consistency","Mongodb Transactions Consistency",{"key":45,"name":46,"count":19},"mysql-indexes","Mysql Indexes",{"key":48,"name":49,"count":19},"mysql-innodb-transactions","Mysql Innodb Transactions",{"key":51,"name":52,"count":19},"mysql-operations","Mysql Operations",{"key":54,"name":55,"count":19},"mysql-query-optimization","Mysql Query Optimization",{"key":57,"name":58,"count":19},"mysql-replication-scaling","Mysql Replication Scaling",{"key":60,"name":61,"count":19},"mysql-types-constraints","Mysql Types Constraints",{"key":63,"name":64,"count":19},"nosql-models","Nosql Models",{"key":66,"name":67,"count":19},"performance-tuning","Performance Tuning",{"key":69,"name":70,"count":19},"pg-indexes","Pg Indexes",{"key":72,"name":73,"count":19},"pg-mvcc-vacuum","Pg Mvcc Vacuum",{"key":75,"name":76,"count":19},"pg-operations","Pg Operations",{"key":78,"name":79,"count":19},"pg-query-planning","Pg Query Planning",{"key":81,"name":82,"count":19},"pg-transactions-locking","Pg Transactions Locking",{"key":84,"name":85,"count":19},"pg-types-constraints","Pg Types Constraints",{"key":87,"name":88,"count":19},"query-optimization","Query Optimization",{"key":90,"name":91,"count":19},"redis-cluster-sharding","Redis Cluster Sharding",{"key":93,"name":94,"count":19},"redis-data-structures","Redis Data Structures",{"key":96,"name":97,"count":19},"redis-expiration-eviction","Redis Expiration Eviction",{"key":99,"name":100,"count":19},"redis-persistence","Redis Persistence",{"key":102,"name":103,"count":19},"redis-replication-sentinel","Redis Replication Sentinel",{"key":105,"name":106,"count":19},"redis-transactions-scripting","Redis Transactions Scripting",{"key":108,"name":109,"count":19},"replication-scaling","Replication Scaling",{"key":111,"name":112,"count":19},"security-access","Security Access",{"key":114,"name":115,"count":19},"transactions-isolation","Transactions Isolation",[117,121,124,127],{"key":118,"name":119,"count":120},"mongodb","MongoDB",450,{"key":122,"name":123,"count":120},"mysql","MySQL",{"key":125,"name":126,"count":120},"postgresql","PostgreSQL",{"key":128,"name":129,"count":120},"redis","Redis",[131,149,162,175,188,201],{"id":132,"topic":18,"difficulty":133,"body":134,"options":135,"correct_key":146,"explanation":148},"019f56bb-b5c9-7662-ba9f-69f3afa36dd6",3,"Bir veritabanını, *farklı bir major versiyonda* ve *farklı bir CPU mimarisinde* çalışan bir sunucuya taşıman gerekiyor.\n```bash\n# seçenek A (physical): ham veri dosyalarını kopyala\n# seçenek B (logical): pg_dump olddb | psql -h newhost newdb\n```\nGenelde hangisi daha güvenli ve neden?",[136,139,142,145],{"key":137,"text":138},"a","Physical dosya kopyası, çünkü ham veri dosyaları versiyonlar ve CPU mimarileri arasında her zaman uyumludur",{"key":140,"text":141},"b","Hiçbiri işe yaramaz — veri sunucular arasında yalnızca önce streaming replication kurularak taşınır",{"key":143,"text":144},"c","İkisi de burada eşdeğerdir, çünkü backup formatının platformlar arası taşınabilirlikle ilgisi yoktur",{"key":146,"text":147},"d","Logical SQL dump, çünkü taşınabilirdir ve farklı bir versiyona ya da platforma yeniden yüklenebilir","Physical backup, major versiyonlar ve mimariler arasında değişebilen motor-içi dosya formatlarını kopyalar; başka yere restore etmek kırılgandır. Logical dump ise motorun okuyabildiği SQL\u002Fveridir; versiyonlar ve platformlar arası taşımanın standart aracı tam da bu yüzden odur. Replication (b) kopyaları senkron tutar ama migration için ön koşul değildir.",{"id":150,"topic":18,"difficulty":133,"body":151,"options":152,"correct_key":140,"explanation":161},"019f56bb-b5cc-782e-a9ce-b8ae4ac36b19","```bash\npg_dump proddb > \u002Fbackups\u002Fnightly.sql   # cron job, her gece exit 0\n```\nBu iş bir yıl boyunca her gece başarıyla (exit 0) bitti ama gerçek bir kesintide restore başarısız oldu. Bu klasik durum neyi gösterir?",[153,155,157,159],{"key":137,"text":154},"Dump dosyası zamanla, restore sürecinin geri yükleyemeyeceği kadar büyüdü",{"key":140,"text":156},"Yeşil bir backup işi komutun çalıştığını kanıtlar, çıktının restore edilebilir olduğunu değil",{"key":143,"text":158},"Backup'lar asla cron ile zamanlanmamalı; ayrı bir backup agent'ı zorunludur",{"key":146,"text":160},"SQL dump'lar birkaç aydan eski olduklarında restore edilemez hale gelir","Sıfır exit code, dump komutunun çalıştığını gösterir; çıktının eksiksiz ve restore edilebilir olduğunu değil — yanlış bir flag, dışlanan bir şema ya da sessiz kesilme, sen gerçekten restore edene dek (ör. `psql newdb \u003C \u002Fbackups\u002Fnightly.sql` ile ayrı bir veritabanına) gizli kalır. 'Backup'ımız var'ı 'kurtarabiliriz'e ancak gerçek bir test restore çevirir. Diğer şıklar sebebi yanlış teşhis eder.",{"id":163,"topic":18,"difficulty":133,"body":164,"options":165,"correct_key":143,"explanation":174},"019f56bb-b5cd-7a54-ad1d-e6ad3c208782","```bash\ncp -r \u002Fvar\u002Flib\u002Fdb\u002Fdata \u002Fbackup\u002Fdata   # veritabanı canlı ve yazma alıyor\n```\nBir mühendis, veritabanı yazma almaya devam ederken veri dizinini düz bir recursive kopya ile yedekliyor; hiçbir snapshot ya da koordinasyon yok. Temel risk nedir?",[166,168,170,172],{"key":137,"text":167},"Kopya her zaman çalışan veritabanının kusursuz, tamamen restore edilebilir bir görüntüsüdür",{"key":140,"text":169},"Recursive kopya bitene kadar gelen tüm yazmalar otomatik olarak bloklanır",{"key":143,"text":171},"Kopya iç tutarsız olabilir ve geçerli bir duruma restore edilemeyebilir",{"key":146,"text":173},"İşletim sistemi, yazılırken kopyayı otomatik olarak şifreler","Canlı kopya, veri değişmeye devam ederken dosyaları bir zaman aralığında okur; dosya A ile dosya B farklı anları yansıtabilir — başlamayı reddedebilecek ya da yarı-uygulanmış transaction içeren yırtık, tutarsız bir görüntü. Güvenli physical backup, consistent snapshot ya da motorun backup modunu kullanır. Kopya ne bloklanır (b), ne geçerliliği garantidir (a), ne de şifrelenir (d).",{"id":176,"topic":18,"difficulty":133,"body":177,"options":178,"correct_key":140,"explanation":187},"019f56bb-b5cf-7efc-b051-49e3545e6076","```sql\nCREATE INDEX idx_orders_customer ON orders (customer_id);\n```\nÇok büyük, yüksek trafikli bir `orders` tablosunda, böyle düz bir şema değişikliğini production'da çalıştırmak neden riskli olabilir?",[179,181,183,185],{"key":137,"text":180},"Index oluşturmak, tabloda halihazırda bulunan satırları kalıcı olarak bozar",{"key":140,"text":182},"Bazı değişiklikler tabloyu kilitler ya da uzun sürer; yazmayı (ve bazı DDL'lerde okumayı) bloklayıp downtime'a yol açar",{"key":143,"text":184},"Böyle bir şema değişikliği başladıktan sonra asla geri alınamaz",{"key":146,"text":186},"İfade çalışabilmeden önce tüm tablo belleğe yüklenmelidir","Büyük ve yoğun bir tabloda index oluşturmak gibi bir işlem lock tutabilir ve sorguları durduracak kadar uzun sürebilir; bu yüzden ekipler bunu düşük trafikli pencerelere alır ya da online\u002Fconcurrent varyantları kullanır. Veriyi bozmaz (a), DROP INDEX ile geri alınabilir (c) ve tabloyu RAM'e yüklemeyi gerektirmez (d).",{"id":189,"topic":18,"difficulty":133,"body":190,"options":191,"correct_key":140,"explanation":200},"019f56bb-b5d1-7a64-9e88-a44f48769b30","Her Pazar bir full backup, Pazartesi–Cumartesi her gece bir *differential* backup alıyorsun. Veritabanını Çarşamba geceki haline restore etmek için hangi backup'lara ihtiyacın var?",[192,194,196,198],{"key":137,"text":193},"Pazar'dan Çarşamba'ya kadar tüm backup'lar: full ile Pazartesi, Salı ve Çarşamba differential'ları",{"key":140,"text":195},"Yalnızca Pazar'ın full backup'ı ile Çarşamba gecesinin differential'ı",{"key":143,"text":197},"Yalnızca Çarşamba gecesinin differential backup'ı, tamamen tek başına",{"key":146,"text":199},"Yalnızca Pazar'ın full backup'ı, differential'ların hiçbiri olmadan","Differential, son full backup'tan sonra değişen her şeyi içerir; yani her gecenin differential'ı önceki günlerin değişikliklerini de kapsar — hedef gecen için yalnızca full + o bir differential yeter. Zincirdeki her differential'ı uygulamak (a) bir *incremental* stratejiyi tarif eder; differential tek başına (c) bir base'e sahip değildir, full tek başına (d) ise haftanın değişikliklerini kaçırır.",{"id":202,"topic":22,"difficulty":133,"body":203,"options":204,"correct_key":143,"explanation":213},"019f56bb-b5db-71d5-8180-900d2d74a687","`order_items(order_id, product_id, quantity, product_name)` tablosunun composite primary key'i `(order_id, product_id)` ve `product_name` yalnızca `product_id`'ye bağlı. Sorun ve çözümü nedir?",[205,207,209,211],{"key":137,"text":206},"1NF'i ihlal eder çünkü product_name tekrar eder; her değeri kendi satırına ayır",{"key":140,"text":208},"Transitive dependency ile 3NF'i ihlal eder; quantity'yi başka tabloya taşı",{"key":143,"text":210},"2NF'i ihlal eder: product_name anahtarın bir parçasına partial dependency'dir; bir products tablosuna taşı",{"key":146,"text":212},"Hiçbir normal form'u ihlal etmez; geniş bir sipariş satırı tablosu her zaman kabul edilebilir bir tasarımdır","2NF, anahtar olmayan her kolonun composite key'in tamamına bağlı olmasını ister. `product_name` yalnızca anahtarın parçası olan `product_id`'ye bağlıdır — partial dependency — dolayısıyla product_id ile anahtarlanan bir `products` tablosuna aittir. Değerler atomiktir, yani 1NF sorunu değildir (a) ve partial dependency, 3NF'in ele aldığı transitive dependency'den farklıdır (b).",{"fields":215,"seniorities":392,"interview_shapes":393,"locales":398,"oauth":400,"question_count":403,"coach_enabled":404,"jd_match_enabled":404},[216,242,263,279,303,316,325,344,366,373,379,386],{"key":217,"name_tr":218,"name_en":218,"sort":219,"specializations":220},"backend","Backend",1,[221,224,227,230,233,236,239],{"key":222,"name":223,"field":217},"general","Genel",{"key":225,"name":226,"field":217},"go","Go",{"key":228,"name":229,"field":217},"python","Python",{"key":231,"name":232,"field":217},"java","Java",{"key":234,"name":235,"field":217},"csharp","C#\u002F.NET",{"key":237,"name":238,"field":217},"nodejs","Node.js",{"key":240,"name":241,"field":217},"php","PHP",{"key":243,"name_tr":244,"name_en":244,"sort":245,"specializations":246},"frontend","Frontend",2,[247,248,251,254,257,260],{"key":222,"name":223,"field":243},{"key":249,"name":250,"field":243},"javascript","JavaScript",{"key":252,"name":253,"field":243},"typescript","TypeScript",{"key":255,"name":256,"field":243},"react","React",{"key":258,"name":259,"field":243},"vue","Vue",{"key":261,"name":262,"field":243},"angular","Angular",{"key":264,"name_tr":265,"name_en":265,"sort":133,"specializations":266},"fullstack","Fullstack",[267,268,269,270,271,272,273,274,275,276,277,278],{"key":222,"name":223,"field":264},{"key":225,"name":226,"field":217},{"key":228,"name":229,"field":217},{"key":231,"name":232,"field":217},{"key":234,"name":235,"field":217},{"key":237,"name":238,"field":217},{"key":240,"name":241,"field":217},{"key":249,"name":250,"field":243},{"key":252,"name":253,"field":243},{"key":255,"name":256,"field":243},{"key":258,"name":259,"field":243},{"key":261,"name":262,"field":243},{"key":280,"name_tr":281,"name_en":281,"sort":282,"specializations":283},"devops-cloud","DevOps \u002F Cloud",4,[284,285,288,291,294,297,300],{"key":222,"name":223,"field":280},{"key":286,"name":287,"field":280},"aws","AWS",{"key":289,"name":290,"field":280},"gcp","GCP",{"key":292,"name":293,"field":280},"azure","Azure",{"key":295,"name":296,"field":280},"kubernetes","Kubernetes",{"key":298,"name":299,"field":280},"terraform","Terraform",{"key":301,"name":302,"field":280},"linux","Linux",{"key":304,"name_tr":305,"name_en":305,"sort":306,"specializations":307},"ai-engineer","AI Engineer",5,[308,309,310,313],{"key":222,"name":223,"field":304},{"key":228,"name":229,"field":304},{"key":311,"name":312,"field":304},"llm-rag","LLM\u002FRAG",{"key":314,"name":315,"field":304},"mlops","MLOps",{"key":5,"name_tr":6,"name_en":317,"sort":318,"specializations":319},"Database",6,[320,321,322,323,324],{"key":222,"name":223,"field":5},{"key":125,"name":126,"field":5},{"key":122,"name":123,"field":5},{"key":118,"name":119,"field":5},{"key":128,"name":129,"field":5},{"key":326,"name_tr":327,"name_en":328,"sort":329,"specializations":330},"mobile","Mobil","Mobile",7,[331,332,335,338,341],{"key":222,"name":223,"field":326},{"key":333,"name":334,"field":326},"ios-swift","iOS (Swift)",{"key":336,"name":337,"field":326},"android-kotlin","Android (Kotlin)",{"key":339,"name":340,"field":326},"flutter","Flutter",{"key":342,"name":343,"field":326},"react-native","React Native",{"key":345,"name_tr":346,"name_en":347,"sort":348,"specializations":349},"security","Güvenlik","Security",8,[350,351,354,357,360,363],{"key":222,"name":223,"field":345},{"key":352,"name":353,"field":345},"appsec","AppSec",{"key":355,"name":356,"field":345},"offensive-pentest","Offensive \u002F Pentest",{"key":358,"name":359,"field":345},"cloud-security","Cloud Security",{"key":361,"name":362,"field":345},"devsecops","DevSecOps",{"key":364,"name":365,"field":345},"blue-team-incident","Blue Team \u002F Incident",{"key":367,"name_tr":368,"name_en":369,"sort":370,"specializations":371},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[372],{"key":222,"name":223,"field":367},{"key":374,"name_tr":375,"name_en":375,"sort":376,"specializations":377},"data-engineer","Data Engineer",10,[378],{"key":222,"name":223,"field":374},{"key":380,"name_tr":381,"name_en":382,"sort":383,"specializations":384},"game-dev","Oyun Geliştirme","Game Development",11,[385],{"key":222,"name":223,"field":380},{"key":387,"name_tr":388,"name_en":388,"sort":389,"specializations":390},"ml-engineer","ML Engineer",12,[391],{"key":222,"name":223,"field":387},[13,14,7],{"junior":394,"mid":396,"senior":397},{"questions":395,"median_sec":3},20,{"questions":395,"median_sec":3},{"questions":395,"median_sec":3},[9,399],"en",[401,402],"google","github",21750,true]