
java
文章平均质量分 59
ykdsg
能喝一杯的程序员。
展开
-
Rete算法初探
关于rete算法的介绍,能找到的资料不少,但是往往对初学者不友好,一上来就是一堆Fact,TypeNode,AlphaNode之类的术语,非常容易劝退。这里总结一下自己的学习过程,希望从问题出发,方便理解rete算法本身。举个例子:例如:我们需要将提供“机票+酒店”、“机票+酒店+贵宾休息室”两种类型的产品给旅客。机票、酒店、贵宾休息室需要满足一些基本的限制条件。并且:“机票+酒店”产品要保障:酒店位于目的地且到达当天可以入住。“机票+酒店+贵宾休息室”产品要保障:酒店位于目的地且到达当.原创 2021-06-22 21:37:44 · 2176 阅读 · 4 评论 -
java 通用IO API 设计-- 赏玩
这里先贴一下原文内容:从https://github.com/oldratlee/translations/blob/master/generic-io-api-in-java-and-api-design/README.md上摘入。原文链接:A generic input/output API in Java-Rickard Öberg(PS:文章原始链路已失效)译文发在:【译】...原创 2019-10-24 11:43:19 · 294 阅读 · 0 评论 -
java线程状态研究
按照官方的说明java 的thread 有以下几种状态:NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED会发现通过jstack 打印出来的线程状态不是这样的。下面这个图是通过IBM 的jca 工具来分析jstack dump文件。顺便说一下jca 是目前发现最好的研究线程栈的工具,本地工具秒杀所有在线分析网站。可以从https://www.ibm.com/support/pages/ibm-thread-and-monitor-.原创 2020-10-08 22:41:22 · 1166 阅读 · 0 评论 -
Intellj IDEA 启动参数调优
修改 IntellJ/bin/idea.exe.vmoptions (记得备份哦亲)修改成-Xms512m -Xmx512m -Xmn164m -XX:MaxPermSize=250m -XX:ReservedCodeCacheSize=64m -Xverify:none -Xnoclassgc -XX:+UseParNewGC -XX:+UseConcMark原创 2013-05-27 08:53:49 · 9351 阅读 · 0 评论 -
spring bean 动态替换
系统发展到一定程度就会面临分库分表的问题,我们要考虑的是怎么让系统平滑的从老的表迁移到新的表。通常新表的数据可以通过binlog同步的方式同步老表的数据,在某一个时间点通过开关的方式让读写老表的操作切换到新表。这里就涉及到如何方便的切换新老操作。加入了新表,必须要有新表的DAO,现在的问题是如何根据开关调用新老DAO来执行操作。先说下目标:能够方便的实现开关切换。对现有代码侵入尽量的少原创 2014-01-24 14:10:49 · 5548 阅读 · 1 评论 -
java 通过velocity导出word
项目需要通过程序生成word文档,就是业务方提供了一份模板,里面的有一份表格或者合同,程序主要就是把数据填到word中,并提供用户下载。首先想到的是iText和POI。iText操作pdf还不错,但是对word貌似就很吃力了。POI对excel读取和操作还行,对word的写入太复杂。上网搜了下java导出word,发现可以通过FreeMarker来完成还能保持word中复杂的样式。我们的工程中已经原创 2014-01-22 19:44:22 · 8383 阅读 · 1 评论 -
java.lang.instrument学习 (二),javassist实例练习
学习了instrument之后试着自己写点东西,上一篇的例子中使用的是asm,毕竟是面向字节码的,api还是比较复杂的。其实有时候的需求很简单,无非就是看下类里的方法啊之类的。javassist是基于源码级别的API比基于字节码的ASM简单。下面就是对使用到的类打印出所有方法的Transformer:public class TestTransformer implements Class原创 2013-11-02 12:02:54 · 4285 阅读 · 1 评论 -
FastJson 泛型转换踩坑
一直用FastJson 做rest接口的序列化,FastJson对泛型的支持也非常好。经过一段时间使用后发现不定时的会报JsonObject can't covert to ****的错误,但是重启之后就好了。排查过程不赘述,直接上代码演示String itemJsonStr = "{\"models\":{\"_defaultModel\":{\"id\":824,\"itemName\":原创 2015-12-30 10:17:29 · 27458 阅读 · 2 评论 -
maven 插件开发
背景:项目中使用了一些内部的二房包,有些是公共的工具类封装,有些是一些client的api。在开发的时候通常使用的是SNAPSHOT 版本,在正式发布的时候通常需要使用正式版本,但是这个很容易忽视,导致下一次发布的时候可能因为版本的原因导致线上出错。所以这里开发一个maven插件,在打包的时候可以检验依赖树中内部二方包是否使用了SNAPSHOT版本。插件开发:maven插件相关原创 2015-12-16 21:28:16 · 759 阅读 · 0 评论 -
HashMap在并发环境下的死循环分析
今天在看《分布式java应用》这本书的时候看到作者提到HashMap在多线程并发的环境下有可能出现死循环,导致cpu100%的现象,看了下源码结合网上的分析说明下这种可能性。可能出现问题的地方是在扩容的时候void resize(int newCapacity) {原创 2011-04-05 23:47:00 · 5271 阅读 · 4 评论 -
单元测试的窘境
大家都知道单元测试的重要,网上也有很多讲单元测试的文章,但是脱离网上的case实际维护用例的时候就不是那么回事了。我们团队从17年开始摸索单测的实行,发现了在落地过程中的一些问题。 首先测试的类型是不一样的,先讲几种对单测比较友好的类型:第一种DAO层的单测,DBunit +SpringTest 事务回滚算是豪华套餐了,需要解决的问题就是验证sql是否符合预期。这种...原创 2019-03-11 23:19:51 · 298 阅读 · 0 评论 -
线程级缓存ThreadLocalCache
很多时候一条操作链路上需要获取很多重复的基础信息,比如用户的信息,可能在AO层也有,Service层也有,这样造成的问题是每次都需要发起一次调用(数据库orRPC),这样造成的问题是对性能的无谓浪费,当然可以通过参数进行透传,但是这样带来的问题是必须修改方法的定义,一方面遗留代码需要大量修改,另一方面接口的参数也会极具庞大,特别是A->B->C,这样的方法调用链,如果只有A和C用到了用户数据,B就算没用到也需要定义一个用户信息的入参,这个对接口的定义造成了很大的污染。...原创 2019-03-21 10:11:24 · 7444 阅读 · 2 评论 -
单元测试的解答
接上篇https://blog.youkuaiyun.com/ykdsg/article/details/88410310来说说自己的思路,一家之言不一定对。针对上一篇的总结的几个问题:白盒测试需要针对代码的内部实现逻辑,成本较高。 数据初始化&准确性的问题:怎么保证每次跑用例的时候数据是可控的,不会被其他人篡改。 需要处理复杂的依赖关系,spring 容器一起来就是一堆,一不小心还...原创 2019-06-04 10:03:38 · 212 阅读 · 0 评论 -
springboot同package多个ImportResource引起重复加载的问题
在写测试用例的时候,同一个package 的不同用例分别各自配置了application类,里面指定了配置文件@ImportResource(value = { "classpath*:spring-context-test.xml" })结果发现一直报重复bean定义的错误,怎么查找都定位不到,后来看了下启动日志,发现spring-context-test 被加载了多次,刚开始还没怀...原创 2019-07-01 19:24:50 · 4192 阅读 · 2 评论 -
树状结构存储和快速匹配
背景:实际工作中有很多需要树状结构来表示某些数据关系,比如省市区,商品的几级类目,组织架构等。继承关系驱动的设计比较常规的设计是使用一个parent 字段来表示继承关系,构建二维关系表。这个方案的优点是:直观简单,非常容易理解,数据维护上成本也较低。但是缺点同样明显:查询的效率太差,比如我要在代码中构造出Food 这棵,需要先便利parent_id为1 的数据,再根据返回的...原创 2019-07-01 23:37:07 · 2900 阅读 · 1 评论 -
springboot2.* 解决域名带下划线出错的问题
项目中使用了springboot2.*版本,结果发现域名中包含下划线的时候,比如adc_test.***.com ,结果接直接返回400了。结果发现这个是在tomcat 版本在8.5.31以上都会出现问题找到个问题了接下来就是想解决方案,于是想着把tomcat 的版本给退回去,网上找了下资料,说是pom文件中配置tomcat的版本就可以了<tomcat.version>8.0...原创 2019-08-15 21:25:13 · 1729 阅读 · 0 评论 -
Java I/O通用api设计 (一)
原文A generic input/output API in Java(by Rickard Öberg)中给出了一个通用Java IO API设计,并且有API的Demo代码。更重要的一点是,这篇文章给出实现这个API设计本身的步骤和过程,这让API设计实现过程有了条理。文中示范了从 普通简单实现 整理成 正确分解、可以复用、可扩展的API设计 的过程。这个很值得理解和学习! PS:转载 2013-04-15 17:31:43 · 973 阅读 · 0 评论 -
Git学习
首先这个不是入门教程,如果要入门的话可以google 下git入门,你会得到比较多的资料,这里主要是对git里的一些概念进行清晰的解释。如果你连git环境都没有的话就没必要看下去了,先goole下git 入门吧。推荐下一个git在线学习网站,可以通过例子来联系命令并看到返回结果http://pcottle.github.com/learnGitBranching/1.commit在原创 2013-03-25 09:50:34 · 1069 阅读 · 0 评论 -
自定义doclet编写
因为对外提供接口需要维护接口文档,但是文档维护一直是成本很高的事,通常是忙着赶项目想着等项目结束之后再补。但是通常是忙过这一阵子就可以------忙下一阵了。so 就一直会被调用方或者测试拉住问这个接口是干啥的呀,这个参数是什么意思啊,交流成本很大。很早就想到了用javadoc来实现,但是javadoc定制行太差,我只想针对某个包下的某些java文件进行doc处理。标准的doclet貌似不能做到,原创 2013-03-22 20:19:44 · 3721 阅读 · 0 评论 -
SVN配置
1,软件下载 下载Subversion服务器程序。 到官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003部分,然后选择" this directory ",这样我们可以看到许多下载的内容,目前可以下载 svn-1.4.0-setup.exe 。 下载Subversion的Windows客户端TortoiseSVN。 Tortoi原创 2008-04-26 10:39:00 · 922 阅读 · 0 评论 -
Tomcat6配置Admin
Tomcat 5.5 以后的binary 核心安装版不再集成Tomcat Administration Web Application,需要独立下载安装。而Tomcat 6.0.14的Administration Web Application没有独立下载的安装包。不过在网上查到可以使用Tomcat 5.5 的Administration Web Application在Tomcat 6.0下配原创 2008-07-26 16:18:00 · 2815 阅读 · 0 评论 -
Java传值的基本问题
class ValHold{public int i = 10;}public class ObParm{public static void main(String argv[]){ObParm o = new ObParm();o.amethod();}public void amethod(){int i = 99;ValHold v = ne原创 2008-06-02 20:04:00 · 946 阅读 · 0 评论 -
Tomcat 设置内存和在eclipse中的设置
这是转载 ,日志原文:http://nxzhaoning.blog.sohu.com/95873512.html; Tomcat默认可以使用的内存很小,在较大型的应用项目中,这点内存是不够的,有可能导致系统无法运行。常见的问题是报Tomcat内存溢出错误,Out of Memory(系统内存不足)的异常,从而导致客户端显示500错误,一般调整Tomcat的使用内存即可解决此问题。转载 2009-03-23 10:57:00 · 16948 阅读 · 0 评论 -
关于数组循环拼装的性能
开发的时候经常需要对数组进行处理,其中就有要把数组转成sql当中in后面的字符1.public static String toString(Object[] a) { if (a == null) return "null"; if (a.length == 0) return "[]"; StringBuilder转载 2009-10-30 09:40:00 · 694 阅读 · 0 评论 -
java多线程的效率就一定高吗?
很久没上来了,发现虽然资料和书看的很多,但是很久没碰的东西还是很容易淡忘。以后希望能多记录吧。 今天玩了把线程池,并对其中的参数做了一些调整,并记录在多并发情况下线程数对各种情况的反应。程序是网上找的,并作了稍微修改。java的线程池实现,ThreadPool package net.zj.hz.yk.threadpool;import java.util.Lin原创 2010-01-29 21:05:00 · 4590 阅读 · 0 评论 -
memcache 集群
memcache是一个分布式的缓存系统,但是本身没有提供集群功能,在大型应用的情况下容易成为瓶颈。但是客户端这个时候可以自由扩展,分两阶段实现。第一阶段:key要先根据一定的算法映射到一台memcache服务器。第二阶段从服务器中取出缓存的值。但是有一个问题,比如其中一台服务器挂了,或者需要增加一台服务的时候,这个时候第一阶段的算法就很重要了,怎样使得原来的数据尽可能的继续有效,减少扩展节点或缩减节点带来的冲击。下面列出想到一些解决方法:一:hash一致性算法:优点:当一个节点失效的时候,其他节点的数据不会原创 2011-03-15 10:42:00 · 5906 阅读 · 0 评论 -
ConcurrentHashMap 源码分析 (二)
接上文,CurrentHashMap的containsValue 方法在第一层for循环的时候读取了count,但是并没用到这个变量, int c = segments[i].count;这是因为segment[i].count是对volatile变量的访问,接下来segments[i].modCount才能得到几乎最新的值。写volatile变量和它之前的读写操作是不能reorder的,读volatile变量和它之后的读写操作也是不能reorder的。 修改modCount发生在修改count之前,原创 2011-03-19 14:42:00 · 1506 阅读 · 0 评论 -
双重检查锁定的漏洞的分析 The "Double-Checked Locking is Broken" Declaration
本文根据http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 来翻译,纯粹为了自己学习做记录,有生硬不通的地方还请海涵,也欢迎各位朋友指正。在多线程环境下实现延迟加载时 Double-Checked Locking是通常使用的而且效率比较高的方法。不幸的是,如果没有其他同步机制的话,他也许不能在java平台可靠的运行。当使用其他语言实现时,比如c++,这取决于处理器的内存模型,编译器引起的reordering 和编译器与翻译 2011-04-07 21:57:00 · 3286 阅读 · 0 评论 -
利用Socket搭建简单的Http服务器
一直不理解Http协议,觉得很抽象很神秘,看 《how tomcat work》时看到搭建了一个简单的http服务器,发现协议其实就是对消息格式的规范,就是大家都按这个规范约定的格式发消息收消息。1.建立sockerserver服务ServerSocket serverSocket = null; int port = 8088; try { serverSocket = new ServerSocket(port, 1, InetAddress .getByName("12原创 2011-04-15 17:27:00 · 2382 阅读 · 0 评论 -
ConcurrentHashMap 源码分析 (一)
很早就想研究ConcurrentHashMap ,不过一直拖拉,我也是个很容易被新奇好玩的技术吸引的人,这个呢有好也有坏。废话不多说上干货。 ConcurrentHashMap 最重要的就是引入了Segment 的概念,他在自己内部定义了这个Class来管理数据,这个Seg原创 2011-03-17 22:26:00 · 6897 阅读 · 0 评论 -
系统并发杂谈
转自:http://www.ibm.com/developerworks/cn/java/l-multithreading/ 并增加自己的分析,希望对并发系统的设计提供一种思路。首先举一个简单的例子系统中有一个服务提供者,他通过接口对外提供服务,比如打印hello wo原创 2011-08-23 20:22:05 · 705 阅读 · 0 评论 -
java 任务调度过程中的监控
转自:http://www.ibm.com/developerworks/cn/java/l-safethread/对一些代码按自己的理解修改在JAVA环境中,一个任务一般是由一个独立线程来引导实现的,如果在执行过程中,某一个线程发生异常(产生的原因很多,比如软件转载 2011-08-25 20:39:08 · 3374 阅读 · 0 评论 -
java concurrent (1): 锁机制
JDK5之前多线程的锁都是使用synchronized ,JDK 5中的锁是接口java.util.concurrent.locks.Lock。另外java.util.concurrent.locks.ReadWriteLock提供了一对可供读写并发的锁。ReentrantLock是java.util.concurrent.locks中的一个可重入锁类。在高竞争条件下有更好的性能,且可以中断。深入原创 2011-12-17 00:48:12 · 1321 阅读 · 0 评论 -
自定义java Doclet的调试
工作中经常需要对外提供接口,这个时候接口的文档就非常麻烦,同时是维护在wiki或者其他地方,但是修改代码之后很可能没有及时更新wiki,造成很多交流的成本。所以想直接通过javadoc 生成接口文档的方式。发现maven提供的javadoc插件,但是原生的Doclet不能满足我的要求。所以需要自己定义doclet。来看下Doclet的定义:Doclet 是用 JavaTM编程语言编写的程序,它原创 2013-03-20 09:10:50 · 3697 阅读 · 0 评论 -
使用maven javadoc 控制台乱码的问题
最近一致在搞javadoc插件,发现控制台在输出日志的时候老是乱码,网上找了一圈也没什么太有价值的信息。最后看到http://xiabin1235910-qq-com.iteye.com/blog/1609390JAVA_TOOL_OPTIONS-Dfile.encoding=UTF-8环境变量里加个这东西 这是JVM 全局属性 主要是之前原创 2013-03-21 08:45:35 · 3341 阅读 · 0 评论 -
jrebel 使用
很早就关注jrebel的使用,因为java开发免不了重启服务器,现在一般的服务器所支持的热启动都是不改变类结构的前提下,比如不能新增,修改,删除已有的方法,只能改变方法体的实现。基本上没有太大的意义。之前用过jrebel但是效果不是很理想,一方面自己的机器配置比较低内存有限,jrebel用起来之后还是比较占内存的,通常多用几次热部署之后就会导致class重新加载不成功。现在机器好了不少,jrebe原创 2013-04-02 16:47:57 · 2198 阅读 · 0 评论 -
URL中文乱码问题的解决
今天在做JSP页面的跳转时,发现response.sendRedirect("../../../reportstat2/noselect.jsp?message=中文"),结果页面显示“中文”是乱码。且跳转的两个页面都是GBK编码。上网查得response.sendRedirect("../../../reportstat2/noselect.jsp?message="+java.net.URL原创 2008-04-21 15:19:00 · 1691 阅读 · 0 评论