develop
文章平均质量分 81
liweisnake
这个作者很懒,什么都没留下…
展开
-
使用freemaker和itext从html模板生成pdf文件
这里主要需要生成一个合同的pdf文档,拿到的合同格式是word文档,为了便于处理,我们用DW将其内容手动转为html。 所以接下来的问题主要就是如何从一个html的合同模板变成一个pdf文件。 首先我们定义好freemaker的util方法,使其易于调用public class TemplateUtils { private static FreeMarkerConfigu原创 2012-08-14 13:36:16 · 2855 阅读 · 1 评论 -
maven与第三方包
1、maven 手动加载第三方jar、zip包 http://blog.sina.com.cn/s/blog_638adf340100l9un.html 2、使用maven开发的项目,如何更方便地提取第三方包 http://mozhenghua.iteye.com/blog/1332766 3、在项目使用Maven管理时在webapp下的WEB-INFO下添加一个lib的文件夹转载 2013-08-31 15:32:12 · 993 阅读 · 0 评论 -
以jdbc为例搞清contextClassLoader
在之前的一篇文章浅议tomcat与classloader中已经介绍过ClassLoader在tomcat中的应用,但是相对来说都是对双亲委派模型的比较正统的应用。 这里再简单的介绍一下双亲委派模型,每次从底层的ClassLoader申请类加载之后都会自底向上判断这个类是否被加载过,然后再自顶向下的去加载类。双亲委派模型很简单,在ClassLoader中短短的loadClass方法就能搞定原创 2013-04-13 10:00:16 · 3499 阅读 · 6 评论 -
也谈谈扁平化设计
啊原创 2013-10-24 13:30:47 · 2529 阅读 · 0 评论 -
topK问题
关于海量topk问题,已经有无数文章讨论过,比如这里的程序员编程艺术:第三章续、Top K算法问题的实现或者算法探讨——Top K算法详细解析。 其问题本身比较容易,就是在一组海量数据中求得出现次数最多的k个数据。 对于这个问题,我们的思路应该如何较好呢? 简化问题,将k首先设置为1,如果要求最大的1个数据,该如何做? 首先,我们得使用一个数据结构保存每个数据出现的次数原创 2014-03-27 17:19:57 · 3686 阅读 · 0 评论 -
windows下几个截包方法的总结
写这篇文章其实源于之前做了几个爬虫,当然,不能称为纯粹的爬虫,因为他们不单是无限制的爬网页,大多数需要实现一定的业务逻辑,而最关键的就是登陆的过程以及获取登陆以后的cookie了。 其实第一个方法可以不用到截包,因为完全可以自己用应用程序模拟出浏览器的所有行为来登陆,比较麻烦的就是验证码识别,可以把验证码抓回来人工输入,也可以找网上的识别lib,但是,一般成功率不太可能到100%。原创 2012-10-18 13:52:32 · 5469 阅读 · 0 评论 -
ant集成maven
ant是著名的构建工具,maven则是著名的依赖管理工具,要说谁好用,我还真说不出来,因为各有各的擅长,maven对于从源码,编译一直到打包这块完全无可挑剔,因为约定大于配置,所以maven简单到最后只有一个命令maven clean install就搞定所有事情,最重要的是搞定包依赖;而ant则是一个相对万能的工具,有些像shell脚本,因为已经定义好了无数好用的task,而且还允许随意扩展。原创 2013-12-29 10:05:23 · 5079 阅读 · 2 评论 -
如何定制myeclipse逆向生成ORM映射实体
ORM比较方便的一点就是能够自动生成实体类和DAO类,可以说当entity和dao生成好了,基本上已经完成了一半的工作,大大提高了开发效率。 平时我常用的就是myeclipse,生成的过程简单快捷,代码也简洁不繁琐;当然,还有些框架如rapid-framework可以生成比较复杂的实体,而且配置起来也很麻烦。 但是当我们需要定制生成的实体类时,应该咋办呢? 从界面上看原创 2013-07-10 14:21:58 · 1326 阅读 · 0 评论 -
网页抓取以及一些防范的方法
随着互联网的兴起,网页抓取已经被越来越多的人所应用,可以用来做各种白色的,黑色的,灰色的程序。典型的如一淘就是正大光明的去抓取电商之间的价格来作对比。 然而,作为服务器端来说,网页抓取就是噩梦,一方面增大了服务器的压力,另一方面用机器人做了很多应该被禁止去做的事。 如何防范他们,我想,是现在服务器端一个需要研究的课题。这里就总结一下各种防范的措施。 如果严格的定义这个原创 2013-05-31 20:46:53 · 2513 阅读 · 0 评论 -
手动做UTF-8编码的转换
看到一个题目:不使用 String.getBytes() 等其他工具类/函数完成下面功能 public static void main(String[] args) throws IOException { String str = "Hello, 我们是中国人。"; byte[] utf8Bytes = toUTF8Bytes(str); FileOutputStr原创 2016-07-02 09:02:50 · 3043 阅读 · 0 评论 -
高并发风控技术解密(上)
风控在任何一个公司都是比较神秘的存在,不仅线上很少分享,从安全角度讲也很少对外披露它的架构及设计。本人将就参与的风控建设谈谈风控的技术。(本文来源于内部分享PPT,限于篇幅,一些细节没能交待完整) 风控架构演进 经过1年多风控系统的建设,已经将公司内部风控系统从业务代码为主的风控架构改造为了平台化为主的2代架构,进而改造为了基于平台化的动态化及离线数据模型化的2.5代架构,正在向深原创 2017-12-13 21:57:51 · 14690 阅读 · 4 评论 -
disruptor框架为什么这么强大
disruptor是LMAX的一个并发框架,在很难再继续压榨CPU的今天,disruptor显然又挑战了极限。LMAX可以达到单线程每秒6百万订单,用1微秒的延迟获得吞吐量为100K+。真是让人惊叹不已。 那么,disruptor到底为什么这么强大呢,有很多文章都对其进行了描述(见参考)。 归结下来有这么几点: 1. 弃用锁机制转而使用CAS。 Disrup原创 2013-08-12 17:40:13 · 15406 阅读 · 2 评论 -
网络序与主机序(大小端问题)
大端小端 大端小端的叫法是引自《格列佛游记》中的两个国家,其中一个国家规定要从鸡蛋的小的那端将鸡蛋打破,而另一个国家则相反,非要从大的那端将鸡蛋打破。 计算机中,高位在低字节的就是大端法,低位在低字节的就是小端法。 网络上的字节的传输顺序和主机上的字节表示顺序也一样分大小端,但是目前网络传输序默认是大端传输 在unix上网络序和主机序有如下转换的函原创 2013-07-22 10:48:54 · 1550 阅读 · 0 评论 -
从一个莫名其妙的问题到项目管理
在项目开始时,我划分了任务,其中一个新人负责日志模块,主要职责是配置日志,提供一个统一的日志获取接口。 在项目中我们实现了一个公司自己的简单mvc框架(我们公司甚至不能用开源的框架)。本来已经相对稳定的框架突然之间出了一个奇怪的问题,每次http请求时,servlet都会做一遍init,servlet执行请求的过程也变得非常奇怪,一个实例变量controllerMetaMap在定义的时候原创 2012-08-14 13:03:41 · 795 阅读 · 0 评论 -
程序员成熟的标志
程序员在经历了若干年编程工作之后, 很想知道自己水平到底如何? 自己是否已经成为成熟的程序员? 虽然程序员会对自己有一个自我评价, 但是, 自己的评价和社会的评价、专业的评价会有差异, 所以程序员自己并不能肯定这个评价。现实中, 除了各种证书之外, 很少有人会专门给出一个程序员的成熟度的评价。 人们往往是偶发性地就事论事地对程序员的工作作出好与不好, 行与不行的评论。 因此, 程序员对此感转载 2013-04-08 22:15:57 · 854 阅读 · 0 评论 -
判断是否是整数,小数或实数
经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数。 网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2这样的数字实际上会返回false,可是,他的确是一个数字。public static boolean isNumeric(String str) { if (str原创 2013-03-14 13:01:59 · 10571 阅读 · 1 评论 -
Class.forName与ClassLoader.loadClass的区别
Class.forName和ClassLoader.loadClass咋一看作用都一样,都是把类加载进来。 但是实际上他们是有区别的。 第一,ClassLoader.loadClass可以显式指定装载class的ClassLoader,但是Class.forName就不行了,他会默认使用调用类的ClassLoader来装载class。 第二,ClassLoader.l原创 2013-04-27 10:16:29 · 2258 阅读 · 0 评论 -
从上传一个文件说起
在编写一个应用时,上传一个文件是十分常用的功能,比如上传头像,上传证件,上传文件等等。 这个功能看似非常简单:把客户端传过来的文件保存到服务器,然后将这些元信息存入数据库,甚至好多现成的库都提供了这个功能。 但是如果真要写好了却并不是很容易,今天我就总结一些重要的步骤。事实上你会发现,这里面有非常多的话题。 1. 拿到上传文件后,首先应该做的一件事是,简单检查文件格式原创 2013-05-06 15:04:18 · 804 阅读 · 0 评论 -
帮助软件开发者提高效率的10个小窍门
作者Ilias Tsagklis 分享了有助于提高软件开发者工作效率的10个小窍门,以下是译文。参加了关于效率和时间管理话题的研讨会,并阅读了一些这方面的书籍,我了解了许多深刻的观念,用我一贯的工作方式做出了许多改变。运用这些新知识,我彻底的重新设计我的工作流程框架——这让我的工作效率有了惊人的提升。我愿意和你一起分享能够提高效率的最重要的小建议,这不但能够增加工作量,还能把更多的转载 2013-06-13 09:06:24 · 926 阅读 · 0 评论 -
如何防止多次提交和重复刷新
多次提交和重复刷新是web程序中容易被忽视但是却很重要的地方。比如一段程序在提交后就会转账,如果没做任何处理,用户多次刷新就会造成多次实际的转账发生,这样的程序是不能接受的。 对于多次提交问题。可以针对终端用户分为恶意的和非恶意的。 非恶意的多次提交,可以发生的场景如下: 1. 响应太慢,用户不知道之前是否提交成功,于是再次提交 2. 用户无聊,连续随便点击原创 2013-06-15 08:51:11 · 6302 阅读 · 1 评论 -
0-1背包问题
0-1背包问题是经典的动态规划的例子,个人觉得这是个非常好的问题,可以用许多方法来解决,而且思路也各有不同。 个人比较推荐这三个博客:http://love-oriented.com/pack/, http://www.wutianqi.com/?p=539, http://www.cnblogs.com/FreeAquar/archive/2011/12/17/2291436.html原创 2013-06-12 22:07:47 · 1444 阅读 · 0 评论 -
内存对齐
一.什么是内存对齐?为什么要内存对齐 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 为什么要对齐?有两个很重要的原因:第一,效率问题;经过内存对齐后,CPU的内存访转载 2013-06-19 09:36:33 · 683 阅读 · 0 评论 -
优秀的开发者 VS 糟糕的开发者
优秀的开发者是一个艺术家,一个享受创作过程的工匠。差的开发者只将自己当作负责产生代码的码农。优秀的开发者了解客户的问题。差的开发者只了解手头的技术问题。优秀的开发者会不断努力去理解“为什么”,然后去实现,同时能够把握大局。差的开发者专注于构建类、方法和配置文件,而不理会大局。优秀的开发者了解产品的完整架构。差的开发者只知道他写的组件。优秀的开发人员充分理解在产品中使用的技术转载 2013-07-22 09:59:23 · 857 阅读 · 0 评论 -
本地ip能够访问,但是公网ip不能访问的一般解决方法
由于需要写了个程序,分客户端和服务器端,结果上实际环境一测试,发现通过127.0.0.1能够访问,但是通过公网ip却不能访问。遇到这种问题,一般的解决办法如下:1. 检查防火墙是否有禁端口。在测试阶段可以先关闭防火墙,等到解决问题之后再设置规则。2. 检查IP是否绑定到所有ip可访问,这个跟程序有关系,如果服务器端程序在绑定ip的时候是指定了本机ip,比如127.0.0.1,那么客户端...原创 2019-01-06 11:17:54 · 43892 阅读 · 0 评论