iLeichun

当前位置:首页

又是一年高考时,流程图讲解我当年高考

分类:个人日志  来源:网络  时间:2011-6-7 22:07:53
又是一年高考时,转眼间4年已过。然而当年的高考却记忆犹新,昔日的光阴已不再回头。
那年的今晚,班主任描在黑板上的12个大字“动动脑考得好、静静心易发挥”仍历历在目。班主任说高考就像秋天的收割,今天(6.7)收获的是一小块稻田,明天(6.8)收获的才是一大块稻田——有理综就是好。
4年后,我进入了当时害怕的现在却热爱的计算机软件行业,很高兴今天我能运用软件工程思想解答我当年的高考答题过程。流程图:
 
雷纯

 

 

如何使用随机数规避马太效应

分类:互联网  来源:网络  时间:2011-6-4 0:26:56

  无论是网站的页面浏览量还是资源网站的资源下载量,大部分都存在排行榜这个东西。排行榜提供了一个热门信息的入口,也体现了口碑营销和用户从众心理。但对一个优秀的网站而言,80%以上都不会用自然排名,多少会动一些“小手脚”,那不是在欺骗用户吗?是的,我们有时候确实在做这样的事情。而相比那些金钱驱动的对用户不负责任的更改排名的方式(大家应该都懂的),下面介绍的更改排名的小技巧对用户而言绝对是“美丽的谎言”。

  自然排名的弊端

  先来看看如果网站完全按照自然规则来定制排行榜会出现的情况: 

  当然可能没有这么夸张,但排行上的内容保持1个月甚至3个月都没有变化还是有可能的。网民的从众心理是不容忽视的,对于一个在网站没有明确目的四处闲逛的用户来说,各类排行榜变成了他们最好的入口;或者我们可以从数据的层面来解释下这个问题,一般排行榜会挂在网站的什么位置?首页,分类索引页,侧边栏?反正是用户容易看到,能够轻易点击的地方,这些页面或位置的共同特点就是高曝光,以首页为例,来看看我的博客的曝光排名前5的页面:

  从数据中可以看到首页的浏览量差不多是其他页面的10倍,所以对于一个资源而言,是否放入排行榜将会导致至少有5倍左右的曝光量的差异,即如果要完成同样的转化目标,未放入排行榜的商品需要比放入排行榜的商品高出4倍的转化率,对于同样的商品,如果放在排行榜只要4%的转化就可以完成100个交易,那么如果把它撤出排行榜同样要完成100个交易就需要高达20%的转化,简直就是天壤之别,这就是排行榜的魔力。

  这就是所谓的马太效应,但无论对于网站还是用户而言,马太效应的存在都是不利的,网站无法将那些排行之外的有潜力的商品推销出去,而用户同样会看不到那些排行榜之外更有价值的产品。所以我们要设法规避马太效应。

  如何规避马太效应

  马太效应(Matthew Effect),简单地说就是“强者愈强,弱者愈弱”。不得不承认马太效应是一个极其强大的自然法则,全世界都在试图规避这个法则,但又有多少能够真正的解决问题的。这个在经济、社会学界让人十分头疼的问题似乎在互联网这个虚拟的领域还是存在许多解决方案的,其中一个在其他领域绝对无法适用的方法就是——随机数。

  其实在排行榜中规避马太效应的方法有很多,如果网站的数据和运算平台足够强大,完全可以借助一些算法去有效地解决这个问题,之前我也介绍过一个有效的内容推荐方法,或者如果能根据用户行为分析的结果提供根据用户兴趣定制的个性化排行榜,那下面的内容你可能就不必再看下去了。但对于一个小型网站或者刚刚起步数据还不是很全的新产品而言,随机数将会是规避马太效应的一个最简单有效的方法。

  产生随机数的方法有很多,比如常见的取值范围在(0,1]的两位小数,或者是随机生成1到100的自然数。更改排行榜的方法也有很多,下面就用1-100的自然随机数来例举几个我想到的调整TOP10排行榜的方法:

  随机排行方法1
        调整策略:将排行榜的8、9、10名替换成11-20、21-30、31-40中各取一个随机内容。

  实现方式:其实就是生成11-20、21-30、31-40范围的3个随机数,放到排行榜的8、9、10三个位置,先对1-100的随机数做一个简单处理,将其除以10 取余数,于是就相当于是0-9的随机数,在分别加上11、21、31就生成了11-20、21-30、31-40范围的3个随机数,取相应的内容放到排行榜即可。

  适用情况:存在明显的明星产品,比如软件下载网站的下载前几名会一直被某些软件占据,这些软件确实是用户最常用的软件,跟其他软件的下载量存在显著差距,这个时候就不要去动排名前几的产品,而只要随机变动排名后几位的产品就行。

  
  随机排行方法2
    调整策略:在前30名内容中随机取10个放入排行榜。

  实现方式:为前30名的每个内容分配一个随机数,然后根据随机数排序取前10。

  适用情况:同样适用前50或者前100打乱次序后随机取10,但是无论是前30还是50的内容排名上不能存在太显著的差异,比如热门书籍,可能前30本书的热门度差异并没有那么明显,那么就可以使用这种随机排序法。

  
  随机排行方法3

  调整策略:随机取排行榜中的1个位置来放置推荐的内容。

  实现方式:有了上面的例子,这个实现起来就比较简单了,其实就是生成一个1-10的随机数,先将1-100的随机数除以10 取余数,再加1即可,再将排行榜上这个随机数的内容替换成推荐内容即可。

  适用情况:已经有现成的优质内容希望推荐给用户,并能够预期到这些内容很有可能在将来会上排行榜的。

  原文:http://webdataanalysis.net/personal-view/ranking-and-random/

Java Servlet将图片保存到数据库

分类:个人日志  来源:网络  时间:2011-6-2 23:17:23

/*
 * 为了提高速度,我们常将图片保存到文件夹下。
 * 本文将为您介绍在Java中如何将图片保存到数据库,使用了Servlet先将图片转换为二进制,再将二进制图片数据保存到数据库。 
 */

package com.kancool.base.service.support;

import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import com.kancool.base.dao.support.*;

public class BasicAddImageServiceSupport extends HttpServlet {

 /**
  * The doGet method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to get.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  PrintWriter out = response.getWriter();
  try{
   Class.forName("com.mysql.jdbc.Driver");
   Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/cool","root","mysql");
   String imageTitle=new String((request.getParameter("iamgetitle")).getBytes("ISO-8859-1"),"gb2312");
   String image=new String((request.getParameter("image")).getBytes("ISO-8859-1"),"gb2312");
   FileInputStream ima=new FileInputStream(image);
   String sql="insert into images(image,title) values(?,?)";
   PreparedStatement pstmt=conn.prepareStatement(sql);
   pstmt.setBinaryStream(1,ima,ima.available());
   pstmt.setString(2,imageTitle);
   pstmt.executeUpdate();
   out.print("success!");
  }catch(Exception e){
   e.getStackTrace();
  }
 
 }

 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to post.
  *
  * @param request the request send by the client to the server
  * @param response the response send by the server to the client
  * @throws ServletException if an error occurred
  * @throws IOException if an error occurred
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request,response);
 }

}

 

JQuery限制复选框可选个数

分类:个人日志  来源:网络  时间:2011-6-1 21:29:38

本代码将告诉你如何通过使用JQuery限制复选框checkbox的可选个数,例如某一复选框限制只能选择2个选项,只要不是选择2个就不允许提交表单。
<script language="javascript" src="js/JQuery.js" >
<script language="javascript">
 $(document).ready(function(){
  $("#submit").click(function(){
      var CheckCount=0;
      $("[name=¹mybook¹]").each(function(){
   if($(this).attr("checked")){
       CheckCount++;
   }
      });

      if(CheckCount!=2){
       alert("请选择两项!");
    return false;
      }
      return true;
  });
 });
</script>

HTML代码如下:
<html>
 <head>
  <title>JQuery限制复选框可选个数</title>
 </head>
 <body>
  <form name="myform" action="" method="post">
   a: <input type="checkbox" name="mybook" value="0" />&nbsp;
   b: <input type="checkbox" name="mybook" value="1" />&nbsp;
   c: <input type="checkbox" name="mybook" value="2" />&nbsp;
   d: <input type="checkbox" name="mybook" value="3" />&nbsp;
   e: <input type="checkbox" name="mybook" value="4" />&nbsp;
   f: <input type="checkbox" name="mybook" value="5" />&nbsp;<br />
   <input id="submit" type="submit" name="submit" value="提交" />&nbsp;
   <input id="reset" type="reset" name="reset" value="重置" />
  </form>
 </body>
</html>

Java统计不同字符串出现的次数

分类:个人日志  来源:网络  时间:2011-6-1 0:11:34

package com.taobao.web.servlet;

public class IndexOfTest {

 /**
  * 本文通过代码的方式介绍如何使用Java统计某一字符串中不同子字符串出现的次数,如“Java统计不同字符串出现的次数”中“a”的出现次数,很显然是2次。
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String str1="pjhuiyhoeijtohygdifei";
  String str2="这是一个用java语言编写的统计字符串出现次数的代码,这是一个用java语言编写的统计字符串出现次数的代码";
  //String str2="出现出现";
  String s1="ui";
  String s2="统计字符串";
  String s3="i";
  String s4="出现";
  //查找并显示子串出现的位置
  int i1=str1.indexOf(s1);
  int i2=str2.indexOf(s2);
  System.out.println(i1);
  System.out.println(i2);
  
  //显示子串出现的次数
  int count1=0;
  int count2=0;
  for(String tmp=str1;tmp!=null&&tmp.length()>=s3.length();){
   if(tmp.indexOf(s3)==0){
    count1++;
    tmp=tmp.substring(s3.length());
   }else{
    tmp=tmp.substring(1);
   }
  }

  for(String tmp=str2;tmp!=null&&tmp.length()>=s4.length();){
   if(tmp.indexOf(s4)==0){
    count2++;
    tmp=tmp.substring(s4.length());
   }else{
    tmp=tmp.substring(1);
   }
  }
  System.out.println("""+s3+"""+"  在"+"""+str1+"""+"中出现 "+count1+" 次");
  System.out.println("""+s4+"""+"  在"+"""+str2+"""+"中出现 "+count2+" 次");
 }
}
 

PHP定时自动执行代码

分类:个人日志  来源:网络  时间:2011-5-29 12:57:18

<?php
 /**
  *在某些网站的设计中,根据客户要求,有些数据需要实时更新,例如定时生成静态页面、定时更新数据等。
  *这种情况下,如果使用PHP自动定时执行代码就显得非常有效了。
  */
 //即使关掉浏览器,也可以继续执行.
 ignore_user_abort();
 //设置执行时间为无限制,但php中默认的执行时间是30秒,可以通过修改php.ini文件对此属性进行相应的修改
 set_time_limit(0);
 //设置每隔10分钟运行一次,该时间可以根据具体情况做相应调整
 $time=10*60;
 //按预先设置的时间等待相应时间循环执行代码
 do {
  //休眠相应时间后继续执行后面的代码
  sleep($time);
  for($i=0; $i<100; $i++) {
   echo $i;
  }
 }while(true);
?>

PHP生成水印图片的代码

分类:个人日志  来源:网络  时间:2011-5-26 22:13:12

<?php

/**
* 在用PHP上传图片时,出于对保护版权的需要,给图片加上水印是个不错的主义。这时就要用到PHP图片处理的相关函数对原图片和水印图片进行合成。
*/

   //背景图
   $image = imagecreatefromjpeg ("200809250916281618.jpg");

   //水印图
   $imagebg = imagecreatefromgif("watermark800.gif"); // transparent PNG

   //水印图片宽、高
   $x = imagesx($imagebg);
   $y = imagesy($imagebg);

   //背景图片宽、高
   $xx = imagesx($image);
   $yy = imagesy($image);

   $newImg = imagecreatetruecolor($xx, $yy);


   //分别为:背景图、水印图、水印图x坐标、水印图y坐标、0、0、水印图宽、水印图高、水印图透明度
   imagecopymerge($image, $imagebg, 100, 100, 0, 0, $x, $y,50);

   Header("Content-type: image/jpeg");
   imageJpeg ($image,"cc.jpg");
   imageJpeg ($image);

   imagedestroy ($image);
   imagedestroy ($imagebg);
   imagedestroy ($newImg);
?>

Access错误“由于您和其他用户试图同时改变同一数据,导致Microsoft Jet数据引擎停止进程!”

分类:个人日志  来源:网络  时间:2011-5-24 22:25:51

    当用Access试图打开一个数据库文件(mdb文件)时,弹出错误提示“由于您和其他用户试图同时改变同一数据,导致Microsoft Jet数据引擎停止进程!”有可能是你的数据库文件有损坏。此时你可以:

    一、看看是否之前是否对该文件有备份过,如果有的话可以打开备份文件以替代该文件(前提是没有损坏的)。

    二、使用Access数据库修复软件对数据库文件进行修复。

     三、尝试使用Access自带的数据库修复程序进行修复,依次点击office access软件的工具——数据库实用工具——压缩和修复数据库打开。

Java、PHP、AS中set/get方法的异同

分类:个人日志  来源:网络  时间:2011-5-14 22:29:11
在面向对象编程中,为了更好地实现封装,必须设置类中变量、函数的相关属性。大多数面向对象语言都可以设置四种属性:public、缺省、protected、private。除了private范围的变量、函数不能直接被外部文件访问外其他三种都是可以的,但有时候外部文件必须访问某个文件的private属性时,我们就不得不通过相应的函数提供访问接口,最常用的就是set/get了。本文通过举例说明对Java、PHP、AS中的set/get方法进行分析,以对它们之间的异同进行比较。
代码一(Java):
public class A {
private String name;
public int age;
public A() {
name = "";
age = 0;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
 
public class B {
public static void main(string[] args) {
A a = new A();
//private属性不能直接访问
a.setName("张三");
//public属性可以直接访问
a.age = 20;
System.out.println("姓名:" + a.getName());
System.out.println("年龄:" + a.age);
}
}
 
显示结果:
姓名:张三
年龄:20
 
代码二(PHP):
方法一(类似Java)
<?php
class A {
private $name;
public $age;
function A() {
$name = "";
$age = 0;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $name;
}
}
?>
 
<?php
class B {
function B() {
$a = new A();
//private属性不能直接访问
$a->setName("张三");
//public属性可以直接访问
$a->age = 20;
echo "姓名:" + $a->getName();
echo " ";
echo "年龄:" + $a->age;
}
}
?>
 
<?php
$b = new B();
?>
 
显示结果:
姓名:张三
年龄:20
 
方法二(推荐):
<?php
class A {
private $name;
public $age;
__construct() {
$name = "";
$age = 0;
}
public function __SET($name,$n) {
$this->name = $n;
}
public function __GET($name) {
return $this->name;
}
}
?>
 
<?php
class B {
function B() {
$a = new A();
//private属性不能直接访问,有了name的__SET()方法后,可以通过访问属性的方式访问name,下同
$a->name = "张三";
//public属性可以直接访问
$a->age = 20;
echo "姓名:" + $a->name;
echo " ";
echo "年龄:" + $a->age;
}
}
?>
 
<?php
$b = new B();
?>
 
显示结果:
姓名:张三
年龄:20
 
代码三(AS):
方法一(类似Java)
public class A {
private name:String ;
public age:unint ;
public function A() {
name = "";
age = 0;
}
public function setName(name:String):void {
this.name = name;
}
public function getName():String {
return name;
}
}
 
public class B {
public function B() {
a:A = new A();
//private属性不能直接访问
a.setName("张三");
//public属性可以直接访问
a.age = 20;
trace("姓名:" + a.getName());
trace(" ");
trace("年龄:" + a.age);
}
}
 
b:B = new B();
 
显示结果:
姓名:张三
年龄:20
 
方法二(推荐,类似PHP中“方法二”):
public class A {
private name:String ;
public age:unint ;
public function A() {
name = "";
age = 0;
}
public function set n(name:String):void {
this.name = name;
}
public function get n():String {
return name;
}
}
 
public class B {
public function B() {
a:A = new A();
//private属性不能直接访问
A.n = "张三";
//public属性可以直接访问
a.age = 20;
trace("姓名:" + a.n);
trace(" ");
trace("年龄:" + a.age);
}
}
 
b:B = new B();
 
显示结果:
姓名:张三
年龄:20
 

 

“五一”这天气,什么都不好做

分类:个人日志  来源:网络  时间:2011-5-2 12:45:36

        又一年“五一”了,本着“劳动光荣”的优良传统,本打算好好打发一下这个时间的。可惜这天气天天下雨,很多地方都不好去玩了,之前的计划也泡汤了。说去玩吧,得打雨伞,外面的雾也很大,不好拍照。

        说实话,这种假期和普通的周末差不了多少,也就多了一天而已。此外,外地的游客多得很,交通很拥挤,如果不是很急的话还不如其他时间去玩玩来得快活。

       祝各位关注我的人节日快乐。

  • 60
  • |<
  • <<
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • >>
  • >|