[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:backend\u002Fsenior":4,"config":253},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":149,"samples":169},"backend","Backend","senior","","en",2166,3300,[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,116,119,122,125,128,131,134,137,140,143,146],{"key":17,"name":18,"count":19},"api-design","API Design",75,{"key":21,"name":22,"count":19},"caching","Caching",{"key":24,"name":25,"count":19},"concurrency","Concurrency",{"key":27,"name":28,"count":19},"csharp-concurrency-async","Csharp Concurrency Async",{"key":30,"name":31,"count":19},"csharp-exceptions","Csharp Exceptions",{"key":33,"name":34,"count":19},"csharp-generics-interfaces","Csharp Generics Interfaces",{"key":36,"name":37,"count":19},"csharp-memory-performance","Csharp Memory Performance",{"key":39,"name":40,"count":19},"csharp-stdlib-http","Csharp Stdlib Http",{"key":42,"name":43,"count":19},"csharp-testing-tooling","Csharp Testing Tooling",{"key":45,"name":46,"count":19},"databases-sql","Databases \u002F SQL",{"key":48,"name":49,"count":19},"go-concurrency","Go Concurrency",{"key":51,"name":52,"count":19},"go-errors","Go Errors",{"key":54,"name":55,"count":19},"go-interfaces-generics","Go Interfaces Generics",{"key":57,"name":58,"count":19},"go-memory-performance","Go Memory Performance",{"key":60,"name":61,"count":19},"go-stdlib-http","Go Stdlib Http",{"key":63,"name":64,"count":19},"go-testing-tooling","Go Testing Tooling",{"key":66,"name":67,"count":19},"java-concurrency","Java Concurrency",{"key":69,"name":70,"count":19},"java-exceptions","Java Exceptions",{"key":72,"name":73,"count":19},"java-generics-interfaces","Java Generics Interfaces",{"key":75,"name":76,"count":19},"java-memory-jvm","Java Memory Jvm",{"key":78,"name":79,"count":19},"java-stdlib-http","Java Stdlib Http",{"key":81,"name":82,"count":19},"java-testing-tooling","Java Testing Tooling",{"key":84,"name":85,"count":19},"messaging-queues","Messaging \u002F Queues",{"key":87,"name":88,"count":19},"networking-http","Networking \u002F HTTP",{"key":90,"name":91,"count":19},"nodejs-error-handling","Nodejs Error Handling",{"key":93,"name":94,"count":19},"nodejs-event-loop-async","Nodejs Event Loop Async",{"key":96,"name":97,"count":19},"nodejs-memory-performance","Nodejs Memory Performance",{"key":99,"name":100,"count":19},"nodejs-modules-streams","Nodejs Modules Streams",{"key":102,"name":103,"count":19},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":105,"name":106,"count":19},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":108,"name":109,"count":19},"php-concurrency-async","Php Concurrency Async",{"key":111,"name":112,"count":19},"php-exceptions","Php Exceptions",{"key":114,"name":115,"count":19},"php-generics-interfaces","Php Generics Interfaces",{"key":117,"name":118,"count":19},"php-memory-performance","Php Memory Performance",{"key":120,"name":121,"count":19},"php-stdlib-http","Php Stdlib Http",{"key":123,"name":124,"count":19},"php-testing-tooling","Php Testing Tooling",{"key":126,"name":127,"count":19},"python-concurrency-async","Python Concurrency Async",{"key":129,"name":130,"count":19},"python-errors-context","Python Errors Context",{"key":132,"name":133,"count":19},"python-memory-performance","Python Memory Performance",{"key":135,"name":136,"count":19},"python-stdlib-http","Python Stdlib Http",{"key":138,"name":139,"count":19},"python-testing-tooling","Python Testing Tooling",{"key":141,"name":142,"count":19},"python-typing-oop","Python Typing Oop",{"key":144,"name":145,"count":19},"security","Security",{"key":147,"name":148,"count":19},"testing","Testing",[150,154,157,160,163,166],{"key":151,"name":152,"count":153},"csharp","C#\u002F.NET",450,{"key":155,"name":156,"count":153},"go","Go",{"key":158,"name":159,"count":153},"java","Java",{"key":161,"name":162,"count":153},"nodejs","Node.js",{"key":164,"name":165,"count":153},"php","PHP",{"key":167,"name":168,"count":153},"python","Python",[170,188,201,214,227,240],{"id":171,"topic":18,"difficulty":172,"body":173,"options":174,"correct_key":176,"explanation":187},"019f56bb-b327-74ec-85da-533f10fc0c08",3,"The same DELETE request is sent twice:\n```http\nDELETE \u002Forders\u002F42   ->  204 No Content\nDELETE \u002Forders\u002F42   ->  404 Not Found\n```\nThe two calls return different status codes. Is DELETE's idempotency violated?",[175,178,181,184],{"key":176,"text":177},"a","No — idempotency is about server state, and the order is equally deleted after both calls",{"key":179,"text":180},"b","Yes — an idempotent method must return the same status code on every repeat, not merely reach the same end state",{"key":182,"text":183},"c","Yes — the server should keep returning 204 until the client stops retrying",{"key":185,"text":186},"d","No — because DELETE was never an idempotent method in the first place","Idempotency promises that repeating the request leaves the server in the same state, not that the response is byte-identical. After both calls the order is gone; the 404 merely reports that it no longer exists. Expecting identical status codes (b) is the most common misreading of the definition.",{"id":189,"topic":18,"difficulty":172,"body":190,"options":191,"correct_key":179,"explanation":200},"019f56bb-b32a-79e1-adfd-b3e512867a2e","Two clients edit the same document. The server currently stores `version: 5`. This update arrives:\n```http\nPUT \u002Fdocuments\u002F12\nContent-Type: application\u002Fjson\n\n{\"title\": \"Final\", \"version\": 4}\n```\nThe request is based on a stale version. In this optimistic-locking design, which response fits best?",[192,194,196,198],{"key":176,"text":193},"200 OK — last write wins is the only workable policy for concurrent edits",{"key":179,"text":195},"409 Conflict — the update is based on outdated state",{"key":182,"text":197},"404 Not Found — version 4 of the document no longer exists on the server",{"key":185,"text":199},"401 Unauthorized — the client's editing session has expired","409 Conflict signals that the request clashes with the resource's current state — the standard answer for version mismatches; the client's remedy is to refetch the latest state and retry. Silently accepting it (a) would overwrite the other client's changes, which is precisely what optimistic locking exists to prevent. (c) misreads the version as a separate sub-resource.",{"id":202,"topic":18,"difficulty":172,"body":203,"options":204,"correct_key":176,"explanation":213},"019f56bb-b32d-7a54-b538-20dfd8fcf9ff","While a client walks through pages using offset-based pagination, new rows keep getting inserted at the top of the list. Why does cursor-based pagination handle this better?",[205,207,209,211],{"key":176,"text":206},"The cursor continues from a stable reference point (e.g., the last seen id)",{"key":179,"text":208},"Cursors make the database lock the table so no inserts can happen during pagination",{"key":182,"text":210},"Cursor pagination downloads the whole result once and pages through it in client memory",{"key":185,"text":212},"Offset pagination cannot be combined with ORDER BY, so its results come back unsorted","Offset counts rows from the start of the result, so each insert shifts everything and the client sees duplicated or skipped items between pages. A cursor anchors to the last returned item's stable key and asks for \"what comes after it\", so inserts at the top can't shift the next page. No locking is involved (b) — that would be unusable at scale.",{"id":215,"topic":18,"difficulty":172,"body":216,"options":217,"correct_key":179,"explanation":226},"019f56bb-b32e-7b17-9c79-4a639511f77b","A mobile app in production consumes your JSON API, and you cannot force users to update the app. Which change can you ship without releasing a new API version?",[218,220,222,224],{"key":176,"text":219},"Renaming the `created` field to `createdAt` for naming consistency",{"key":179,"text":221},"Adding a new optional field `avatarUrl` to the response object",{"key":182,"text":223},"Changing `id` from a JSON number to a string to support UUIDs",{"key":185,"text":225},"Making the previously optional `phone` field required in the create request","Adding an optional response field is additive: well-behaved clients ignore unknown fields, so nothing breaks. A rename (a) makes the old field disappear, a type change (c) breaks parsers, and a newly required input (d) rejects requests that used to succeed — all three are breaking changes.",{"id":228,"topic":18,"difficulty":172,"body":229,"options":230,"correct_key":182,"explanation":239},"019f56bb-b333-7a13-9e01-11e9fda03fb6","Before a cross-origin PUT request with a JSON body, the browser sends an OPTIONS request to the same URL on its own. What is this preflight request for?",[231,233,235,237],{"key":176,"text":232},"It warms up the TCP connection so the real request completes faster",{"key":179,"text":234},"It downloads the endpoint's schema so the client can validate the payload",{"key":182,"text":236},"It asks the server whether the cross-origin method and headers are permitted before sending the real request",{"key":185,"text":238},"It authenticates the user in advance and stores a session cookie, so the upcoming PUT arrives already authorized","Non-simple cross-origin requests — methods like PUT\u002FDELETE, JSON content types, custom headers — trigger a preflight. The server answers with Access-Control-Allow-* headers, and only if they permit the request does the browser send the real one. It has nothing to do with performance (a) or authentication (d).",{"id":241,"topic":18,"difficulty":172,"body":242,"options":243,"correct_key":179,"explanation":252},"019f56bb-b335-76f5-b54e-1a2e7d4c0c62","A payment API receives `POST \u002Fpayments`. Network timeouts make clients retry, and some users end up charged twice. Which API design fixes double charging at the contract level?",[244,246,248,250],{"key":176,"text":245},"Document that clients must never retry POST requests",{"key":179,"text":247},"Accept a client-generated `Idempotency-Key` to deduplicate retries",{"key":182,"text":249},"Rate-limit each client to one request per minute so retries get rejected",{"key":185,"text":251},"Switch the endpoint to PUT, since PUT is idempotent by definition","An idempotency key lets the server recognize a retry of the same logical operation and replay the stored response instead of charging again. \"Just use PUT\" (d) misunderstands the concept: PUT's idempotency comes from full-replacement semantics, which don't describe \"create a new payment\" — renaming the method deduplicates nothing. And (a) fights reality: timeouts make retries unavoidable.",{"fields":254,"seniorities":425,"interview_shapes":426,"locales":431,"oauth":433,"question_count":436,"coach_enabled":437,"jd_match_enabled":437},[255,267,288,304,328,341,360,379,399,406,412,419],{"key":5,"name_tr":6,"name_en":6,"sort":256,"specializations":257},1,[258,261,262,263,264,265,266],{"key":259,"name":260,"field":5},"general","Genel",{"key":155,"name":156,"field":5},{"key":167,"name":168,"field":5},{"key":158,"name":159,"field":5},{"key":151,"name":152,"field":5},{"key":161,"name":162,"field":5},{"key":164,"name":165,"field":5},{"key":268,"name_tr":269,"name_en":269,"sort":270,"specializations":271},"frontend","Frontend",2,[272,273,276,279,282,285],{"key":259,"name":260,"field":268},{"key":274,"name":275,"field":268},"javascript","JavaScript",{"key":277,"name":278,"field":268},"typescript","TypeScript",{"key":280,"name":281,"field":268},"react","React",{"key":283,"name":284,"field":268},"vue","Vue",{"key":286,"name":287,"field":268},"angular","Angular",{"key":289,"name_tr":290,"name_en":290,"sort":172,"specializations":291},"fullstack","Fullstack",[292,293,294,295,296,297,298,299,300,301,302,303],{"key":259,"name":260,"field":289},{"key":155,"name":156,"field":5},{"key":167,"name":168,"field":5},{"key":158,"name":159,"field":5},{"key":151,"name":152,"field":5},{"key":161,"name":162,"field":5},{"key":164,"name":165,"field":5},{"key":274,"name":275,"field":268},{"key":277,"name":278,"field":268},{"key":280,"name":281,"field":268},{"key":283,"name":284,"field":268},{"key":286,"name":287,"field":268},{"key":305,"name_tr":306,"name_en":306,"sort":307,"specializations":308},"devops-cloud","DevOps \u002F Cloud",4,[309,310,313,316,319,322,325],{"key":259,"name":260,"field":305},{"key":311,"name":312,"field":305},"aws","AWS",{"key":314,"name":315,"field":305},"gcp","GCP",{"key":317,"name":318,"field":305},"azure","Azure",{"key":320,"name":321,"field":305},"kubernetes","Kubernetes",{"key":323,"name":324,"field":305},"terraform","Terraform",{"key":326,"name":327,"field":305},"linux","Linux",{"key":329,"name_tr":330,"name_en":330,"sort":331,"specializations":332},"ai-engineer","AI Engineer",5,[333,334,335,338],{"key":259,"name":260,"field":329},{"key":167,"name":168,"field":329},{"key":336,"name":337,"field":329},"llm-rag","LLM\u002FRAG",{"key":339,"name":340,"field":329},"mlops","MLOps",{"key":342,"name_tr":343,"name_en":344,"sort":345,"specializations":346},"database","Veritabanı","Database",6,[347,348,351,354,357],{"key":259,"name":260,"field":342},{"key":349,"name":350,"field":342},"postgresql","PostgreSQL",{"key":352,"name":353,"field":342},"mysql","MySQL",{"key":355,"name":356,"field":342},"mongodb","MongoDB",{"key":358,"name":359,"field":342},"redis","Redis",{"key":361,"name_tr":362,"name_en":363,"sort":364,"specializations":365},"mobile","Mobil","Mobile",7,[366,367,370,373,376],{"key":259,"name":260,"field":361},{"key":368,"name":369,"field":361},"ios-swift","iOS (Swift)",{"key":371,"name":372,"field":361},"android-kotlin","Android (Kotlin)",{"key":374,"name":375,"field":361},"flutter","Flutter",{"key":377,"name":378,"field":361},"react-native","React Native",{"key":144,"name_tr":380,"name_en":145,"sort":381,"specializations":382},"Güvenlik",8,[383,384,387,390,393,396],{"key":259,"name":260,"field":144},{"key":385,"name":386,"field":144},"appsec","AppSec",{"key":388,"name":389,"field":144},"offensive-pentest","Offensive \u002F Pentest",{"key":391,"name":392,"field":144},"cloud-security","Cloud Security",{"key":394,"name":395,"field":144},"devsecops","DevSecOps",{"key":397,"name":398,"field":144},"blue-team-incident","Blue Team \u002F Incident",{"key":400,"name_tr":401,"name_en":402,"sort":403,"specializations":404},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[405],{"key":259,"name":260,"field":400},{"key":407,"name_tr":408,"name_en":408,"sort":409,"specializations":410},"data-engineer","Data Engineer",10,[411],{"key":259,"name":260,"field":407},{"key":413,"name_tr":414,"name_en":415,"sort":416,"specializations":417},"game-dev","Oyun Geliştirme","Game Development",11,[418],{"key":259,"name":260,"field":413},{"key":420,"name_tr":421,"name_en":421,"sort":422,"specializations":423},"ml-engineer","ML Engineer",12,[424],{"key":259,"name":260,"field":420},[13,14,7],{"junior":427,"mid":429,"senior":430},{"questions":428,"median_sec":3},20,{"questions":428,"median_sec":3},{"questions":428,"median_sec":3},[432,9],"tr",[434,435],"google","github",21750,true]