一. CSRF跨站請求僞造 數組
首先說明一下什麼是CSRF(Cross Site Request Forgery)? 瀏覽器
跨站請求僞造是指攻擊者能夠在第三方站點製造HTTP請求並以用戶在目標站點的登陸態發送到目標站點,而目標站點未校驗請求來源使第三方成功僞造請求。 服務器
爲何會有CSRF? cookie
JS控制瀏覽器發送請求的時候,瀏覽器是根據目標站點,而不是來源站點,來發送cookie的,若是當前會話中有目標站點的cookie,就發送出去。核心問題是瀏覽器的會話機制,是跨站請求僞造漏洞的根源。 編碼
解決方法有三種: spa
1 使用token code
2 限制refer token
3 使用驗證碼技術 內存
二. 位圖(bitmap) 字符串
位圖是什麼?
位圖就是數組,通常來講是bit型的數組,具備快速定位某個值的功能,這種思想有很普遍的應用,好比下邊兩題:
1 找出一個不在5TB個整數中存在的數
假設整數是32位的,總共有4GB個數,咱們能夠用bitmap,每一個整數一個bit,這樣大概是4GB/8=512MB, 初始化時都爲0,
依次遍歷這個5TB個數,置相應位爲1,最後遍歷一次數組,找到第一個爲零數便可。
2 找出在5TB個數中只出現一次的數字
咱們至少須要「未出現」,「出現一次「,」出現屢次「等狀態,因此咱們能夠用2bit去表示,00,01,10分別表示「未出現」,「出現一次「,」出現屢次「。
又由於32位整數,得須要2*4GB/8=1GB, 因此基本還能夠存入內存,不然能夠先分區。
初始化bitmap爲00,而後依次遍歷這5TB個數,若是是00,則置爲01,若是是01,則置爲10,若是是10則不變。
最後遍歷此bitmap,找出全部值爲01的數字。
三. URI編碼(encodeURI)
由於瀏覽器會用一些特殊的字符做爲特定的意義,因此在要傳輸的內容上若是有這些特殊的字符的話,就須要對其進行轉義才能正確傳輸,如如下字符爲發送時候的關鍵字,即特殊字符
;/?:@&=+$,#
因此咱們在遇到傳輸此字符時能夠先編碼,而後服務器端在進行解碼,就能夠拿到正確的數據了。如要傳輸文本的內容爲:
A=b&c=d
則編碼爲
A%3Db%26c%3Dd
服務器端進行相應的解析便可拿到A=b&c=d
可能有人要問了,若是被編碼的裏邊含有%怎麼辦,一樣的,若是被編碼的字符串有%則被相應的編碼爲%25,解碼的時候看到%25就是一個%。
經常使用的編碼有:
= %3D
& %26
% %25
四. 天平
用天平找次品問題
具體問題是有一堆硬幣(n個),其中有一個較輕的是次品,用天平稱,至少稱多少次才能找出這次品?
不少人直接想到的就是二分法,先均分爲2份,而後稱,次品必定在較輕的一邊,而後繼續二分,直到找到那個次品,因此須要log以2爲底n的對數次。其實還有更好的方法,此方法的侷限在於認爲天平一次只能分出來兩種狀態。實際上是能夠分紅三種狀態的。
方法以下:
每次把待測物品分紅三組,稱其中兩組,這時候咱們就能夠分辨出次品在哪一組中。若是天平平衡,則次品在沒有稱的那一組中,不然,次品在較輕的一組中。此時物品有n/3個,而後繼續這樣稱,能夠看到,每次都會將原物品數刪去2/3,因此總的此時是log以3爲底n的對數次。
關係爲:
物品數目n 次數m
2-3 1
4-9 2
10-27 3
28-81 4
82-243 5
其實這道題還能夠進行變體,如有一堆硬幣(n個),其中有一個較輕的是次品,若是要求用天平稱m次就能將這次品找到,求最大的n?
同理可知,答案是3的n次方。
五. Catalan數
知識點:
1 通項公式:h(n)=C(n,2n)/(n+1)=(2n)!/((n!)*(n+1)!)
2遞推公式:h(n)=((4*n-2)/(n+1))*h(n-1); h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0).
3前幾項爲:h(0)=1,h(1)=1,h(2)=2,h(3)=5,h(4)=14,h(5)=42,......
應用:
網上不少,可搜,下面列出幾個簡單的。
六. 海倫公式(求三角形的面積)
三邊長:a,b,c
則面積s = sqrt((p-a)*(p-b)*(p-c)*p) (其中p = (a+b+c)/2);