一. CSRF跨站请求伪造
首先说明一下什么是CSRF(Cross Site Request Forgery)?
跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求。
为什么会有CSRF?
JS控制浏览器发送请求的时候,浏览器是根据目标站点,而不是来源站点,来发送cookie的,如果当前会话中有目标站点的cookie,就发送出去。核心问题是浏览器的会话机制,是跨站请求伪造漏洞的根源。
解决方法有三种:
1 使用token
2 限制refer
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);
原文:http://my.oschina.net/u/2400412/blog/495275