[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:backend\u002Fpython-concurrency-async":4,"config":252},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","","python-concurrency-async","Python Concurrency Async","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,99,102,105,108,111,114,117,120,123,126,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":97,"name":98,"count":11},"nodejs-memory-performance","Nodejs Memory Performance",{"key":100,"name":101,"count":11},"nodejs-modules-streams","Nodejs Modules Streams",{"key":103,"name":104,"count":11},"nodejs-stdlib-http","Nodejs Stdlib Http",{"key":106,"name":107,"count":11},"nodejs-testing-tooling","Nodejs Testing Tooling",{"key":109,"name":110,"count":11},"php-concurrency-async","Php Concurrency Async",{"key":112,"name":113,"count":11},"php-exceptions","Php Exceptions",{"key":115,"name":116,"count":11},"php-generics-interfaces","Php Generics Interfaces",{"key":118,"name":119,"count":11},"php-memory-performance","Php Memory Performance",{"key":121,"name":122,"count":11},"php-stdlib-http","Php Stdlib Http",{"key":124,"name":125,"count":11},"php-testing-tooling","Php Testing Tooling",{"key":8,"name":9,"count":11},{"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,200,213,226,239],{"id":170,"topic":9,"difficulty":171,"body":172,"options":173,"correct_key":181,"explanation":186},"019f6c9d-36f4-72f1-9f9b-b7f8f5fe1977",1,"```python\nimport threading\n\ndef greet(name):\n    print(f\"hello {name}\")\n\nt = threading.Thread(target=greet, args=(\"ada\",))\nt.start()\nt.join()\nprint(\"done\")\n```\nBu ne yazdırır?",[174,177,180,183],{"key":175,"text":176},"a","TypeError fırlatır çünkü args bir dict olmalı, tuple değil",{"key":178,"text":179},"b","Önce \"done\" sonra \"hello ada\" yazdırır, çünkü ana thread varsayılan olarak t'yi beklemez",{"key":181,"text":182},"c","Önce \"hello ada\" sonra \"done\" — join() t bitene kadar bloklar",{"key":184,"text":185},"d","Hiçbir şey yazdırmaz çünkü target= bir referans değil, bağlı bir fonksiyon çağrısı bekler","`threading.Thread(target=greet, args=(\"ada\",))`, `start()` çağrıldığında `greet(\"ada\")`'nın yeni bir thread'de çalışmasını planlar. `join()`, `t` bitene kadar çağıran thread'i bloklar; bu yüzden \"hello ada\" her zaman \"done\"'dan önce yazdırılır. `args`, dict değil pozisyonel argümanlardan oluşan bir tuple\u002Fiterable alır.",{"id":188,"topic":9,"difficulty":171,"body":189,"options":190,"correct_key":175,"explanation":199},"019f6c9d-36fd-7d57-b60c-f1423a3ad321","```python\nimport asyncio\n\nasync def compute():\n    print(\"computing\")\n    return 42\n\nresult = compute()\nprint(result)\n```\nNe olur?",[191,193,195,197],{"key":175,"text":192},"`\u003Ccoroutine object compute at 0x...>` gibi bir şey yazdırır; \"computing\" hiç yazdırılmaz",{"key":178,"text":194},"TypeError fırlatır çünkü compute() await ile çağrılmalıdır",{"key":181,"text":196},"Önce \"computing\" yazdırır, hemen ardından 42 döner",{"key":184,"text":198},"42'yi hemen yazdırır, çünkü compute() senkron çalışır","Bir `async def` fonksiyonunu çağırmak gövdesini çalıştırmaz — bir coroutine nesnesi oluşturup döndürür. Gövde ancak coroutine await edildiğinde (ör. `asyncio.run(compute())` içinde ya da `await compute()` ile) çalışmaya başlar. Burada `result` hiç await edilmediği için \"computing\" hiç yazdırılmaz; Python ayrıca \"coroutine was never awaited\" uyarısı da verebilir.",{"id":201,"topic":9,"difficulty":171,"body":202,"options":203,"correct_key":184,"explanation":212},"019f6c9d-36fe-7a15-a4eb-492664da476e","```python\nimport asyncio\n\nasync def main():\n    print(\"start\")\n    await asyncio.sleep(0.1)\n    print(\"end\")\n\nasyncio.run(main())\n```\nBu script çalıştırıldığında ne yazdırır?",[204,206,208,210],{"key":175,"text":205},"Önce \"end\" sonra \"start\"",{"key":178,"text":207},"RuntimeError fırlatır çünkü main()'in bir dönüş değeri yok",{"key":181,"text":209},"Sadece \"start\"; asyncio.run coroutine'in bitmesini beklemez",{"key":184,"text":211},"Önce \"start\" sonra \"end\", arada kısa bir bekleme ile","`asyncio.run(main())` yeni bir event loop oluşturur, `main()` coroutine'ini tamamlanana kadar çalıştırır ve loop'u kapatır. Çalışma yukarıdan aşağıya ilerler: önce \"start\" yazdırılır, sonra `await asyncio.sleep(0.1)` `main`'i yaklaşık 100ms askıya alır (başka hiçbir şeyi bloklamadan), ardından \"end\" yazdırılır.",{"id":214,"topic":9,"difficulty":171,"body":215,"options":216,"correct_key":178,"explanation":225},"019f6c9d-36ff-7727-8441-591e1364fe8a","```python\nimport threading\n\ndef worker():\n    print(\"working\")\n\nt = threading.Thread(target=worker)\nt.start()\nt.join()\nprint(\"main continues\")\n```\nİki yazdırmanın sırası hakkında ne garanti edilir?",[217,219,221,223],{"key":175,"text":218},"\"main continues\" her zaman önce yazdırılır çünkü ana thread'in önceliği vardır",{"key":178,"text":220},"\"working\", \"main continues\"'tan önce yazdırılması garantidir",{"key":181,"text":222},"join() ile bile sıra belirsizdir, çünkü thread'ler rastgele zamanlanır",{"key":184,"text":224},"Hiçbir şey yazdırılmaz çünkü join(), start()'tan önce çağrılmalıdır","`t.join()`, `t` tamamen bitene kadar çağıran (ana) thread'i bloklar. \"main continues\" ancak `join()` döndükten sonra yazdırıldığı ve `join()`, `worker()` tamamlanmadan (dolayısıyla \"working\" yazdırılmadan) dönemeyeceği için sıralama garantilidir.",{"id":227,"topic":9,"difficulty":171,"body":228,"options":229,"correct_key":175,"explanation":238},"019f6c9d-3700-7386-b7eb-f5fca900de02","CPython'da Global Interpreter Lock (GIL) nedir?",[230,232,234,236],{"key":175,"text":231},"Aynı anda yalnızca bir thread'in Python bytecode çalıştırmasına izin veren bir mutex",{"key":178,"text":233},"Bir makinede aynı anda birden fazla process'in Python çalıştırmasını tamamen engelleyen bir kilit",{"key":181,"text":235},"Kodu thread-safe yapmak için her `with` ifadesinde otomatik olarak alınan bir kilit",{"key":184,"text":237},"`threading` modülündeki çoklu thread kullanımını tamamen devre dışı bırakan bir yapılandırma bayrağı","GIL, CPython yorumlayıcısına içkin bir mutex'tir ve çok çekirdekli makinelerde bile herhangi bir anda yalnızca bir thread'in Python bytecode'u çalıştırmasını garanti eder. Bellek yönetimini (reference counting) basitleştirmek için vardır, ama tek bir process içindeki thread'ler arasında saf Python kodunun gerçek paralel çalışmasını sınırlar.",{"id":240,"topic":9,"difficulty":171,"body":241,"options":242,"correct_key":181,"explanation":251},"019f6c9d-3701-704c-86fc-02fa37b3c49c","asyncio, birden fazla coroutine için eşzamanlılığı nasıl sağlar?",[243,245,247,249],{"key":175,"text":244},"Her coroutine'i otomatik olarak kendi OS thread'ine atayarak",{"key":178,"text":246},"Her `async def` fonksiyonu için ayrı bir process başlatarak",{"key":181,"text":248},"Onları tek bir thread üzerinde kooperatif şekilde çalıştırıp `await` noktalarında coroutine'ler arasında geçiş yaparak",{"key":184,"text":250},"GIL'i kullanarak coroutine'leri gerçekten paralel olarak birden çok çekirdekte çalıştırarak","asyncio, tek bir thread üzerinde bir event loop çalıştırır. Coroutine'ler `await` noktalarında gönüllü olarak kontrolü bırakarak işbirliği yapar; event loop de sonra çalıştırılmaya hazır başka bir coroutine seçer. Varsayılan olarak preemption yoktur ve ekstra OS thread'i ya da process kullanılmaz — buradaki eşzamanlılık paralel çalışma değil, iç içe geçme (interleaving) anlamına gelir.",{"fields":253,"seniorities":424,"interview_shapes":425,"locales":430,"oauth":432,"question_count":435,"coach_enabled":436,"jd_match_enabled":436},[254,265,286,303,327,340,359,378,398,405,411,418],{"key":5,"name_tr":6,"name_en":6,"sort":171,"specializations":255},[256,259,260,261,262,263,264],{"key":257,"name":258,"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":266,"name_tr":267,"name_en":267,"sort":268,"specializations":269},"frontend","Frontend",2,[270,271,274,277,280,283],{"key":257,"name":258,"field":266},{"key":272,"name":273,"field":266},"javascript","JavaScript",{"key":275,"name":276,"field":266},"typescript","TypeScript",{"key":278,"name":279,"field":266},"react","React",{"key":281,"name":282,"field":266},"vue","Vue",{"key":284,"name":285,"field":266},"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":257,"name":258,"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":266},{"key":275,"name":276,"field":266},{"key":278,"name":279,"field":266},{"key":281,"name":282,"field":266},{"key":284,"name":285,"field":266},{"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":257,"name":258,"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":257,"name":258,"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":257,"name":258,"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":257,"name":258,"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":257,"name":258,"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":257,"name":258,"field":399},{"key":406,"name_tr":407,"name_en":407,"sort":408,"specializations":409},"data-engineer","Data Engineer",10,[410],{"key":257,"name":258,"field":406},{"key":412,"name_tr":413,"name_en":414,"sort":415,"specializations":416},"game-dev","Oyun Geliştirme","Game Development",11,[417],{"key":257,"name":258,"field":412},{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423],{"key":257,"name":258,"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]