[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:en:mobile\u002Fmobile-state-data":4,"config":211},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":112,"samples":126},"mobile","Mobile","","mobile-state-data","Mobile State Data","en",75,2400,[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,84,87,88,91,94,97,100,103,106,109],{"key":19,"name":20,"count":11},"fl-dart-async-isolates","Fl Dart Async Isolates",{"key":22,"name":23,"count":11},"fl-dart-language-null-safety","Fl Dart Language Null Safety",{"key":25,"name":26,"count":11},"fl-flutter-persistence-storage","Fl Flutter Persistence Storage",{"key":28,"name":29,"count":11},"fl-flutter-platform-channels-lifecycle","Fl Flutter Platform Channels Lifecycle",{"key":31,"name":32,"count":11},"fl-flutter-rendering-widget-tree","Fl Flutter Rendering Widget Tree",{"key":34,"name":35,"count":11},"fl-flutter-state-management-widgets","Fl Flutter State Management Widgets",{"key":37,"name":38,"count":11},"ios-core-data-swiftdata-persistence","Ios Core Data Swiftdata Persistence",{"key":40,"name":41,"count":11},"ios-lifecycle-background-execution","Ios Lifecycle Background Execution",{"key":43,"name":44,"count":11},"ios-memory-management-arc","Ios Memory Management Arc",{"key":46,"name":47,"count":11},"ios-swift-concurrency-structured","Ios Swift Concurrency Structured",{"key":49,"name":50,"count":11},"ios-swift-type-system-optionals","Ios Swift Type System Optionals",{"key":52,"name":53,"count":11},"ios-swiftui-state-rendering","Ios Swiftui State Rendering",{"key":55,"name":56,"count":11},"kt-android-lifecycle-background-execution","Kt Android Lifecycle Background Execution",{"key":58,"name":59,"count":11},"kt-android-memory-context-leaks","Kt Android Memory Context Leaks",{"key":61,"name":62,"count":11},"kt-android-room-persistence","Kt Android Room Persistence",{"key":64,"name":65,"count":11},"kt-jetpack-compose-state-recomposition","Kt Jetpack Compose State Recomposition",{"key":67,"name":68,"count":11},"kt-kotlin-coroutines-flow","Kt Kotlin Coroutines Flow",{"key":70,"name":71,"count":11},"kt-kotlin-type-system-null-safety","Kt Kotlin Type System Null Safety",{"key":73,"name":74,"count":11},"mobile-distribution-ci","Mobile Distribution Ci",{"key":76,"name":77,"count":11},"mobile-navigation","Mobile Navigation",{"key":79,"name":80,"count":11},"mobile-networking-offline","Mobile Networking Offline",{"key":82,"name":83,"count":11},"mobile-performance-battery","Mobile Performance Battery",{"key":85,"name":86,"count":11},"mobile-security-storage","Mobile Security Storage",{"key":8,"name":9,"count":11},{"key":89,"name":90,"count":11},"mobile-testing-automation","Mobile Testing Automation",{"key":92,"name":93,"count":11},"mobile-ui-lifecycle","Mobile Ui Lifecycle",{"key":95,"name":96,"count":11},"rn-javascript-typescript-fundamentals","Rn Javascript Typescript Fundamentals",{"key":98,"name":99,"count":11},"rn-native-bridge-modules","Rn Native Bridge Modules",{"key":101,"name":102,"count":11},"rn-navigation-lifecycle","Rn Navigation Lifecycle",{"key":104,"name":105,"count":11},"rn-networking-persistence-offline","Rn Networking Persistence Offline",{"key":107,"name":108,"count":11},"rn-performance-rendering","Rn Performance Rendering",{"key":110,"name":111,"count":11},"rn-react-hooks-state-management","Rn React Hooks State Management",[113,117,120,123],{"key":114,"name":115,"count":116},"android-kotlin","Android (Kotlin)",450,{"key":118,"name":119,"count":116},"flutter","Flutter",{"key":121,"name":122,"count":116},"ios-swift","iOS (Swift)",{"key":124,"name":125,"count":116},"react-native","React Native",[127,145,159,172,185,198],{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":133,"explanation":144},"019f677d-2bdb-7dbc-a7d5-edd585de459b",1,"In mobile app architecture, what is the key difference between in-memory (local) state and persistent (disk) state?",[132,135,138,141],{"key":133,"text":134},"a","In-memory state disappears when the process ends; persistent state is written to storage and survives restarts",{"key":136,"text":137},"b","In-memory state is always slower to read than persistent state, because disk storage is optimized for random access",{"key":139,"text":140},"c","Persistent state can only hold numeric values, while in-memory state can hold any data type the app defines",{"key":142,"text":143},"d","In-memory state is shared automatically between different apps on the device, while persistent state stays private","In-memory state lives in RAM as part of the running process; when that process is terminated, the memory is reclaimed and the value is gone. Persistent state is written to some form of storage (a file, database, or key-value store) so it can be read back after the app restarts or the device reboots. Memory is normally faster than disk, not slower (b). Persistence can hold any serializable data, not just numbers (c). Persistent storage is private to the app by default, not automatically shared (d).",{"id":146,"topic":9,"difficulty":147,"body":148,"options":149,"correct_key":136,"explanation":158},"019f677d-2bdd-719f-89be-08655032a3f4",2,"A screen has a text field where the user types a search query, and a list of favorited items the user has saved. Which of these should typically be in-memory-only state rather than persisted?",[150,152,154,156],{"key":133,"text":151},"The list of favorited items, since favorites should disappear the next time the app is opened",{"key":136,"text":153},"The current text typed into the search field, since it only matters during the active search",{"key":139,"text":155},"Both the search text and the favorites list, since all UI state should be written to disk immediately",{"key":142,"text":157},"Neither value, since every piece of state the user creates must be persisted to avoid any data loss","The search text is transient input tied to the current interaction; once the user leaves the screen, there is usually no reason to remember what was half-typed, so keeping it in memory only is appropriate. Favorited items represent a user decision meant to last across sessions, so they belong in persistent storage (making a the opposite of correct). Persisting every keystroke of a search box (c, d) adds write overhead and complexity for data with no lasting value.",{"id":160,"topic":9,"difficulty":129,"body":161,"options":162,"correct_key":139,"explanation":171},"019f677d-2bdd-7e3e-836a-1ea62951cffc","A screen shows a temporary \"loading spinner\" flag while data is being fetched. After the fetch finishes, this flag is no longer needed. What is the most appropriate way to manage this flag?",[163,165,167,169],{"key":133,"text":164},"Write it to persistent storage every time it changes, so it can be restored exactly if the app crashes mid-fetch",{"key":136,"text":166},"Store it in the same persistent record as the fetched data itself, so both are always updated together",{"key":139,"text":168},"Keep it as in-memory state tied to the screen, since it only describes a transient moment in the current session",{"key":142,"text":170},"Store it in a separate file dedicated only to UI flags, so it can be inspected later for debugging purposes","A loading flag describes \"what is happening right now\" on a specific screen; it has no meaning once the fetch completes or after the app restarts, so it is a textbook case for in-memory state. Persisting it (a, b, d) adds storage writes and cleanup logic for a value that should simply reset to false on the next screen visit, and restoring a stale \"loading\" flag after a crash would misrepresent the real state of the request.",{"id":173,"topic":9,"difficulty":147,"body":174,"options":175,"correct_key":142,"explanation":184},"019f677d-2bdf-74a3-9c3d-47d939ac19d6","Two sibling screens both need to display and react to the same \"selected currency\" value, and either screen can change it. What does \"lifting state up\" mean in this situation?",[176,178,180,182],{"key":133,"text":177},"Increasing the difficulty level of the selected currency logic so it can only be changed by an administrator",{"key":136,"text":179},"Duplicating the currency value into both screens so each one keeps its own independent copy for speed",{"key":139,"text":181},"Moving the currency value into persistent storage so it survives even if the app is force-closed",{"key":142,"text":183},"Moving the currency value out of both screens into a shared owner above them, so both read from one place","State lifting means relocating a value from an individual component up to a common ancestor (or shared owner) that both consumers can read from and update through, so there is exactly one place holding the truth instead of two components each guessing what the other has. Duplicating the value (b) is the problem lifting solves, not the solution. Persistence (c) is an orthogonal concern about surviving restarts, not about sharing between two screens right now.",{"id":186,"topic":9,"difficulty":129,"body":187,"options":188,"correct_key":136,"explanation":197},"019f677d-2be0-72a5-8502-300a00f5485b","What is the main benefit of having a single source of truth for a piece of shared state, instead of letting each screen keep its own copy?",[189,191,193,195],{"key":133,"text":190},"It makes the app faster, because a single copy always uses less memory than multiple copies combined",{"key":136,"text":192},"It avoids the copies drifting out of sync, since there is only one place where the value can be updated",{"key":139,"text":194},"It removes the need for any loading or error handling, since a single source never fails to respond",{"key":142,"text":196},"It allows the value to be edited directly from outside the app without going through the app's own code","When one value is duplicated across screens, each copy can be updated independently, and nothing guarantees the copies stay equal — one screen shows an update while another still shows the old value. A single source of truth removes that possibility because there is exactly one place holding the value and everyone reads from it. It says nothing about memory footprint (a) or eliminating loading\u002Ferror states (c), and does not expose the value to be edited outside the app (d).",{"id":199,"topic":9,"difficulty":147,"body":200,"options":201,"correct_key":133,"explanation":210},"019f677d-2be0-7ec4-99e9-d33d1681d954","In a unidirectional data flow, data moves down from a shared owner to the screens that display it, and screens send events back up to request changes, rather than modifying the shared data directly. Which action follows this pattern correctly?",[202,204,206,208],{"key":133,"text":203},"A screen reports \"user tapped increment\" as an event, and the shared owner updates the count and passes the new value back down",{"key":136,"text":205},"A screen directly overwrites the shared owner's stored count value in place whenever the user taps a button",{"key":139,"text":207},"Two screens each keep their own separate count and average the two values whenever either one is displayed",{"key":142,"text":209},"A screen reads the count once when it first appears and never checks for updates again during its lifetime","Unidirectional flow keeps a clear direction: displayed data flows one way (owner to screen), and requests to change it flow the other way as explicit events, so the owner is the only place that actually mutates the value. Option a follows exactly that: the screen only reports intent, the owner applies the change. Directly overwriting the owner's value from a screen (b) breaks the single point of mutation. Keeping separate copies and averaging (c) reintroduces duplication. Reading once and never updating (d) is not about flow direction at all — it is simply stale data.",{"fields":212,"seniorities":388,"interview_shapes":389,"locales":394,"oauth":396,"question_count":399,"coach_enabled":400,"jd_match_enabled":400},[213,238,258,275,299,312,331,340,362,369,375,382],{"key":214,"name_tr":215,"name_en":215,"sort":129,"specializations":216},"backend","Backend",[217,220,223,226,229,232,235],{"key":218,"name":219,"field":214},"general","Genel",{"key":221,"name":222,"field":214},"go","Go",{"key":224,"name":225,"field":214},"python","Python",{"key":227,"name":228,"field":214},"java","Java",{"key":230,"name":231,"field":214},"csharp","C#\u002F.NET",{"key":233,"name":234,"field":214},"nodejs","Node.js",{"key":236,"name":237,"field":214},"php","PHP",{"key":239,"name_tr":240,"name_en":240,"sort":147,"specializations":241},"frontend","Frontend",[242,243,246,249,252,255],{"key":218,"name":219,"field":239},{"key":244,"name":245,"field":239},"javascript","JavaScript",{"key":247,"name":248,"field":239},"typescript","TypeScript",{"key":250,"name":251,"field":239},"react","React",{"key":253,"name":254,"field":239},"vue","Vue",{"key":256,"name":257,"field":239},"angular","Angular",{"key":259,"name_tr":260,"name_en":260,"sort":261,"specializations":262},"fullstack","Fullstack",3,[263,264,265,266,267,268,269,270,271,272,273,274],{"key":218,"name":219,"field":259},{"key":221,"name":222,"field":214},{"key":224,"name":225,"field":214},{"key":227,"name":228,"field":214},{"key":230,"name":231,"field":214},{"key":233,"name":234,"field":214},{"key":236,"name":237,"field":214},{"key":244,"name":245,"field":239},{"key":247,"name":248,"field":239},{"key":250,"name":251,"field":239},{"key":253,"name":254,"field":239},{"key":256,"name":257,"field":239},{"key":276,"name_tr":277,"name_en":277,"sort":278,"specializations":279},"devops-cloud","DevOps \u002F Cloud",4,[280,281,284,287,290,293,296],{"key":218,"name":219,"field":276},{"key":282,"name":283,"field":276},"aws","AWS",{"key":285,"name":286,"field":276},"gcp","GCP",{"key":288,"name":289,"field":276},"azure","Azure",{"key":291,"name":292,"field":276},"kubernetes","Kubernetes",{"key":294,"name":295,"field":276},"terraform","Terraform",{"key":297,"name":298,"field":276},"linux","Linux",{"key":300,"name_tr":301,"name_en":301,"sort":302,"specializations":303},"ai-engineer","AI Engineer",5,[304,305,306,309],{"key":218,"name":219,"field":300},{"key":224,"name":225,"field":300},{"key":307,"name":308,"field":300},"llm-rag","LLM\u002FRAG",{"key":310,"name":311,"field":300},"mlops","MLOps",{"key":313,"name_tr":314,"name_en":315,"sort":316,"specializations":317},"database","Veritabanı","Database",6,[318,319,322,325,328],{"key":218,"name":219,"field":313},{"key":320,"name":321,"field":313},"postgresql","PostgreSQL",{"key":323,"name":324,"field":313},"mysql","MySQL",{"key":326,"name":327,"field":313},"mongodb","MongoDB",{"key":329,"name":330,"field":313},"redis","Redis",{"key":5,"name_tr":332,"name_en":6,"sort":333,"specializations":334},"Mobil",7,[335,336,337,338,339],{"key":218,"name":219,"field":5},{"key":121,"name":122,"field":5},{"key":114,"name":115,"field":5},{"key":118,"name":119,"field":5},{"key":124,"name":125,"field":5},{"key":341,"name_tr":342,"name_en":343,"sort":344,"specializations":345},"security","Güvenlik","Security",8,[346,347,350,353,356,359],{"key":218,"name":219,"field":341},{"key":348,"name":349,"field":341},"appsec","AppSec",{"key":351,"name":352,"field":341},"offensive-pentest","Offensive \u002F Pentest",{"key":354,"name":355,"field":341},"cloud-security","Cloud Security",{"key":357,"name":358,"field":341},"devsecops","DevSecOps",{"key":360,"name":361,"field":341},"blue-team-incident","Blue Team \u002F Incident",{"key":363,"name_tr":364,"name_en":365,"sort":366,"specializations":367},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[368],{"key":218,"name":219,"field":363},{"key":370,"name_tr":371,"name_en":371,"sort":372,"specializations":373},"data-engineer","Data Engineer",10,[374],{"key":218,"name":219,"field":370},{"key":376,"name_tr":377,"name_en":378,"sort":379,"specializations":380},"game-dev","Oyun Geliştirme","Game Development",11,[381],{"key":218,"name":219,"field":376},{"key":383,"name_tr":384,"name_en":384,"sort":385,"specializations":386},"ml-engineer","ML Engineer",12,[387],{"key":218,"name":219,"field":383},[14,15,16],{"junior":390,"mid":392,"senior":393},{"questions":391,"median_sec":3},20,{"questions":391,"median_sec":3},{"questions":391,"median_sec":3},[395,10],"tr",[397,398],"google","github",21750,true]