Lewati ke konten utama

Backend — Pertanyaan Interview

Pertanyaan umum beserta contoh jawaban. Gunakan language switcher (kanan atas) untuk English.

HTTP & API design

Perbedaan PUT dan PATCH

  • PUT — mengganti resource (atau representasinya) secara utuh. Idempotent.
  • PATCH — menerapkan partial update. Tidak wajib idempotent (tergantung spec patch yang dipakai).

Kapan return 200, 201, atau 204?

  • 200 OK — sukses generic, ada body.
  • 201 Created — resource baru berhasil dibuat (kembalikan header Location).
  • 204 No Content — sukses, sengaja tanpa body (mis. DELETE).

Apa arti idempotent? Kenapa penting untuk API?

Memanggil request yang sama berulang menghasilkan state server yang sama seperti memanggil sekali. Penting karena network melakukan retry — endpoint non-idempotent yang di-retry bisa double-charge customer atau membuat duplicate order.

Untuk operasi unsafe (POST), mitigasi standarnya adalah header Idempotency-Key — server mencatat result untuk key tersebut dan mengembalikan hasil yang sama saat retry.

Database

Apa fungsi index? Kapan TIDAK perlu dipasang?

Index adalah struktur tambahan (biasanya B-tree) yang membantu DB mencari baris berdasarkan kolom yang ter-index tanpa scan seluruh tabel.

Tidak perlu pasang index ketika:

  • Tabel kecil (full scan murah).
  • Cardinality kolom sangat rendah dan query tidak filter berdasarkan kolom itu secara efektif.
  • Write throughput lebih penting dari read latency — setiap insert/update harus memelihara index.

Jelaskan ACID

  • Atomicity — transaction all-or-nothing.
  • Consistency — DB berpindah dari state valid ke state valid lain (constraint/trigger dihormati).
  • Isolation — transaction yang berjalan bersamaan tidak melihat state intermediate satu sama lain.
  • Durability — sekali commit, data bertahan dari crash.

LEFT JOIN vs INNER JOIN

  • INNER JOIN — hanya baris yang match di kedua tabel.
  • LEFT JOIN — semua baris dari tabel kiri; kolom dari tabel kanan jika match, atau NULL.

Apa itu N+1 query problem?

Mengambil daftar N parent (1 query), lalu loop dan mengambil child tiap parent dengan query terpisah (N query) — total N+1. Solusinya: pakai join, batched IN query, atau eager-loading ORM (include, with).

Architecture & scaling

Masalah apa yang diselesaikan message queue?

Decouple producer dan consumer. Producer menaruh kerjaan di queue; consumer mengambil dan memproses dengan rate-nya sendiri. Menyerap lonjakan, memungkinkan retry, dan service bisa gagal mandiri. Trade-off: eventual consistency dan kompleksitas operasional.

Session vs JWT

  • Server-side session — server menyimpan state session; client mengirim session ID via cookie. Mudah revoke. Butuh session store.
  • JWT — token signed membawa claim; server memverifikasi signature tanpa lookup. Skala horizontal lebih mudah, tapi revocation sulit (perlu denylist atau expiry pendek + refresh token).

Bagaimana membuat service scalable secara horizontal?

  • Stateless — dorong state ke DB / cache / queue.
  • Hindari sticky session — pakai shared session store (Redis) atau stateless auth (JWT).
  • Connection pool dibatasi sesuai limit DB, bukan limit service.
  • Cache di layer yang tepat (CDN, app cache, DB cache).
  • Async work via queue.

Behavioral

Ceritakan project backend yang baru kamu kerjakan

Di LinkAja saya terlibat di core migration TCash → LinkAja — memindahkan credentials partner dari core lama ke yang baru tanpa perubahan dari sisi partner. Saya mendesain shim untuk mengenali credential lama dan merutekannya dengan benar selama transisi, mengkoordinasikan cut-over window per partner, dan menambah telemetri untuk memantau kegagalan partner. Berhasil migrate 100+ partner tanpa incident besar.

Pernah debug issue production yang sulit?

Saat partner melaporkan transaksi gagal, alurnya: reproduce dengan payload mereka → cek log di Grafana sekitar timestamp → identifikasi apakah ini integration error (sisi partner) atau system error (sisi kami). Kalau integration, saya dokumentasikan perbaikannya dan walk-through ke partner; kalau system, saya raise ke system analyst dengan reproduction.

Kenapa backend?

Karir saya dimulai sebagai PHP programmer di AGIT untuk integration. Lalu pindah ke BAU Integration di LinkAja, bekerja langsung dengan system analyst. Sisi backend / API itu menurut saya area dengan problem statement paling jelas: input jelas, output jelas, correctness bisa diukur.

Behavioral (English)

Walk me through a recent backend project

At LinkAja I supported the TCash → LinkAja core migration — moving partner credentials from the legacy core to the new one without requiring any change on the partner side. Migrated 100+ partners without a major incident.

Siap menguji diri?

Lanjut ke Kuis — 10 pertanyaan.