解决外挂刷mysql记录状态的几个技巧

前言

有这样一个场景,用户每天可以领取一个礼品(也可以是其他的东西,反正一天只能领取一次,不能重复领取),在这种情况下,或许有人就会心怀不轨,利用脚本或者其他形式的工具(俗称:外挂)疯狂刷领取礼品的接口,下面就来分析下这个过程。其实这个涉及到安全的问题

正常逻辑

正常写代码的时候业务逻辑,可能是这样的:

1.首先判断该用户领取礼品的标识字段是否为1(也可以是其他,这里只是假定1就是:已领取)

2.如果是1,则已经领取

3.如果是0,则没有领取,可以发放礼品,并将这个标识字段修改成1

PM2入门教程

pm2 是一个带有负载均衡功能的Node应用的进程管理器.

当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

PS:在我以前文章 新手如何快速入门node.js 中就可以使用PM2后台运行程序。还有另外一种方式后台运行程序参考forever

备注:SaaS、PaaS和IaaS是云服务模式。

SaaS 软件即服务,例如Google的 Gmail 邮箱服务.面向应用型用户.

PaaS 平台即服务.例如Google的GAE,面向开发型用户

IaaS 基础架构即服务,例如亚马逊的AWS,IaaS对于不知道新推出的应用程序/网站会有多成功的创业公司来说非常有用

适合PHP的搜索引擎你值得拥有(让搜索飞起来吧!)

前言

当网站数据库数据越来越大,达到百万甚至更高的时候,普通的关键字、多条件等搜索已经开始有些力不从心,这时候就非常需要一种方法能够让搜索的速度飞起来,因此就有了下面这些搜索引擎的诞生!

PhpDig

PhpDig是一个采用PHP开发的Web爬虫和搜索引擎,在国外非常流行的垂直搜索引擎产品,通过对动态和静态页面进行索引建立一个词汇表。当查询时,PHPDig将按一定的排序规则显示包含关键字的搜索结果页面。适用于专业化强、层次深的个性化搜索引擎。

官网:http://www.phpdig.net/

常用排序算法总结回顾

在介绍具体算法原理之前,你也可以参考我之前的一篇文章开发人员需要知道的10大基础实用算法

1.插入排序

算法原理:将待排序的数组分为:有序区 和 无序区。然后每次从无序区取出第一个数据插入到有序区的正确位置,最终完成排序。

#include <iostream>

using namespace std;

void insert_sort(int *arr,int n)
{
    int i,j;
    for(i = 1 ; i < n ; ++i)
    {
        int tmp = arr[i];
        j = i - 1;
        while( j >= 0 && arr[j] > tmp)
        {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1]  = tmp;
    }
}

int main()
{
    int arr[] = {2,4,1,3,5,8,7,6,8};
    insert_sort(arr,9);
    for(int i = 0  ; i < 9 ; ++i)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
    return 0;
}

算法的时间复杂度是O(n^2),并且插入排序时稳定的,属于原地排序。那么什么时候使用插入排序比较好呢?那就是当数组中的大部分数据已经有序时,使用插入排序算法的效率比较高,这种情况下,所需要进行的数据移动较少,而数据移动正式插入排序算法的主要步骤

用 nodejs 做反向代理服务器

背景

有的时候在本地开发,大部分JSON数据基本上可以先伪造,但是有一部分URL请求需要用到线上数据,这个时候就可以利用node.js自己去做一个代理,将需要线上数据的URL请求捕获并转发到线上,下面就直接上代码

PS:如果需要更强大的反向代理可以尝试nginx,怎么配置可以参考:Nginx配置文件nginx.conf中文详解

核心代码

app.js

var path = require('path');
var express = require('express');
var app = express();

app.use(express.static(path.join(__dirname, 'public')));//这里我是把静态资源都放这里了
app.get("/api/*", require("./proxy").proxy);

var server = app.listen(80, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});