[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:game-dev\u002Fnc-security-protocol":4,"config":232},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":130,"samples":147},"game-dev","Oyun Geliştirme","","nc-security-protocol","Nc Security Protocol","tr",75,2850,[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,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127],{"key":19,"name":20,"count":11},"game-ai-pathfinding","Game Ai Pathfinding",{"key":22,"name":23,"count":11},"game-input-audio","Game Input Audio",{"key":25,"name":26,"count":11},"game-loop-fundamentals","Game Loop Fundamentals",{"key":28,"name":29,"count":11},"game-networking-multiplayer","Game Networking Multiplayer",{"key":31,"name":32,"count":11},"game-performance-optimization","Game Performance Optimization",{"key":34,"name":35,"count":11},"game-physics-collision","Game Physics Collision",{"key":37,"name":38,"count":11},"game-rendering-pipeline","Game Rendering Pipeline",{"key":40,"name":41,"count":11},"game-state-management","Game State Management",{"key":43,"name":44,"count":11},"gfx-forward-deferred-architectures","Gfx Forward Deferred Architectures",{"key":46,"name":47,"count":11},"gfx-gpu-pipeline-stages","Gfx Gpu Pipeline Stages",{"key":49,"name":50,"count":11},"gfx-post-processing-aa-hdr","Gfx Post Processing Aa Hdr",{"key":52,"name":53,"count":11},"gfx-shading-lighting-pbr","Gfx Shading Lighting Pbr",{"key":55,"name":56,"count":11},"gfx-shadows-depth-precision","Gfx Shadows Depth Precision",{"key":58,"name":59,"count":11},"gfx-textures-sampling-compression","Gfx Textures Sampling Compression",{"key":61,"name":62,"count":11},"gp-ability-cooldown-damage","Gp Ability Cooldown Damage",{"key":64,"name":65,"count":11},"gp-animation-state-locomotion","Gp Animation State Locomotion",{"key":67,"name":68,"count":11},"gp-camera-follow-targeting","Gp Camera Follow Targeting",{"key":70,"name":71,"count":11},"gp-character-controller-movement","Gp Character Controller Movement",{"key":73,"name":74,"count":11},"gp-frame-windows-game-feel","Gp Frame Windows Game Feel",{"key":76,"name":77,"count":11},"gp-interaction-detection-triggers","Gp Interaction Detection Triggers",{"key":79,"name":80,"count":11},"nc-rollback-determinism","Nc Rollback Determinism",{"key":8,"name":9,"count":11},{"key":83,"name":84,"count":11},"nc-serialization-bandwidth","Nc Serialization Bandwidth",{"key":86,"name":87,"count":11},"nc-time-sync-tick","Nc Time Sync Tick",{"key":89,"name":90,"count":11},"nc-topology-nat-relay","Nc Topology Nat Relay",{"key":92,"name":93,"count":11},"nc-transport-reliability","Nc Transport Reliability",{"key":95,"name":96,"count":11},"ue-actor-component-lifecycle","Ue Actor Component Lifecycle",{"key":98,"name":99,"count":11},"ue-blueprint-cpp-interop","Ue Blueprint Cpp Interop",{"key":101,"name":102,"count":11},"ue-containers-strings-memory","Ue Containers Strings Memory",{"key":104,"name":105,"count":11},"ue-gameplay-framework-classes","Ue Gameplay Framework Classes",{"key":107,"name":108,"count":11},"ue-modules-build-packaging","Ue Modules Build Packaging",{"key":110,"name":111,"count":11},"ue-uobject-reflection-gc","Ue Uobject Reflection Gc",{"key":113,"name":114,"count":11},"un-csharp-memory-gc-performance","Un Csharp Memory Gc Performance",{"key":116,"name":117,"count":11},"un-gameobject-component-transform","Un Gameobject Component Transform",{"key":119,"name":120,"count":11},"un-jobs-burst-dots-basics","Un Jobs Burst Dots Basics",{"key":122,"name":123,"count":11},"un-monobehaviour-lifecycle-execution-order","Un Monobehaviour Lifecycle Execution Order",{"key":125,"name":126,"count":11},"un-prefabs-instantiate-pooling-addressables","Un Prefabs Instantiate Pooling Addressables",{"key":128,"name":129,"count":11},"un-scriptableobject-serialization","Un Scriptableobject Serialization",[131,135,138,141,144],{"key":132,"name":133,"count":134},"gameplay","Gameplay",450,{"key":136,"name":137,"count":134},"graphics-rendering","Graphics \u002F Rendering",{"key":139,"name":140,"count":134},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":142,"name":143,"count":134},"unity-csharp","Unity (C#)",{"key":145,"name":146,"count":134},"unreal-cpp","Unreal (C++)",[148,166,180,193,206,219],{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":154,"explanation":165},"01a039c8-9e86-7557-999d-dde5864a2842",1,"Bir UDP oyun sunucusu, henüz doğrulanmamış bir kaynak adresten küçük bir bağlantı isteği paketi alıyor. Sunucunun bu adrese hemen büyük miktarda oyun verisiyle yanıt vermesi neden risklidir?",[153,156,159,162],{"key":154,"text":155},"a","Adres sahte (spoofed) olabilir; bu da sunucuyu bir kurbana karşı büyütücüye çevirir",{"key":157,"text":158},"b","UDP, tetikleyen istekten daha büyük her yanıtı sessizce reddeder",{"key":160,"text":161},"c","İşletim sistemi giden UDP paketlerini son alınan paketin boyutuyla sınırlar",{"key":163,"text":164},"d","İstek ve yanıt eşit boyutta olmak zorunda olduğu için büyük yanıtlar hep kaybolur","UDP'de kaynak adres doğrulanmaz. Saldırgan bunu bir kurbana işaret edecek şekilde sahteleyebilir; istekten çok büyük bir yanıt sunucuyu o kurbana karşı büyütücü yapar.",{"id":167,"topic":9,"difficulty":168,"body":169,"options":170,"correct_key":160,"explanation":179},"01a039c8-9e87-74e1-af9b-cf394d9fdc07",2,"Bir istemcinin adresinin gerçek olduğu (sahte olmadığı) doğrulanmadan önce, sunucu o adrese gönderdiği baytı, o adresten aldığı bayta göre sınırlar. Bu sınırın amacı nedir?",[171,173,175,177],{"key":154,"text":172},"Paketleri arabelleğe almak için sunucunun bellek kullanımını azaltır",{"key":157,"text":174},"Güvenilmez UDP bağlantılarındaki paket kaybını telafi eder",{"key":160,"text":176},"Saldırganın kurbana yönlendirebileceği trafik miktarını sınırlar",{"key":163,"text":178},"Bağlı tüm oyuncular arasında adil bant genişliği paylaşımını garanti eder","Doğrulanmamış bir adrese giden yanıt\u002Falınan oranını sınırlamak, sahteci saldırganın yalnızca gönderdiğinin küçük bir katını yönlendirebilmesi demektir; bu büyütmeyi cazip olmaktan çıkarır.",{"id":181,"topic":9,"difficulty":150,"body":182,"options":183,"correct_key":157,"explanation":192},"01a039c8-9e88-7011-b89e-75ce6cd75eed","Bir sunucu, bağlantı isteği paketi geldiği anda istemciyi kabul etmek yerine önce küçük bir challenge değeri gönderir ve geri yansıtılmasını bekler. Bu adım neye karşı korur?",[184,186,188,190],{"key":154,"text":185},"Bant genişliğinden tasarruf etmek için el sıkışmayı sıkıştırır",{"key":157,"text":187},"İstemcinin önce iddia ettiği adreste paket alabildiğini doğrular",{"key":160,"text":189},"Maçın hangi tick oranında çalışacağını müzakere eder",{"key":163,"text":191},"İstemcinin kendi oyuncu kimliğini seçmesine izin verir","Bu adım, istemcinin önce iddia ettiği adreste paket alabildiğini doğrular; adresi sahte bir istemci challenge'ı hiç alamayacağı için geri yansıtamaz ve sunucu gerçek durum ayırmaz.",{"id":194,"topic":9,"difficulty":168,"body":195,"options":196,"correct_key":163,"explanation":205},"01a039c8-9e89-7451-a0ad-7597b8516206","Bir saldırgan bir kurbanın IP adresini sahteleyip oyun sunucusuna sahte bir bağlantı isteği gönderiyor. Sunucu bu (kurbanın) adresine bir token ile yanıt veriyor ve bir slot ayırmadan önce yansıtılmasını bekliyor. Ne olur?",[197,199,201,203],{"key":154,"text":198},"Sunucu istek düzgün göründüğü için yine de slotu ayırır",{"key":157,"text":200},"Kurbanın makinesi token'ı otomatik olarak saldırgana iletir",{"key":160,"text":202},"Token'lar tasarım gereği kısa olduğu için saldırgan onu tahmin eder",{"key":163,"text":204},"Token saldırgana değil kurbana ulaşır","Yanıt paket başlığındaki adrese (kurbanınkine) gider; saldırgan token'ı hiç görmez ve geri yansıtıp el sıkışmayı tamamlayamaz.",{"id":207,"topic":9,"difficulty":150,"body":208,"options":209,"correct_key":154,"explanation":218},"01a039c8-9e89-7a5a-a347-69087b459555","Bir sunucu, bir isteğin gerçek ve ulaşılabilir bir adresten geldiği doğrulanmadan önce, aldığı her bağlantı isteği paketi için neden tam bir bağlantı-durumu yapısı oluşturmaktan kaçınır?",[210,212,214,216],{"key":154,"text":211},"Bir saldırgan, çok sayıda sahte istek göndererek bağlantı slotlarını ve belleği tüketebilir",{"key":157,"text":213},"Yapıyı erken oluşturmak, meşru oyuncular için eşleştirmeyi yavaşlatır",{"key":160,"text":215},"Motor durumu yalnızca maç başladıktan sonra ayırmayı destekler",{"key":163,"text":217},"Tam bağlantı yapıları sunucu her yeniden başladığında yalnızca bir kez oluşturulabilir","Sunucu ilk pakette gerçek durum ayırırsa, saldırgan sahte isteklerle onu doldurup slotlarını hiçbir 'bağlantı' gerçek olmadan tüketebilir.",{"id":220,"topic":9,"difficulty":168,"body":221,"options":222,"correct_key":157,"explanation":231},"01a039c8-9e8a-733e-a62b-bfc44390163b","Bir protokol, istemcinin ilk bağlantı paketinin sunucunun challenge yanıtına yakın boyuta dolgulanmasını zorunlu kılıyor. Bu dolgulama kuralı öncelikle neyi önler?",[223,225,227,229],{"key":154,"text":224},"İstek paketinin ağ üzerinde parçalanmasını (fragmentation) önler",{"key":157,"text":226},"Küçük isteği büyütmeye değerli kılan farkı kaldırır",{"key":160,"text":228},"Sunucunun bir gidiş-dönüşü atlamasına izin vererek el sıkışmayı hızlandırır",{"key":163,"text":230},"İstemcinin maçın geri kalanı için ekstra bant genişliği ayırmasına izin verir","İstek yanıtın boyutuna yakın dolgulanmak zorundaysa, büyütmeyi değerli kılan 'küçük istek, büyük yanıt' oranı ortadan kalkar.",{"fields":233,"seniorities":446,"interview_shapes":447,"locales":452,"oauth":454,"question_count":457,"coach_enabled":458,"jd_match_enabled":458},[234,259,279,296,320,333,352,371,393,412,427,437],{"key":235,"name_tr":236,"name_en":236,"sort":150,"specializations":237},"backend","Backend",[238,241,244,247,250,253,256],{"key":239,"name":240,"field":235},"general","Genel",{"key":242,"name":243,"field":235},"go","Go",{"key":245,"name":246,"field":235},"python","Python",{"key":248,"name":249,"field":235},"java","Java",{"key":251,"name":252,"field":235},"csharp","C#\u002F.NET",{"key":254,"name":255,"field":235},"nodejs","Node.js",{"key":257,"name":258,"field":235},"php","PHP",{"key":260,"name_tr":261,"name_en":261,"sort":168,"specializations":262},"frontend","Frontend",[263,264,267,270,273,276],{"key":239,"name":240,"field":260},{"key":265,"name":266,"field":260},"javascript","JavaScript",{"key":268,"name":269,"field":260},"typescript","TypeScript",{"key":271,"name":272,"field":260},"react","React",{"key":274,"name":275,"field":260},"vue","Vue",{"key":277,"name":278,"field":260},"angular","Angular",{"key":280,"name_tr":281,"name_en":281,"sort":282,"specializations":283},"fullstack","Fullstack",3,[284,285,286,287,288,289,290,291,292,293,294,295],{"key":239,"name":240,"field":280},{"key":242,"name":243,"field":235},{"key":245,"name":246,"field":235},{"key":248,"name":249,"field":235},{"key":251,"name":252,"field":235},{"key":254,"name":255,"field":235},{"key":257,"name":258,"field":235},{"key":265,"name":266,"field":260},{"key":268,"name":269,"field":260},{"key":271,"name":272,"field":260},{"key":274,"name":275,"field":260},{"key":277,"name":278,"field":260},{"key":297,"name_tr":298,"name_en":298,"sort":299,"specializations":300},"devops-cloud","DevOps \u002F Cloud",4,[301,302,305,308,311,314,317],{"key":239,"name":240,"field":297},{"key":303,"name":304,"field":297},"aws","AWS",{"key":306,"name":307,"field":297},"gcp","GCP",{"key":309,"name":310,"field":297},"azure","Azure",{"key":312,"name":313,"field":297},"kubernetes","Kubernetes",{"key":315,"name":316,"field":297},"terraform","Terraform",{"key":318,"name":319,"field":297},"linux","Linux",{"key":321,"name_tr":322,"name_en":322,"sort":323,"specializations":324},"ai-engineer","AI Engineer",5,[325,326,327,330],{"key":239,"name":240,"field":321},{"key":245,"name":246,"field":321},{"key":328,"name":329,"field":321},"llm-rag","LLM\u002FRAG",{"key":331,"name":332,"field":321},"mlops","MLOps",{"key":334,"name_tr":335,"name_en":336,"sort":337,"specializations":338},"database","Veritabanı","Database",6,[339,340,343,346,349],{"key":239,"name":240,"field":334},{"key":341,"name":342,"field":334},"postgresql","PostgreSQL",{"key":344,"name":345,"field":334},"mysql","MySQL",{"key":347,"name":348,"field":334},"mongodb","MongoDB",{"key":350,"name":351,"field":334},"redis","Redis",{"key":353,"name_tr":354,"name_en":355,"sort":356,"specializations":357},"mobile","Mobil","Mobile",7,[358,359,362,365,368],{"key":239,"name":240,"field":353},{"key":360,"name":361,"field":353},"ios-swift","iOS (Swift)",{"key":363,"name":364,"field":353},"android-kotlin","Android (Kotlin)",{"key":366,"name":367,"field":353},"flutter","Flutter",{"key":369,"name":370,"field":353},"react-native","React Native",{"key":372,"name_tr":373,"name_en":374,"sort":375,"specializations":376},"security","Güvenlik","Security",8,[377,378,381,384,387,390],{"key":239,"name":240,"field":372},{"key":379,"name":380,"field":372},"appsec","AppSec",{"key":382,"name":383,"field":372},"offensive-pentest","Offensive \u002F Pentest",{"key":385,"name":386,"field":372},"cloud-security","Cloud Security",{"key":388,"name":389,"field":372},"devsecops","DevSecOps",{"key":391,"name":392,"field":372},"blue-team-incident","Blue Team \u002F Incident",{"key":394,"name_tr":395,"name_en":396,"sort":397,"specializations":398},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[399,400,403,406,409],{"key":239,"name":240,"field":394},{"key":401,"name":402,"field":394},"test-automation","Test Automation",{"key":404,"name":405,"field":394},"sdet","SDET",{"key":407,"name":408,"field":394},"performance-testing","Performance Testing",{"key":410,"name":411,"field":394},"mobile-qa","Mobile QA",{"key":413,"name_tr":414,"name_en":414,"sort":415,"specializations":416},"data-engineer","Data Engineer",10,[417,418,421,424],{"key":239,"name":240,"field":413},{"key":419,"name":420,"field":413},"pipelines-etl","Pipelines \u002F ETL",{"key":422,"name":423,"field":413},"streaming","Streaming",{"key":425,"name":426,"field":413},"warehousing","Warehousing",{"key":5,"name_tr":6,"name_en":428,"sort":429,"specializations":430},"Game Development",11,[431,432,433,434,435,436],{"key":239,"name":240,"field":5},{"key":142,"name":143,"field":5},{"key":145,"name":146,"field":5},{"key":132,"name":133,"field":5},{"key":136,"name":137,"field":5},{"key":139,"name":140,"field":5},{"key":438,"name_tr":439,"name_en":439,"sort":440,"specializations":441},"ml-engineer","ML Engineer",12,[442,443],{"key":239,"name":240,"field":438},{"key":444,"name":445,"field":438},"classical-ml","Classical ML",[14,15,16],{"junior":448,"mid":450,"senior":451},{"questions":449,"median_sec":3},20,{"questions":449,"median_sec":3},{"questions":449,"median_sec":3},[10,453],"en",[455,456],"google","github",27600,true]