[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:backend\u002Fnodejs-memory-performance":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-memory-performance","Nodejs Memory Performance","tr",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,96,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 Tasarımı",{"key":22,"name":23,"count":11},"caching","Caching",{"key":25,"name":26,"count":11},"concurrency","Eşzamanlılık",{"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","Veritabanı \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","Mesajlaşma \u002F Kuyruklar",{"key":88,"name":89,"count":11},"networking-http","Ağ \u002F HTTP",{"key":91,"name":92,"count":11},"nodejs-error-handling","Nodejs Error Handling",{"key":94,"name":95,"count":11},"nodejs-event-loop-async","Nodejs Event Loop Async",{"key":8,"name":9,"count":11},{"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","Güvenlik",{"key":146,"name":147,"count":11},"testing","Test",[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":181,"explanation":186},"019f71b0-db58-71e2-9c81-1868fcb9da03",1,"Node.js'te `process.memoryUsage().heapUsed` neyi temsil eder?",[174,177,180,183],{"key":175,"text":176},"a","Node.js sürecinin işletim sisteminde kapladığı toplam bellek (RSS); buffer'lar ve native kod dahil",{"key":178,"text":179},"b","Node.js'in kullanmasına izin verilen maksimum heap boyutu, `--max-old-space-size` bayrağıyla ayarlanır",{"key":181,"text":182},"c","V8 JavaScript heap'inde yaşayan nesnelerin şu an kullandığı bellek miktarı",{"key":184,"text":185},"d","Son garbage collection döngüsünde serbest bırakılan bellek miktarı","`heapUsed`, çağrının yapıldığı anda V8'in JavaScript heap'inde o an kapladığı byte miktarını raporlar — çoğunlukla yaşayan nesnelerdir, ama bir sonraki toplama döngüsü tarafından henüz geri kazanılmamış çöp de buna dahil olabilir. Bu, `rss`'ten (native buffer'lar ve kod dahil sürecin tüm resident belleği), `heapTotal`'dan (V8'in heap için ayırdığı, kullanılsın kullanılmasın bellek) farklıdır ve garbage collection'ın ürettiği bir fark (delta) değildir.",{"id":188,"topic":9,"difficulty":189,"body":190,"options":191,"correct_key":175,"explanation":200},"019f71b0-db58-7a5e-b652-2bcbdce35d40",2,"```javascript\nlet cache = {};\n\nfunction handleRequest(id, data) {\n  cache[id] = data;\n}\n```\nBu fonksiyon, her gelen istekte benzersiz bir `id` ile çağrılıyor. Uzun süre çalışan bir sunucu sürecinde bellek üzerindeki en olası etki nedir?",[192,194,196,198],{"key":175,"text":193},"`cache`, girdiler hiç kaldırılmadığı için sınırsız büyür ve her `data` nesnesini sonsuza kadar erişilebilir tutar",{"key":178,"text":195},"Hiçbir etki olmaz — düz bir nesnenin özelliklerine atanan nesneler, istek bittiğinde otomatik olarak temizlenir",{"key":181,"text":197},"V8, `cache` sabit bir boyut sınırını aştığında en eski girdileri otomatik olarak tahliye eder",{"key":184,"text":199},"V8'in garbage collector'ı nesne özellik sayısını sınırladığı için yalnızca en son 100 girdi tutulur","`cache`, modül kapsamından referans verilen düz bir nesnedir; dolayısıyla modül yüklü olduğu sürece `cache` ve üzerine atanan her şey erişilebilir kalır. `id` her istekte benzersiz olduğundan ve hiçbir şey eski anahtarları silmediğinden, bu klasik bir sınırsız-cache bellek sızıntısıdır: bellek kullanımı istek hacmiyle birlikte durmadan artar.",{"id":202,"topic":9,"difficulty":189,"body":203,"options":204,"correct_key":175,"explanation":213},"019f71b0-db59-73de-bf4b-2c9e4c8e8790","```javascript\nfunction makeLogger() {\n  const bigBuffer = new Array(1000000).fill('x');\n  return function log(msg) {\n    console.log(msg);\n  };\n}\n\nconst logger = makeLogger();\n```\n`bigBuffer`, `log` içinde hiç kullanılmıyor. `makeLogger()` döndükten ve `logger` canlı tutulduktan sonra `bigBuffer`'a ne olur?",[205,207,209,211],{"key":175,"text":206},"`log` ona hiç referans vermediği için hemen garbage collection'a uygun hale gelir",{"key":178,"text":208},"Değer olarak `log`'un kendi özel kapsamına kopyalanır, bu yüzden `makeLogger` içindeki orijinal dizi fonksiyon döner dönmez hemen serbest bırakılır",{"key":181,"text":210},"Otomatik olarak Node'un old generation heap'ine kalıcı olarak taşınır ve dondurulur, hangi koşulda olursa olsun bir daha asla toplanmaz",{"key":184,"text":212},"`log` ona hiç dokunmasa bile, `logger` erişilebilir olduğu sürece closure'ın dış kapsamı üzerinden erişilebilir kalır","Bir closure yalnızca gerçekten referans verdiği değişkenleri canlı tutar; bulunduğu kapsamda tanımlı her değişkeni değil. V8, bir fonksiyon gövdesinin hangi dış değişkenleri yakaladığını derleme zamanında belirler; `log`, `bigBuffer`'a hiç dokunmadığı için V8'in onu `log`'un closure'ı üzerinden erişilebilir tutmasına bir neden yoktur. `makeLogger()` döndükten sonra `bigBuffer`'ı canlı tutan başka bir referans kalmadığından, hemen garbage collection'a uygun hale gelir — bu, aynı kapsamı paylaşan bir kardeş closure'ın değişkeni GERÇEKTEN kullandığı ve bu yüzden onu canlı tutabildiği durumdan farklıdır.",{"id":215,"topic":9,"difficulty":171,"body":216,"options":217,"correct_key":178,"explanation":226},"019f71b0-db5a-7610-ad65-6324c063a4c4","Node.js'te bellek yönetimini doğru tanımlayan ifade hangisidir?",[218,220,222,224],{"key":175,"text":219},"Geliştiriciler oluşturdukları her nesnede manuel olarak `delete` çağırmalıdır, yoksa süreç çöker",{"key":178,"text":221},"Bellek, V8'in garbage collector'ı tarafından otomatik olarak yönetilir; sıradan JS nesneleri için manuel bir `free()` tarzı API yoktur",{"key":181,"text":223},"Node.js, bir nesnenin tuttuğu belleği serbest bırakmak için `process.free(obj)` çağrısını gerektirir",{"key":184,"text":225},"Node.js'te garbage collection tamamen isteğe bağlıdır ve hiç çalışmadan önce açıkça bir komut satırı bayrağıyla etkinleştirilmesi gerekir","Node.js, belleği garbage collection yoluyla otomatik yöneten V8 üzerinde çalışır: nesneler erişilemez hale geldiğinde, uygulama kodundan herhangi bir manuel `free()` tarzı çağrı olmadan serbest bırakılır. `process.free()` diye bir API yoktur, `delete` yalnızca bir nesne özelliğini kaldırır (nesnenin kendisini değil) ve garbage collection varsayılan olarak her zaman açıktır, isteğe bağlı bir özellik değildir.",{"id":228,"topic":9,"difficulty":189,"body":229,"options":230,"correct_key":175,"explanation":239},"019f71b0-db5a-7e38-8374-5bf7b691b57b","```javascript\nfunction startTicker() {\n  const state = { count: 0 };\n  setInterval(() => {\n    state.count++;\n  }, 1000);\n}\n\nstartTicker();\n```\n`startTicker()` bir kez çağrılıyor ve dönüş değeri kullanılmıyor. `state`'e ve oluşturduğu interval'e ne olur?",[231,233,235,237],{"key":175,"text":232},"Interval (temizlenmediği sürece) sonsuza kadar çalışmaya devam eder ve callback'inin closure'ı `state`'i süresiz erişilebilir tutar",{"key":178,"text":234},"`startTicker` dışında hiçbir şey onlara referans vermediği için ikisi de hemen garbage collection'a uğrar",{"key":181,"text":236},"Node.js, dönüş değerine dışarıdan referans olmayan interval'leri otomatik olarak temizler",{"key":184,"text":238},"`state`, tam olarak ilk tick ateşlendikten hemen sonra toplanır ama interval'in kendisi `count` kalıcı olarak 0'da sabitken sonsuza kadar çalışmaya devam eder","`setInterval`, callback'ini Node'un timer alt sistemine kaydeder ve bu alt sistem, `clearInterval` çağrılana kadar o callback'e referans tutar. Callback `state`'i closure ile kapsadığı için, interval ateşlenmeye devam ettiği sürece `state` de bu closure üzerinden erişilebilir kalır — burada hiçbir yerde `clearInterval` çağrılmadığından, hem timer hem de `state` sürecin geri kalanı boyunca yaşar.",{"id":241,"topic":9,"difficulty":189,"body":242,"options":243,"correct_key":181,"explanation":252},"019f71b0-db5c-7c91-a665-3f0295594b46","```javascript\nconst { EventEmitter } = require('events');\nconst bus = new EventEmitter();\n\nfunction onRequest() {\n  bus.on('data', () => {\n    console.log('handling data');\n  });\n}\n\nfor (let i = 0; i \u003C 15; i++) {\n  onRequest();\n}\n```\nBu döngüyü çalıştırmanın en olası gözlemlenebilir etkisi nedir?",[244,246,248,250],{"key":175,"text":245},"Hiç olağandışı bir şey olmaz — `EventEmitter`, tam olarak aynı event adı için kaydedilen tekrarlanan listener fonksiyonlarını sessizce yok sayar",{"key":178,"text":247},"O emitter örneğinde 11. listener kaydedildiği anda senkron olarak bir `TypeError` fırlatılır",{"key":181,"text":249},"Bir `MaxListenersExceededWarning` yazdırılır, çünkü tek bir emitter'daki `'data'` event'ine varsayılan 10'dan fazla listener eklenmiştir",{"key":184,"text":251},"Yalnızca ilk 10 listener tutulur; 11'den 15'e kadar olan çağrılar sessizce yok sayılır","`EventEmitter` örnekleri, salt sızıntı-tespit sezgisi olarak varsayılan biçimde event başına en fazla 10 listener'a ayarlıdır. Aynı `bus` örneğinde `'data'` için 11. listener eklendiğinde bu varsayılan zaten aşılmış olur ve sürecin `stderr`'ine bir `MaxListenersExceededWarning` yazdırılır — bu bir hata değil uyarıdır ve eklenen her listener (15'i de dahil) yine tutulur, tetiklenmeye de devam eder.",{"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":144,"name_en":379,"sort":380,"specializations":381},"Security",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},[10,431],"en",[433,434],"google","github",21750,true]