[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:database\u002Fpg-indexes":4,"config":214},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-indexes","Pg Indexes","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,70,73,76,79,82,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":8,"name":9,"count":11},{"key":71,"name":72,"count":11},"pg-mvcc-vacuum","Pg Mvcc Vacuum",{"key":74,"name":75,"count":11},"pg-operations","Pg Operations",{"key":77,"name":78,"count":11},"pg-query-planning","Pg Query Planning",{"key":80,"name":81,"count":11},"pg-transactions-locking","Pg Transactions Locking",{"key":83,"name":84,"count":11},"pg-types-constraints","Pg Types Constraints",{"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,175,188,201],{"id":131,"topic":9,"difficulty":132,"body":133,"options":134,"correct_key":145,"explanation":147},"019f5d67-ff62-7eec-b77c-3dec8410a894",1,"A plain B-tree index handles equality, ranges, `BETWEEN`, and `ORDER BY` well. Which predicate does a plain B-tree index NOT serve, so PostgreSQL falls back to a sequential scan even when the column is indexed?",[135,138,141,144],{"key":136,"text":137},"a","`price = 100`",{"key":139,"text":140},"b","`price BETWEEN 50 AND 150`",{"key":142,"text":143},"c","`price > 100`",{"key":145,"text":146},"d","`tags @> '{\"role\": \"admin\"}'::jsonb`","A B-tree stores sortable scalar values, so it directly supports `=`, `\u003C`, `>`, `BETWEEN` and range comparisons. The `@>` containment operator on `jsonb` needs an index type that understands nested structure — GIN — not a B-tree. Options (a)-(c) are exactly the comparisons a B-tree is built for.",{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":139,"explanation":161},"019f5d67-ff63-7ee2-a7a2-447fd40ac5ca",2,"```sql\nCREATE TABLE orders (\n  id serial PRIMARY KEY,\n  customer_id int\n);\n```\nRight after this statement runs — before any explicit `CREATE INDEX` — what does `pg_indexes` show for `orders`?",[153,155,157,159],{"key":136,"text":154},"Nothing yet, because `PRIMARY KEY` is only a constraint and index creation is deferred until the first insert",{"key":139,"text":156},"One unique B-tree index named `orders_pkey` on `id`, created automatically to back the primary key",{"key":142,"text":158},"A non-unique index on `id`, since uniqueness for a primary key is enforced by a trigger, not an index",{"key":145,"text":160},"One index covering both `id` and `customer_id`, since PostgreSQL indexes every declared column by default","Declaring `PRIMARY KEY` makes PostgreSQL create a unique B-tree index immediately, named `\u003Ctable>_pkey` by default; `pg_indexes` shows it as soon as the `CREATE TABLE` finishes. There is no trigger involved and no deferral, and `customer_id` gets no index unless you ask for one — confirmed against a live `orders` table in this run.",{"id":163,"topic":9,"difficulty":150,"body":164,"options":165,"correct_key":136,"explanation":174},"019f5d67-ff66-7dd9-b583-a593dd745109","```sql\nALTER TABLE users ADD CONSTRAINT users_email_uniq UNIQUE (email);\n```\nWhat does this statement actually do at the storage level?",[166,168,170,172],{"key":136,"text":167},"It creates a unique B-tree index named `users_email_uniq` on `email`, which then enforces the constraint",{"key":139,"text":169},"It records the rule in the catalog only; uniqueness is checked row by row on each write without any index",{"key":142,"text":171},"It requires an index on `email` to already exist, otherwise the statement is rejected outright",{"key":145,"text":173},"It creates a non-unique index and relies on a separate check constraint to reject duplicate values","A `UNIQUE` constraint in PostgreSQL is implemented by creating a unique index behind the scenes — here named `users_email_uniq`, visible in `pg_indexes` as `USING btree (email)`. It doesn't require a pre-existing index, and it's the index itself doing the enforcement, not a separate trigger or check constraint — confirmed against `pg_indexes` in this run.",{"id":176,"topic":9,"difficulty":150,"body":177,"options":178,"correct_key":142,"explanation":187},"019f5d67-ff67-7a80-8aec-e1e82593731d","```sql\nCREATE INDEX idx_orders_cust_date ON orders (customer_id, order_date);\n```\nA report runs `SELECT * FROM orders WHERE order_date > '2024-06-01'` — filtering only on the second column — and `EXPLAIN` shows a sequential scan. Why doesn't the composite index help here?",[179,181,183,185],{"key":136,"text":180},"Composite indexes in PostgreSQL only ever accelerate `ORDER BY`, never a plain `WHERE` filter",{"key":139,"text":182},"`order_date` is a `date` column, and composite B-tree indexes cannot store dates as a non-leading key",{"key":142,"text":184},"It's sorted by `customer_id` first; without that filter it can't jump to the right `order_date` range",{"key":145,"text":186},"The index only activates once the table exceeds a fixed row-count threshold that hasn't been reached yet","A composite B-tree on `(customer_id, order_date)` sorts rows by `customer_id`, and within each `customer_id` by `order_date`. Skipping the leading column means matching `order_date` values are scattered across the whole index, so the planner can't use it efficiently and falls back to a scan — the classic 'leftmost prefix' rule. There's no row-count threshold (d) and no restriction tied to the `date` type (b).",{"id":189,"topic":9,"difficulty":150,"body":190,"options":191,"correct_key":139,"explanation":200},"019f5d67-ff68-7b04-9391-2b1065a1797f","Same index, `idx_orders_cust_date ON orders (customer_id, order_date)`. Running `EXPLAIN (ANALYZE, BUFFERS)` on:\n```sql\nSELECT * FROM orders\nWHERE customer_id = 42 AND order_date > '2024-06-01';\n```\nproduces:\n```\nBitmap Heap Scan on orders\n  Recheck Cond: (customer_id = 42) AND (order_date > '2024-06-01')\n  ->  Bitmap Index Scan on idx_orders_cust_date\n        Index Cond: (customer_id = 42) AND (order_date > '2024-06-01')\n```\nWhat does this confirm about the index?",[192,194,196,198],{"key":136,"text":193},"The index is being used only for `customer_id`, and `order_date` is filtered afterward by scanning the whole table",{"key":139,"text":195},"Both predicates are applied inside the index scan itself, not just `customer_id`",{"key":142,"text":197},"PostgreSQL silently created a second, temporary index to cover `order_date` for this one query",{"key":145,"text":199},"The `Bitmap Heap Scan` step means the index was actually not used, and the table was scanned sequentially instead","`Index Cond` lists both predicates, meaning the bitmap index scan itself locates matching rows using `customer_id = 42` and the `order_date` range together — the leftmost-prefix condition on `customer_id` is what unlocks efficient use of the second key. `Bitmap Heap Scan` is the step that fetches the actual rows the bitmap pointed to; it's driven by the index, not a substitute for one, and no temporary index is created.",{"id":202,"topic":9,"difficulty":150,"body":203,"options":204,"correct_key":142,"explanation":213},"019f5d67-ff6a-7d39-9fd9-1e3b061b7eaa","A developer writes a migration:\n```sql\nBEGIN;\nCREATE INDEX CONCURRENTLY idx_orders_amount ON orders (amount);\nCOMMIT;\n```\nand it fails immediately with an error. What happens, and why?",[205,207,209,211],{"key":136,"text":206},"The migration succeeds but silently falls back to a regular blocking `CREATE INDEX`, ignoring `CONCURRENTLY`",{"key":139,"text":208},"It fails because `amount` is a `numeric` column, and `CONCURRENTLY` only supports indexing integer and text columns",{"key":142,"text":210},"It fails with `CREATE INDEX CONCURRENTLY cannot run inside a transaction block`",{"key":145,"text":212},"It fails because a table can only ever have one `CONCURRENTLY`-built index at a time across the whole database","`CREATE INDEX CONCURRENTLY` performs several separate internal scans and commits between them so it can avoid holding a long write-blocking lock; that's incompatible with running inside a `BEGIN`\u002F`COMMIT` block, which PostgreSQL rejects with exactly this error message. The fix is to run the statement on its own, outside any explicit transaction. There's no such per-database limit (d) or type restriction (b), and it does not silently downgrade (a) — confirmed by running it live and reading the error text.",{"fields":215,"seniorities":394,"interview_shapes":395,"locales":400,"oauth":402,"question_count":405,"coach_enabled":406,"jd_match_enabled":406},[216,241,261,278,302,315,324,343,365,375,381,388],{"key":217,"name_tr":218,"name_en":218,"sort":132,"specializations":219},"backend","Backend",[220,223,226,229,232,235,238],{"key":221,"name":222,"field":217},"general","Genel",{"key":224,"name":225,"field":217},"go","Go",{"key":227,"name":228,"field":217},"python","Python",{"key":230,"name":231,"field":217},"java","Java",{"key":233,"name":234,"field":217},"csharp","C#\u002F.NET",{"key":236,"name":237,"field":217},"nodejs","Node.js",{"key":239,"name":240,"field":217},"php","PHP",{"key":242,"name_tr":243,"name_en":243,"sort":150,"specializations":244},"frontend","Frontend",[245,246,249,252,255,258],{"key":221,"name":222,"field":242},{"key":247,"name":248,"field":242},"javascript","JavaScript",{"key":250,"name":251,"field":242},"typescript","TypeScript",{"key":253,"name":254,"field":242},"react","React",{"key":256,"name":257,"field":242},"vue","Vue",{"key":259,"name":260,"field":242},"angular","Angular",{"key":262,"name_tr":263,"name_en":263,"sort":264,"specializations":265},"fullstack","Fullstack",3,[266,267,268,269,270,271,272,273,274,275,276,277],{"key":221,"name":222,"field":262},{"key":224,"name":225,"field":217},{"key":227,"name":228,"field":217},{"key":230,"name":231,"field":217},{"key":233,"name":234,"field":217},{"key":236,"name":237,"field":217},{"key":239,"name":240,"field":217},{"key":247,"name":248,"field":242},{"key":250,"name":251,"field":242},{"key":253,"name":254,"field":242},{"key":256,"name":257,"field":242},{"key":259,"name":260,"field":242},{"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":221,"name":222,"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":221,"name":222,"field":303},{"key":227,"name":228,"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":221,"name":222,"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":221,"name":222,"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":221,"name":222,"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,372],{"key":221,"name":222,"field":366},{"key":373,"name":374,"field":366},"test-automation","Test Automation",{"key":376,"name_tr":377,"name_en":377,"sort":378,"specializations":379},"data-engineer","Data Engineer",10,[380],{"key":221,"name":222,"field":376},{"key":382,"name_tr":383,"name_en":384,"sort":385,"specializations":386},"game-dev","Oyun Geliştirme","Game Development",11,[387],{"key":221,"name":222,"field":382},{"key":389,"name_tr":390,"name_en":390,"sort":391,"specializations":392},"ml-engineer","ML Engineer",12,[393],{"key":221,"name":222,"field":389},[14,15,16],{"junior":396,"mid":398,"senior":399},{"questions":397,"median_sec":3},20,{"questions":397,"median_sec":3},{"questions":397,"median_sec":3},[401,10],"tr",[403,404],"google","github",22200,true]