-
测试
最近感觉活的有点迷迷糊糊,也许是刚刚放完年假的关系。说到测试,我其实是一个非常不喜欢测试的人。也是最近经常出问题,所以这里也记录一下给自己一点警戒。修改代码前一定要先想清楚导致问题的原因,然后再修改。修改时要考虑到所有的因数,因为很多方法不止一个地方用到,其他的地方也会用到。修改后一定要测试,因为很多因素会导致出现问题。测试,不仅仅要测试成功,失败也很重要。反反复复,各种情况下考虑。还有就是以前出现过的问题,修复了,修改了相关代码最好也进行测试,防止旧病复发,所以最好是将测试框架进行自动化测试。
测试 -
java.lang.NoSuchMethodError
这个错误其实很明显,就是没有这个方法,一般情况可能是更新代码少了文件。但是今天遇到一个奇怪的事情,修改的文件都已经更新过了,但是依旧出现了这个问题,究竟为何?```java.lang.NoSuchMethodError:xxxx.xxxx.ClassName.select(ILjava/lang/String;)Lxxxx/xxxx/xxxxE```想了很久,我把全部代码放了一遍后发现没有问题了,想起了看过的一本书说过更新代码的一个陷阱就是有些方法修改后,引用方法的地方也会在编译的时候发生变化。如下代码:`A.java````javapublicclassA{publicstaticvoidmain(String[]args){inta=0;Bb=newB();b.say(a);}}````B.java````javapublicclassB{publicvoidsay(intinput){System.out.println("输入值:"+input);}}```编译运行:```bashE:\cert>javacA.javaE:\cert>javaA输入值:0```然后修改`B.java````...
Java NoSuchMethodError -
Maven项目JUnit报错
今天一个项目出现一下debug信息:```2017-02-2315:22:36,175DEBUG[org.springframework.core.type.classreading.AnnotationAttributesReadingVisitor]-Failedtoclassloadtypewhilereadingannotationmetadata.Thisisanon-fatalerror,butcertainannotationmetadatamaybeunavailable.java.lang.ClassNotFoundException:org.junit.Testatorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1308)atorg.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1142)atorg.springframework.core.type....
JUnit Maven Spring -
Apache配置证书问题
今天使用Apache配置SSL出现了一个问题,使用电脑浏览器访问显示了绿锁,但是在手机端访问时,微信访问不了,UC和QQ提示错误,最后发现原来是没有配置中继证书:`SSLCertificateChainFile`。
Apache -
EasyMock模拟HttpServletRequest进行JUnit测试
使用JUnit测试的时候,HttpServletRequest需要进行模拟才可以,所以就用到了EasyMock,使用方法如下:```javapublicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{StringqueryString="name=acgist&age=24";String[]queryStrings=queryString.split("&");intindex;Stringkey,value;Mapmap=newHashMap();HttpServletRequestrequest=EasyMock.createMock(HttpServletRequest.class);for(Stringparas:queryStrings){index=paras.indexOf("=");key=paras.substring(0,index);value=URLDecoder.decode(paras.substring(index+1),"utf-8");map.put(key,value);Easy...
JUnit EasyMock HttpServletRequest -
作图工具-SmartArt
之前看过一些漂亮的知识图谱,我一直在找是什么工具做的,今天才发现原来是Word里面的SmartArt。当然还有很多图形工具或者建模工具:Visio、PowerDesigner、RationalRose等在线的工具:百度脑图、ProcessOn等
SmartArt 作图工具 -
使用IP调用HTTPS的WebService问题
错误信息:```Causedby:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:Nosubjectalternativenamespresentatsun.security.ssl.Alerts.getSSLException(Alerts.java:192)atsun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)atsun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)atsun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)atsun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1509)atsun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.j...
Java HTTPS WebService -
SimpleDateFormat的线程安全问题
今天数据库保存的时间有错乱了,以前我以为是服务器的时间有问题,今天才发现原来是`SimpleDateFormat`这个类的`format`方法不是线程安全的,里面使用的`calendar`是个类变量,所以导致多线程静态对象出现了数据错乱或以下的一些异常:```Exceptioninthread"pool-1-thread-123"java.lang.NumberFormatException:Forinputstring:""atjava.lang.NumberFormatException.forInputString(NumberFormatException.java:65)atjava.lang.Long.parseLong(Long.java:601)atjava.lang.Long.parseLong(Long.java:631)atjava.text.DigitList.getLong(DigitList.java:195)atjava.text.DecimalFormat.parse(DecimalFormat.java:2051)atjava.text.SimpleDateFormat.su...
Java SimpleDateFormat -
微信链接跳转
今天发现一个奇怪的事情,微信里面比较长的URL复制到对话框和使用JS跳转都不能访问。但是使用重定向却可以,感觉是被微信给屏蔽了。短一点的链接没问题,长的链接基本上GG。解决办法正在寻觅中。其实问题很简单,URL里面带有**localhost**关键字。
微信 -
思考问题
1.确认问题2.引发问题的所有因素数值的正负、字符串长度、空值、异常、网络等等3.需要达到的目标4.修改和修改后有可能引发的连锁反应>参考:[https://www.douban.com/group/topic/40236353/](https://www.douban.com/group/topic/40236353/)[https://www.zhihu.com/question/20962587](https://www.zhihu.com/question/20962587)
思考问题 -
@media中max-width和max-device-width
`max-device-width`和`max-width`的区别:1.`max-device-width`是设备整个显示区域的宽度,例如,真实的设备屏幕宽度。2.`max-width`是目标显示区域的宽度,例如,浏览器宽度。3.如果使用`max-device-width`,那么在PC浏览器上浏览网页时,缩小或放大浏览器时是不执行CSS的,因为“PC设备”没有变化。但如果使用`max-width`,缩小或放大浏览器时是执行CSS的,因为“显示区域”即浏览器大小发生了变化。4.如果使用`max-device-width`,那么当手机由竖变横时,CSS是不执行的,因为“手机宽度”并没有变化。如果使用`max-width`,那么当手机由竖变横时,CSS是执行的,因为“显示区域”发生了变化。5.通常,面向“移动设备”用户使用`max-device-width`;面向“PC设备”用户使用`max-width`。另外使用`@mediascreenand(max-width:1200px){html{font-size:18px;}}`这样设置的时候,最好使用的`max-xxxx`进行判断。`@mediaonlyscree...
@media max-width max-device-width -
Calendar
之前定时任务一直没有问题,今天把时间改为上午所有任务都要执行完成,然后发现了居然一直再重试相同的几个任务。问题就是时间的问题:```javaCalendarnow=Calendar.getInstance();now.setTime(newDate());now.set(Calendar.HOUR,0);now.set(Calendar.MINUTE,0);now.set(Calendar.SECOND,0);now.set(Calendar.MILLISECOND,0);```上面的代码,如果是上午执行,结果`yyyy-MM-dd-00:00:00`,下午的时候就会变成`yyyy-MM-dd-12:00:00`,就是这个问题导致了时间比较的时候出了问题。所以应该使用**HOUR_OF_DAY**。```javaCalendarnow=Calendar.getInstance();now.setTime(newDate());now.set(Calendar.HOUR_OF_DAY,0);now.set(Calendar.MINUTE,0);now.set(Calendar.SECOND,0);now.set...
Calendar -
统计Spring定时任务当天执行次数
以下代码为统计Spring定时任务当天执行的次数:```java/***定时任务统计*/publicclassCronCountUtils{/***计算一天内定时任务执行次数*@paramexpression表达式*@return执行次数*/publicstaticfinalintcount(Stringexpression){returncount(null,expression);}/***计算一天内定时任务执行次数*@paramdate时间*@paramexpression表达式*@return执行次数*/publicstaticfinalintcount(Datedate,Stringexpression){CronSequenceGeneratorgenerator=newCronSequenceGenerator(expression,TimeZone.getDefault());Calendarcalendar=Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY,0);calendar.set(Calendar.MINUTE,0);c...
Spring 定时任务 -
HTML5不刷新页面修改地址栏
现在很多页面都是用`ajax`来进行数据交互,但是有些场景就会比较尴尬,比如个人中心,进去点修改密码,但是地址栏没有变,下次复制地址后进来还是个人中心,并不是修改密码,所以就有了这个`history.pushState`这个东西,直接修改地址栏的地址。废话就这么多,看代码:```javascripthistory.pushState(state,title,url);````state`:状态参数,通过`history.state`可以获取,其他页面跳转的值为`null``title`:页面标题(不过好像并没有什么用)`url`:修改后的地址这个修改地址栏后放入到`history`里面,使用`history.back`,`history.go`或者浏览器的前进后退都有效果。还有一个`history.replaceState`这个不会放入到`history`中,只能修改当前地址。DEMO地址:[http://www.acgist.com/demo/history/index.html](http://www.acgist.com/demo/history/index.html)>参考文章:[http://...
history HTML5 修改地址栏 -
WordPress固定连接
使用固定连接更加有利于SEO,URL也更加优美。开启方法如下:*修改`httpd.conf`,开启网站目录的重写功能:```OptionsFollowSymLinksAllowOverrideNone```改为:```OptionsFollowSymLinksAllowOverrideAll```*在你的网站根目录,添加`.htaccess`文件:```bashtouch.htaccess```*然后修改用户为Apache,这样就不用手动修改,直接在后台固定连接配置就可以了:```bashchown-Rapache:apache.htaccess```
WordPress 静态化 固定连接 -
WordPress没有写入权限
使用WordPress上传图片时,提示:`WordPress解决无法建立目录wp-content/uploads/yyyy/MM,有没有上级目录的写权限。`这个其实很简单就是你运行WordPress的时候,用户没有这个文件的写入权限。解决办法:*建立uploads文件夹,假设WordPress的目录为:`/home/www````bashcd/home/www/wp-contentmkdirsuplaods```*查看运行WordPress的用户,假设使用的Apache作为http服务器```bashpsaux|grephttpd```如下图:apache就是用户名,将uploads的用户改为apache:```bashchown-Rapacheuploadschown-Rapache:apacheuplaods```后面一条是把uploads的用户和用户组都改为apache,然后你就可以上传文件了。当然应该还可以直接将Apache的用户...
WordPress 文件上传 -
CentOS安装WordPress
安装PHP/MySQL/httpd(一般Apache默认安装好了)```bashyuminstallmysqlmysql-servermysql-develyuminstallphpyuminstallhttpd```启动命令:```bashservicemysqldstart/stop/restartservicehttpdstart/stop/restart```设置MySQL密码和外网访问,修改后需要重启MySQL服务:```sqlmysqlusemsyql;updateusersetpassword=password("password")whereuser='root';GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'password'WITHGRANTOPTION;FLUSHPRIVILEGES;```修改`/etc/httpd/conf/httpd.conf`修改默认目录(假设你的WordPress目录为`/home/www/html`):```DocumentRoot"/home/www/html"```如果提示`您的PHP似乎没有安装运行Wor...
CentOS WordPress -
Java总结
总结一些编码的注意事项:1.变量使用前一定要判断空值。2.方法尽可能的拆分为不同用途的小方法,减少每个方法的行数,尽量复用代码。3.Spring定时器中`00/4006-07**?`这个写法,执行的时间不是`6:00/6:40/7:20`而是`6:00/6:40/7:00/7:40`这样,是每个小时分开的。##隐式转换```shorta=1;a+=1;//正确a=a+1;//报错```##字符串拼接```Stringa="1";Stringb="2";Stringc=a+b;//StringBuilder```##float```floata=1.1;//错误```##连接接入连接接入注意管理,防止内存泄露,可以考虑使用`WeakHashMap`。##@SafeVarargs```java@SafeVarargspublicfinalTof(List...list){//...}```>必须是final方法##Java监控Java启动本地监控自动启动,如果需要远程监控可以使用JMX。本地RMI随机端口远程JMX指定端口:代码(RMI/HTTP)或者命令参数本地监控端口随机(自带):jconsole
Java -
常见场景问题整理及解决办法
一般场景应该想到的问题和解决办法。提交表单:*重复提交:*禁止刷新*处理完成重定向*Token*返回上一页:*在新窗口打开*ajax提交
常见问题 -
URL参数转换
将URL参数转为MAP或者JSON格式DEMO地址:[http://www.acgist.com/demo/url-map/index.html](http://www.acgist.com/demo/url-map/index.html)
URL2MAP URL2JSON URL转MAP URL转JSON