[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en: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","Database","","pg-types-constraints","Pg Types Constraints","en",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```\nWhat does this return?",[135,138,141,144],{"key":136,"text":137},"a","3 and 3 — length() ignores char(n)'s trailing pad spaces",{"key":139,"text":140},"b","10 and 3 — char(n) always reports its declared width",{"key":142,"text":143},"c","10 and 10 — both columns report their declared width",{"key":145,"text":146},"d","3 and 10 — varchar(n) reports its declared width, char(n) does not","char(n) physically pads the stored value with trailing spaces up to n, but length() (like most string functions) treats trailing pad spaces as insignificant and strips them before counting. So length() returns 3 for both columns even though c1 is internally padded to 10 bytes.",{"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```\nWhat does this return?",[153,155,157,159],{"key":136,"text":154},"3 and 3 — octet_length also strips char(n) padding",{"key":139,"text":156},"10 and 3 — octet_length exposes char(n)'s real padded storage",{"key":142,"text":158},"10 and 10 — both are padded to the same physical size",{"key":145,"text":160},"3 and 10 — text is padded, char(n) is not","Unlike length(), octet_length() reports the actual stored byte size without stripping trailing pad spaces. So c1 (char(10) holding 'abc') shows 10 bytes of physical storage, while c3 (text holding 'abc') shows 3 — confirming char(n)'s padding is real even though length() hides it.",{"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```\nHow many rows does this return?",[167,169,171,173],{"key":136,"text":168},"3 rows — DISTINCT never removes NULL rows, since NULL is never equal to NULL",{"key":139,"text":170},"1 row — DISTINCT collapses everything, including the non-NULL value, into a single row",{"key":142,"text":172},"2 rows — DISTINCT treats all NULLs as one group, plus one row for 'a@x.com'",{"key":145,"text":174},"An error — DISTINCT cannot be applied to a nullable column","Even though `NULL = NULL` evaluates to NULL under normal comparison semantics, DISTINCT (like GROUP BY and UNIQUE) uses a special \"not distinct from\" grouping rule where all NULLs are treated as one group. So the two NULL emails collapse into a single output row, alongside the one row for 'a@x.com' — 2 rows total.",{"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```\nWhere do the NULL rows appear in the output, with no NULLS FIRST\u002FLAST specified?",[180,182,184,186],{"key":136,"text":181},"Before any non-NULL value, since PostgreSQL always sorts NULL as the smallest possible value",{"key":139,"text":183},"After all non-NULL values, since PostgreSQL's default for ascending order is NULLS LAST",{"key":142,"text":185},"In their original insertion order, interleaved with the non-NULL rows",{"key":145,"text":187},"The query fails, since ORDER BY cannot sort a column containing NULL","PostgreSQL's default NULL ordering depends on sort direction: ascending order defaults to NULLS LAST, descending order defaults to NULLS FIRST. So `ORDER BY score ASC` returns 10, 30, then the two NULLs — the opposite of what many engineers assume (that NULL always sorts as the lowest value).",{"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```\nWhat does this return?",[193,195,197,199],{"key":136,"text":194},"cnt_star = 2, cnt_col = 2 — both count only rows where score is not NULL",{"key":139,"text":196},"cnt_star = 4, cnt_col = 4 — both count every row regardless of NULLs",{"key":142,"text":198},"cnt_star = 4, cnt_col = 2 — count(*) counts rows, count(column) skips NULLs",{"key":145,"text":200},"cnt_star = 2, cnt_col = 4 — count(*) only counts rows with no NULL columns at all","count(*) counts rows themselves, regardless of any column's content, so it returns 4 for this table. count(score), like every other aggregate applied to a specific column, ignores NULL values in that column — only the 2 rows with a non-NULL score are counted.",{"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```\nWhat happens on the second INSERT?",[206,208,210,212],{"key":136,"text":207},"It fails with a unique constraint violation, since email already has a NULL row",{"key":139,"text":209},"It fails, because UNIQUE implies NOT NULL in PostgreSQL",{"key":142,"text":211},"It succeeds, but PostgreSQL silently converts the second NULL to an empty string",{"key":145,"text":213},"It succeeds, because a UNIQUE constraint treats each NULL as distinct from other NULLs","PostgreSQL's UNIQUE constraint does not treat NULL as a comparable value for uniqueness purposes — each NULL is considered distinct from every other NULL, so a UNIQUE column can hold any number of NULL rows without conflict.",{"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":316,"name_en":6,"sort":317,"specializations":318},"Veritabanı",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},[398,10],"tr",[400,401],"google","github",21750,true]