Machine Learning

2014年11月18日 没有评论

最近买了基本跟机器学习相关的书籍看看能不能入门,《数学之美》 《机器学习》 《统计学习方法》 ,以及大学时还没有扔掉的《高数》 《概率统计》 《线性代数》,并且还看了《 斯坦福大学公开课 :机器学习课程》,感觉基础数学基本忘得差不多了。这两天看了,马尔科夫模型:C-K方程、Viterbi算法 和 线性回归:梯度下降算法(随机梯度下降和批量梯度下降)、最小二乘法,只搞清楚了能干什么,公式的意义,但对公式的推导基本是晕的。

下阶段准备用业余时间考虑一个可以用到机器学习相关原理的应用,在实践中学习,纯理论的实在有点头大。

分类: 生活 标签:

PHP的pack与unpack

2014年9月30日 没有评论

PHP的pack和unpack主要用于把数据进行二进制化和反二进制化,一般用于网络传输或者存储数据时用,能一定程度降低数据长度。

pack函数的用法在PHP文档中已说明清楚了,针对具体的format格式不做说明,下面举例几种用法。

pack('L',1);//把数字1转换为无符号long型,占4字节
pack('c','a');//转换为二进制字符
pack('c3L','abc',1);//转换为3个字符和1个long型
pack('c*','aaaaaaaaaaaaaaaaaaaaaa'); //转换n个字符

通过上面代码在format后面可以跟数字表示转换几个,可以跟*表示之后的所有。

unpack函数的用法:

$data = pack('c3L2','abc',100,200);
unpack('c3str/Lnum1/Lnum2',$data); //得到array('str'=>'abc','num1'=>100,'num2'=>200);
分类: 高级民工 标签:

CentOS下配置Jenkins+SVN+Maven进行持续集成

2014年9月26日 没有评论

jenkins的安装方式有多种,在Linux下可以通过yum来直接安装jenkins,jenkins官方文档中有详细介绍,在这里不讨论这种方式。常见的安装方式是通过官网上的war包进行。

1.下载war包

在官网右侧可以找到最新的war包:http://jenkins-ci.org/

2.启动jenkins

jenkins的运行有两种方式,第一种是直接部署到j2ee容器中,如tomcat.第二种是直接用java -jar命令启动,下面详细说明这种方式所需的配置。

jenkins.war内部集成了winstone这个servlet容器,下面创建一个启动脚本。

#!/bin/sh
 
JENKINS_HOME=/home/software/jenkins/work
export JENKINS_HOME
 
java -jar jenkins.war --logfile=/home/software/jenkins/logs/log.txt --httpPort=8888 --daemon --extractedFilesFolder=/home/software/jenkins/temp

httpPort参数用于指定工作端口,更多配置项可以使用 java -jar jenkins.war –help 查看

目录结构如下:

-rw-r--r--  1 root root 67789860 Sep 22 12:00 jenkins.war
drwxr-xr-x  2 root root     4096 Sep 26 15:56 logs
-rwxr-xr-x  1 root root      217 Sep 26 15:55 start.sh
drwxr-xr-x  2 root root     4096 Sep 26 15:56 temp
drwxr-xr-x 12 root root     4096 Sep 26 15:57 work

主要是work目录,用于存放jenkins的配置和解压war包。完成上述操作后变可以通过start.sh来启动jenkins了。

3.配置jenkins
a).进入jenkins管理界面,系统管理–>系统配置,配置jdk和maven。
b).设置邮件通知服务,如果使用第三方SMTP服务,如163邮箱,需要先在系统管理–>系统配置,配置系统管理员邮件地址以及邮件通知即可。
c).在持续集成任务中配置的post steps里的脚本,如果如果不能正常启动tomcat可以再脚本前面加上BUILD_ID=xxx.如图:
jenkins-post-steps

分类: 高级民工 标签:

SpringMVC获取所有映射URL

2014年8月30日 没有评论

  获取代码如下:

public static List<String> getAllRequestMapping(HttpServletRequest request){
    ServletContext sc = request.getSession().getServletContext();
    WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(sc,FrameworkServlet.class.getName() + ".CONTEXT.mvc");
    RequestMappingHandlerMapping mapping = wac.getBean(RequestMappingHandlerMapping.class);
 
    List<String> list = new ArrayList<String>();
    for(RequestMappingInfo info : mapping.getHandlerMethods().keySet()){
    	for(String url : info.getPatternsCondition().getPatterns()){
    		list.add(url);
    		break;
    	}
    }
 
    return list;
 
}
分类: 源码分享, 高级民工 标签:

JAVA序列化中的一些问题

2014年6月3日 没有评论

1.serialVersionUID的作用

  serialVersionUID可以认为是一个类的摘要,默认值的计算依赖于类的构造方法、成员变量和成员方法的定义规则,具体算法代码位于:java.io.ObjectStreamClass.computeDefaultSUID(Class<?>) 。对于implements Serializable的类而言可以显示或非显示的定义serialVersionUID,在通常情况下建议显示定义serialVersionUID,这样就算改变成员方法定义也不会影响到反序列化操作。

2.成员变量的增加或减少会影响反序列化吗?

  这个问题的前提是显示定义了serialVersionUID,如果非显示定义serialVersionUID则对 构造方法、成员变量和成员方法的任意修改都会导致反序列化失败,因为反序列化时会计算当前Class的serialVersionUID,如果序列化前后不一致则会导致反序列化失败。

  在显示定义了serialVersionUID的情况下如果保证serialVersionUID的值序列化前后不变,则对成员变量的增加或减少都不会导致反序列化失败,但如果是对原有成员变量的定义进行了修改,如:public int a;变成了public Srting a; 则会导致反序列化失败,具体代码位于:java.io.ObjectStreamClass.matchFields(ObjectStreamField[], ObjectStreamClass) 方法,这个方法会判断序列化对象和jvm加载对象的属性类型是否一样。

分类: 高级民工 标签: