摘要: 前几天在我在博客上发了一篇《技术宅---我的网上抢火车票攻略》,短短4天内点击量达到8000多,可见火车票是近期最为火热的话题了。这几天又帮很多朋友代购火车票,不断总结经验教训,最后得到了一个完整的全自动刷票方案。 准备工作: 1)一键自动刷票软件Go-Home下载地址:http://code.google.com/p/go-home/,这个软件有多牛逼,看看下面的项目简介就知道了。。。 2)Firefox浏览器或者Chrome浏览器 3) 12306自动登陆脚本https://gist.github.com/raw/1570973/f200dd587f6d68ab81edf7...
阅读全文
摘要: 写在前面写这篇文章的起因是今天在12306上买火车票时,被这牛逼的网站给震撼到了,靠,牛叉得让人无语的用户体验啊。就讲讲我是如何利用一个小工具做辅助,幸运地抢到了回家的卧铺票的。希望能给有需要的兄弟们做个参考。 回顾下我今天网上购票的全过程,总结起来有四个难关,第一是登陆,第二是预定,第三是提交订单,第四是支付。本文的目的主要是为了在第一和第二关提供一些帮助。准备工作:1,firefox浏览器2,油猴脚本扩展GreaseMonkey(有园友反映这里看不懂啥意思,好吧,特别补充一段。GreaseMonkey是一个firefox扩展,当然,别再问我啥是扩展了,请自行google,简单说,就是装了这
阅读全文
摘要: 客户调用批量查询接口对Solr核进行查询时觉得查询响应时间有些慢,接口的内部实现目前是顺序执行每个查询,再把结果汇总起来返回给调用方。因此,考虑引入线程池对查询接口的内部实现进行重构优化。先声明一个大小可随之增长的线程池,privateExecutorServiceexecutor=Executors.newCachedThreadPool();//查询请求处理线程池 然后是主线程方法的代码:publicList<Map<String,String>>queryEntityList(StringentityCode,List<Long>idList)thro
阅读全文
摘要: 1,从前端传过来的参数是"\u9676\u9676\u6D4B\u8BD5\u8D26\u53F701"这样的unicode编码,需要将其转换为中文字符串,发现java.util.Properties类中有一个loadConvert函数可以完成这件事,直接copy过来使用。publicstaticStringloadConvert(char[]in,intoff,intlen,char[]convtBuf){if(convtBuf.length<len){intnewLen=len*2;if(newLen<0){newLen=Integer.MAX_VALUE;
阅读全文
摘要: 系统对外提供的Solr查询接口,在来自外部调用的压力加大之后,就会出现solr查询报Read Timed Out的异常,从表面现象上看是此时solr核压力过大,无法响应过多的查询请求。 但实际上此时并发查询压力并不是很大,那么为何solr核会无法及时响应查询请求呢?首先用top查看了下load average,也是很低,也佐证了系统本身压力并不大。 然后,用jstack –l <pid> 查看那些cpu使用率过高的线程,发现全都是GC线程,说明GC过于频繁,而且耗时过长,导致应用线程被挂起,无法响应客户端发来的请求,这种情况就应该是有存在内存泄露的问题咯。 于是,就用jmap将进.
阅读全文
摘要: 1,使用JMX监控Solr, 首先在solrconfig.xml中确保没有注释掉下述配置项,以便启用JMX。 <jmx /> 然后在启动时加入一些启动参数来支持远程连接: java-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=3000-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false-jarstart.jar Jdk提供了一个图形化的工具JConsole [JDK_HO.
阅读全文
摘要: 1,今天收到报警信息,说应用所在机器的硬盘空间不足了,上去一看,居然发现国庆这几天的日志信息累计达到了260多G,可看了下应用下的日志,实际只有几十M而已,进一步check后发现是调用的第三方应用在另一个日志路径下打出大量的Debug信息,回查代码后才明白是Logback和Log4J的冲突问题,于是写了一个类在应用启动时将Log4J的级别调高至ERROR级别,代码如下: publicclassLog4jInit{ privatestaticStringlogFilePath;privatefinalstaticStringDEFAULT_LOG4J_FILE_NAME="log4j.
阅读全文
摘要: 1,Solr合并索引数据有两种方法,第一种是1.4版本中引入的,通过CoreAdminHandler来实现,示例如下:http://localhost:8983/solr/admin/cores?action=mergeindexes&core=core0&indexDir=/opt/solr/core1/data/index&indexDir=/opt/solr/core2/data/index 上述命令会将core1和core2的索引合并到core0中去,这里最值得注意的一点是:一旦合并完成,必须在core0上调用commit操作,否则索引数据的变化对于search
阅读全文
摘要: 今天的工作需求如下:有一个生产者负责生成源数据,将数据插入到多个工作队列中,每个工作队列由一个线程池进行处理,即每个线程池中可以启动多个线程对与其对应的工作队列中的元素取出来进行处理。 我将业务需求抽象为一个“单生产者—多消费者集群”模型,写了一个模拟代码进行测试,明天打算把模型再套回到业务中去。importjava.text.DateFormat;importjava.util.Collection;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjava.util.Map.Entry;impo..
阅读全文
摘要: 今天碰到一个浏览器兼容性的问题,是IE和Firefox下iframe DOM操作的差异。本文借IE和Firefox在iframe DOM操作的不同,进行分析说明JavaScript在DOM操作中两者的不同。IE和Firefox对iframe document对象的差异性在IE6、IE7中,我们可以使用document.frames[ID].document来访问iframe子窗口中的document对象,可是这是不符合W3C标准的写法,也是IE下独有的方法,在Firefox下却不可以使用,Firefox下使用的是符合W3C标准的document.getElementById(ID).conte
阅读全文