Reference · Pagi hari interview · cetak satu halaman

Ulang sebelum interview

Daftar akhir dari Lesson 0018 dan review database 0024. Uji diri dulu dengan suara keras, baru buka reference kalau macet.

1 · Topik lemah dari mock 0018

2 · Topik lemah dari review 0007 dan 0012

2b · Topik lemah dari review database 0024

3 · Semua topik: pertanyaan uji diri → reference

LessonUji diri (jawab 60 detik tanpa melihat)Kalau macet, buka
0001Jelaskan alur request dari Controller sampai DbContext dan peran tiap layer.Layered architecture
0002★ Value type vs reference type; kenapa DTO cocok ditulis sebagai record?C# untuk dev TS
0003★ Kenapa .Result dan async void berbahaya? IEnumerable vs IQueryable?async & LINQ
0025Tulis top-3 Product termahal per Category dengan LINQ. First vs FirstOrDefault vs Single? Method C# di Where EF Core?LINQ live coding
0004★ Tiga Service Lifetime, kenapa DbContext Scoped, apa itu captive dependency?Service Lifetime
0005Kenapa urutan middleware penting? Di mana secret disimpan saat development?Middleware & Options
0006★ Apa itu N+1 dan cara mencegahnya? Kapan pakai AsNoTracking?EF Core
0008★ SOLID mana yang paling sering Anda terapkan? Beri contoh DIP dari Product Catalog.SOLID
0009★ Demokan satu siklus red-green-refactor. Kenapa test harus gagal dulu?Red-Green-Refactor
0010★ Unit vs integration test; mock vs stub vs fake; apa gunanya WebApplicationFactory?Jenis test
0011★ Gambar Clean Architecture. Perlukah Repository di atas EF Core?Clean Architecture
0013NgModule, binding, dan Lifecycle Hook, dengan padanan React-nya.Angular dasar
0014Angular DI vs React Context; cara melindungi halaman dengan guard.Angular DI & routing
0015Observable vs Promise; kapan switchMap; cara mencegah memory leak subscription.RxJS
0016Reactive vs template-driven forms; apa yang dikerjakan HTTP Interceptor?Forms, HttpClient, Interceptor
0017Jelaskan alur login aplikasi Anda: JWT, authentication vs authorization, CORS, error handling.Auth, CORS, error
0019★ Tulis query 3 Product termahal per Category (ROW_NUMBER). WHERE vs HAVING? Kenapa aturan Product juga dijaga constraint?SQL dasar
0020★ Kapan pakai Stored Procedure dibanding query EF Core? Panggil SP dari EF Core/Dapper tanpa SQL injection; tulis SP dengan TRY/CATCH + THROW.Stored Procedure
0021★ Lima isolation level dan anomali yang dicegah masing-masing; default SQL Server 2022 (RCSI OFF). Apa itu deadlock, bedanya dengan blocking, cara mencegah dan menangani 1205?Transaction & locking
0022★ Clustered vs non-clustered (analogi buku). Query Product per Category lambat: index apa (urutan kolom, INCLUDE), cara membuktikan, kapan index merugikan?Index
0023★ Query lambat dari EF Core: bagaimana menganalisis (log/ToQueryString → actual plan + logical reads → SARGable, index, parameter sniffing, keyset pagination → ukur lagi)?Optimasi query

3b · Ringkasan database: kerangka jawaban 30 detik

Tutup dulu kolom kanan dengan kertas, jawab dari kolom kiri. Kerangka ini ringkasan lesson 0019–0023 dan 0006; detail dan sumber resmi ada di reference-nya.

Pertanyaan interviewPoin yang harus terucap
Clustered vs non-clustered index?Clustered = data tabel itu sendiri, terurut menurut key, satu per tabel (default PK). Non-clustered = struktur terpisah berisi key + penunjuk ke baris (clustered key), bisa banyak. Analogi: isi buku terurut vs indeks di belakang buku.
Query per Category lambat, index apa?Kolom filter kesetaraan dulu, lalu kolom urut/rentang: (CategoryId, Price DESC); kolom SELECT lain di INCLUDE supaya covering (tanpa Key Lookup). Buktikan dengan actual plan (scan → seek) dan logical reads turun. Index memperlambat INSERT/UPDATE dan makan storage, jadi jangan index kolom berselektivitas rendah.
Membaca execution plan?Estimated (tanpa eksekusi) vs actual (dengan jumlah baris sebenarnya). Cari: Scan vs Seek, Key Lookup, estimasi vs aktual baris yang jauh berbeda, operator paling mahal. Ukur dengan SET STATISTICS IO, TIME ON.
SARGable?Jangan bungkus kolom ber-index dengan fungsi: YEAR(OrderDate) = 2024 → rentang >= '2024-01-01' AND < '2025-01-01'; LEFT(Name,3)='Abc' → LIKE 'Abc%'. Waspadai konversi implisit (nvarchar vs varchar).
Parameter sniffing?Plan dikompilasi untuk nilai parameter pertama lalu dipakai ulang untuk nilai lain yang distribusinya beda. Obat: OPTION (RECOMPILE), OPTIMIZE FOR, index yang lebih baik; SQL Server 2022 punya PSP optimization (compat 160).
Pagination data besar?OFFSET/FETCH tetap membaca baris yang dilewati, makin lambat di halaman jauh. Keyset: TOP (20) … WHERE Id > @lastId ORDER BY Id (dua kunci: Price > @lastPrice OR (Price = @lastPrice AND Id > @lastId)) + index yang cocok; urutan harus unik; tidak bisa lompat ke halaman acak.
Query lambat dari EF Core?Lihat SQL-nya (LogTo/ToQueryString, TagWith) → jalankan di SSMS dengan actual plan → perbaiki (index, SARGable, proyeksi Select, N+1, AsNoTracking) → ukur lagi.
N+1 dan AsNoTracking? (0006)N+1 = 1 query daftar + 1 query per baris (lazy loading di loop). Obat: Include (eager loading) atau proyeksi Select. AsNoTracking untuk query baca saja: tanpa snapshot Change Tracker, lebih hemat; jangan untuk entity yang akan di-update lewat SaveChanges.
Isolation level?READ UNCOMMITTED (dirty read), READ COMMITTED (default; RCSI OFF di SQL Server 2022, pembaca menunggu writer), REPEATABLE READ (cegah non-repeatable read), SERIALIZABLE (cegah phantom, range lock), SNAPSHOT (row versioning, pembaca tidak menunggu, update konflik gagal 3960). Makin tinggi = makin aman, makin banyak blocking.
Deadlock vs blocking?Blocking: satu menunggu yang lain, selesai sendiri. Deadlock: saling menunggu melingkar; SQL Server memilih victim (error 1205). Cegah: transaction pendek, urutan akses tabel/baris sama, index yang tepat, UPDLOCK saat baca-lalu-update. Tangani: retry di aplikasi.
Transaction di T-SQL dan EF Core?ACID. T-SQL: SET XACT_ABORT ON + BEGIN TRAN di dalam TRY, CATCH → IF XACT_STATE() <> 0 ROLLBACK; THROW;. EF Core: satu SaveChanges sudah satu transaction; beberapa langkah → BeginTransactionAsync (dibungkus execution strategy bila retry aktif); lost update → optimistic concurrency (rowversion).
Kapan Stored Procedure?Logika berat data/banyak baris, kontrak untuk DBA, izin EXECUTE saja. Kelemahan: logika tersebar, sulit di-test dan di-version. Default tetap query EF Core. Panggil dengan parameter (FromSql interpolated, Dapper CommandType.StoredProcedure), jangan concat string (SQL injection).
Top-N per grup, WHERE vs HAVING?ROW_NUMBER() OVER (PARTITION BY CategoryId ORDER BY Price DESC) di CTE, lalu WHERE rn <= 3. WHERE memfilter baris sebelum GROUP BY, HAVING memfilter grup sesudahnya.

4 · STAR dan pindah stack

5 · Pagi hari interview (±30 menit)

  1. Bagian 1, 2, dan 2b: uji diri setiap topik lemah dengan suara keras, baru buka reference-nya.
  2. Bagian 3b (kalau posisi menyebut SQL Server): jawab kolom kiri dengan suara keras, cek kolom kanan.
  3. Bagian 3: baca kolom uji diri saja; berhenti di pertanyaan yang membuat ragu.
  4. Bagian 4: ucapkan satu cerita STAR dan jawaban pindah stack.
  5. Buka repo mini project di GitHub, pastikan README dan test hijau siap ditunjukkan.

Sumber: [1] MIT CAPD: The STAR method for behavioral interviews. Sumber topik teknis dikutip di masing-masing reference.