显示标签为“重要”的博文。显示所有博文
显示标签为“重要”的博文。显示所有博文

2009-04-07

算法学习计划

学习算法是持续性的学习过程,当然这次主要有两个目的,一个是自己真的到了好好思索、整理下算法相关知识的时候了,另一个就是为了暑期后的找工作。所以制定了一份算法学习计划,来督促自己完成整个算法的学习和总结。

学习计划:
  1. 算法分析基础 04/06-04/12
  2. 排序 04/13-04/19
  3. 数据结构1(基本的数据结构,hash表,二叉查找树)04/20-04/26
  4. 数据结构2(红-黑树,前缀树,B树,后缀树等) 04/27-05/03
  5. 动态规划和贪婪算法 05/04-05/10
  6. 平摊分析(Amortized Analysis)和堆(二项堆,Fibonacci堆等)05/11-05/17
  7. 图论1 05/18-05/24
  8. 图论2 05/25-05/31
  9. 排序网络,矩阵操作,线性编程 06/01-06/07
  10. 多项式和FFT, 数论算法 06/08-06/14
  11. 字符匹配,计算几何,NP相关 06/15-06/21
  12. 近似算法及其它 06/22-06/28


相关说明:
  • 学习周期:2009-04-06至2009-06-28
  • 整个学习过程以《算法导论》为蓝本,并辅以诸如wikipedia,其他的算法书籍
  • 一周一个专题,并且为每周的算法学习和总结写一篇日志
  • 严格遵守本学习计划
  • 学习对应的习题可参考两部分:算法导论习题及UVa和Sphere

2009-03-21

不使用验证码如何防止恶意的代码攻击

本文主要参考http://15daysofjquery.com/examples/contact-forms/。
主要思路包括:
  1. 在载入注册页面A(以此为例,类似的还包括有登录页面,评论页面等)的同时,由系统载入另一文件B
  2. 文件B的作用是:1)以服务器时间和一个秘密字符串共同加密为一段单向字符串 2)将这段生成的单向字符串设置在用户的cookie中 3)将系统时间作为hidden字段加入用户的表单中
  3. 用户提交表单后,服务器可根据hidden字段的字符串+秘密字符串以相同的加密算法重新生成一个字符串,如果与用户浏览器中设置的cookie相同,则认为是用户操作,予以继续操作的权限,否则认定为恶意代码,提示出错。
好处:
  • 无需烦人的验证码的加入
不足:
  • 需要客户端的cookie和JS支持

2009-03-18

关于使用第三方SMTP服务器发送系统邮件的问题

如题,这可能是每个没有多少财力但又不能缺少系统邮件这项功能的程序员们都必须面对的问题,限于财力,我们不能架设自己的SMTP服务器,所以只能借助第三方的免费的SMTP服务器了,如是乎,有了思路:
最先出来的思路肯定是诸如163,sina,sohu这样的Email ISP的SMTP服务器,我们注册账号然后使用这个账号来转发我们的系统邮件,并且更改邮件头,使其符合我们需要的发信人,收信人.开始时你可能会觉得这方法不错,可是,不久问题就会出来——
  • 那就是目前的163不能自主更改邮件头,否则会验证失败,而诸如sina的可用性也值得考虑,在我的实验中,没有成功过几次。
  • 更重要的一点是,如此的使用第三方的服务器,势必会造成此账号的异常,可能会被封号,或者会涉及到法律问题
所以,这种方法的可用性是用你的使用频率成反比的,你可能会申请多个第三方的账号作为随机的SMTP服务器以平摊压力,但是某个账号的异常必然会影响到系统的可用性,所以这种方法只能是次选。

最近我正好遇到了这样的问题,也是首先使用前文中的方法,但最新注册的163,sina账号的验证已不能通过(可能ISP在服务器端作了相关的验证,但一些旧的账号依旧可用),经过一番调研,最终得出了一个相对可用性有百倍提高的方法——使用GAE的Email服务,这是google允诺免费提供的服务,因而可用性方面得以保证,经过实验后,总结以下的几点不足:
  • GAE经常会被和谐,这是很致命的,所以可结合方法1来提高可用性
  • GAE的邮件可能有若干分钟的延时
  • 对于免费的GAE服务,似乎有相关的限制(待调研确定)
  • 其它
但总体而言,这两种方法结合起来,我们要实现免费的SMTP系统邮件服务那是没有什么问题的。