[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:game-dev\u002Fnc-rollback-determinism":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","","nc-rollback-determinism","Nc Rollback Determinism","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,69,72,75,78,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":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":8,"name":9,"count":11},{"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,179,193,206,219],{"id":149,"topic":9,"difficulty":150,"body":151,"options":152,"correct_key":160,"explanation":165},"01a039c8-9e15-71d1-b095-9a25d7c8c7f1",1,"In deterministic lockstep networking, only player inputs are sent across the network instead of object state. As the number of simulated objects in the scene grows from 10 to 10,000, what happens to the required bandwidth?",[153,156,159,162],{"key":154,"text":155},"a","It grows, but only logarithmically, since objects can be batched into fewer packets.",{"key":157,"text":158},"b","It grows quadratically, since every object must be checked against every other object before sending.",{"key":160,"text":161},"c","It stays roughly constant, since bandwidth scales with the input's size, not the object count.",{"key":163,"text":164},"d","It grows linearly, since every object's position and velocity still has to be transmitted each frame.","Deterministic lockstep transmits inputs, not object state, so the network cost tracks the size of the input struct rather than the entity count; a huge number of simulated objects can be driven by the same bandwidth as one, as long as the input itself stays small.",{"id":167,"topic":9,"difficulty":150,"body":168,"options":169,"correct_key":154,"explanation":178},"01a039c8-9e57-7b61-adfa-4941812d7ccb","In a deterministic lockstep simulation, a client receives inputs from the other player over the network at 60 Hz. On one particular frame, the remote input for frame N has not arrived yet. What must the simulation do?",[170,172,174,176],{"key":154,"text":171},"Wait, and not advance to frame N, until the real input for that frame arrives.",{"key":157,"text":173},"Advance frame N using the previous frame's remote input as a permanent substitute.",{"key":160,"text":175},"Skip frame N entirely and jump straight to frame N+1 once input arrives.",{"key":163,"text":177},"Advance frame N using an interpolated average of the last two received inputs.","Lockstep can only advance a frame once every participant's input for that exact frame is known; without it, the frame cannot be produced deterministically, so the simulation has to wait rather than guess.",{"id":180,"topic":9,"difficulty":181,"body":182,"options":183,"correct_key":163,"explanation":192},"01a039c8-9e58-77ff-bc90-a587999a3966",2,"A fighting game team is choosing between two latency-hiding strategies: a fixed input delay (always wait N frames before acting on any input) versus predict-and-rollback (act immediately on a guess, correct later). What is the core trade-off between them?",[184,186,188,190],{"key":154,"text":185},"Fixed delay is bandwidth-heavy while rollback uses no network bandwidth at all.",{"key":157,"text":187},"Fixed delay only works for two players while rollback only works for more than two players.",{"key":160,"text":189},"Fixed delay requires floating-point determinism while rollback does not need determinism at all.",{"key":163,"text":191},"Fixed delay adds constant latency; rollback risks a visible correction snap instead.","The fundamental trade-off is felt latency versus visual stability: a fixed delay makes every input feel the same amount 'late' but the screen never has to be corrected, while rollback lets input feel instant most of the time at the cost of an occasional visible correction when the prediction was wrong.",{"id":194,"topic":9,"difficulty":181,"body":195,"options":196,"correct_key":157,"explanation":205},"01a039c8-9e5c-78c3-ab83-8f0e29040d09","In predict-and-rollback netcode, which sequence correctly describes what happens when the real input for an already-simulated frame turns out to differ from the prediction that was used?",[197,199,201,203],{"key":154,"text":198},"Ignore the real input and keep the predicted result, since state was already saved for that frame.",{"key":157,"text":200},"Restore the state saved at that frame, then re-simulate every later frame using the now-known real inputs.",{"key":160,"text":202},"Discard all simulation since that frame and restart the match from frame zero.",{"key":163,"text":204},"Apply only the difference between the predicted and real input as a one-frame correction, without touching any later frames.","Once the correct input for a past frame is known, the engine has to roll back to the saved state at that frame and then step forward again through every frame that was predicted after it, because each of those frames depends on the outcome of the one before it.",{"id":207,"topic":9,"difficulty":181,"body":208,"options":209,"correct_key":154,"explanation":218},"01a039c8-9e5e-71ec-907a-081d05973376","A game simulates one frame in 0.8 ms. On a particular network hiccup, the engine must roll back and re-simulate 6 frames before catching up to the present. Approximately how much extra CPU time does this single rollback cost, on top of the normal frame's own simulation?",[210,212,214,216],{"key":154,"text":211},"About 4.8 ms, since 6 rolled-back frames cost 0.8 ms each.",{"key":157,"text":213},"About 0.8 ms, since only the corrected frame needs to be re-simulated.",{"key":160,"text":215},"About 6 ms, since each rolled-back frame costs roughly 1 ms regardless of the per-frame simulation cost.",{"key":163,"text":217},"About 9.6 ms, since every re-simulated frame must be simulated twice.","The extra cost of a rollback is the number of frames that must be re-simulated multiplied by the cost of simulating one frame: 6 frames times 0.8 ms equals 4.8 ms.",{"id":220,"topic":9,"difficulty":181,"body":221,"options":222,"correct_key":160,"explanation":231},"01a039c8-9e60-70ed-a6c3-934758ec5684","For a rollback netcode system, which of these best describes the worst-case CPU cost of handling a single correction?",[223,225,227,229],{"key":154,"text":224},"The round-trip time divided by the frame duration, since that determines how much data was lost.",{"key":157,"text":226},"The size of the input struct multiplied by the number of players, since that is what must be resent.",{"key":160,"text":228},"The frames-rolled-back count times the per-frame simulation cost, since each of those frames must be fully re-run.",{"key":163,"text":230},"The cost of simulating exactly one frame, since only the frame that changed needs to be re-run.","Every frame between the point being restored and the present must be re-simulated in order, so the worst-case cost scales with how many frames were rolled back, not with a single frame or with network\u002Finput size.",{"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":181,"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]