Skip to content

Concurrency and Asynchronous Programming

Running too slow

Kamu merupakan seorang mahasiswa yang sedang menjalankan magang di Tech Wand. Tech Wand merupakan salah satu platform belanja online yang paling baru saja di-release. Segala jual beli akan dilakukan melalui aplikasi sehingga semua aktivitas akan berjalan menggunakan service yang disediakan oleh Tech Wand.

Kamu ditugaskan ke bagian Payment. Vincent merupakan atasanmu yang bekerja untuk mengawasi dan membantu tugas yang diberikan padamu. Kamu yang tidak paham terkait cara kerja belanja online pun menanyakannya kepada Vincent.

“Vincent, apakah kamu dapat menjelaskan alur pembelian?” tanyamu

“Ya bisa, kamu hanya tinggal memilih barang yang ingin dipesan, memasukan alamat pengiriman dan tinggal melakukan pembayaran secara langsung saat barang sudah kamu terima” jawab Vincent

“Apakah terdapat cara pembayaran lain? Bagaimana jika pembeli tidak memiliki uang cash?” tanyamu

“Mudah sekali, kamu hanya tinggal memilih pembayaran melalui Virtual Account. Jangan lupa bahwa kamu harus membayarnya sesuai dengan tagihan agar barangmu dapat dikirimkan secepatnya.” jawab Vincent

“Baiklah, terima kasih atas jawabannya.” jawabmu

“Untuk hari ini kamu pelajari dulu cara kerja, source code dan tech stack yang ada ya! Mungkin besok atau lusa kita aku akan memberikan tugas padamu.” Hari pertama pun berakhir dengan kamu mempelajari flow aplikasi Tech Wand.

WorkTime

Hari keduamu magang dilaksanakan dari rumah. Tiba-tiba teleponmu berdering, layar menunjukkan bahwa Vincent meneleponmu.

“Halo, untuk hari ini sepertinya kita harus melakukan refactoring secepatnya. Aplikasi ini berjalan terlalu lambat. Pelanggan kita akan kabur jika terus seperti ini. Cepat selesaikan hari ini ya! Ini tugas merupakan tugas pertamamu.” Kata Vincent.

"Halo, Aku sudah mempalajari source code yang ada. Kenapa kita tidak migrasi untuk menggunakan third-party seperti Strip untuk menjamin kecepatan pembayarannya?" tanyamu penasaran.

"Kita membuat sistem pembayaran embedded payment agar kontrol situs dapat lebih mudah." Jawab Vincent.

"Alur logika pembayaran sepertinya lebih mengandalkan API luar ya? di sini terlihat dia memanggil API hari libur, API bank, dan API internal. Pemanggilan API kan bisa lama karena ada faktor latency sehingga jika kita tunggu satu per satu bakal menumpuk" Kata kamu sembari membaca kode.

"Bagaimana jika kita memanggil API-APInya secara paralel?" Lanjut kamu

"Ide bagus. Beban server kita tidak akan ada penambahan yang berarti karena API-API ini dijalankan di server lain nantinya" Balas Vincent

"Baik, sebelumnya, bagaimana mekanisme keamanan situs ini?" kamu bertanya kembali.

"Kita memiliki mekanisme AML yang kuat. Setiap kegiatan user akan dicatat untuk keperluan crosscheck nantinya." Jawab Vincent

"Bagaimana sistem KYC nya?" tanya kamu penasaran

"Karena nomor VA unik, sepertinya KYC belum terlalu diperlukan" balas Vincent.

"Tolong bantu aku untuk memperbaiki situs ini ya. Aku ingin melakukan pengecekan lain terhadap aplikasi ini" terus Vincent. Telponpun ditutup. Kamu segera kembali untuk mengecek code dan mencoba untuk mengerjakan tugasmu.

Tasks

  • Membaca dokumen dan memahami deskripsi dan ekspektasi yang diminta soal
  • Refactor mekanisme pembayaran sehingga membutuhkan maksimal 5000 ms
  • Melakukan refactoring agar pemanggilan APi dapat berjalan optimal

Hint

  • Untuk mendapatkan nilai maksimal, hindari menggunakan blocking call seperti CompletableFuture.get(). Perhatikan bahwa ComplatableFuture.get() bisa blocking dan bisa tidak tergantung penggunaannya.
  • Pelajari https://www.baeldung.com/java-completablefuture

Last update: 2022-04-27 13:43:39
Created: 2022-04-27 13:43:39
Back to top