[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:backend\u002Fjava-exceptions":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-exceptions","Java Exceptions","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,70,73,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":8,"name":9,"count":11},{"key":71,"name":72,"count":11},"java-generics-interfaces","Java Generics Interfaces",{"key":74,"name":75,"count":11},"java-memory-jvm","Java Memory Jvm",{"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,228,241],{"id":170,"topic":9,"difficulty":171,"body":172,"options":173,"correct_key":178,"explanation":186},"019f6e5f-23c2-7514-a5c1-a3ae52f7cd1e",1,"Aşağıdaki dört standart sınıftan hangisi Java'da **checked** (denetimli) exception'dır?",[174,177,180,183],{"key":175,"text":176},"a","NullPointerException, çünkü null referansına erişmek yeterince yaygın bir hata olduğu için derleyici bunu ele almaya zorlar",{"key":178,"text":179},"b","IOException, çünkü doğrudan Exception'dan türer, RuntimeException'dan değil, bu yüzden checked'dır",{"key":181,"text":182},"c","ArithmeticException, çünkü sıfıra bölme her zaman derleme anında tespit edilebilir ve bu yüzden checked'dır",{"key":184,"text":185},"d","IllegalStateException, çünkü her zaman deklare edilmesi ya da yakalanması gereken ciddi bir programlama hatasını işaret eder","Checked exception, RuntimeException'dan TÜREMEYEN her Exception alt sınıfıdır. IOException doğrudan Exception'dan türediği için checked'dır ve `throws` ile deklare edilmeli ya da yakalanmalıdır. NullPointerException, ArithmeticException ve IllegalStateException'ın hepsi RuntimeException'dan türer, dolayısıyla unchecked'dır ve derleyici bunları ele almaya asla zorlamaz.",{"id":188,"topic":9,"difficulty":189,"body":190,"options":191,"correct_key":178,"explanation":200},"019f6e5f-23c3-7077-a469-05d9f44e6661",2,"```java\nclass Res implements AutoCloseable {\n    private final String name;\n    Res(String name) {\n        this.name = name;\n        if (name.equals(\"B\")) {\n            throw new RuntimeException(\"cannot open \" + name);\n        }\n        System.out.println(\"open \" + name);\n    }\n    public void close() { System.out.println(\"close \" + name); }\n}\n\npublic class Main {\n    public static void main(String[] args) {\n        try (Res a = new Res(\"A\"); Res b = new Res(\"B\")) {\n            System.out.println(\"body\");\n        } catch (RuntimeException e) {\n            System.out.println(\"caught: \" + e.getMessage());\n        }\n    }\n}\n```\nNe yazdırılır?",[192,194,196,198],{"key":175,"text":193},"open A, caught: cannot open B — A kaynağı asla kapanmaz çünkü constructor'ı çalışmış ama try gövdesi hiç başlamamıştır",{"key":178,"text":195},"open A, close A, caught: cannot open B — JVM, A kaynağının zaten başarıyla oluşturulduğunu takip eder ve B'nin constructor'ı başarısız olup try gövdesi hiç çalışmasa bile A'yı kapatır",{"key":181,"text":197},"Hiçbir şey yazdırılmaz ve JVM anormal sonlanır, çünkü try-with-resources başlığındaki başarısız bir constructor kaynak listesini tanımsız bir durumda bırakır",{"key":184,"text":199},"open A, open B, close A, caught: cannot open B — B'nin constructor'ı herhangi bir kaynak doğrulanmadan önce tamamlanana kadar çalışır ve sonrasında yalnızca ilk kaynak kapatılır","try-with-resources, başarısızlıktan önce başarıyla oluşturulmuş olan kaynakları ters sırayla kapatır — bunun için try gövdesinin başlamış olması gerekmez. Burada `a` tamamen oluşturulur (\"open A\" yazdırılır), sonra `b`'yi oluştururken atama yapılmadan önce exception fırlatılır, yani `b` hiçbir zaman kapatılacak bir kaynak olmamıştır. İfade geri sarılırken yine de `a`'yı kapatır (\"close A\"), ardından RuntimeException catch bloğuna yayılır.",{"id":202,"topic":9,"difficulty":189,"body":203,"options":204,"correct_key":175,"explanation":213},"019f6e5f-23c3-7c20-b4c8-16c6036113a3","```java\npublic class Main {\n    static int test() {\n        try {\n            return 1;\n        } finally {\n            return 2;\n        }\n    }\n    public static void main(String[] args) {\n        System.out.println(test());\n    }\n}\n```\nNe yazdırılır?",[205,207,209,211],{"key":175,"text":206},"2, çünkü finally içindeki return ifadesi try'dan bekleyen dönüş değerini iptal eder ve metodun asıl sonucu olur",{"key":178,"text":208},"1, çünkü try bloğunun dönüş değeri finally çalışmadan önce zaten kesinleşmiştir ve değiştirilemez",{"key":181,"text":210},"Kod derlenmez, çünkü finally bloğu içinde return ifadesine izin verilmez",{"key":184,"text":212},"0, çünkü hem try hem finally'den return yapmak dönüşü tamamen iptal eder ve metot deklare edilen dönüş tipinin örtük varsayılan değerine düşer","finally içindeki bir `return`, try\u002Fcatch'ten bekleyen her dönüşü (ya da fırlatılan istisnayı) yutar ve metodun gerçek sonucu haline gelir. Burada try 1 dönmeyi planlar ama bu değer geri verilmeden önce finally çalışır ve yerine 2 döner — yani `test()` 2 döner. Bu bilinen bir finally tuzağıdır ve geçerli Java'dır, derleme hatası değildir.",{"id":215,"topic":9,"difficulty":216,"body":217,"options":218,"correct_key":181,"explanation":227},"019f6e5f-23c4-758a-8ca6-44d14166d167",3,"```java\npublic class Main {\n    static void inner() {\n        try {\n            throw new RuntimeException(\"boom\");\n        } finally {\n            System.out.println(\"inner-finally\");\n        }\n    }\n    public static void main(String[] args) {\n        try {\n            inner();\n        } catch (RuntimeException e) {\n            System.out.println(\"caught: \" + e.getMessage());\n        }\n    }\n}\n```\nNe yazdırılır?",[219,221,223,225],{"key":175,"text":220},"caught: boom — finally bloğu hiç çalışmaz çünkü exception başka bir metotta fırlatılıp yakalanır",{"key":178,"text":222},"inner-finally — finally bloğu çalıştıktan sonra yürütme durur, bu yüzden exception main'e hiç ulaşmaz",{"key":181,"text":224},"inner-finally, caught: boom — exception yayılırken önce finally çalışır, sonra çağıran onu yakalar",{"key":184,"text":226},"caught: boom, inner-finally — önce exception yakalanır, sonra finally bir temizlik adımı olarak çalışır","try içinde bir exception fırlatıldığında, `finally` — kendisi hiçbir şey yakalamasa da — exception çağrı yığınında yukarı yayılmaya devam etmeden ÖNCE çalışır. Bu yüzden `inner()`'dan çıkılırken önce `inner-finally` yazdırılır, ancak ondan sonra exception main'in catch bloğuna ulaşır ve `caught: boom` yazdırılır.",{"id":229,"topic":9,"difficulty":189,"body":230,"options":231,"correct_key":178,"explanation":240},"019f6e5f-23c4-7eb2-ac47-4e0aaff5c697","```java\ntry {\n    Files.readAllBytes(Path.of(\"data.txt\"));\n    Integer.parseInt(\"x\");\n} catch (IOException | NumberFormatException e) {\n    e = new NumberFormatException(\"replaced\");\n    System.out.println(e.getMessage());\n}\n```\nBu multi-catch bloğu hakkında ne doğrudur?",[232,234,236,238],{"key":175,"text":233},"Derlenir ve doğru çalışır, çünkü multi-catch parametresi normal bir yerel değişken gibi yeniden atanabilir",{"key":178,"text":235},"Derlenmez, çünkü multi-catch parametresi `e` örtük olarak final'dır ve catch bloğu içinde yeniden atanamaz",{"key":181,"text":237},"Derlenmez, çünkü IOException ve NumberFormatException, exception hiyerarşisindeki konumlarından bağımsız olarak aynı multi-catch ifadesinde birlikte bulunamaz",{"key":184,"text":239},"Derlenir, ama e'yi yeniden atamanın sessizce hiçbir etkisi olmaz ve orijinal yakalanan exception'ın mesajı yazdırılır","Bir multi-catch parametresi (`catch (A | B e)`) örtük olarak `final`'dır, bu yüzden `e = new NumberFormatException(...)` bir derleme hatasıdır. Bu kısıtlama tek tipli bir catch parametresi için geçerli değildir, o yeniden atanabilir. IOException ve NumberFormatException gibi birbiriyle ilişkisiz istisna tiplerini aynı multi-catch ifadesinde birleştirmek, biri diğerinin alt tipi olmadığı sürece tamamen geçerlidir.",{"id":242,"topic":9,"difficulty":171,"body":243,"options":244,"correct_key":184,"explanation":253},"019f6e5f-23c8-7803-a288-18b3701f383b","Bir metot, `throws IOException` deklare eden başka bir metodu çağırıyor ve çağıran metot bunu yakalamıyor. Kodun derlenmesi için çağıran metot ne yapmalıdır?",[245,247,249,251],{"key":175,"text":246},"Özel bir şey gerekmez, çünkü IOException unchecked'dır ve derleyici ele alınıp alınmadığını hiç kontrol etmez",{"key":178,"text":248},"Çağrıyı boş bir catch bloğu olan bir try içine sarmalıdır, çünkü Java her checked çağrı noktası için bunu zorunlu kılar",{"key":181,"text":250},"IOException'ı özel olarak yakalamalıdır; çağıran metodun kendi imzasında `throws` ile deklare etmek derleyici tarafından hiçbir zaman geçerli bir alternatif olarak kabul edilmez",{"key":184,"text":252},"Ya IOException'ı yakalamalı ya da kendi imzasında `throws IOException` deklare ederek yükümlülüğü kendi çağıranına devretmelidir","IOException checked bir exception'dır, bu yüzden derleyici \"yakala ya da belirt\" kuralını uygular: onun kaçmasına izin verebilecek her metot ya try\u002Fcatch ile ele almalı ya da kendi imzasında `throws IOException` deklare etmelidir — bu da aynı yükümlülüğü bir sonraki çağırana devretmekten başka bir şey değildir.",{"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":216,"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]