[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:backend\u002Frust":4,"config":274},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":7,"topic_name":7,"spec_key":8,"spec_name":9,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":169,"samples":189},"backend","Backend","","rust","Rust","tr",450,3750,[14,15,16],"junior","mid","senior",[18,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,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,148,151,154,157,160,163,166],{"key":19,"name":20,"count":21},"api-design","API Tasarımı",75,{"key":23,"name":24,"count":21},"caching","Caching",{"key":26,"name":27,"count":21},"concurrency","Eşzamanlılık",{"key":29,"name":30,"count":21},"csharp-concurrency-async","Csharp Concurrency Async",{"key":32,"name":33,"count":21},"csharp-exceptions","Csharp Exceptions",{"key":35,"name":36,"count":21},"csharp-generics-interfaces","Csharp Generics Interfaces",{"key":38,"name":39,"count":21},"csharp-memory-performance","Csharp Memory Performance",{"key":41,"name":42,"count":21},"csharp-stdlib-http","Csharp Stdlib Http",{"key":44,"name":45,"count":21},"csharp-testing-tooling","Csharp Testing Tooling",{"key":47,"name":48,"count":21},"databases-sql","Veritabanı \u002F SQL",{"key":50,"name":51,"count":21},"go-concurrency","Go Concurrency",{"key":53,"name":54,"count":21},"go-errors","Go Errors",{"key":56,"name":57,"count":21},"go-interfaces-generics","Go Interfaces Generics",{"key":59,"name":60,"count":21},"go-memory-performance","Go Memory Performance",{"key":62,"name":63,"count":21},"go-stdlib-http","Go Stdlib Http",{"key":65,"name":66,"count":21},"go-testing-tooling","Go Testing Tooling",{"key":68,"name":69,"count":21},"java-concurrency","Java Concurrency",{"key":71,"name":72,"count":21},"java-exceptions","Java Exceptions",{"key":74,"name":75,"count":21},"java-generics-interfaces","Java Generics Interfaces",{"key":77,"name":78,"count":21},"java-memory-jvm","Java Memory Jvm",{"key":80,"name":81,"count":21},"java-stdlib-http","Java Stdlib Http",{"key":83,"name":84,"count":21},"java-testing-tooling","Java Testing Tooling",{"key":86,"name":87,"count":21},"messaging-queues","Mesajlaşma \u002F Kuyruklar",{"key":89,"name":90,"count":21},"networking-http","Ağ \u002F HTTP",{"key":92,"name":93,"count":21},"nodejs-error-handling","Nodejs Error Handling",{"key":95,"name":96,"count":21},"nodejs-event-loop-async","Nodejs Event Loop Async",{"key":98,"name":99,"count":21},"nodejs-memory-performance","Nodejs Memory Performance",{"key":101,"name":102,"count":21},"nodejs-modules-streams","Nodejs Modules Streams",{"key":104,"name":105,"count":21},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":107,"name":108,"count":21},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":110,"name":111,"count":21},"php-concurrency-async","Php Concurrency Async",{"key":113,"name":114,"count":21},"php-exceptions","Php Exceptions",{"key":116,"name":117,"count":21},"php-generics-interfaces","Php Generics Interfaces",{"key":119,"name":120,"count":21},"php-memory-performance","Php Memory Performance",{"key":122,"name":123,"count":21},"php-stdlib-http","Php Stdlib Http",{"key":125,"name":126,"count":21},"php-testing-tooling","Php Testing Tooling",{"key":128,"name":129,"count":21},"python-concurrency-async","Python Concurrency Async",{"key":131,"name":132,"count":21},"python-errors-context","Python Errors Context",{"key":134,"name":135,"count":21},"python-memory-performance","Python Memory Performance",{"key":137,"name":138,"count":21},"python-stdlib-http","Python Stdlib Http",{"key":140,"name":141,"count":21},"python-testing-tooling","Python Testing Tooling",{"key":143,"name":144,"count":21},"python-typing-oop","Python Typing Oop",{"key":146,"name":147,"count":21},"rs-async-runtime-futures","Rs Async Runtime Futures",{"key":149,"name":150,"count":21},"rs-concurrency-send-sync","Rs Concurrency Send Sync",{"key":152,"name":153,"count":21},"rs-error-handling-result-option","Rs Error Handling Result Option",{"key":155,"name":156,"count":21},"rs-memory-smart-pointers-unsafe","Rs Memory Smart Pointers Unsafe",{"key":158,"name":159,"count":21},"rs-ownership-borrowing-lifetimes","Rs Ownership Borrowing Lifetimes",{"key":161,"name":162,"count":21},"rs-traits-generics-dispatch","Rs Traits Generics Dispatch",{"key":164,"name":165,"count":21},"security","Güvenlik",{"key":167,"name":168,"count":21},"testing","Test",[170,173,176,179,182,185,188],{"key":171,"name":172,"count":11},"csharp","C#\u002F.NET",{"key":174,"name":175,"count":11},"go","Go",{"key":177,"name":178,"count":11},"java","Java",{"key":180,"name":181,"count":11},"nodejs","Node.js",{"key":183,"name":184,"count":11},"php","PHP",{"key":186,"name":187,"count":11},"python","Python",{"key":8,"name":9,"count":11},[190,208,221,234,248,261],{"id":191,"topic":147,"difficulty":192,"body":193,"options":194,"correct_key":199,"explanation":207},"01a0608e-d235-72db-9c66-06273344adbe",1,"```rust\nasync fn work() {\n    println!(\"work ran\");\n}\n\n#[tokio::main]\nasync fn main() {\n    let f = work();\n    println!(\"created future\");\n    f.await;\n}\n```\nBu program ne yazdırır?",[195,198,201,204],{"key":196,"text":197},"a","Önce `work ran`, sonra `created future`, gövde tam çağrı anında başlar",{"key":199,"text":200},"b","Önce `created future`, sonra `work ran`",{"key":202,"text":203},"c","Yalnız `created future`; future poll edilmeden düşürülür",{"key":205,"text":206},"d","Derlenmez; bir future her zaman yaratıldığı yerde await edilmek zorundadır","Bir `async fn` çağrısı yalnızca bir future kurar, başka bir şey yapmaz. Gövde ancak future poll edilince, yani `f.await` noktasında çalışır. Bu yüzden `main` içindeki `println!` önce koşar, `work ran` sonra gelir. Rust 1.98 \u002F tokio 1.x ile ölçüldü: `created future` satırı `work ran` satırından önce basılıyor.",{"id":209,"topic":147,"difficulty":192,"body":210,"options":211,"correct_key":205,"explanation":220},"01a0608e-d25d-7cf5-9317-2c5b3b93f532","```rust\nasync fn fetch() -> i32 { 1 }\n\nfn main() {\n    let x = fetch().await;\n    println!(\"{x}\");\n}\n```\nBu dosya derlendiğinde ne olur?",[212,214,216,218],{"key":196,"text":213},"`1` basar; `.await` için örtük bir runtime yaratılır",{"key":199,"text":215},"Derlenir, sonra çalışma zamanında `there is no reactor running` ile panic eder",{"key":202,"text":217},"Hiçbir şey basmaz; future hiç poll edilmeden düşürülür",{"key":205,"text":219},"Derleme hatası E0728: `async` bağlam dışında `await`","`.await` yalnızca `async` bağlam içinde yazılabilen bir dil yapısıdır. Düz `fn main` senkron olduğu için rustc dosyayı daha runtime sorusu gündeme gelmeden E0728 ile reddeder. Senkron bir `main` içinden future sürmek için bir executor gerekir: `#[tokio::main]` ya da açık `Runtime::block_on`.",{"id":222,"topic":147,"difficulty":192,"body":223,"options":224,"correct_key":199,"explanation":233},"01a0608e-d260-7391-8ccb-c26259132c39","`#[tokio::main]` özniteliği bir `async fn main`'i fiilen neye dönüştürür?",[225,227,229,231],{"key":196,"text":226},"İşletim sisteminin yükleyicisinin asenkron sürdüğü özel bir giriş noktasına",{"key":199,"text":228},"Bir `Runtime` kurup asıl async gövde üzerinde `block_on` çağıran senkron bir `fn main`'e",{"key":202,"text":230},"Gövdeyi arka plan thread'ine spawn edip işletim sistemine hemen dönen bir fonksiyona",{"key":205,"text":232},"Derleyicinin yerleşik executor'ına kaydedilen, ana thread'de poll edilen bir `main`'e","Rust'ta yerleşik executor yoktur ve `async fn main` derleyici tarafından E0752 ile reddedilir. Makro fonksiyonu sıradan senkron bir `main`'e çevirir: bir `Runtime` kurar (varsayılan multi-thread) ve asıl gövde üzerinde bloklar. İşletim sistemi ya da derleyici açısından özel bir yanı yoktur.",{"id":235,"topic":147,"difficulty":236,"body":237,"options":238,"correct_key":196,"explanation":247},"01a0608e-d262-7518-bb26-fb31330595ca",2,"```rust\nuse std::time::Duration;\n\nasync fn a() {\n    tokio::time::sleep(Duration::from_millis(50)).await;\n    println!(\"a done\");\n}\nasync fn b() {\n    tokio::time::sleep(Duration::from_millis(10)).await;\n    println!(\"b done\");\n}\n\n#[tokio::main]\nasync fn main() {\n    tokio::join!(a(), b());\n    println!(\"both\");\n}\n```\nSatırlar hangi sırayla görünür?",[239,241,243,245],{"key":196,"text":240},"`b done`, `a done`, `both`; iki sleep aynı anda koşar",{"key":199,"text":242},"`a done`, `b done`, `both`; `join!` argümanlarını yazıldığı sırayla poll eder",{"key":202,"text":244},"Önce `both`, ardından `a done` ve `b done` belirsiz bir sırada",{"key":205,"text":246},"Derleme başarısız: `join!` yalnız `tokio::spawn`'ın döndürdüğü `JoinHandle`'ları kabul eder","`join!` tüm future'larını aynı task üzerinde poll eder ve hepsi bitince tamamlanır. İki sleep aynı anda başlar; 10 ms'lik olan önce biter ve `b done` basılır, 50 ms sonra `a done`, en son `both`. Argüman sırası onları sıralı çalıştırmaz.",{"id":249,"topic":147,"difficulty":236,"body":250,"options":251,"correct_key":199,"explanation":260},"01a0608e-d268-723a-a85d-2b07d93629d0","```rust\n#[tokio::main]\nasync fn main() {\n    let h = tokio::spawn(async { 5 });\n    let v: i32 = h.await;\n    println!(\"{v}\");\n}\n```\nBu neden derlenmez?",[252,254,256,258],{"key":196,"text":253},"`tokio::spawn` bir `async move` bloğu ister, düz `async` blok spawn edilemez",{"key":199,"text":255},"`JoinHandle\u003Ci32>` await edilince `Result\u003Ci32, JoinError>` döner, bu yüzden çıplak `i32` uyuşmaz",{"key":202,"text":257},"`JoinHandle` doğrudan await edilemez; `tokio::join!`'e verilmesi gerekir",{"key":205,"text":259},"Spawn edilen blok `()` döndürür; `5` ifadesinin sonunda noktalı virgül yok","Spawn edilen bir task panic edebilir ya da iptal edilebilir; bu yüzden `JoinHandle\u003CT>` await edilince `Result\u003CT, JoinError>` üretir. rustc E0308 (mismatched types) verir ve `.expect(...)` önerir. `h.await.unwrap()` yazmak ya da `?` ile yaymak sorunu çözer. Blok `5` döndürür; yakalaması olmayan düz bir `async` blok da spawn edilebilir.",{"id":262,"topic":147,"difficulty":236,"body":263,"options":264,"correct_key":196,"explanation":273},"01a0608e-d26e-7c5e-bb86-3ee5676316f8","```rust\nuse std::time::Duration;\n\n#[tokio::main]\nasync fn main() {\n    let h = tokio::spawn(async {\n        tokio::time::sleep(Duration::from_millis(20)).await;\n        println!(\"task finished\");\n    });\n    drop(h);\n    tokio::time::sleep(Duration::from_millis(60)).await;\n    println!(\"main done\");\n}\n```\nNe yazdırılır?",[265,267,269,271],{"key":196,"text":266},"Önce `task finished`, sonra `main done`; task koparılmış hâlde sürer",{"key":199,"text":268},"Yalnız `main done`; `JoinHandle` düşürülünce task iptal edilir",{"key":202,"text":270},"Yalnız `main done`; handle'ı kaybolan task bir daha asla poll edilmez",{"key":205,"text":272},"Panic: `JoinHandle` düşürülmeden önce await ya da abort edilmek zorundadır","`JoinHandle` düşürülünce task koparılır (detach), runtime üzerinde çalışmaya devam eder. Ölçülen çıktı `task finished`, ardından `main done`. İptal için açık `abort()` çağrısı ya da runtime'ın tamamının düşürülmesi gerekir. Spawn edilmemiş bir future'ı düşürmekten kasıtlı olarak farklıdır; o gerçekten iptal eder.",{"fields":275,"seniorities":495,"interview_shapes":496,"locales":503,"oauth":505,"question_count":508,"coach_enabled":509,"jd_match_enabled":509},[276,288,308,326,350,363,382,401,421,440,455,477],{"key":5,"name_tr":6,"name_en":6,"sort":192,"specializations":277},[278,281,282,283,284,285,286,287],{"key":279,"name":280,"field":5},"general","Genel",{"key":174,"name":175,"field":5},{"key":186,"name":187,"field":5},{"key":177,"name":178,"field":5},{"key":171,"name":172,"field":5},{"key":180,"name":181,"field":5},{"key":183,"name":184,"field":5},{"key":8,"name":9,"field":5},{"key":289,"name_tr":290,"name_en":290,"sort":236,"specializations":291},"frontend","Frontend",[292,293,296,299,302,305],{"key":279,"name":280,"field":289},{"key":294,"name":295,"field":289},"javascript","JavaScript",{"key":297,"name":298,"field":289},"typescript","TypeScript",{"key":300,"name":301,"field":289},"react","React",{"key":303,"name":304,"field":289},"vue","Vue",{"key":306,"name":307,"field":289},"angular","Angular",{"key":309,"name_tr":310,"name_en":310,"sort":311,"specializations":312},"fullstack","Fullstack",3,[313,314,315,316,317,318,319,320,321,322,323,324,325],{"key":279,"name":280,"field":309},{"key":174,"name":175,"field":5},{"key":186,"name":187,"field":5},{"key":177,"name":178,"field":5},{"key":171,"name":172,"field":5},{"key":180,"name":181,"field":5},{"key":183,"name":184,"field":5},{"key":8,"name":9,"field":5},{"key":294,"name":295,"field":289},{"key":297,"name":298,"field":289},{"key":300,"name":301,"field":289},{"key":303,"name":304,"field":289},{"key":306,"name":307,"field":289},{"key":327,"name_tr":328,"name_en":328,"sort":329,"specializations":330},"devops-cloud","DevOps \u002F Cloud",4,[331,332,335,338,341,344,347],{"key":279,"name":280,"field":327},{"key":333,"name":334,"field":327},"aws","AWS",{"key":336,"name":337,"field":327},"gcp","GCP",{"key":339,"name":340,"field":327},"azure","Azure",{"key":342,"name":343,"field":327},"kubernetes","Kubernetes",{"key":345,"name":346,"field":327},"terraform","Terraform",{"key":348,"name":349,"field":327},"linux","Linux",{"key":351,"name_tr":352,"name_en":352,"sort":353,"specializations":354},"ai-engineer","AI Engineer",5,[355,356,357,360],{"key":279,"name":280,"field":351},{"key":186,"name":187,"field":351},{"key":358,"name":359,"field":351},"llm-rag","LLM\u002FRAG",{"key":361,"name":362,"field":351},"mlops","MLOps",{"key":364,"name_tr":365,"name_en":366,"sort":367,"specializations":368},"database","Veritabanı","Database",6,[369,370,373,376,379],{"key":279,"name":280,"field":364},{"key":371,"name":372,"field":364},"postgresql","PostgreSQL",{"key":374,"name":375,"field":364},"mysql","MySQL",{"key":377,"name":378,"field":364},"mongodb","MongoDB",{"key":380,"name":381,"field":364},"redis","Redis",{"key":383,"name_tr":384,"name_en":385,"sort":386,"specializations":387},"mobile","Mobil","Mobile",7,[388,389,392,395,398],{"key":279,"name":280,"field":383},{"key":390,"name":391,"field":383},"ios-swift","iOS (Swift)",{"key":393,"name":394,"field":383},"android-kotlin","Android (Kotlin)",{"key":396,"name":397,"field":383},"flutter","Flutter",{"key":399,"name":400,"field":383},"react-native","React Native",{"key":164,"name_tr":165,"name_en":402,"sort":403,"specializations":404},"Security",8,[405,406,409,412,415,418],{"key":279,"name":280,"field":164},{"key":407,"name":408,"field":164},"appsec","AppSec",{"key":410,"name":411,"field":164},"offensive-pentest","Offensive \u002F Pentest",{"key":413,"name":414,"field":164},"cloud-security","Cloud Security",{"key":416,"name":417,"field":164},"devsecops","DevSecOps",{"key":419,"name":420,"field":164},"blue-team-incident","Blue Team \u002F Incident",{"key":422,"name_tr":423,"name_en":424,"sort":425,"specializations":426},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[427,428,431,434,437],{"key":279,"name":280,"field":422},{"key":429,"name":430,"field":422},"test-automation","Test Automation",{"key":432,"name":433,"field":422},"sdet","SDET",{"key":435,"name":436,"field":422},"performance-testing","Performance Testing",{"key":438,"name":439,"field":422},"mobile-qa","Mobile QA",{"key":441,"name_tr":442,"name_en":442,"sort":443,"specializations":444},"data-engineer","Data Engineer",10,[445,446,449,452],{"key":279,"name":280,"field":441},{"key":447,"name":448,"field":441},"pipelines-etl","Pipelines \u002F ETL",{"key":450,"name":451,"field":441},"streaming","Streaming",{"key":453,"name":454,"field":441},"warehousing","Warehousing",{"key":456,"name_tr":457,"name_en":458,"sort":459,"specializations":460},"game-dev","Oyun Geliştirme","Game Development",11,[461,462,465,468,471,474],{"key":279,"name":280,"field":456},{"key":463,"name":464,"field":456},"unity-csharp","Unity (C#)",{"key":466,"name":467,"field":456},"unreal-cpp","Unreal (C++)",{"key":469,"name":470,"field":456},"gameplay","Gameplay",{"key":472,"name":473,"field":456},"graphics-rendering","Graphics \u002F Rendering",{"key":475,"name":476,"field":456},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":478,"name_tr":479,"name_en":479,"sort":480,"specializations":481},"ml-engineer","ML Engineer",12,[482,483,486,489,492],{"key":279,"name":280,"field":478},{"key":484,"name":485,"field":478},"classical-ml","Classical ML",{"key":487,"name":488,"field":478},"feature-engineering","Feature Engineering",{"key":490,"name":491,"field":478},"deep-learning","Deep Learning",{"key":493,"name":494,"field":478},"training-infrastructure","Training Infrastructure",[14,15,16],{"junior":497,"mid":499,"placement":500,"senior":502},{"questions":498,"median_sec":3},20,{"questions":498,"median_sec":3},{"questions":501,"median_sec":3},24,{"questions":498,"median_sec":3},[10,504],"en",[506,507],"google","github",29400,true]