Ittratta l-app bħala : kull apparat huwa lokali. L-azzjonijiet tal-istudju jinkitbu f' flimkien ma' (outbox) li jżid biss; mal-konnessjoni mill-ġdid l-apparat u minn meta sar l-aħħar sync. Il-konflitti jiġu riżolti b'regola globali waħda iżda bis-.
Ittratta l-app bħala : kull apparat huwa lokali. L-azzjonijiet tal-istudju jinkitbu f' flimkien ma' (outbox) li jżid biss; mal-konnessjoni mill-ġdid l-apparat u minn meta sar l-aħħar sync. Il-konflitti jiġu riżolti b'regola globali waħda iżda bis-.
Mudell mentali: aħseb fih bħal git — kull apparat "jikkommittja" lokalment waqt li huwa offline, u s-sync huwa merge, mhux overwrite.
Device (offline) Server = source of truth
┌──────────────────┐ on reconnect ┌───────────────────────────┐
│ Local DB (SQLite)│ push ops (delta) │ Sync API /sync │
│ + Op log (outbox)│ ─────────────────▶ │ • idempotent by op.id │
│ cursor = lastSeen│ ◀───────────────── │ • merge by semantics │
└──────────────────┘ pull changes>cursor└───────────────────────────┘
Progress DB (Postgres)
L-arloġġi tat-telefowns huma mhux affidabbli u żewġ apparati jistgħu jeditjaw l-istess record offline, għalhekk "last write wins" (LWW) jitlef id-data fis-skiet. Irriżolvi bis-semantika:
// op għandu id -> applika b'mod idempotent (ir-retries ma jgħoddux darbtejn). clientTs MHUX fdat.
function mergeProgress(server, op) {
return {
// il-progress jiżdied biss -> max: op qadim li jasal tard qatt ma jġibu lura
progress: Math.max(server.progress ?? 0, op.progress),
// studiedMs huwa counter additiv -> żid id-delta, tagħmilx overwrite
studiedMs: (server.studiedMs ?? 0) + op.studiedMs,
completedAt: server.completedAt ?? (op.progress >= 1 ? op.clientTs : null),
};
}
Hawnhekk, LWW sempliċi kien iħalli apparat stale li jissinkronizza tard b'progress: 0.3 jagħmel overwrite tal-0.9 tas-server → progress mitluf. Meta tieħu max u tgħodd studiedMs is-sync isir indipendenti mill-ordni — sikur meta miljuni ta' apparati jissinkronizzaw b'arloġġi skjuwati.
L-intervistatur qed jittestja jekk tafx li l-arloġġi tal-klijent ma jistgħux jiġu fdati (allura mhux LWW puru b'timestamp), jekk tagħmilx is-sync idempotent (op ids), u jekk tgħaqqadx skont it-tifsira tad-data. Tweġiba dgħajfa: "uża timestamps, last write wins." Tweġiba b'saħħitha: replica + op log + idempotency + merge għal kull field + server bħala source of truth — u ssemmi b'mod espliċitu l-falliment ta' telf ta' data ta' LWW.
LWW huwa rħis iżda jitlef id-data; merge semantiku jeħtieġ ħsieb għal kull field iżda ma jitlef xejn. Uża CRDT/OT sħiħ biss meta jkollok bżonn editjar kollaborattiv veru (noti, dokumenti) — huwa għali, allura tużahx għal kollox.
Librerija ta' mistoqsijiet ta' intervisti tal-IT b'tweġibiet dettaljati — minn Junior sa Senior.
Iddona