[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:mobile\u002Fmobile-networking-offline":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","Mobil","","mobile-networking-offline","Mobile Networking Offline","tr",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,79,82,85,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":8,"name":9,"count":11},{"key":80,"name":81,"count":11},"mobile-performance-battery","Mobile Performance Battery",{"key":83,"name":84,"count":11},"mobile-security-storage","Mobile Security Storage",{"key":86,"name":87,"count":11},"mobile-state-data","Mobile State Data",{"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-2ba2-7a51-95ec-936157ae53f4",1,"\"Offline-first\" bir mobil uygulama mimarisinde, UI için kaynak-of-truth olarak ne kabul edilir?",[132,135,138,141],{"key":133,"text":134},"a","Cihazdaki yerel veritabanı\u002Fstore",{"key":136,"text":137},"b","Uzak sunucu; yani UI her zaman render etmeden önce bir network yanıtı bekler",{"key":139,"text":140},"c","Yerel ya da uzak, en son çekilen kopya hangisiyse o, ekrana göre değişir",{"key":142,"text":143},"d","Uygulama her açıldığında temizlenip yeniden kurulan bellek-içi bir cache","Offline-first, UI'nin yerel storage'a bağlanması demektir; network katmanı veriyi arka planda bu yerel store'a senkronize eder, böylece uygulama bağlantı olsa da olmasa da kullanılabilir olur.",{"id":146,"topic":9,"difficulty":147,"body":148,"options":149,"correct_key":136,"explanation":158},"019f677d-2ba3-7167-9d2a-d514daacc9b7",2,"Bir mobil uygulamada kullanıcı bir aksiyon yaptığında (ör. bir öğeyi tamamlandı işaretlemek), \"optimistic update\" en iyi neyi tanımlar?",[150,152,154,156],{"key":133,"text":151},"Sunucu başarılı olabileceğini onaylayana kadar aksiyon devre dışı bırakılır",{"key":136,"text":153},"UI, sunucu onaylamadan hemen güncellenir",{"key":139,"text":155},"Uygulama herhangi bir değişikliği göstermeden önce bir loading spinner'ının bitmesini bekler",{"key":142,"text":157},"Aksiyon sessizce kuyruğa alınır ve kullanıcıya yarın tekrar bakması söylenir","Optimistic update başarıyı varsayar ve UI'yi hemen günceller, anında geri bildirim sağlar; sunucu değişikliği daha sonra reddederse uygulama bunu geri almalıdır.",{"id":160,"topic":9,"difficulty":147,"body":161,"options":162,"correct_key":139,"explanation":171},"019f677d-2ba3-7821-88b6-2b3aae84b532","Kullanıcı bir gönderiye \"beğen\" dokunuyor; UI anında beğenilmiş gösteriyor (optimistic update). Sunucu isteği ardından hata ile başarısız oluyor. Uygulama ne yapmalı?",[163,165,167,169],{"key":133,"text":164},"UI'yi beğenilmiş bırakıp isteği arka planda sonsuza kadar sessizce tekrar denemeli",{"key":136,"text":166},"Kullanıcı bir şeylerin ters gittiğini fark etsin diye ekranı çökertmeli",{"key":139,"text":168},"UI'yi geri almalı ve hata göstermeli",{"key":142,"text":170},"Herhangi bir gönderi içeriği tekrar gösterilmeden önce kullanıcıdan uygulamayı yeniden başlatmasını istemeli","Altta yatan istek başarısız olduğunda, optimistic değişiklik son bilinen-iyi duruma geri alınmalıdır ve kullanıcı bilgilendirilmelidir ki tekrar deneyebilsin ya da ne olduğunu anlasın.",{"id":173,"topic":9,"difficulty":147,"body":174,"options":175,"correct_key":142,"explanation":184},"019f677d-2ba3-7efd-8546-c3ff9be84ddd","Aynı not, ikisi de bağlantısızken hem telefonda hem ayrı olarak tablette offline düzenlenmiş. İkisi de tekrar online olduğunda \"son-yazan-kazanır\" (last-write-wins) stratejisi uygulanıyor. Ne olur?",[176,178,180,182],{"key":133,"text":177},"Her iki düzenleme de korunur ve kullanıcıya iki ayrı not olarak gösterilir",{"key":136,"text":179},"Kullanıcı manuel olarak bir cihazın kopyasını silene kadar uygulama senkronizasyonu reddeder",{"key":139,"text":181},"Daha kısa metne sahip düzenleme, daha basit olduğu için otomatik kazanır",{"key":142,"text":183},"En yeni düzenleme diğerinin üzerine yazar","Son-yazan-kazanır, çakışmaları zaman damgasıyla çözer: hangi değişiklik daha sonra yapıldıysa diğerinin yerini alır, bu da daha önceki düzenlemenin içeriğinin sessizce kaybolması demektir — bu stratejinin bilinen bir tradeoff'udur.",{"id":186,"topic":9,"difficulty":129,"body":187,"options":188,"correct_key":133,"explanation":197},"019f677d-2ba4-76f5-9de6-794ca51e3358","Mobil bir uygulamada başarısız olan bir network isteği için \"retry\" (tekrar deneme) mekanizmasının temel amacı nedir?",[189,191,193,195],{"key":133,"text":190},"Bazı hatalar geçici olduğu için isteği otomatik olarak tekrar denemek",{"key":136,"text":192},"Kullanıcının hesabı için o özelliği kalıcı olarak devre dışı bırakmak",{"key":139,"text":194},"Uygulamayı offline moda geçirip sunucuyla bir daha hiç iletişim kurmamak",{"key":142,"text":196},"O istekle ilgili yerel veriyi silmek, böylece bayat gösterilmesin","Birçok network hatası geçicidir (kaybolan paket, anlık sinyal kaybı), bu yüzden kısa bir bekleme sonrası aynı isteği tekrar denemek kullanıcı müdahalesi olmadan çoğunlukla başarılı olur.",{"id":199,"topic":9,"difficulty":147,"body":200,"options":201,"correct_key":136,"explanation":210},"019f677d-2ba5-7235-a0c3-3b484dcde538","Bir uygulama başarısız isteği her seferinde sabit 1 saniyelik beklemelerle tekrar deniyor: 1sn, 1sn, 1sn, 1sn... Bu sabit-gecikmeli retry'ın exponential backoff'a kıyasla temel dezavantajı nedir?",[202,204,206,208],{"key":133,"text":203},"Exponential backoff'a göre belirgin biçimde daha fazla cihaz depolama alanı kullanır",{"key":136,"text":205},"Sunucu zorlanıyorsa, istemciler onu aynı hızda dövmeye devam eder",{"key":139,"text":207},"Üçüncü parti bir networking kütüphanesi olmadan uygulanamaz",{"key":142,"text":209},"Kullanıcının her bir retry denemesini manuel olarak onaylamasını gerektirir","Sabit bir retry aralığı sürekli soruna uyum sağlamaz: sunucu (ya da network yolu) bozuksa tüm istemciler onu aynı hızda dövmeye devam eder. Exponential backoff, retry'ları zaman içinde giderek aralar, kesinti sırasında yükü azaltır.",{"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":6,"name_en":332,"sort":333,"specializations":334},"Mobile",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},[10,395],"en",[397,398],"google","github",21750,true]