ARTS是什么溺忧?
Algorithm:每周至少做一個leetcode的算法題咏连;
Review:閱讀并點評至少一篇英文技術文章;
Tip/Techni:學習至少一個技術技巧鲁森;
Share:分享一篇有觀點和思考的技術文章祟滴。
一、Algorithm
path sum(Easy)
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
解法:遞歸法歌溉,從根開始垄懂,如果根存在骑晶,下一層應該存在sum-root.val的路徑和
class Solution:
def hasPathSum(self, root: TreeNode, sum: int) -> bool:
if root == None:
return False
if root.left == None and root.right == None:
return root.val == sum
return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val)
拓展:如何用數(shù)組來表示二叉樹?
二草慧、Review
目的:找到低價機票
設定目的地和出行日期桶蛔,在出行日期的前后3天,刷新是否有低價機票漫谷。集成的機票搜索平臺有很多仔雷,比如Kayak,Monmondo舔示,Skyscanner碟婆,Expedia等等,但是大部分都有reCaptchas驗證惕稻,比較難搞竖共。作者最終使用了Kayak,雖然也有驗證碼俺祠,但是如果4-6小時的間隔公给,是可以正常使用的。
開車了
- 輸入城市和日期蜘渣,開始搜索
- 獲取搜索結(jié)果淌铐,然后在點擊“獲取更多結(jié)果”
- 另一個函數(shù)獲取整個結(jié)果,然后解析出數(shù)據(jù)
- 然后重復上面兩個步驟
- 把結(jié)果發(fā)送email宋梧,包含最低價格匣沼,平均價格,然后把原始數(shù)據(jù)保存到excel中
- 每隔幾個小時跑一次上面的步驟
Selenium+chromedriver+pythoncrawler
XPath
如果快速定位到一個按鈕的路徑呢捂龄,XPATH。有一些id或者元素的名字加叁,每次可能都會變化倦沧,所以我們要做匹配。
# This is what the copy method would return. Right click highlighted rows on the right side and select "copy > Copy XPath"
//*[[@id="wtKI-price_aTab"]/div[1]/div/div/div[1]/div/span/span
# This is what I used to define the "Cheapest" button
cheap_results = ‘//a[[@data-code = “price”]’
這個比較關鍵它匕,如果沒有這種正則匹配展融,url可能每次請求都會變化,代碼如果不匹配豫柬,肯定就無法工作了告希。之后的無非就是寫搜索和獲取所有的結(jié)果,然后循環(huán)烧给,整個代碼其實是一個線性執(zhí)行的過程燕偶,比較簡單。
三础嫡、Tips
Python-100-Days
python100天從入門到放棄
有很多基礎性的東西指么,有一定基礎的可以看看酝惧。
四、Share
用戶登錄前伯诬,服務器需要生成一個會話唯一的 Token 并與 用戶的“當前鹽” 一起發(fā)送到客戶端晚唇。客戶端拿到Token和鹽之后需要進行以下步驟的操作:
對用戶輸入的密碼加鹽后計算得到一個 HASH 值 p_hash盗似;(如果用戶輸入的密碼正確的話哩陕,這個值與數(shù)據(jù)庫中存儲的密碼是一樣的)
把上一步得到的 HASH 值 p_hash 與 用戶名拼接后,以 Token 為 key 使用 hmac_sha256_hex 計算機得到一個新的哈希值 passwd赫舒。
把用戶名和passwd 發(fā)送到服務器端進行密碼驗證
不過文章中上面一段話悍及,其實不應該把用戶的鹽發(fā)送給用戶,如果發(fā)送給用戶号阿,其實黑客就能拿到了并鸵,因為這個時候都沒有做用戶校驗,所以最好的方式是只拿token對用戶名和密碼和時間戳加密扔涧,然后服務端解密园担,之后再做校驗。