[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:game-dev\u002Fgp-camera-follow-targeting":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","","gp-camera-follow-targeting","Gp Camera Follow Targeting","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,67,70,73,76,79,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":8,"name":9,"count":11},{"key":68,"name":69,"count":11},"gp-character-controller-movement","Gp Character Controller Movement",{"key":71,"name":72,"count":11},"gp-frame-windows-game-feel","Gp Frame Windows Game Feel",{"key":74,"name":75,"count":11},"gp-interaction-detection-triggers","Gp Interaction Detection Triggers",{"key":77,"name":78,"count":11},"nc-rollback-determinism","Nc Rollback Determinism",{"key":80,"name":81,"count":11},"nc-security-protocol","Nc Security Protocol",{"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":160,"explanation":165},"01a034ec-0a89-7476-82a9-596801da4ffb",1,"Bir takip kamerası konumunu her karede `pos = lerp(pos, target, 0.1)` ile, kare süresinden bağımsız sabit bir 0.1 değeriyle güncelliyor. Bu ne soruna yol açar?",[153,156,159,162],{"key":154,"text":155},"a","Kamera konumu saniyede bir kez rastgele bir değer alır",{"key":157,"text":158},"b","Kamera 30 karenin altında güncellenmeyi tamamen durdurur",{"key":160,"text":161},"c","Yakalama hızı kare hızına göre değişir",{"key":163,"text":164},"d","Hedef konumu her karede kamera konumuyla üzerine yazılır","Sabit bir oranı her karede bir kez uygulamak, bu oranın gerçek saniyede kaç kez uygulanacağının kare hızına bağlı olması demektir; bu yüzden aynı sabit, düşük kare hızlı bir makinede daha yavaş, yüksek kare hızlı bir makinede daha hızlı yakalama üretir. (a) ve (b) bu koddan çıkmayan arızalar, (d) atama yönünü tersine çeviriyor.",{"id":167,"topic":9,"difficulty":168,"body":169,"options":170,"correct_key":154,"explanation":179},"01a034ec-0a94-795d-9137-6955a529dadb",2,"QA, aynı build ile `pos = lerp(pos, target, 0.15)` her render karesinde bir kez çağrılırken, takip kamerasının yüksek yenileme hızlı test monitöründe referans 60Hz monitöre göre belirgin şekilde daha \"ani\u002Fsert\" hissettiğini bildiriyor. En olası neden nedir?",[171,173,175,177],{"key":154,"text":172},"Sabit 0,15 oranı yüksek kare hızında gerçek saniyede daha çok kez bileşiyor",{"key":157,"text":174},"Yüksek yenilemeli monitör render çözünürlüğünü ölçekliyor ve kameranın görüş mesafesini küçültüyor",{"key":160,"text":176},"Girdi örnekleme hızı arttı, hedef daha sık yeni bir konuma geçiyor",{"key":163,"text":178},"Renderer yüksek yenilemeli monitörde her ikinci kareyi atlıyor, kamera güncellemeleri gecikiyor","Bu, farklı bir açıdan aynı kare-hızına-bağımlı lerp sorunudur: kare hızı yükseldiğinde aynı kare-başı oran gerçek saniyede daha çok kez bileşiyor, bu yüzden kamera hedefe gerçek zamanda daha hızlı yaklaşır ve bu daha ani hissettirir. (b), (c) ve (d) anlatılan kod yoluyla ilgisi olmayan mekanizmalar uyduruyor.",{"id":181,"topic":9,"difficulty":150,"body":182,"options":183,"correct_key":157,"explanation":192},"01a034ec-0a9e-7df0-86fe-99032a752505","Bir takip kamerası, ekran merkezi etrafında hedefin hiçbir kamera hareketi tetiklemeden içinde gezinebildiği küçük dikdörtgen bir bölge tanımlıyor. Bu bölgeye genellikle ne denir?",[184,186,188,190],{"key":154,"text":185},"Kırpma bölgesi",{"key":157,"text":187},"Ölü bölge",{"key":160,"text":189},"Culling kutusu",{"key":163,"text":191},"Çapa çerçevesi","Ölü bölge, içindeki hedef hareketinin hiçbir kamera hareketi üretmediği tolerans alanıdır; kamera yalnızca hedef bu bölgenin kenarına ulaştığında hareket etmeye başlar. (a) ve (c) render\u002Ffizik ile ilgili kavramlardır ve kamera takibiyle alakasızdır, (d) bunun için standart bir terim değildir.",{"id":194,"topic":9,"difficulty":168,"body":195,"options":196,"correct_key":163,"explanation":205},"01a034ec-0aa4-79ee-a038-1d14ce6c81cf","Bir kamera, oyuncunun ilerideki alanı daha çok görmesi için hedefin o anki hareket yönüne doğru ileri bir ofset ekliyor (\"bakış ileri kaydırma \u002F look-ahead\"). Hedef sık sık yön değiştirirse (ör. ileri geri yürürse) hangi yaygın arıza görülür?",[197,199,201,203],{"key":154,"text":198},"Look-ahead ofseti hedef hareket ettikçe sınırsız şekilde birikir",{"key":157,"text":200},"Look-ahead açıldığında hedef etrafındaki ölü bölge kalıcı olarak kaybolur",{"key":160,"text":202},"Kameranın görüş açısı yön her değiştiğinde sabit bir miktar daralır",{"key":163,"text":204},"Ofset taraf değiştirdikçe kamera tekrar tekrar ileri geri sıçrar","Look-ahead ofsetinin yönü doğrudan o anki hareket yönüne bağlı olduğu için her yön değişimi ofseti karşı tarafa çevirir; bu yumuşatılmaz ya da histerezis eklenmezse hızlı yön değişimleri kameranın gözle görülür şekilde sıçramasına ya da salınmasına neden olur. (a) yön-takipli bir ofsetin davranışı değildir, (b) ve (c) ilgisiz sistemlerdir.",{"id":207,"topic":9,"difficulty":150,"body":208,"options":209,"correct_key":154,"explanation":218},"01a034ec-0aa8-76c9-8857-6231ed39463e","Bir platform oyununda takip kamerası her karede hedefin Y konumunu, her küçük zıplamayı dahil ederek birebir kopyalıyor. Oyuncular normal zıplama sırasında kameranın titrek hissettiğinden şikayet ediyor. Yaygın çözüm nedir?",[210,212,214,216],{"key":154,"text":211},"Ham zıplama Y'si yerine yumuşatılmış bir zemin-referans yüksekliğini takip etmek",{"key":157,"text":213},"Dikey kamera hareketini tamamen kapatıp yalnızca yatayda hareket etmek",{"key":160,"text":215},"Hedefin zıplama yüksekliğini artırarak dikey hareketin daha net okunmasını sağlamak",{"key":163,"text":217},"Dikey değişimlerin daha seyrek güncellenmesi için oyunun kare hızını düşürmek","Ayakta durma\u002Fzemin yüksekliğine bağlı yumuşatılmış bir referansı takip etmek (sık değişen ham zıplama konumu yerine), küçük zıplamalardan gelen kareler-arası dikey gürültüyü kaldırırken kameranın daha büyük ve kalıcı yükseklik değişimlerine hâlâ tepki vermesini sağlar. (b) dikey takibi tamamen kaldırır ve yüksek düşüş\u002Ftırmanışlarda çerçevelemeyi bozar; (c) ve (d) kök nedeni ele almaz.",{"id":220,"topic":9,"difficulty":168,"body":221,"options":222,"correct_key":157,"explanation":231},"01a034ec-0aac-7c9b-a94c-b93055f8f5cb","```cpp\nfloat lookAheadOffset = movementDirection.x * lookAheadDistance;\ncameraTargetX = target.x + lookAheadOffset;\n```\n`lookAheadDistance` büyük sabit bir değer, `movementDirection.x` ise birim uzunluklu bir yön bileşeni. Bu parça, çerçeveleme açısından güvenli tipik bir implementasyona göre hangi kenar durumunu eksik bırakıyor?",[223,225,227,229],{"key":154,"text":224},"Her çağrıda `lookAheadDistance`'a çarpılan bir kare-hızı düzeltme çarpanı",{"key":157,"text":226},"Ofsetin yön değişiminde anında sıçramaması için kırpma ya da yumuşatma",{"key":160,"text":228},"`lookAheadOffset`'i `target.x`'e eklemeden önce tam sayıya dönüştürme",{"key":163,"text":230},"Z ekseni hareketi için ayarlanmış ayrı bir `lookAheadDistance` değeri","Yazıldığı haliyle, `movementDirection.x`'teki her değişim (küçük yön tersine dönüşleri dahil) hiçbir yumuşatma olmadan anında tam ofseti üretir; bu tam olarak gözle görülür sıçramaya yol açan türden bir anlık atlamadır. (a) bu bir kare-başı integrasyon adımı olmadığı için ilgisizdir, (c) kenar durumuyla ilgisi olmayan bir tip meselesidir, (d) alakasız bir eksendir.",{"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]