![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序
lff0305
这个作者很懒,什么都没留下…
展开
-
JDK11,Fix SpringBoot 2.0.3 启动的异常
其实没啥特别的,因为JDK11移除了一部分JavaEE的东西, 所以Class找不到了在pom里面加上就行了 <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> ...原创 2018-09-26 10:42:16 · 1653 阅读 · 0 评论 -
Oracle JDBC驱动, Tomcat连接池的坑
之前开发过程中遇到脏数据的问题.经过一段时间的分析,结果如下:1. 应用通过Tomcat JDBC Pool获得一个数据库连接;2. 通过这个连接执行了一些Insert, Update之类;3. 之后的业务代码,执行了一个时间比较长的查询;4. Tomcat JDBC Pool 认为这个连接使用的时间过长, 没有在配置的时间内把这个连接close, 所以自动回收并Close了这个连原创 2017-04-25 21:16:40 · 4776 阅读 · 0 评论 -
使用JDK的ServiceAbility获得特定的对象
遇到这样一个问题: Java程序中有很多个HashSet. 想找到其元素数目不正常的HashSet的实例. 当然这个可以用各种工具来做(比如JProfiler等等).这里用的是JDK自带的ServiceAbility Agent.具体介绍可以参见http://rednaxelafx.iteye.com/blog/1847971首先写个简单的测试程序:原创 2017-04-10 22:19:47 · 558 阅读 · 0 评论 -
问题: 一个数组长度为n, 求出其最小的k个元素并从小到大输出
遇到这样一个问题: 一个数组长度为n, 求出其最小的k个元素.想到三种解决方法:1. 最简单的, 给数组排个序, 然后把前面k个元素输出, OK.优点是简单明了. 缺点是做了很多额外的工作: k个元素后面的没有必要.2. 比上面好一些, 就是使用一个堆, 或者排序树. 首先把数组中前k个元素插入这个堆(或者排序二叉树中). 然后, 对后面所有的元素, a. 讲这个元素插入原创 2017-04-07 23:18:00 · 1979 阅读 · 0 评论 -
一个帮助编辑,测试Cron表达式的网站
用来协助测试*nix下计划任务脚本,和Quartz配置文件里面的CronExpressionhttp://www.cronmaker.com/很方便。转载 2016-05-22 15:44:52 · 2198 阅读 · 0 评论 -
一个奇怪的Exception
环境大概是,jdk8 + tomcat8,为了进行强加密,使用了bouncycastle的库。但是在启动的时候总报告一个错误 : must be passed recipient's private EC key for decryption查了半天发现代码没有问题,于是下载了bouncycastle的源代码,跟踪进bouncycastle发现错误出在一个instance of的判原创 2016-05-29 11:00:19 · 693 阅读 · 0 评论 -
解决Tomcat jspc的异常 Syntax error on token "<", ? expected after this token
在客户那边遇到这样的问题:An error occurred at line: [30] in the generated java file: [/usr/local/SharpView/work/Catalina/localhost/ROOT/org/apache/jsp/jsp/login_jsp.java]Type mismatch: cannot convert from Has原创 2016-02-24 17:27:16 · 4847 阅读 · 0 评论 -
用多线程并发的方式来计算两个矩阵的乘法
要求很简单,计算两个矩阵的乘法。为了加速,这里面使用了pthread库,来并发计算。基本思路如下图。比如用两个线程来计算。矩阵A * B。那么就把A分成两份。比如下图,就是0,2,4和1,3,5这两份。在线程1中计算第0,2,4行和B个列的乘积,在线程2中计算1,3,5行和B各个列的乘积。思路很简单。最后代码如下:// pthread.cpp : Defines the原创 2015-12-04 11:18:18 · 13246 阅读 · 2 评论 -
jQuery的i18n插件的一个限制
jQuery的i18n插件,作者是Nuno Fernandes和Matthew Lohbihler,提供了比较好的在JS中国际化的功能。近来在使用这个插件的时候发现了一个限制,如果不注意会引发js 的 error (可以在浏览器的console中看到)。具体为:如果一个资源的定义,为foo.bar = This is a message然后又有一个资源的定义,和上面的嵌套了:原创 2015-11-29 10:56:29 · 1808 阅读 · 0 评论 -
解决Unable to locate Spring NamespaceHandler for XML schema namespace
今天把Spring Security升级到3.2.9,然后报了这个错误。后来经检查相应的配置文件放在了spring-security-config-3.2.9.RELEASE.jar这个包里面,具体的位置就是META-INF/spring.schemas这个文本文件。把这个jar加入项目的classpath,解决。原创 2015-12-15 12:08:14 · 7438 阅读 · 1 评论 -
Fix 使用JMX读取Weblogic性能信息的时候报
如题。环境是一台Weblogic Server 10.3.6.0。在另一台机器上通过JMX来获取这台weblogic server的性能信息,比如可用堆内存之类。由于并发量比较大,偶尔会出现异常java.lang.IllegalStateException: Cannot register two instances of WorkContextAccessControllerat w原创 2015-12-09 15:02:56 · 1254 阅读 · 0 评论 -
使用椭圆曲线进行加密解密
JDK中自带了椭圆曲线的签名,但是没有实现椭圆曲线的加密解密。不过bouncycastle库实现了,下面的代码需要bouncycastle库。需要做的准备工作:1. 去JDK的下载页面,下载Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files for JDK/JRE 8这个东西。原创 2015-10-29 16:10:25 · 11008 阅读 · 2 评论 -
一不小心搞出来的空指针
没啥说的,看代码 String r = .....; String n = "Result: " + r == null ? "" : r.toString();嘿嘿。是运算符顺序的问题。上面的代码等价于("Result: " + r == null)? : "" : r.toString();原创 2017-08-23 09:38:38 · 229 阅读 · 0 评论 -
React/Redux和UglifyJS的一个奇怪的问题
使用React/Redux开发。在本地调试的时候一切正常。但是使用UglifyJS的时候,发现点击按钮的事件响应不对。本来应该调用按钮1的事件,结果调用了按钮2。仔细分析,事件触发是通过Redux的createAction来的:createAction(‘ACTION_1’, (param1, param2) => {param1, param2})) // 本来应该是这里 ...原创 2018-07-18 10:55:11 · 510 阅读 · 0 评论 -
puppeteer,解决无法选择父元素的兄弟元素的问题
页面原型如下,是一个下拉框组件,无关的CSS样式之类的省略了。<div> <div> <input name='x'> </div> <div> <div>Item1</div> <div>Item2&l原创 2018-04-13 12:15:20 · 4256 阅读 · 0 评论 -
发布Jacoco的结果到Confluence上
大概的流程是用Jenkins调用Maven,在Maven里面用Jacoco测试覆盖率。Jacoco的报告文件是本地的CSV文件。但是这样不太好看,还要去Jeknins Server上把CSV拉下来。后来测试了下,可以把CSV直接发布到Confluence里面,这样就方便了。在Confluence里面直接写CSV很简单,就是通过CSV宏{CSV}HEAD1,HEAD21,23,4{CSV}要...原创 2018-04-02 11:35:11 · 390 阅读 · 0 评论 -
写了一段代码检测jpg,gif,png的实际类型
项目中有一些图片,在IE里面没法正确显示。Chrome等没问题。经检查,发现这个图片的扩展名是.jpg,但是实际上是个png。。。。。。把文件保存成正确的.jpg就没问题了。为了解决这个问题写了段代码检测所有的jpg, png, gif文件内容和扩展名是否一致(检测文件头)public class PNGJPGTest { public static void main(String[] a原创 2017-12-06 17:10:26 · 707 阅读 · 1 评论 -
Java处理生僻字的问题
前几天遇到了生僻字的问题。很有意思。在不同的平台上显示的字符不一样,有些是方块有些是?有些干脆就是一个表情图标。 检查了编码没有问题,是UTF-8。研究了一下最终发现了原因。 出错的字符,落到了UNICODE的私人造字区里面,参考如下。 http://jicheng.tw/hanzi/unicode.html 不同的系统/字体,不能保证私人造字区的一致性。 自己写了段测试代码,发现目前Un原创 2017-12-05 10:56:29 · 22159 阅读 · 0 评论 -
SimpleDateFormat的坑
问题是一个错误的日期,没有得到正确的ParseException.查了下发现SimpleDateFormat有个方法,是指定是否参与计算的。比如13/01/2017 , MM/dd/yyyy来格式化,本来应该是错误的,因为月份是13了。但是因为指定了这个参数,结果参与计算,就没有得到异常而是得到了01/01/2018这个日期。代码如下:String s =原创 2017-11-02 10:46:27 · 958 阅读 · 0 评论 -
优化Java调用Nashorn引擎的性能
之前的项目里面大量使用了Nashorn引擎,目的是很多需要动态执行的代码放到了JavaScript里面,这样在用户那边比较好调试。但是因为性能的问题遇到了几个坑,最后经过一段时间,最终解决了,形成了这篇文章。使用预编译JS来加速在实际的应用中,基本上JS是不变的,变的只是调用的参数。于是乎可以通过预编辑,来进行加速。这样可以省略每次编译的耗时。代码如下。String scrip原创 2017-09-29 09:53:44 · 12384 阅读 · 5 评论 -
用树莓派来操控一个四位数码管
从TB买了个四位数码管。驱动是两个74HC755。代码如下。基本原理为:动态扫描,也就是一次点亮一个数码管,熄灭其它的,然后点亮下一个,熄灭其它的,以此往复。由于人眼镜的视觉暂留效应,看起来就像一直在点亮一样。四个数码管,数据输入ABCDEFGH连接到一个74HC755的八个输出输出口上。然后四个数码管的阳极通过三极管分别连接到另一个755的四个数据输出口上(另外四个没有使用)。当原创 2015-11-10 11:36:14 · 5217 阅读 · 0 评论 -
Pi4j的一个Performance的Bug
在玩树莓派的时候写了个程序,用来动态控制4位数码管。但是遇到了一个问题,就是数码管的刷新频率太慢,结果就是闪烁。于是写了一篇测试程序,最后结果是,用Java + Pi4j,大概每秒钟可以把GPIO置高置低1400次左右。这也太慢了。网上有一篇文章,http://codeandlife.com/2012/07/03/benchmarking-raspberry-pi-gpio-speed/原创 2015-11-09 16:27:22 · 1287 阅读 · 0 评论 -
使用Embedded Tomcat 和 Resteasy 来发布一个 Restful Service
需求是比较简便的发布,不需要配置文件。于是就像到了Embedded Tomcat。代码如下:public class TomcatLauncher { public static void main(String[] args) throws Exception { Path path = Files.createTempDirectory("webapps");原创 2015-11-09 16:11:31 · 1691 阅读 · 0 评论 -
一个Spring NamedParameterJdbcTemplate的异常
之前没问题的程序,改了SQL之后,报告异常:原创 2014-09-17 15:32:29 · 4425 阅读 · 1 评论 -
用JDK7新实现的椭圆曲线加密算法对数据进行校验
JDK7新实现了椭圆曲线加密算法(EC)。以前没有EC,只能借助第三方库,比如bouncy-castle。现在有了就简单一些。遗憾的是目前只实现了数据校验(Signature),而没有实现加密解密(RSA两者都实现了)。下面是一个例子。首先是一段验证的程序(网上转的)// Test EC exists Provider sunEC = new SunEC();原创 2014-03-18 10:49:32 · 2690 阅读 · 0 评论 -
JavaScript, prototype属性,要慎用
var R=function() { } R.prototype={ p : [], add : function(name){ this.p.push(name); }, report : function () { alert('array lengh = ' + this.p.length); for (var i=0; i<this.p.length原创 2013-08-14 16:14:04 · 845 阅读 · 0 评论 -
用Delphi7 Post 请求到Tomcat,得到Response,中文OK
比较简单的问题,好久没用Delphi了,折腾了一番。首先确定Tomcat中的应用,能够正确得到中文参数,没有乱码,这个不说了,网上太多文章了然后写一段Java测试程序:public ActionForward t1(ActionMapping mapping, ActionForm form, HttpServletRequest request, Htt原创 2013-05-02 17:39:01 · 2849 阅读 · 0 评论 -
一段IP到国家的转换的代码
项目需要,要获得客户访问的国家。数据库用的是 http://software77.net/geo-ip/ 的数据库。这个数据库比较简单,免费,能够根据ipv4转换成国家,但是详细的地区没有。但是对于需求来说够了。下载之后,去掉注释的部分和双引号,保存成.csv。改好的在http://www.kuaipan.cn/file/id_107671437086556161.htm下载代码如下原创 2012-12-28 13:48:15 · 2555 阅读 · 0 评论 -
proxool 0.9.1,解决 Attempt to register duplicate pool 异常
今天客户发来的日志中发现异常。该异常偶尔在程序启动的时候出现。java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: Attempt to register duplicate pool called 'pool' at org.logicalcobwebs.proxool.ProxoolDriver.con原创 2012-12-10 15:07:58 · 8221 阅读 · 0 评论 -
IDEA InteliJ 中Make 复制文件到输出目录
整个项目,Make的时候, properties等文件能够正常复制到输出目录中,但是一个.csv文件不行。最终发现是IDEA设置的原因:在 File -- Settings -- Comiler中加入需要的类型就OK了:原创 2012-12-12 10:31:59 · 1976 阅读 · 0 评论 -
Windows上配置iScsi发起程序,显示“CHAP密码不符合标准”
用VMWare装了个FreeNAS玩,在上面配置了iScsi Service.在实体机Windows7上,试图用iSCSI发起程序discover到远程的iSCSI存储,提示“CHAP密码不符合标准”。搞了半天,发现原因是,密码长度要在[12, 16]字节。提示得更详细一点啊!转:Dell存储设备中关于这个的描述:输入 “Secret”(机密),并在 “Confirm Secr原创 2012-11-12 15:52:17 · 8899 阅读 · 0 评论 -
Tomcat下同名目录冲突引发的404
很简单的问题,调了半天。目录结构是这样:webapps / ROOT / upload / 1.jpg访问server:8080/upload / 1.jpg 就是404搞了半天,发现有人在服务器上额外创建了一个upload文件夹:webapps / ROOT | | | +--原创 2012-10-31 11:51:59 · 817 阅读 · 0 评论 -
TreeMap的Comparator, 要慎用
自己调试代码的时候发现TreeMap.get, TreeMap.remove都拿不到正确的值(返回null)。后来发现,原因是TreeMap的实现,为了加速,使用了基于Comparator的查找:final Entry getEntry(Object key) { // Offload comparator-based version for sake of perform原创 2012-09-12 18:04:58 · 4229 阅读 · 0 评论 -
JavaServiceWrapper和log4j的配合问题
开发环境下一切正常。用JavaSer原创 2014-10-23 11:06:22 · 2099 阅读 · 2 评论 -
在ESXI的虚拟机里,搭建Android开发环境和模拟器,一波三折
环境为ESXI6.0,虚拟机为Server 2008R2 X64遇到的问题,以及解决方案,如下。1. 需要Intel HAWM,但是安装失败了。原因是虚拟机的虚拟化配置没有打开。解决方法:编辑ESXI服务器上的 vi /etc/vmware/config 加入一行 vhv.enable = "TRUE" (最后一行)libdir = "/usr/lib/vmware"authd.p原创 2015-10-09 16:13:05 · 13865 阅读 · 0 评论 -
Load JDBC Driver引起的死锁
在初始化JDBC Connection Pool的时候出现了死锁。 经分析,该死锁出现的前提为:1. Load 不同的JDBC Driver;2. 要在不同的Thread中。代码如下:public class PoolTest { public static void main(String[] args) throws Exception { boolean dea原创 2015-11-06 12:11:03 · 1147 阅读 · 0 评论 -
一次Java内存泄漏的分析
测试服务器,跑了一夜之后,java.exe占用了大量内存(将近5GB),系统内存占用97%。使用jconsole连接到该进程,发现一下的现象:1. Heap内存占用比较正常,不到2个G。非Heap内存不正常,大概3个G。2. 系统的线程数正常(500个左右)。3. 可以断定问题处在非Heap内存。进一步分析。查看Class页面。发现有一百多万个!!!类被加载。而且数目还在不断升原创 2015-09-15 17:31:29 · 1957 阅读 · 0 评论 -
用Java加载Mathematica做面部识别
版本信息:JDK8 + Mathematica 10.0比较简单。Java加载Jlink库,调用Math Kernel的FindFaces函数。具体如下:1. JLink.jar加入classpath中;2. JVM运行参数中,加入-Djava.library.path="D:\Program Files\Wolfram Research\Mathematica\10.0\System原创 2015-04-27 17:42:27 · 2115 阅读 · 1 评论 -
在Linux上用wget把tail输出的东西提交到其它服务器上
用户的需求。主要目的是判断Linux服务器上的日志文件中是否出现了某个关键字(比如XXX错误)。本来如果可以在上面装东西,就很简单了,用Java写一个。但是用户不喜欢在 服务器上装第三方的东西,只能接受使用Linux自带的工具。于是看了下,发现tail结合awk,wget可以实现。最后结果是tail -f /tmp/1.log | awk '{ system("wget -q原创 2015-03-16 11:27:35 · 1414 阅读 · 0 评论 -
RaphaelJS 的反锯齿设置
一些Raphael的函数,比如rect,默认会做反锯齿,结果就是边缘模糊,特别是那些比较小的Raphael组件。经查询可以通过下面的方式禁用:var paper = new Raphael(...)if (Raphael.svg) { paper.setViewBox(0.5, 0.5, paper.width, paper.height);}这样就好看多了。原创 2015-03-15 17:24:43 · 1006 阅读 · 0 评论