[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:backend\u002Fjava-memory-jvm":4,"config":254},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","","java-memory-jvm","Java Memory Jvm","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,76,79,82,85,88,91,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 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":8,"name":9,"count":11},{"key":77,"name":78,"count":11},"java-stdlib-http","Java Stdlib Http",{"key":80,"name":81,"count":11},"java-testing-tooling","Java Testing Tooling",{"key":83,"name":84,"count":11},"messaging-queues","Mesajlaşma \u002F Kuyruklar",{"key":86,"name":87,"count":11},"networking-http","Ağ \u002F HTTP",{"key":89,"name":90,"count":11},"nodejs-error-handling","Nodejs Error Handling",{"key":92,"name":93,"count":11},"nodejs-event-loop-async","Nodejs Event Loop Async",{"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","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":178,"explanation":186},"019f6e5f-2402-79d8-8220-446786db7617",1,"```java\npublic class Demo {\n    public static void main(String[] args) {\n        int x = 5;\n        Point p = new Point(1, 2);\n    }\n}\n\nclass Point {\n    int x, y;\n    Point(int x, int y) { this.x = x; this.y = y; }\n}\n```\n`x` yerel değişkeni ve `p`'nin referans ettiği `Point` nesnesi JVM'in bellek alanlarında nerede yaşar?",[174,177,180,183],{"key":175,"text":176},"a","Hem `x` hem `Point` nesnesi heap'te yaşar; yalnızca `p`'nin kendisi stack frame'inde yaşar",{"key":178,"text":179},"b","`x` ve `p` stack frame'de durur; yalnızca `Point` nesnesi heap'te yaşar",{"key":181,"text":182},"c","Hem `x` hem `Point` nesnesi `main`'in stack frame'i içinde yaşar",{"key":184,"text":185},"d","`x` heap'te yaşar, `Point` nesnesi ve `p` ise ikisi de stack'te yaşar","Her thread'in, aktif her metod çağrısı için bir frame'den oluşan kendi stack'i vardır. `x` gibi primitive yerel değişkenler doğrudan o anki frame içinde saklanır. `p` gibi referans değişkenler de frame içinde saklanır, ama işaret ettikleri nesne -- burada `new` ile oluşturulan `Point` instance'ı -- tüm thread'lerin erişebildiği paylaşılan heap'te tahsis edilir. `main` döndüğünde frame (ve `x`, `p`) kaybolur, ama `Point` nesnesi yalnızca artık hiçbir şey ona referans vermediğinde ve garbage collector onu geri kazandığında yok olur.",{"id":188,"topic":9,"difficulty":189,"body":190,"options":191,"correct_key":184,"explanation":200},"019f6e5f-2403-7487-9bf8-049add58d991",2,"```java\nString a = \"hello\";\nString b = \"hello\";\nSystem.out.println(a == b);\n```\nBu ne yazdırır ve neden?",[192,194,196,198],{"key":175,"text":193},"`false`, çünkü `==` her zaman nesne kimliğini karşılaştırır ve string literal'ler asla paylaşılmaz",{"key":178,"text":195},"`false`, çünkü her `String` literal'i heap'te yeni bir nesne tahsis eder",{"key":181,"text":197},"`true`, ama yalnızca JIT derleyicisi tesadüfen bu belirli örüntüyü optimize ettiği için",{"key":184,"text":199},"`true`, çünkü her iki literal de string pool'da aynı girdiye intern edilir","String literal'ler JVM tarafından otomatik olarak intern edilir: sınıf yüklendiğinde `\"hello\"` string pool'a bir kez yerleştirilir ve aynı ya da başka bir sınıftaki bu literal'in her tekrarı yeni bir nesne tahsis etmek yerine o havuzlanmış aynı `String` nesnesini yeniden kullanır. `a` ve `b` ikisi de o tek havuzlanmış nesneye referans verdiğinden, `==` (kimlik karşılaştırması) `true` döner. Bu, literal'ler için bir JIT optimizasyonu değil JVM seviyesinde bir garantidir ve tam olarak bu yüzden `==`, çalışma zamanında kurulan string'leri karşılaştırmak için güvenilmezdir.",{"id":202,"topic":9,"difficulty":189,"body":203,"options":204,"correct_key":175,"explanation":213},"019f6e5f-2403-7ddf-a012-dd0bc121fb49","```java\nString a = \"hello\";\nString b = new String(\"hello\");\nSystem.out.println(a == b);\nSystem.out.println(a.equals(b));\n```\nSırayla ne yazdırılır?",[205,207,209,211],{"key":175,"text":206},"Önce `false`, sonra `true`",{"key":178,"text":208},"Önce `true`, sonra `true`",{"key":181,"text":210},"Önce `false`, sonra `false`",{"key":184,"text":212},"Önce `true`, sonra `false`","`new String(\"hello\")`, karakterleri havuzlanmış literal'den kopyalansa bile, heap'te yepyeni bir `String` nesnesinin tahsis edilmesini açıkça zorlar -- bu nesne asla otomatik olarak string pool'a eklenmez. Bu yüzden `a` (havuzlanmış literal) ve `b` (taze tahsis edilen kopya) farklı nesnelerdir, `a == b` `false` olur. `equals` kimlik yerine karakter içeriğini karşılaştırır ve her iki string de aynı karakterleri taşıdığından `a.equals(b)` `true` olur. Bu iki satır, `String` için kimlik karşılaştırması ile değer karşılaştırmasının neden birbirinin yerine geçmediğinin klasik göstergesidir.",{"id":215,"topic":9,"difficulty":171,"body":216,"options":217,"correct_key":181,"explanation":226},"019f6e5f-2404-7514-80dd-1d04b760dd2d","Bir Java programı `StackOverflowError` ile çöküyor. Aslında neyin tükendiğini en iyi hangisi açıklar?",[218,220,222,224],{"key":175,"text":219},"Heap, yeni nesneler tahsis etmek için yer tükendi",{"key":178,"text":221},"JVM, işletim sisteminin native thread'lerini tüketti",{"key":181,"text":223},"Bir thread'in call stack'i, derin recursion yüzünden sabit boyutunu aştı",{"key":184,"text":225},"Garbage collector zamanında yeterince erişilemez nesneyi serbest bırakamadı","`StackOverflowError`, özellikle tek bir thread'in call stack'inin -- her aktif metod çağrısı için bir frame tutan bölgenin -- yapılandırılmış boyutunu aştığı anlamına gelir; bu neredeyse her zaman kontrolsüz ya da aşırı derin recursion yüzündendir (her recursive çağrı, dönmeden yeni bir frame ekler). Bu, heap'ten ayrı bir bellek alanı ve ayrı bir hata biçimidir: `OutOfMemoryError: Java heap space`, heap'in toplanamayan nesnelerle dolu olduğu anlamına gelir, bu farklı bir çözümü olan farklı bir sorundur.",{"id":228,"topic":9,"difficulty":189,"body":229,"options":230,"correct_key":178,"explanation":239},"019f6e5f-2404-7b05-8734-70adb931fb97","```java\nString s = \"a\";\nfor (int i = 0; i \u003C 3; i++) {\n    s += i;\n}\nSystem.out.println(s);\n```\nDöngü içinde her `s += i` çalıştığında, bellekte `String` nesnesine ne olur ve neden?",[231,233,235,237],{"key":175,"text":232},"`s`'in referans ettiği mevcut String nesnesi, yeni karakteri eklemek için yerinde değiştirilir; hep tek bir String nesnesi var olur",{"key":178,"text":234},"`String` immutable olduğu için, `s += i` her iterasyonda yeni bir String nesnesi oluşturur (eski içerik `i` ile birleştirilmiş halde); `s`'in önceki referans ettiği nesne erişilemez hale gelip çöp olur; döngü sonunda yol boyunca birkaç atılmış ara String nesnesi oluşmuş olur",{"key":181,"text":236},"JVM bu döngüyü her zaman tüm iterasyonlar boyunca tek bir `StringBuilder` çağrısı kullanacak şekilde yeniden yazar, bu yüzden döngü kaç kere çalışırsa çalışsın en fazla bir ara nesne oluşur",{"key":184,"text":238},"`s += i` yalnızca döngünün ilk çalışmasında yeni bir nesne ayırır; sonraki iterasyonlar Java dizileri yeniden boyutlandırılabilir olduğu için aynı alttaki karakter dizisini yeniden kullanır","Java `String` nesneleri immutable'dır -- `String` üzerindeki hiçbir metot zaten tuttuğu karakterleri değiştiremez. Derleyiciler genelde tek bir `+` ifadesini verimlilik için dahili bir buffer tabanlı çağrıya çevirir, ama bu optimizasyon her concatenation ifadesi için ayrı ayrı uygulanır; ayrı döngü iterasyonlarını tek bir accumulator'da birleştirmez, çünkü `s` her iterasyonda yeni bir referansa atanır. Yani her `s += i`, birleşik karakterleri tutan yeni bir String nesnesi üretir ve `s`'in önceden işaret ettiği nesne garbage collection'a uygun hale gelir. Çok sayıda iterasyon boyunca tekrarlanan concatenation için tek bir `StringBuilder` kullanıp `.append()` çağırmak, tüm bu ara nesnelerin oluşturulup atılmasını önler.",{"id":241,"topic":9,"difficulty":242,"body":243,"options":244,"correct_key":175,"explanation":253},"019f6e5f-2405-744d-b701-c721ec35f304",3,"Bir junior geliştirici, try-with-resources kullanmak yerine, bir nesne garbage collect edildiğinde dosya handle'ını kapatmak için `finalize()`'ı override etmeye güveniyor. Bu yaklaşımın temel sorunu nedir?",[245,247,249,251],{"key":175,"text":246},"GC, `finalize()`'ın ne zaman\u002Fçalışıp çalışmayacağına karar verir, temizlik zamanlaması öngörülemez",{"key":178,"text":248},"`finalize()`, bir referans scope dışına çıktığı anda senkron biçimde çağrılır, bu da çağıran thread'i bloklayabilir",{"key":181,"text":250},"`finalize()` yalnızca `AutoCloseable`'ı da implemente eden sınıflarda kullanılabilir",{"key":184,"text":252},"`finalize()`'ı override eden nesneler otomatik olarak garbage collection'a uygun olmaktan çıkar","Kaynak temizliği için `finalize()`'a güvenmek güvenilmezdir çünkü JVM, `finalize()`'ın ne zaman -- hatta çalışıp çalışmayacağı -- konusunda hiçbir söz vermez; bu tamamen garbage collector'ın bir nesneyi ne zaman (ya da hiç) erişilemez sayıp finalizasyonu zamanladığına bağlıdır, bu da kaynağın serbest bırakılması gerekenden çok sonra olabilir, ya da JVM önce çıkarsa hiç olmayabilir. Buna karşılık try-with-resources, blok çıktığı anda `close()`'u deterministik biçimde çağırır, bu yüzden dosya handle'ı ya da soket gibi işletim sistemi seviyesinde bir kaynak tutan her şey için önerilen örüntüdür.",{"fields":255,"seniorities":424,"interview_shapes":425,"locales":430,"oauth":432,"question_count":435,"coach_enabled":436,"jd_match_enabled":436},[256,267,287,303,327,340,359,378,398,405,411,418],{"key":5,"name_tr":6,"name_en":6,"sort":171,"specializations":257},[258,261,262,263,264,265,266],{"key":259,"name":260,"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":268,"name_tr":269,"name_en":269,"sort":189,"specializations":270},"frontend","Frontend",[271,272,275,278,281,284],{"key":259,"name":260,"field":268},{"key":273,"name":274,"field":268},"javascript","JavaScript",{"key":276,"name":277,"field":268},"typescript","TypeScript",{"key":279,"name":280,"field":268},"react","React",{"key":282,"name":283,"field":268},"vue","Vue",{"key":285,"name":286,"field":268},"angular","Angular",{"key":288,"name_tr":289,"name_en":289,"sort":242,"specializations":290},"fullstack","Fullstack",[291,292,293,294,295,296,297,298,299,300,301,302],{"key":259,"name":260,"field":288},{"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":273,"name":274,"field":268},{"key":276,"name":277,"field":268},{"key":279,"name":280,"field":268},{"key":282,"name":283,"field":268},{"key":285,"name":286,"field":268},{"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":259,"name":260,"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":259,"name":260,"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":259,"name":260,"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":259,"name":260,"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":259,"name":260,"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":259,"name":260,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"data-engineer","Data Engineer",10,[410],{"key":259,"name":260,"field":406},{"key":412,"name_tr":413,"name_en":414,"sort":415,"specializations":416},"game-dev","Oyun Geliştirme","Game Development",11,[417],{"key":259,"name":260,"field":412},{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423],{"key":259,"name":260,"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]