[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en: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","Game Development","","gp-camera-follow-targeting","Gp Camera Follow Targeting","en",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,"A follow camera updates its position every frame with `pos = lerp(pos, target, 0.1)`, using a fixed constant 0.1 regardless of frame time. What problem does this cause?",[153,156,159,162],{"key":154,"text":155},"a","The camera position becomes a random value once per second",{"key":157,"text":158},"b","The camera stops updating entirely below 30 frames per second",{"key":160,"text":161},"c","The catch-up speed changes with frame rate",{"key":163,"text":164},"d","The target position gets overwritten by the camera position each frame","Applying a fixed fraction once per frame means the number of times that fraction is applied per real second depends on frame rate, so the same constant produces a slower catch-up on a low frame-rate machine and a faster one on a high frame-rate machine. (a) and (b) describe failures that don't follow from this code, (d) reverses the assignment direction.",{"id":167,"topic":9,"difficulty":168,"body":169,"options":170,"correct_key":154,"explanation":179},"01a034ec-0a94-795d-9137-6955a529dadb",2,"QA reports that the follow camera feels noticeably \"snappier\" on a high-refresh-rate test monitor than on the reference 60Hz monitor, using the same build with `pos = lerp(pos, target, 0.15)` called once per rendered frame. What is the most likely cause?",[171,173,175,177],{"key":154,"text":172},"The fixed 0.15 fraction compounds more times per real second at the higher frame rate",{"key":157,"text":174},"The high-refresh monitor is scaling render resolution, shrinking the camera's view distance",{"key":160,"text":176},"Input polling rate increased, making the target change position more often",{"key":163,"text":178},"The renderer drops every other frame on the high-refresh monitor, delaying camera updates","This is the same frame-rate-dependent lerp problem from a different angle: at a higher frame rate the same per-frame fraction compounds more times per second, so the camera closes the gap to the target faster in real time, which reads as snappier. (b), (c), and (d) invent mechanisms unrelated to the described code path.",{"id":181,"topic":9,"difficulty":150,"body":182,"options":183,"correct_key":157,"explanation":192},"01a034ec-0a9e-7df0-86fe-99032a752505","A follow camera defines a small rectangular region around the screen center where the target can move without the camera repositioning at all. What is this region commonly called?",[184,186,188,190],{"key":154,"text":185},"The clip region",{"key":157,"text":187},"A dead zone",{"key":160,"text":189},"The cull box",{"key":163,"text":191},"An anchor frame","A dead zone is the tolerance area in which target movement produces no camera movement; the camera only starts moving once the target reaches the dead zone's edge. (a) and (c) name rendering\u002Fphysics concepts unrelated to camera follow, (d) is not a standard term for this.",{"id":194,"topic":9,"difficulty":168,"body":195,"options":196,"correct_key":163,"explanation":205},"01a034ec-0aa4-79ee-a038-1d14ce6c81cf","A camera adds a forward offset in the target's current movement direction (\"look-ahead\") so the player sees more of what's coming up. What common artifact appears if the target frequently reverses direction, e.g. walking back and forth?",[197,199,201,203],{"key":154,"text":198},"The look-ahead offset accumulates without bound the longer the target keeps moving",{"key":157,"text":200},"The dead zone around the target permanently disappears once look-ahead is enabled",{"key":160,"text":202},"The camera's field of view narrows a fixed amount every time direction changes",{"key":163,"text":204},"The camera repeatedly snaps back and forth as the offset flips sides","Because look-ahead offset direction is tied directly to current movement direction, every reversal flips the offset to the opposite side; if this isn't smoothed or given hysteresis, rapid direction changes make the camera visibly snap or oscillate. (a) is not how a direction-following offset behaves, (b) and (c) are unrelated systems.",{"id":207,"topic":9,"difficulty":150,"body":208,"options":209,"correct_key":154,"explanation":218},"01a034ec-0aa8-76c9-8857-6231ed39463e","A platformer's follow camera copies the target's Y position every frame, including every small hop. Players complain the camera feels shaky during normal jumping. What is the common fix?",[210,212,214,216],{"key":154,"text":211},"Track a smoothed ground-reference height instead of the raw jump Y",{"key":157,"text":213},"Disable vertical camera movement completely, moving only horizontally",{"key":160,"text":215},"Increase the target's jump height so vertical motion reads more clearly",{"key":163,"text":217},"Reduce the game's frame rate so vertical changes update less often","Following a smoothed reference tied to standing\u002Fground height (rather than the raw, frequently-changing jump position) removes the frame-to-frame vertical noise from small hops while still letting the camera adjust for larger, sustained height changes. (b) removes vertical tracking entirely, which breaks framing on tall drops or climbs; (c) and (d) don't address the root cause.",{"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` is a large fixed value and `movementDirection.x` is a unit-length direction component. What edge case is missing compared to a typical framing-safe implementation?",[223,225,227,229],{"key":154,"text":224},"A frame-rate correction factor multiplied into `lookAheadDistance` each call",{"key":157,"text":226},"Clamping or smoothing so the offset doesn't jump instantly on direction change",{"key":160,"text":228},"A cast to integer before adding `lookAheadOffset` to `target.x`",{"key":163,"text":230},"A separate `lookAheadDistance` value tuned per Z-axis movement","As written, any change in `movementDirection.x` (including small reversals) immediately produces the full offset with no easing, which is exactly the kind of instant jump that causes visible snapping. (a) is irrelevant since this isn't a per-frame integration step, (c) is a type concern with no bearing on the edge case, (d) is an unrelated axis.",{"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":428,"name_en":6,"sort":429,"specializations":430},"Oyun Geliştirme",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},[453,10],"tr",[455,456],"google","github",27600,true]