ARTS 第 12 周
阿拉伯數轉羅馬數、LinkedIn的高效程式碼審查技巧、SQL/">MySQL JSON 的操作、優惠券儲存問題。
Algorithm
Problem:ofollow,noindex">Integer to Roman
毫無思路,看了一個簡單的思路
public static String intToRoman(int num) { String M[] = {"", "M", "MM", "MMM"}; String C[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; String X[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; String I[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; return M[num/1000] + C[(num%1000)/100] + X[(num%100)/10] + I[num%10]; }
Review
理解修改原因
每次程式碼更改提交都應包含一個設計概述,簡要說明更改背後的動機。這樣避免了從原始碼中去推測其更改意圖,提高 Code Review 的質量和速度。
給出正面反饋
在進行 Code Review 時不應是僅僅只對程式碼中的問題進行反饋,如果遇到優雅的程式碼應該指出原因,提倡大家學習。這樣可以激勵開發人員,有助於提高團隊的編碼水平。
言簡意賅的 Review 註釋
不管是正面還是負面的反饋,審查人的註釋都應該是言簡意賅的,但前提是開發人員能理解。
對提交者表示感謝
不管結果如何,對努力工作的人表示感謝,這將出培養強大、積極進取的團隊。
刪除無用的註釋
如果你認為這個註釋是無效的,請刪除它。正視 Code Review,它是幫助開發提高能力的工具而不是徒增工作複雜度的瑣事。
保證充分的測試
每次程式碼更改提交都需要強制性的完成其測試。對於一些複雜的情況或者自動測試無法覆蓋到的地方,需要進行手動測試,並提供有關測試場景和輸出的資訊。
Code Review 文化
在進行 Code Review 時有明確的期望、示例註釋、充滿積極有吸引力的文化是避免冗長、耗費精力的好方法。
總之,擁有良好的 Code Review 流程有助於提高程式碼質量、團隊學習、知識分享。當團隊每個成員都意識到,我寫的程式碼會被大家看到,就算現在隨便寫,在 Code Review 時,還是會被提出來返工的時候。開發人員都會盡力一次性寫出更好的程式碼。當 Code Review 成為日常習慣,團隊會每天都會收到正面的反饋,這樣團隊不可同日而語。
Tip
MySQL 通過JSON_CONTAINS
判斷 JSON 中是否存特定 KEY 的 JSON 物件。
mysql> set @j = '{"c":{"d":4}}'; mysql> SELECT JSON_CONTAINS(@j,'{}','$.c'); +------------------------------+ | JSON_CONTAINS(@j,'{}','$.c') | +------------------------------+ |1 | +------------------------------+ msyql> SELECT JSON_CONTAINS(@j,'{}','$.d'); +------------------------------+ | JSON_CONTAINS(@j,'{}','$.d') | +------------------------------+ |0 | +------------------------------+
提取巢狀物件中的值
mysql> SELECT JSON_EXTRACT(@j,'$.c.d'); +--------------------------+ | JSON_EXTRACT(@j,'$.c.d') | +--------------------------+ | 4| +--------------------------+
Share
最近有個優惠券的需求,要求是給使用者發優惠券。如果按照原來用關係表的方法來存使用者優惠券資訊的的話,那資料量成倍數增長。假如有 10 萬用戶,發 1 張優惠券就 10 萬條資料,發 2 張就 20 萬條資料。
我們使用了 MySQL 5.7 新加入的 JSON 型別來解決這個問題。
一個使用者所有的券都存在一個 JSON 裡面,格式如下:
{ "coupon_01":{ "status":0,//使用狀態 "code":"12345"//優惠券券碼 }, "coupon_02":{ "status":1, "code":"12345" } }
以優惠券的唯一標識(我們用的優惠券主體的 CODE)作為優惠券資訊 JSON 物件的 Key。這樣儲存的話,每次傳送的優惠券只是在 JSON 中追加一個優惠券資訊的 JSON 物件即可。
但是這樣設計有幾個問題:
-
同一張優惠券沒有辦法給同一人發多次
-
彙總所有優惠券使用情況比較麻煩
所以當沒有這些需求的時候,可以考慮這麼設計。
如果你有更好的設計或想法請告訴我一下。