Introduction
在後端工作中可能不時會聽到
API 太慢了能不能再快一點?
API 速度是變快了,但為什麼每次的結果都不太一樣?有點不穩定呢!
在這些疑問之下,我們究竟面對哪些挑戰,有何種方式可以妥善處理?
Background
我們是一電商網站,因應銷售需求需要 API 來提供『百大熱門零食』的資訊。
Lombok 一直是我在 Java 開發時拿來幫 POJO 減少一堆煩人的 getter, setter 時非常好用的一個 library,但有時候在設定上還是會覺得很煩,今天記錄一下又遇到了哪些設定上的問題。
前面會先提一下目前使用到的一些 feature,以及他們彼此作用後會產生的一些問題。
Immutable classes - Using @Value
without lombok
public class User{
private final long id;
private final String name;
今天心得這篇分享源自 OWASP A02:2021 - Cryptographic Failures,對於極度機密或者是敏感的資料在傳輸上缺乏加密機制,抑或是敏感資料的存放未加密和使用一些過時的演算法。
會列出其中的一些項目,佐以實例說明,做些探討與反思。
Data transmitted in clear text
我們目前與網站之間的連線大多都為 https 與 http 連線的差異在於過程中的 message body 是有經過加密的,而每家 browser 都會在上頭加上對應的顯示,如果你的網站還在使用 http 或者是過時的加密演算法,上頭的鎖頭都會有警示,讓 end user 知道你的網站並不安全。
如果資訊傳輸的過程中沒有加密,任何攔下你封包的人都可以輕易閱讀其中的訊息,想像一下如果今天有一個服務的登入系統需要輸入帳號、密碼,而登入方式為以下這樣
http://timm.com/login?username=timm&password=timm_password
聞風喪膽的 OOM
大多人對於下面的錯誤訊息一定不陌生
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
在一般非預期的情況下,就是有某處的程式碼一下讀取了過多的資料進到記憶體中,又或者是某個地方的迴圈沒有寫好
使用一段最簡單的程式碼來重現這個錯誤
public class Main {
public static void main(String[] args) {
場景
需要撈取從資料庫 (MySQL) 中某個時間點以後的使用者瀏覽紀錄,並發送活動通知。但是這些紀錄量非常的龐大,經常會造成 OOM (out-of-memory)。
過程中使用到的項目是
Spring Data JPA + Hibernate
MySQL
@Entity
public class UserBrowsingHistory{
@Id