
开发语言
文章平均质量分 71
1501220038
测试、QA
展开
-
ajax、跨域、session、filter
在web开发中,标题列举的这几项内容都是很常见的,遇到问题也不难解决。但最近我在项目中却遇到一个这几项组合出的问题,卡了好几个小时,值得记一下。 首先项目是前后端分离的结构。前端我用nodejs来调试,后端用spring boot跑的各种接口。因为两者端口不同,所以首先得解决跨域调用问题。通常有简便的方法我就不会去用麻烦的方法,所以直接在接口上加注解@CrossO...原创 2019-01-05 15:41:29 · 444 阅读 · 1 评论 -
回顾java Annotation(注解)
最近在学习中发现相当多的框架是通过注解来实现的。为了加深记忆,把注解重新做一下回顾。 首先注解不是注释。——但因为java语言内置了三个注解:@Override、@Deprecated、@SuppressWarnings。第一个是通知编译器做方法覆盖检查;第二个是提醒程序员使用了过时的方法;第三个是通知编译器忽略警告。这三个内置注解用起来给人的感觉就象注释一样。而实际上注解的用法远不止这么...原创 2014-07-04 23:56:55 · 1316 阅读 · 0 评论 -
网页抓取
上了数据挖掘这门课,想做个小例子。基本思路是根据配置文件打开相应的网址,再根据内容的分类信息自动选择符合的文章进行保存。考虑到效率,采用多线程方式。才完成一个基本框架。包括读取配置文件、打开网址、保存文件;后续还有很多工作,解析网页,分析类别等。感觉最大的工作量是网页分析,和数据挖掘关系不大啊,不知道符不符合要求。代码如下: public static void main(String[] a原创 2015-03-16 17:32:38 · 1239 阅读 · 0 评论 -
R语言笔记
最近做的几个项目都是用R语言来完成的。正如老师所说,学起来很快,忘起来也很快。整理一下放在这里,方便以后查阅。安装所需的包:install.packages("xxxx")加载包:library("xxxx")显示/改变工作目录getwd()/setwd("d:/temp")文件操作:1.读取csv文件var=read.csv("demo.csv原创 2015-06-24 18:40:20 · 1233 阅读 · 0 评论 -
再续:匿名内部类调用父类方法或访问父类成员
12345678910111213141516171819202122232425262728public class Fat { protect原创 2014-02-06 16:35:58 · 4894 阅读 · 1 评论 -
一段socket代码示例
看书的时候看到一段socket编程的示例代码,可惜只有服务器端没有客户端,也不够简短。自己尝试写了一段,比较简短了,只是示例而已,但是可以操作。服务器端:12345678910111213141516171819原创 2014-02-06 20:03:39 · 719 阅读 · 0 评论 -
java匿名内部类
java的内部类可以玩出好多花样。介绍都挺多,我就不废话了。专门记一下困惑了我好半天的匿名内部类。总结一下:1.匿名内部类通常是为了省事(直接获取一个类实例,这个类实例只在此处用一次,就省得再给它起个名字重新定义了)。所以原则是尽量简单。如果用了这个方法,给读代码的人带来很大困惑,那就得不偿失了2.匿名内部类不能有构造方法3.匿名内部类不能定义静态变量、方法和类原创 2014-02-06 16:24:00 · 835 阅读 · 0 评论 -
asm示例
前些天看aop就看到了cglib,看cglib又看到了asm,模仿着做了个示例。利用asm修改字节码,能实现编译不通过执行通的过的效果,挺有意思。一个简单的待修改类:package com.asm.zjc;public class C { public void m() throws InterruptedException{ Thread.sleep(300); }}原创 2014-08-13 09:15:15 · 1239 阅读 · 0 评论 -
java 变长参数使用原则
1.java变长参数用...表示,如Print(String... args){ ... };2.如果一个调用既匹配一个固定参数方法,又匹配一个变长参数方法,则优先匹配固定参数的方法3.如果一个调用能匹配两个及以上的变长参数方法,则出现错误——这其实表示方法设计有问题,编译器会提示The method is ambiguous4.方法只能有一个变长参数,且必须放在参数列表的最后一个原创 2014-07-03 18:39:50 · 1376 阅读 · 0 评论 -
Solr配置文件分析与验证
前面一篇开始学习solr的时候,做了个入门的示例http://blog.youkuaiyun.com/zjc/article/details/24414271 。虽然可以检索出内容,但总和想象的结果有差异——比如,检索“天龙”两个字,按常规理解,就应该只出来《天龙八部》才对,可是竟然也会把《倚天屠龙记》检出来。后来研究了一下,发现系统是这样处理的:无论是抽索引时还是分析检索词时,都把所有文字按单字拆开。这样,原创 2014-05-22 15:06:56 · 2514 阅读 · 0 评论 -
好记性不如烂笔头——关于精确度、召回率、F值、准确率
将数据挖掘中这些评测指标的基本概念做一整理,忘了的时候还可以来查一查。精确度,有时也叫正确率,是英文中的precision而不是accuracy。表示正确识别为此类的样本数目(TP)/识别为此类的样本总数目(TP+FP)。FP就是那些原本不是此类但被错误的分为此类的样本数目。召回率,这个名称容易使人把它和召回缺陷产品的比率联想到一起,完全不是一码事。所以另外一种翻译的名称更原创 2015-07-05 19:29:39 · 2374 阅读 · 1 评论 -
朴素贝叶斯分类算法
之前有次考试考的是手工计算朴素贝叶斯的分类。当时没答对,后来搞明白了,不久又忘得差不多了。所以写个例子在这儿记一下。先推导一下贝叶斯公式:假定我们观察到两个事件都发生了,记做P(A∙B),那么我们既可以认为先发生了事件A,在此基础上又发生了事件B,也可以认为先发生了事件B,在此基础上又发生了事件A。所以这两个事件发生的概率,可以记做P(A∙B)=P(A|B)*P(B) 和 P(B∙A)=P原创 2016-07-19 16:49:36 · 486 阅读 · 0 评论 -
用到了base64转图片文件的函数,记录一下
import java.io.*;import sun.misc.*; //对图片文件进行Base64编码 public String getImagebase64(String imgFileName) { byte[] data = null; try { InputStream in = new FileInputS原创 2016-08-16 14:20:03 · 1681 阅读 · 0 评论 -
java8的lambda表达式及方法引用(二)
本文和前面的lambda表达式是连贯的,但篇幅太长了,所以分开了。前面说过lambda表达式的基本格式是()->{},{}里的代码就是函数式接口的实现部分,完全手写自然没有问题,但有时这个方法要实现的功能在其他代码里已经有了(即可以找到一个签名符合接口要求的已有方法),那么就不用再一遍一遍的写了。可以直接引用它,就称之为方法引用。格式是 类名::方法名或 对象名::方法名 ,注意引用不是...原创 2018-08-07 20:44:25 · 291 阅读 · 0 评论 -
java8的lambda表达式及方法引用(一)
当前很多公司的java开发环境都升级到jdk8以上了。lambda表达式是java8中最重要的更新,其目的是为了配合随着并行运算流行起来的所谓“函数式”编程改进而来的语法糖。既然是语法糖,那么其实不用这些lambda表达式也是可以实现原有功能的,只不过看起来代码行数多一些而已。简单说一下对lambda表达式的理解:lambda表达式其实就是“内部匿名类”对象的特定方法的实现代码。这个内部匿名类...原创 2018-08-07 15:27:41 · 1847 阅读 · 1 评论 -
java8 日期时间处理
之前有个项目频繁用到年、月、周的数据库统计。为此专门写了一个蛮复杂的工具类。最近了解了一下java8的新日期时间类库,简直方便到感人。重构了一下代码,行数少了多一半,有些方法直接删掉了,因为已经自带了。适用多种业务场景:展示、统计、设置有效期、增加/减少日期、日期比较等。package com.utils.zjc;import java.time.DayOfWeek;import jav原创 2017-11-06 23:35:27 · 2322 阅读 · 0 评论 -
java 9 新特性
▶ 进程操作改进(JEP 102: Process API Updates)新增的 java.lang.ProcessHandle 类丰富了对进程的操作,同时原有的 java.lang.Process 类的功能也被加强了。▶ 竞争锁的性能优化(JEP 143: Improve Contended Locking)能够改善程序运行时的多线程同步效率。▶转载 2017-10-11 13:28:29 · 332 阅读 · 0 评论 -
java 8 新特性
1.介绍毫无疑问,Java 8发行版是自Java 5(发行于2004,已经过了相当一段时间了)以来最具革命性的版本。Java 8 为Java语言、编译器、类库、开发工具与JVM(Java虚拟机)带来了大量新特性。在这篇教程中,我们将一一探索这些变化,并用真实的例子说明它们适用的场景。这篇教程由以下几部分组成,它们分别涉及到Java平台某一特定方面的内容:Java语言编译转载 2017-10-11 12:56:43 · 316 阅读 · 0 评论 -
向maven库中加需要的jar包
项目里用到sqlserver 的驱动,使用maven依赖下载不成功,看网上说明可以手工下载加入到maven库中,直接拷贝到.m2中,结果各种报错。后来才知道正确用法:mvn install:install-file -Dfile={Path/to/your/ojdbc.jar} -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.原创 2017-06-29 17:49:19 · 470 阅读 · 0 评论 -
一个对含中文字符串在内的字符串排序简便方法
public class StringSort { public static void main(String[] args){ String[] arr = {"1101", "1100", "1001", "1110","1100","1101","0010","1000","0101","0011","1110","1011","0111","0110","1000","0100",原创 2017-01-12 16:42:22 · 1149 阅读 · 0 评论 -
精简web开发配置文件
作为web开发初学者,面对各种框架的配置文件时常感到知其然不知其所以然。这是因为很多配置文件其实有多种写法都可以达到同样目的。最近研究了spring整合mybatis的工程,终于把这些门道大致摸清了。web开发领域一向推崇MVC模式,于是有了SSH之类的组合框架。不过我总感觉SSH有点臃肿,甚至即便只用spring的MVC模块,我都觉得没有自己写servlet理解起来直接,于是采用更简洁的sp原创 2015-11-26 15:22:06 · 1247 阅读 · 0 评论 -
使内嵌式jetty服务器支持jsp
1.jetty是什么jetty是一个轻量级的web服务器,类似tomcat,但用起来比tomcat灵活,尤其是支持内嵌式使用。所谓内嵌式即以java语句的形式启动jetty,这样我们可以无需部署和启动web容器就能达到同样的效果。这对于简单的基于http协议的应用以及调试程序就方便的多了。2.一个简单的jetty服务器简单到仅需类似以下几条语句:public class Jetty原创 2015-01-27 00:00:28 · 5745 阅读 · 2 评论 -
java泛型
印象中java泛型多用在容器类中,所以在其他场合的应用就没怎么注意。最近在读某个项目代码时,看到Hibernate存储数据的方法被写成泛型参数,恍然大悟。这是编程中的常用技巧,可以用于精简代码数量。于是为了深入理解,做了一些小例子,记录一下。在容器中使用泛型的常见格式,如:List 表示接受任意类型List 表示接受AClass及其子类型List 表示接受BClass及其父原创 2014-04-14 09:01:00 · 1017 阅读 · 0 评论 -
Solr示例
Lucene是apache软件基金会提供的一款开源全文检索引擎。Solr是在lucene基础上封装得更易于使用的全文检索服务器并提供了相关api。本文使用solr3.4,做一个使用示例,已调试通过。更高版本可能需要更改代码。1.启动solr。解开solr压缩包后,在solr_home\dist下有个war包。一种方式是把这个war包部署到web容器里。我这里图省事,就直接用自带的jetty原创 2014-04-24 14:58:15 · 1758 阅读 · 1 评论 -
超简代码版设计模式系列五
命令模式:把“命令”封装成对象//定义接口方法——executepublic interface Command { public void execute();}//所有命令均需实现executepublic class ACommand implements Command{ public void e原创 2014-02-06 19:53:08 · 738 阅读 · 0 评论 -
超简代码版设计模式系列四
单例模式:产生单一的对象public class Singleton { private static Singleton uniqueInstance; private Singleton(){ } public synchronized static Singleton getInstance(){ i原创 2014-02-06 19:52:19 · 828 阅读 · 0 评论 -
超简代码版设计模式系列三
装饰模式:动态的将责任附加到对象上。(有点递归的意思)使用时传递参数要小心,不要传递自身//定义抽象基类public abstract class BaseClass{ public abstract int calculate();}//子类使用基类对象作为构造方法参数,并在某些方法中对其进行"装饰"public cla原创 2014-02-06 19:50:57 · 781 阅读 · 0 评论 -
超简代码版设计模式系列二
观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,所有依赖者都会收到通知并更新。//定义被观察者常用接口public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o);原创 2014-02-06 19:49:49 · 803 阅读 · 0 评论 -
续:用匿名内部类实现多线程的一小段代码
很简洁吧:12345678910111213141516public class NewThread { public static void main(String[] args){原创 2014-02-06 16:32:13 · 1061 阅读 · 0 评论 -
超简代码版设计模式系列十四
结束语: 本来还有段示例代码讲代理模式,但是我觉得特点不鲜明,代码也不简短,就不写了。其他的还有一些设计模式(经典的GoF《设计模式》提到了23种)使用范围不是很广,和上面一些也有很类似的地方。所以大部分书籍并没有全列出来。 最重要的是,在使用设计模式的时候一定要清楚最终目的是什么。而不是为了使用模式而使用它们。因为从句法上说,无非就是这么几种:把接口(包含抽象类,以下同)原创 2014-02-06 20:01:59 · 761 阅读 · 0 评论 -
超简代码版设计模式系列十三
状态模式(二):下面的代码展示状态的自动切换//同样,定义状态接口public interface State { public void actionA(); public void actionB(); public void actionC();//...}//实现多个状态publ原创 2014-02-06 20:01:20 · 760 阅读 · 0 评论 -
超简代码版设计模式系列十一
组合模式:把对象组合成树形结构来表现层次结构,使客户以一致的方式来处理个别对象及对象组合。//这个代码有点长,不太对的起超简的标题。确实稍复杂一点。//首先定义基类。与常规思路相比其特点在于不定义抽象方法。默认实现是抛出异常。未来由子类各自覆盖实现。如不覆盖则抛出异常表示不支持。public abstract class Component{ public原创 2014-02-06 19:58:44 · 702 阅读 · 0 评论 -
超简代码版设计模式系列九
模板方法模式:在一个方法中定义了一个算法的骨架,其中一些步骤延迟到子类中实现public abstract class Template { final void templateMethod(){ step1(); step2(); hook(); } final void step1()原创 2014-02-06 19:56:20 · 739 阅读 · 0 评论 -
超简代码版设计模式系列六
适配器模式:将一个类的接口,转换成客户期望的另外一个接口。使原本不兼容的类可以合作。//客户请求接口public interface Client { public void doA();}//被适配者提供的接口public interface Adaptee { public void doB();原创 2014-02-06 19:54:03 · 772 阅读 · 0 评论 -
超简代码版设计模式系列七
工厂模式:封装对象的创建 今天时间充裕点,把这个内容较多的工厂模式写一下。话说我刚毕业那会儿,没有网络可以找资料。抱着编程的书看到工厂类的时候,怎么也理解不了为什么要这么干。明明有直路,为什么要绕个弯。那个时候太单纯,理解不了这个世界的复杂性和需求的多样性。图样图森破,呵。即便现在说来,工厂模式也是会增加代码行数和复杂度的。但是我们需要这么做。尤其是搭配反射之类的高级语言特性,我们可以原创 2014-02-06 19:54:58 · 715 阅读 · 0 评论 -
超简代码版设计模式系列十
迭代器模式:提供一种方法顺序访问一个集合中的元素,而不暴露其内部表示public class Element {}public class ClassDemo { Element[] items; public Iterator createIterator(){ return new Elem原创 2014-02-06 19:57:34 · 740 阅读 · 0 评论 -
代码执行覆盖率工具Emma、cobertura简单比较
Emma和cobertura都是代码执行覆盖率工具。两者的使用方法和执行结果都很相似,甚至菜单名称也差不多。 在eclipse里能找到的eCobertura插件已经是好几年前的版本了,而且在上一个JUNO版本中可以安装上,而在新近的Kepler版本里会提示没有找到junit4插件什么的,只能手工安装(见本文最后) 相对来说emma还是一直在更新着。在eclipse里搜索emma插件原创 2014-04-06 09:41:16 · 2493 阅读 · 0 评论 -
java代理技术二(Cglib实现)
由于jdk默认实现只能对接口进行代理,对普通类就不行了。所以Cglib正是为了弥补这种不足开发的。原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强。因为采用的是继承,所以不能对final修饰的类进行代理。采用上一篇类似的代码:一个普通类(未明确指明实现接口)public class DoSomethingImpl2 { public void doA() { Syst原创 2014-04-17 14:31:23 · 1163 阅读 · 0 评论 -
java代理技术一(jdk默认实现)
很多框架和工具都是利用代理技术实现的。典型的如spring 的AOP、easymock、单元覆盖率检测工具等。静态代理比较好理解,就是自己写代理类来完成附加的功能,设计模式中专门有个代理模式讲这个。动态代理是指代理实现对象并不是在编译期间生成好的,而是在运行过程中产生的。这样的好处是当被代理的接口方法(注:jdk动态代理只能对接口进行代理)发生变化时,不需要改动代理实现类的代码。以下为示例代码:原创 2014-04-16 18:55:40 · 1131 阅读 · 0 评论 -
JPA学习
JPA是一套对象持久化规范,可以通过多种工具实现它。比如常见的Hibernate。按说初学就该照猫画虎的写例子,可是总改不了探究为什么的好奇心。于是在经历了不少曲折和困惑之后,终于把Hibernate和eclipselink两种实现的例子都完成了,也体会了一点二者的区别。先看在eclipse里的默认jpa项目的做法:新建JPAProject,填写项目名称和Targetruntime(因为只原创 2014-04-29 18:05:31 · 1748 阅读 · 0 评论