[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:backend\u002Fnodejs-event-loop-async":4,"config":253},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":148,"samples":168},"backend","Backend","","nodejs-event-loop-async","Nodejs Event Loop Async","en",75,3300,[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,87,90,93,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145],{"key":19,"name":20,"count":11},"api-design","API Design",{"key":22,"name":23,"count":11},"caching","Caching",{"key":25,"name":26,"count":11},"concurrency","Concurrency",{"key":28,"name":29,"count":11},"csharp-concurrency-async","Csharp Concurrency Async",{"key":31,"name":32,"count":11},"csharp-exceptions","Csharp Exceptions",{"key":34,"name":35,"count":11},"csharp-generics-interfaces","Csharp Generics Interfaces",{"key":37,"name":38,"count":11},"csharp-memory-performance","Csharp Memory Performance",{"key":40,"name":41,"count":11},"csharp-stdlib-http","Csharp Stdlib Http",{"key":43,"name":44,"count":11},"csharp-testing-tooling","Csharp Testing Tooling",{"key":46,"name":47,"count":11},"databases-sql","Databases \u002F SQL",{"key":49,"name":50,"count":11},"go-concurrency","Go Concurrency",{"key":52,"name":53,"count":11},"go-errors","Go Errors",{"key":55,"name":56,"count":11},"go-interfaces-generics","Go Interfaces Generics",{"key":58,"name":59,"count":11},"go-memory-performance","Go Memory Performance",{"key":61,"name":62,"count":11},"go-stdlib-http","Go Stdlib Http",{"key":64,"name":65,"count":11},"go-testing-tooling","Go Testing Tooling",{"key":67,"name":68,"count":11},"java-concurrency","Java Concurrency",{"key":70,"name":71,"count":11},"java-exceptions","Java Exceptions",{"key":73,"name":74,"count":11},"java-generics-interfaces","Java Generics Interfaces",{"key":76,"name":77,"count":11},"java-memory-jvm","Java Memory Jvm",{"key":79,"name":80,"count":11},"java-stdlib-http","Java Stdlib Http",{"key":82,"name":83,"count":11},"java-testing-tooling","Java Testing Tooling",{"key":85,"name":86,"count":11},"messaging-queues","Messaging \u002F Queues",{"key":88,"name":89,"count":11},"networking-http","Networking \u002F HTTP",{"key":91,"name":92,"count":11},"nodejs-error-handling","Nodejs Error Handling",{"key":8,"name":9,"count":11},{"key":95,"name":96,"count":11},"nodejs-memory-performance","Nodejs Memory Performance",{"key":98,"name":99,"count":11},"nodejs-modules-streams","Nodejs Modules Streams",{"key":101,"name":102,"count":11},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":104,"name":105,"count":11},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":107,"name":108,"count":11},"php-concurrency-async","Php Concurrency Async",{"key":110,"name":111,"count":11},"php-exceptions","Php Exceptions",{"key":113,"name":114,"count":11},"php-generics-interfaces","Php Generics Interfaces",{"key":116,"name":117,"count":11},"php-memory-performance","Php Memory Performance",{"key":119,"name":120,"count":11},"php-stdlib-http","Php Stdlib Http",{"key":122,"name":123,"count":11},"php-testing-tooling","Php Testing Tooling",{"key":125,"name":126,"count":11},"python-concurrency-async","Python Concurrency Async",{"key":128,"name":129,"count":11},"python-errors-context","Python Errors Context",{"key":131,"name":132,"count":11},"python-memory-performance","Python Memory Performance",{"key":134,"name":135,"count":11},"python-stdlib-http","Python Stdlib Http",{"key":137,"name":138,"count":11},"python-testing-tooling","Python Testing Tooling",{"key":140,"name":141,"count":11},"python-typing-oop","Python Typing Oop",{"key":143,"name":144,"count":11},"security","Security",{"key":146,"name":147,"count":11},"testing","Testing",[149,153,156,159,162,165],{"key":150,"name":151,"count":152},"csharp","C#\u002F.NET",450,{"key":154,"name":155,"count":152},"go","Go",{"key":157,"name":158,"count":152},"java","Java",{"key":160,"name":161,"count":152},"nodejs","Node.js",{"key":163,"name":164,"count":152},"php","PHP",{"key":166,"name":167,"count":152},"python","Python",[169,187,201,214,227,240],{"id":170,"topic":9,"difficulty":171,"body":172,"options":173,"correct_key":175,"explanation":186},"019f71b0-db3f-73b5-a315-fb983e358ffc",1,"```javascript\nconsole.log(\"A\");\nconsole.log(\"B\");\nconsole.log(\"C\");\n```\nWhat does this print, and why can you be sure of the order?",[174,177,180,183],{"key":175,"text":176},"a","\"A\", \"B\", \"C\"",{"key":178,"text":179},"b","The order isn't guaranteed, since each console.log is scheduled as a separate task",{"key":181,"text":182},"c","\"C\", \"B\", \"A\" — Node evaluates statements in reverse order because of hoisting",{"key":184,"text":185},"d","It depends on which event loop phase is active when the script starts running","There is no asynchronous operation here at all. Node executes synchronous statements one at a time, in source order, on a single JavaScript thread. Nothing defers `console.log(\"B\")` or `console.log(\"C\")`, so the output is always \"A\", \"B\", \"C\".",{"id":188,"topic":9,"difficulty":189,"body":190,"options":191,"correct_key":181,"explanation":200},"019f71b0-db41-72f1-aef8-253706d35286",2,"What is the Node.js event loop responsible for?",[192,194,196,198],{"key":175,"text":193},"Compiling JavaScript source into machine code before execution begins",{"key":178,"text":195},"Managing a pool of OS threads that each run one callback concurrently",{"key":181,"text":197},"Checking whether the call stack is empty, and if so, moving the next queued callback onto it",{"key":184,"text":199},"Allocating and freeing memory for objects on the V8 heap","The event loop is the mechanism that lets single-threaded JavaScript handle asynchronous work: it repeatedly checks if the call stack is empty, and when it is, it pulls the next ready callback (from a timer, I\u002FO completion, microtask queue, etc.) onto the stack to execute. It has nothing to do with compilation or memory management directly.",{"id":202,"topic":9,"difficulty":171,"body":203,"options":204,"correct_key":178,"explanation":213},"019f71b0-db43-7301-b17b-71b8dde3b1d3","```javascript\nconsole.log(\"start\");\nsetTimeout(() => {\n  console.log(\"timeout\");\n}, 0);\nconsole.log(\"end\");\n```\nWhat does this print?",[205,207,209,211],{"key":175,"text":206},"\"start\", \"timeout\", \"end\"",{"key":178,"text":208},"\"start\", \"end\", \"timeout\"",{"key":181,"text":210},"\"timeout\", \"start\", \"end\"",{"key":184,"text":212},"It throws an error because setTimeout requires a positive delay greater than 0","`setTimeout(fn, 0)` doesn't run `fn` immediately — it schedules it to run in a later phase of the event loop, after the current synchronous code finishes. So \"start\" and \"end\" print first (synchronously), and \"timeout\" prints afterward, once the event loop reaches the timers phase.",{"id":215,"topic":9,"difficulty":171,"body":216,"options":217,"correct_key":184,"explanation":226},"019f71b0-db43-7d20-bbe2-8c59c31a56d7","How many threads does Node.js use to run your JavaScript code by default?",[218,220,222,224],{"key":175,"text":219},"One thread per open socket connection",{"key":178,"text":221},"A pool of 4 threads that grows with the number of setTimeout calls",{"key":181,"text":223},"A separate thread for every asynchronous callback",{"key":184,"text":225},"A single thread, though libuv may use extra threads behind the scenes for some OS-level operations","Your JavaScript code always runs on one main thread. That's why a long synchronous computation blocks everything else. Node (via libuv) does use additional threads internally for some things, but your JS callbacks themselves execute one at a time on that single thread.",{"id":228,"topic":9,"difficulty":189,"body":229,"options":230,"correct_key":181,"explanation":239},"019f71b0-db44-7a3a-a66f-a77fdd44d0a4","```javascript\nsetTimeout(() => console.log(\"first\"), 100);\nsetTimeout(() => console.log(\"second\"), 10);\n```\nWhat gets logged, and in what order?",[231,233,235,237],{"key":175,"text":232},"\"first\" then \"second\", in registration order",{"key":178,"text":234},"It throws, because two setTimeout calls can't share the same phase",{"key":181,"text":236},"\"second\" then \"first\"",{"key":184,"text":238},"Both callbacks run at exactly the same moment, so the order is random","Each timer becomes eligible to run once its delay has elapsed. The 10ms timer's threshold passes before the 100ms one, so its callback runs first regardless of the order the two `setTimeout` calls appear in the source code.",{"id":241,"topic":9,"difficulty":171,"body":242,"options":243,"correct_key":175,"explanation":252},"019f71b0-db45-72a1-9177-6f4079bd7a3e","```javascript\nconsole.log(\"1\");\nPromise.resolve().then(() => console.log(\"2\"));\nconsole.log(\"3\");\n```\nWhat does this print?",[244,246,248,250],{"key":175,"text":245},"\"1\", \"3\", \"2\"",{"key":178,"text":247},"\"1\", \"2\", \"3\"",{"key":181,"text":249},"\"2\", \"1\", \"3\"",{"key":184,"text":251},"It throws because Promise.resolve() must be called with an argument","`Promise.resolve()` creates an already-resolved promise, but its `.then` callback is still scheduled as a microtask, not run inline. Microtasks only run once the current synchronous block finishes, so \"1\" and \"3\" print first, then \"2\".",{"fields":254,"seniorities":424,"interview_shapes":425,"locales":430,"oauth":432,"question_count":435,"coach_enabled":436,"jd_match_enabled":436},[255,266,286,303,327,340,359,378,398,405,411,418],{"key":5,"name_tr":6,"name_en":6,"sort":171,"specializations":256},[257,260,261,262,263,264,265],{"key":258,"name":259,"field":5},"general","Genel",{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":267,"name_tr":268,"name_en":268,"sort":189,"specializations":269},"frontend","Frontend",[270,271,274,277,280,283],{"key":258,"name":259,"field":267},{"key":272,"name":273,"field":267},"javascript","JavaScript",{"key":275,"name":276,"field":267},"typescript","TypeScript",{"key":278,"name":279,"field":267},"react","React",{"key":281,"name":282,"field":267},"vue","Vue",{"key":284,"name":285,"field":267},"angular","Angular",{"key":287,"name_tr":288,"name_en":288,"sort":289,"specializations":290},"fullstack","Fullstack",3,[291,292,293,294,295,296,297,298,299,300,301,302],{"key":258,"name":259,"field":287},{"key":154,"name":155,"field":5},{"key":166,"name":167,"field":5},{"key":157,"name":158,"field":5},{"key":150,"name":151,"field":5},{"key":160,"name":161,"field":5},{"key":163,"name":164,"field":5},{"key":272,"name":273,"field":267},{"key":275,"name":276,"field":267},{"key":278,"name":279,"field":267},{"key":281,"name":282,"field":267},{"key":284,"name":285,"field":267},{"key":304,"name_tr":305,"name_en":305,"sort":306,"specializations":307},"devops-cloud","DevOps \u002F Cloud",4,[308,309,312,315,318,321,324],{"key":258,"name":259,"field":304},{"key":310,"name":311,"field":304},"aws","AWS",{"key":313,"name":314,"field":304},"gcp","GCP",{"key":316,"name":317,"field":304},"azure","Azure",{"key":319,"name":320,"field":304},"kubernetes","Kubernetes",{"key":322,"name":323,"field":304},"terraform","Terraform",{"key":325,"name":326,"field":304},"linux","Linux",{"key":328,"name_tr":329,"name_en":329,"sort":330,"specializations":331},"ai-engineer","AI Engineer",5,[332,333,334,337],{"key":258,"name":259,"field":328},{"key":166,"name":167,"field":328},{"key":335,"name":336,"field":328},"llm-rag","LLM\u002FRAG",{"key":338,"name":339,"field":328},"mlops","MLOps",{"key":341,"name_tr":342,"name_en":343,"sort":344,"specializations":345},"database","Veritabanı","Database",6,[346,347,350,353,356],{"key":258,"name":259,"field":341},{"key":348,"name":349,"field":341},"postgresql","PostgreSQL",{"key":351,"name":352,"field":341},"mysql","MySQL",{"key":354,"name":355,"field":341},"mongodb","MongoDB",{"key":357,"name":358,"field":341},"redis","Redis",{"key":360,"name_tr":361,"name_en":362,"sort":363,"specializations":364},"mobile","Mobil","Mobile",7,[365,366,369,372,375],{"key":258,"name":259,"field":360},{"key":367,"name":368,"field":360},"ios-swift","iOS (Swift)",{"key":370,"name":371,"field":360},"android-kotlin","Android (Kotlin)",{"key":373,"name":374,"field":360},"flutter","Flutter",{"key":376,"name":377,"field":360},"react-native","React Native",{"key":143,"name_tr":379,"name_en":144,"sort":380,"specializations":381},"Güvenlik",8,[382,383,386,389,392,395],{"key":258,"name":259,"field":143},{"key":384,"name":385,"field":143},"appsec","AppSec",{"key":387,"name":388,"field":143},"offensive-pentest","Offensive \u002F Pentest",{"key":390,"name":391,"field":143},"cloud-security","Cloud Security",{"key":393,"name":394,"field":143},"devsecops","DevSecOps",{"key":396,"name":397,"field":143},"blue-team-incident","Blue Team \u002F Incident",{"key":399,"name_tr":400,"name_en":401,"sort":402,"specializations":403},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[404],{"key":258,"name":259,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"data-engineer","Data Engineer",10,[410],{"key":258,"name":259,"field":406},{"key":412,"name_tr":413,"name_en":414,"sort":415,"specializations":416},"game-dev","Oyun Geliştirme","Game Development",11,[417],{"key":258,"name":259,"field":412},{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423],{"key":258,"name":259,"field":419},[14,15,16],{"junior":426,"mid":428,"senior":429},{"questions":427,"median_sec":3},20,{"questions":427,"median_sec":3},{"questions":427,"median_sec":3},[431,10],"tr",[433,434],"google","github",21750,true]