[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:database\u002Fpg-types-constraints":4,"config":215},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":115,"samples":129},"database","Veritabanı","","pg-types-constraints","Pg Types Constraints","tr",75,2475,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,85,88,91,94,97,100,103,106,109,112],{"key":19,"name":20,"count":11},"backup-recovery","Backup Recovery",{"key":22,"name":23,"count":11},"data-modeling","Data Modeling",{"key":25,"name":26,"count":11},"indexing","Indexing",{"key":28,"name":29,"count":11},"mongodb-aggregation","Mongodb Aggregation",{"key":31,"name":32,"count":11},"mongodb-indexes-queries","Mongodb Indexes Queries",{"key":34,"name":35,"count":11},"mongodb-operations","Mongodb Operations",{"key":37,"name":38,"count":11},"mongodb-replication-sharding","Mongodb Replication Sharding",{"key":40,"name":41,"count":11},"mongodb-schema-modeling","Mongodb Schema Modeling",{"key":43,"name":44,"count":11},"mongodb-transactions-consistency","Mongodb Transactions Consistency",{"key":46,"name":47,"count":11},"mysql-indexes","Mysql Indexes",{"key":49,"name":50,"count":11},"mysql-innodb-transactions","Mysql Innodb Transactions",{"key":52,"name":53,"count":11},"mysql-operations","Mysql Operations",{"key":55,"name":56,"count":11},"mysql-query-optimization","Mysql Query Optimization",{"key":58,"name":59,"count":11},"mysql-replication-scaling","Mysql Replication Scaling",{"key":61,"name":62,"count":11},"mysql-types-constraints","Mysql Types Constraints",{"key":64,"name":65,"count":11},"nosql-models","Nosql Models",{"key":67,"name":68,"count":11},"performance-tuning","Performance Tuning",{"key":70,"name":71,"count":11},"pg-indexes","Pg Indexes",{"key":73,"name":74,"count":11},"pg-mvcc-vacuum","Pg Mvcc Vacuum",{"key":76,"name":77,"count":11},"pg-operations","Pg Operations",{"key":79,"name":80,"count":11},"pg-query-planning","Pg Query Planning",{"key":82,"name":83,"count":11},"pg-transactions-locking","Pg Transactions Locking",{"key":8,"name":9,"count":11},{"key":86,"name":87,"count":11},"query-optimization","Query Optimization",{"key":89,"name":90,"count":11},"redis-cluster-sharding","Redis Cluster Sharding",{"key":92,"name":93,"count":11},"redis-data-structures","Redis Data Structures",{"key":95,"name":96,"count":11},"redis-expiration-eviction","Redis Expiration Eviction",{"key":98,"name":99,"count":11},"redis-persistence","Redis Persistence",{"key":101,"name":102,"count":11},"redis-replication-sentinel","Redis Replication Sentinel",{"key":104,"name":105,"count":11},"redis-transactions-scripting","Redis Transactions Scripting",{"key":107,"name":108,"count":11},"replication-scaling","Replication Scaling",{"key":110,"name":111,"count":11},"security-access","Security Access",{"key":113,"name":114,"count":11},"transactions-isolation","Transactions Isolation",[116,120,123,126],{"key":117,"name":118,"count":119},"mongodb","MongoDB",450,{"key":121,"name":122,"count":119},"mysql","MySQL",{"key":124,"name":125,"count":119},"postgresql","PostgreSQL",{"key":127,"name":128,"count":119},"redis","Redis",[130,148,162,176,189,202],{"id":131,"topic":9,"difficulty":132,"body":133,"options":134,"correct_key":136,"explanation":147},"019f5d67-ffd3-71df-b4d5-4e2f3ca89bf8",2,"```sql\nCREATE TABLE t (c1 char(10), c2 varchar(10));\nINSERT INTO t VALUES ('abc', 'abc');\nSELECT length(c1), length(c2) FROM t;\n```\nBu sorgu ne döner?",[135,138,141,144],{"key":136,"text":137},"a","3 ve 3 — length() char(n)'in sondaki dolgu boşluklarını yok sayar",{"key":139,"text":140},"b","10 ve 3 — char(n) her zaman tanımlı genişliğini raporlar",{"key":142,"text":143},"c","10 ve 10 — iki sütun da tanımlı genişliğini raporlar",{"key":145,"text":146},"d","3 ve 10 — varchar(n) tanımlı genişliğini raporlar, char(n) raporlamaz","char(n), depolanan değeri n uzunluğuna kadar sondan boşlukla doldurur; ama length() (çoğu string fonksiyonu gibi) sondaki dolgu boşluklarını anlamsız sayıp saymadan önce siler. Bu yüzden c1 fiziksel olarak 10 byte'a doldurulmuş olsa da length() her ikisi için de 3 döner.",{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":139,"explanation":161},"019f5d67-ffd3-7999-9156-831dd345b397",3,"```sql\nCREATE TABLE t (c1 char(10), c3 text);\nINSERT INTO t VALUES ('abc', 'abc');\nSELECT octet_length(c1), octet_length(c3) FROM t;\n```\nBu sorgu ne döner?",[153,155,157,159],{"key":136,"text":154},"3 ve 3 — octet_length de char(n) dolgusunu siler",{"key":139,"text":156},"10 ve 3 — octet_length char(n)'in gerçek dolgulu depolamasını gösterir",{"key":142,"text":158},"10 ve 10 — ikisi de aynı fiziksel boyuta doldurulmuştur",{"key":145,"text":160},"3 ve 10 — text doldurulur, char(n) doldurulmaz","length()'in aksine octet_length(), sondaki dolgu boşluklarını silmeden depolanan gerçek byte boyutunu raporlar. Bu yüzden c1 (char(10) içinde 'abc') 10 byte fiziksel depolama gösterirken c3 (text içinde 'abc') 3 gösterir — char(n)'in dolgusunun gerçek olduğunu, length()'in bunu gizlediğini doğrular.",{"id":163,"topic":9,"difficulty":164,"body":165,"options":166,"correct_key":142,"explanation":175},"019f5d67-ffd4-70c1-8fe9-0e41ca8fa3b7",1,"```sql\nCREATE TABLE t (id int, email text);\nINSERT INTO t VALUES (1, NULL), (2, NULL), (3, 'a@x.com');\nSELECT DISTINCT email FROM t;\n```\nBu sorgu kaç satır döner?",[167,169,171,173],{"key":136,"text":168},"3 satır — NULL hiçbir zaman NULL'a eşit sayılmadığı için DISTINCT NULL satırlarını hiç elemez",{"key":139,"text":170},"1 satır — DISTINCT NULL olmayan değer dahil her şeyi tek satıra indirger",{"key":142,"text":172},"2 satır — DISTINCT tüm NULL'ları tek bir grup sayar, artı 'a@x.com' için bir satır",{"key":145,"text":174},"Hata — DISTINCT, NULL olabilen bir sütuna uygulanamaz","Normal karşılaştırma semantiğinde `NULL = NULL` NULL döner olsa da, DISTINCT (GROUP BY ve UNIQUE gibi) tüm NULL'ları tek bir grup sayan özel bir \"birbirinden ayırt edilemez\" gruplama kuralı kullanır. Bu yüzden iki NULL email tek bir çıktı satırına iner, 'a@x.com' için olan satırla birlikte — toplam 2 satır.",{"id":177,"topic":9,"difficulty":164,"body":178,"options":179,"correct_key":139,"explanation":188},"019f5d67-ffd4-7754-9036-807fbba41378","```sql\nCREATE TABLE t (id int, score int);\nINSERT INTO t VALUES (1,30),(2,NULL),(3,10),(4,NULL);\nSELECT id, score FROM t ORDER BY score ASC;\n```\nNULLS FIRST\u002FLAST belirtilmemişken NULL satırlar çıktıda nerede görünür?",[180,182,184,186],{"key":136,"text":181},"Herhangi bir NULL olmayan değerden önce, çünkü PostgreSQL NULL'ı her zaman mümkün olan en küçük değer olarak sıralar",{"key":139,"text":183},"Tüm NULL olmayan değerlerden sonra, çünkü PostgreSQL'in artan sıralama için varsayılanı NULLS LAST'tir",{"key":142,"text":185},"Orijinal ekleme sırasında, NULL olmayan satırlarla iç içe",{"key":145,"text":187},"Sorgu başarısız olur, çünkü ORDER BY NULL içeren bir sütunu sıralayamaz","PostgreSQL'in varsayılan NULL sıralaması sıralama yönüne bağlıdır: artan sıralama varsayılan olarak NULLS LAST, azalan sıralama ise varsayılan olarak NULLS FIRST kullanır. Bu yüzden `ORDER BY score ASC` önce 10, 30'u, sonra iki NULL'ı döner — bu birçok mühendisin varsaydığının (NULL'ın her zaman en düşük değer gibi sıralandığının) tam tersidir.",{"id":190,"topic":9,"difficulty":164,"body":191,"options":192,"correct_key":142,"explanation":201},"019f5d67-ffd4-7e0d-a64f-02fa5e3574c4","```sql\nCREATE TABLE t (id int, score int);\nINSERT INTO t VALUES (1,30),(2,NULL),(3,10),(4,NULL);\nSELECT count(*) AS cnt_star, count(score) AS cnt_col FROM t;\n```\nBu sorgu ne döner?",[193,195,197,199],{"key":136,"text":194},"cnt_star = 2, cnt_col = 2 — ikisi de yalnızca score'un NULL olmadığı satırları sayar",{"key":139,"text":196},"cnt_star = 4, cnt_col = 4 — ikisi de NULL'lardan bağımsız her satırı sayar",{"key":142,"text":198},"cnt_star = 4, cnt_col = 2 — count(*) satırları sayar, count(sütun) NULL'ları atlar",{"key":145,"text":200},"cnt_star = 2, cnt_col = 4 — count(*) yalnızca hiç NULL sütunu olmayan satırları sayar","count(*), herhangi bir sütunun içeriğinden bağımsız olarak satırların kendisini sayar, bu yüzden bu tablo için 4 döner. count(score) ise, belirli bir sütuna uygulanan diğer her aggregate gibi, o sütundaki NULL değerleri yok sayar — yalnızca score'u NULL olmayan 2 satır sayılır.",{"id":203,"topic":9,"difficulty":132,"body":204,"options":205,"correct_key":145,"explanation":214},"019f5d67-ffd5-758e-bfea-91c367f85ce5","```sql\nCREATE TABLE t (id int, email text UNIQUE);\nINSERT INTO t VALUES (1, NULL);\nINSERT INTO t VALUES (2, NULL);\n```\nİkinci INSERT'te ne olur?",[206,208,210,212],{"key":136,"text":207},"email zaten NULL bir satıra sahip olduğu için unique constraint ihlaliyle başarısız olur",{"key":139,"text":209},"PostgreSQL'de UNIQUE, NOT NULL'ı da kapsadığı için başarısız olur",{"key":142,"text":211},"Başarılı olur, ama PostgreSQL ikinci NULL'ı sessizce boş string'e çevirir",{"key":145,"text":213},"Başarılı olur, çünkü UNIQUE constraint her NULL'ı diğer NULL'lardan ayrı sayar","PostgreSQL'in UNIQUE constraint'i benzersizlik açısından NULL'ı karşılaştırılabilir bir değer saymaz — her NULL diğer tüm NULL'lardan ayrı kabul edilir, bu yüzden UNIQUE bir sütun çakışma olmadan istediği kadar NULL satır barındırabilir.",{"fields":216,"seniorities":391,"interview_shapes":392,"locales":397,"oauth":399,"question_count":402,"coach_enabled":403,"jd_match_enabled":403},[217,242,262,278,302,315,324,343,365,372,378,385],{"key":218,"name_tr":219,"name_en":219,"sort":164,"specializations":220},"backend","Backend",[221,224,227,230,233,236,239],{"key":222,"name":223,"field":218},"general","Genel",{"key":225,"name":226,"field":218},"go","Go",{"key":228,"name":229,"field":218},"python","Python",{"key":231,"name":232,"field":218},"java","Java",{"key":234,"name":235,"field":218},"csharp","C#\u002F.NET",{"key":237,"name":238,"field":218},"nodejs","Node.js",{"key":240,"name":241,"field":218},"php","PHP",{"key":243,"name_tr":244,"name_en":244,"sort":132,"specializations":245},"frontend","Frontend",[246,247,250,253,256,259],{"key":222,"name":223,"field":243},{"key":248,"name":249,"field":243},"javascript","JavaScript",{"key":251,"name":252,"field":243},"typescript","TypeScript",{"key":254,"name":255,"field":243},"react","React",{"key":257,"name":258,"field":243},"vue","Vue",{"key":260,"name":261,"field":243},"angular","Angular",{"key":263,"name_tr":264,"name_en":264,"sort":150,"specializations":265},"fullstack","Fullstack",[266,267,268,269,270,271,272,273,274,275,276,277],{"key":222,"name":223,"field":263},{"key":225,"name":226,"field":218},{"key":228,"name":229,"field":218},{"key":231,"name":232,"field":218},{"key":234,"name":235,"field":218},{"key":237,"name":238,"field":218},{"key":240,"name":241,"field":218},{"key":248,"name":249,"field":243},{"key":251,"name":252,"field":243},{"key":254,"name":255,"field":243},{"key":257,"name":258,"field":243},{"key":260,"name":261,"field":243},{"key":279,"name_tr":280,"name_en":280,"sort":281,"specializations":282},"devops-cloud","DevOps \u002F Cloud",4,[283,284,287,290,293,296,299],{"key":222,"name":223,"field":279},{"key":285,"name":286,"field":279},"aws","AWS",{"key":288,"name":289,"field":279},"gcp","GCP",{"key":291,"name":292,"field":279},"azure","Azure",{"key":294,"name":295,"field":279},"kubernetes","Kubernetes",{"key":297,"name":298,"field":279},"terraform","Terraform",{"key":300,"name":301,"field":279},"linux","Linux",{"key":303,"name_tr":304,"name_en":304,"sort":305,"specializations":306},"ai-engineer","AI Engineer",5,[307,308,309,312],{"key":222,"name":223,"field":303},{"key":228,"name":229,"field":303},{"key":310,"name":311,"field":303},"llm-rag","LLM\u002FRAG",{"key":313,"name":314,"field":303},"mlops","MLOps",{"key":5,"name_tr":6,"name_en":316,"sort":317,"specializations":318},"Database",6,[319,320,321,322,323],{"key":222,"name":223,"field":5},{"key":124,"name":125,"field":5},{"key":121,"name":122,"field":5},{"key":117,"name":118,"field":5},{"key":127,"name":128,"field":5},{"key":325,"name_tr":326,"name_en":327,"sort":328,"specializations":329},"mobile","Mobil","Mobile",7,[330,331,334,337,340],{"key":222,"name":223,"field":325},{"key":332,"name":333,"field":325},"ios-swift","iOS (Swift)",{"key":335,"name":336,"field":325},"android-kotlin","Android (Kotlin)",{"key":338,"name":339,"field":325},"flutter","Flutter",{"key":341,"name":342,"field":325},"react-native","React Native",{"key":344,"name_tr":345,"name_en":346,"sort":347,"specializations":348},"security","Güvenlik","Security",8,[349,350,353,356,359,362],{"key":222,"name":223,"field":344},{"key":351,"name":352,"field":344},"appsec","AppSec",{"key":354,"name":355,"field":344},"offensive-pentest","Offensive \u002F Pentest",{"key":357,"name":358,"field":344},"cloud-security","Cloud Security",{"key":360,"name":361,"field":344},"devsecops","DevSecOps",{"key":363,"name":364,"field":344},"blue-team-incident","Blue Team \u002F Incident",{"key":366,"name_tr":367,"name_en":368,"sort":369,"specializations":370},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[371],{"key":222,"name":223,"field":366},{"key":373,"name_tr":374,"name_en":374,"sort":375,"specializations":376},"data-engineer","Data Engineer",10,[377],{"key":222,"name":223,"field":373},{"key":379,"name_tr":380,"name_en":381,"sort":382,"specializations":383},"game-dev","Oyun Geliştirme","Game Development",11,[384],{"key":222,"name":223,"field":379},{"key":386,"name_tr":387,"name_en":387,"sort":388,"specializations":389},"ml-engineer","ML Engineer",12,[390],{"key":222,"name":223,"field":386},[14,15,16],{"junior":393,"mid":395,"senior":396},{"questions":394,"median_sec":3},20,{"questions":394,"median_sec":3},{"questions":394,"median_sec":3},[10,398],"en",[400,401],"google","github",21750,true]