[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:game-dev\u002Fmid":4,"config":127},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":8,"spec_key":8,"spec_name":8,"locale":9,"cell_total":10,"field_total":11,"seniorities":12,"topics":15,"specs":41,"samples":42},"game-dev","Game Development","mid","","en",506,600,[13,7,14],"junior","senior",[16,20,23,26,29,32,35,38],{"key":17,"name":18,"count":19},"game-ai-pathfinding","Game Ai Pathfinding",75,{"key":21,"name":22,"count":19},"game-input-audio","Game Input Audio",{"key":24,"name":25,"count":19},"game-loop-fundamentals","Game Loop Fundamentals",{"key":27,"name":28,"count":19},"game-networking-multiplayer","Game Networking Multiplayer",{"key":30,"name":31,"count":19},"game-performance-optimization","Game Performance Optimization",{"key":33,"name":34,"count":19},"game-physics-collision","Game Physics Collision",{"key":36,"name":37,"count":19},"game-rendering-pipeline","Game Rendering Pipeline",{"key":39,"name":40,"count":19},"game-state-management","Game State Management",[],[43,61,74,87,100,113],{"id":44,"topic":18,"difficulty":45,"body":46,"options":47,"correct_key":58,"explanation":60},"019f6b28-16ed-74f0-bc4d-7ff50c7921f7",2,"What is the main practical drawback of a state machine as more states and transitions are added?",[48,51,54,57],{"key":49,"text":50},"a","It cannot represent more than two states at once",{"key":52,"text":53},"b","It requires a network connection to evaluate transitions",{"key":55,"text":56},"c","It always runs slower than any other decision-making approach, regardless of state count",{"key":58,"text":59},"d","Transitions grow fast as states multiply, making the logic hard to read and extend","As states multiply, the transitions between them tend to grow combinatorially, so the web of conditions becomes tangled and error-prone to extend. State machines aren't limited to two states (a), don't need networking to evaluate (b), and aren't inherently slower — the problem is maintainability, not raw runtime cost (c).",{"id":62,"topic":18,"difficulty":45,"body":63,"options":64,"correct_key":55,"explanation":73},"019f6b28-16ee-704a-a3f0-3cb8ac666acd","A designer wants NPC logic where: Idle -> hears a noise -> Investigate -> sees no threat -> back to Idle; sees the player -> Attack. This is best described as what kind of logic structure?",[65,67,69,71],{"key":49,"text":66},"A tree-based decision structure with priority branches",{"key":52,"text":68},"A physics simulation with rigid body constraints",{"key":55,"text":70},"A finite set of named states linked by transitions",{"key":58,"text":72},"A pure random number generator choosing actions each frame","Idle, Investigate, and Attack are discrete named states, and each arrow is a condition-driven transition — the definition of a state machine. It is not described as a prioritized tree of behaviors (a), has nothing to do with physics constraints (b), and is fully deterministic given the conditions, not random (d).",{"id":75,"topic":18,"difficulty":45,"body":76,"options":77,"correct_key":52,"explanation":86},"019f6b28-16ee-79ed-ab0e-f57b1315b690","What does a tree-based decision structure (an alternative to a plain state machine) typically let designers do more easily?",[78,80,82,84],{"key":49,"text":79},"Skip the need for any conditions when deciding NPC actions",{"key":52,"text":81},"Reuse sub-behaviors and reorder priorities easily",{"key":55,"text":83},"Guarantee the NPC never changes behavior once the game starts",{"key":58,"text":85},"Store NPC position data more compactly in memory","A tree-based structure organizes behaviors hierarchically by priority, so designers can reuse sub-trees and reorder branches without touching a web of state-to-state transitions. It still needs conditions (a), doesn't freeze NPC behavior (c), and isn't about memory layout of positions (d).",{"id":88,"topic":18,"difficulty":45,"body":89,"options":90,"correct_key":49,"explanation":99},"019f6b28-16ef-7dee-8e68-22aea2e012d8","An NPC needs to walk from one side of a room to another, around a wall in the middle. What is this a basic example of?",[91,93,95,97],{"key":49,"text":92},"Pathfinding around an obstacle",{"key":52,"text":94},"A rendering draw call",{"key":55,"text":96},"An audio occlusion effect",{"key":58,"text":98},"A save\u002Fload system checkpoint","Routing around a wall to reach a destination is the simplest possible pathfinding scenario: finding a valid path that avoids an obstacle. It has nothing to do with rendering (b), audio (c), or save systems (d).",{"id":101,"topic":18,"difficulty":45,"body":102,"options":103,"correct_key":55,"explanation":112},"019f6b28-16f0-766c-be10-b2d6d365a3e8","A level's walkable area is represented as a 50x50 grid, where each cell stores links to its neighboring cells. What is this representation primarily used for?",[104,106,108,110],{"key":49,"text":105},"Determining the resolution of the level's background music",{"key":52,"text":107},"Storing the exact polygon count of every rendered mesh",{"key":55,"text":109},"Giving a search algorithm a node graph to explore",{"key":58,"text":111},"Calculating the NPC's maximum hit points","A grid of cells with neighbor links is exactly the graph structure a pathfinding search needs to explore possible routes cell by cell from start to goal. It has no bearing on audio resolution (a), mesh polygon counts (b), or NPC health values (d).",{"id":114,"topic":18,"difficulty":115,"body":116,"options":117,"correct_key":58,"explanation":126},"019f6b28-16f0-7eb3-aad8-65cd73b8f8a6",3,"A pathfinding search estimates the remaining distance to the goal using straight-line distance as a heuristic, and expands the node with the lowest (cost-so-far + estimated-remaining) first. Why does this tend to explore fewer nodes than a search with no heuristic at all?",[118,120,122,124],{"key":49,"text":119},"Because it guarantees an NPC never gets stuck, even when no valid path exists",{"key":52,"text":121},"Because it removes the need for a graph or grid representation entirely",{"key":55,"text":123},"Because it eliminates the need for any collision detection in the level",{"key":58,"text":125},"The heuristic biases exploration toward the goal, so fewer irrelevant nodes expand","Combining actual cost-so-far with an estimate of remaining distance lets the search prioritize promising directions instead of expanding blindly outward in every direction, which is why it typically visits fewer nodes. It says nothing about guaranteeing a path exists (a), doesn't remove the need for a graph (b), and is unrelated to collision detection (c).",{"fields":128,"seniorities":312,"interview_shapes":313,"locales":318,"oauth":320,"question_count":323,"coach_enabled":324,"jd_match_enabled":324},[129,155,175,191,215,228,247,266,288,295,301,306],{"key":130,"name_tr":131,"name_en":131,"sort":132,"specializations":133},"backend","Backend",1,[134,137,140,143,146,149,152],{"key":135,"name":136,"field":130},"general","Genel",{"key":138,"name":139,"field":130},"go","Go",{"key":141,"name":142,"field":130},"python","Python",{"key":144,"name":145,"field":130},"java","Java",{"key":147,"name":148,"field":130},"csharp","C#\u002F.NET",{"key":150,"name":151,"field":130},"nodejs","Node.js",{"key":153,"name":154,"field":130},"php","PHP",{"key":156,"name_tr":157,"name_en":157,"sort":45,"specializations":158},"frontend","Frontend",[159,160,163,166,169,172],{"key":135,"name":136,"field":156},{"key":161,"name":162,"field":156},"javascript","JavaScript",{"key":164,"name":165,"field":156},"typescript","TypeScript",{"key":167,"name":168,"field":156},"react","React",{"key":170,"name":171,"field":156},"vue","Vue",{"key":173,"name":174,"field":156},"angular","Angular",{"key":176,"name_tr":177,"name_en":177,"sort":115,"specializations":178},"fullstack","Fullstack",[179,180,181,182,183,184,185,186,187,188,189,190],{"key":135,"name":136,"field":176},{"key":138,"name":139,"field":130},{"key":141,"name":142,"field":130},{"key":144,"name":145,"field":130},{"key":147,"name":148,"field":130},{"key":150,"name":151,"field":130},{"key":153,"name":154,"field":130},{"key":161,"name":162,"field":156},{"key":164,"name":165,"field":156},{"key":167,"name":168,"field":156},{"key":170,"name":171,"field":156},{"key":173,"name":174,"field":156},{"key":192,"name_tr":193,"name_en":193,"sort":194,"specializations":195},"devops-cloud","DevOps \u002F Cloud",4,[196,197,200,203,206,209,212],{"key":135,"name":136,"field":192},{"key":198,"name":199,"field":192},"aws","AWS",{"key":201,"name":202,"field":192},"gcp","GCP",{"key":204,"name":205,"field":192},"azure","Azure",{"key":207,"name":208,"field":192},"kubernetes","Kubernetes",{"key":210,"name":211,"field":192},"terraform","Terraform",{"key":213,"name":214,"field":192},"linux","Linux",{"key":216,"name_tr":217,"name_en":217,"sort":218,"specializations":219},"ai-engineer","AI Engineer",5,[220,221,222,225],{"key":135,"name":136,"field":216},{"key":141,"name":142,"field":216},{"key":223,"name":224,"field":216},"llm-rag","LLM\u002FRAG",{"key":226,"name":227,"field":216},"mlops","MLOps",{"key":229,"name_tr":230,"name_en":231,"sort":232,"specializations":233},"database","Veritabanı","Database",6,[234,235,238,241,244],{"key":135,"name":136,"field":229},{"key":236,"name":237,"field":229},"postgresql","PostgreSQL",{"key":239,"name":240,"field":229},"mysql","MySQL",{"key":242,"name":243,"field":229},"mongodb","MongoDB",{"key":245,"name":246,"field":229},"redis","Redis",{"key":248,"name_tr":249,"name_en":250,"sort":251,"specializations":252},"mobile","Mobil","Mobile",7,[253,254,257,260,263],{"key":135,"name":136,"field":248},{"key":255,"name":256,"field":248},"ios-swift","iOS (Swift)",{"key":258,"name":259,"field":248},"android-kotlin","Android (Kotlin)",{"key":261,"name":262,"field":248},"flutter","Flutter",{"key":264,"name":265,"field":248},"react-native","React Native",{"key":267,"name_tr":268,"name_en":269,"sort":270,"specializations":271},"security","Güvenlik","Security",8,[272,273,276,279,282,285],{"key":135,"name":136,"field":267},{"key":274,"name":275,"field":267},"appsec","AppSec",{"key":277,"name":278,"field":267},"offensive-pentest","Offensive \u002F Pentest",{"key":280,"name":281,"field":267},"cloud-security","Cloud Security",{"key":283,"name":284,"field":267},"devsecops","DevSecOps",{"key":286,"name":287,"field":267},"blue-team-incident","Blue Team \u002F Incident",{"key":289,"name_tr":290,"name_en":291,"sort":292,"specializations":293},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[294],{"key":135,"name":136,"field":289},{"key":296,"name_tr":297,"name_en":297,"sort":298,"specializations":299},"data-engineer","Data Engineer",10,[300],{"key":135,"name":136,"field":296},{"key":5,"name_tr":302,"name_en":6,"sort":303,"specializations":304},"Oyun Geliştirme",11,[305],{"key":135,"name":136,"field":5},{"key":307,"name_tr":308,"name_en":308,"sort":309,"specializations":310},"ml-engineer","ML Engineer",12,[311],{"key":135,"name":136,"field":307},[13,7,14],{"junior":314,"mid":316,"senior":317},{"questions":315,"median_sec":3},20,{"questions":315,"median_sec":3},{"questions":315,"median_sec":3},[319,9],"tr",[321,322],"google","github",21750,true]