码迷,mamicode.com
首页 > 其他好文 > 详细

6个知识点

时间:2015-08-20 22:43:12      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

一. 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);

 

 

6个知识点

标签:

原文地址:http://my.oschina.net/u/2400412/blog/495275

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!