岁月云——java基础
文章平均质量分 61
根据实际项目中用到java基础,没有用到就不会写在此专栏中,真实的展现什么是面向接口编程。如果这件事情在10年前就开始做就好了,现在有点回忆录的性质。不过最好是对读者有点启发
warrah
岁月会计云
展开
-
drools规则引擎
这个大多搜索导的都是把规则放到一个文件,这个是基础,但是实际应用就不太方便。如果你使用的jdk1.8,那么对应的drools版本为7.x。原创 2024-09-24 14:07:36 · 286 阅读 · 0 评论 -
记录岁月云明细账excel导出的性能优化
原因在于如果针对没有多客户的公司,原先的写法是没有问题的,但是针对面向有25万用户的零售企业,这种问题就暴露出来了。这一款属于业务算法,如果有时间可以重写,但实际改造时间并不会给你太长时间,首先老板会觉得性能优化是员工自身的问题,根本不会在一这个。有些工程师有洁癖,比如我。我所做的是新建一个v2版本,如果有问题,原来的代码还能用,以免被人诟病,研发工程师内卷,相互轻视的事情也是经常发生的。从下图可以看到获取数据的时间从50s,下降到268ms,单纯的看数据获取,性能优化了99.47%,速度提升187倍。原创 2024-05-30 20:26:51 · 984 阅读 · 0 评论 -
bug宝典JAVA篇 BeanUtils.copyProperties 日期问题
执行BeanUtils.copyProperties(dest, orig);的时候出现下面的错误,我的代码如下,主要目的是复制对象,但是又不想一个个set,下面的BeanUtilsExtends是照着copyproperties 谁赋值给谁抄的,实际运用却出现下面的问题@Transactional(readOnly = false) private boolean createNewRec原创 2017-01-01 08:53:41 · 5980 阅读 · 1 评论 -
controller日志AOP处理
1 定义注解import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Ta原创 2017-12-15 11:27:15 · 724 阅读 · 0 评论 -
java代码混淆2
上一篇java代码混淆只是proguard的基本配置,如果应用到实际工程里面,就需要有所提升。 1 定义不需要混淆的注解 下面的注解,可以应用到类、方法及属性中@Retention(RetentionPolicy.CLASS)@Target({ElementType.TYPE,ElementType.METHOD,ElementType.CONSTRUCTOR,ElementType.FIEL原创 2017-02-10 08:45:59 · 559 阅读 · 0 评论 -
velocity将echarts的图片生成到word
1 网页端echarts图片显示后,图片上传到后端 下面我自定义了一个回调callback方法,是为了上传完了想做其他的事情setTimeout(function(){ genPic(callback); },2000);function genPic(callback){ var data = "pic="+encodeURICompone原创 2017-01-18 23:37:24 · 2613 阅读 · 0 评论 -
tomcat相关配置
1 GET方式URL字符集配置 在${TOMCAT_HOME}/conf/server.xml添加URIEncoding="UTF-8"配置如下:<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncod原创 2017-02-06 11:38:12 · 626 阅读 · 0 评论 -
java 枚举类型
Java1.4之前JDK的源码使用了接口常量,结果造成了一些误导,很多人也使用了接口常量。 但是Jdk1.5之后,发生了变化,要么你用类定义static final变量,您也可以枚举 public enum Apple{FUJI,PIPPIN,GRANYY_SMITH} 其实编译后,也就是static final变量。 以下枚举,扩展的类似得,我姑且认为这个是枚举的高级用法 TianGan原创 2016-08-21 17:49:51 · 314 阅读 · 0 评论 -
bug宝典之JAVA篇 web工程识别不了
使用mac的split view还是比较爽,可以一边编写代码,一边写blog,遇到问题就可以记录下来。要是10年前开始有笔记的习惯就好了,当年年少不懂事,现在正当年,亡羊补牢,希望不晚。以前习惯使用eclipse,win10下面使用idea,跑我的程序,也可以跑起来,但mac下面不知道为啥就出现下面的错误。这个错误咋看一下,挺熟悉,无非告诉你jstl的标签他不认识,也就是说没有加载进去,可以在...原创 2018-11-10 13:40:24 · 468 阅读 · 0 评论 -
svn checkout代码
选择window》Show View》SVN资源库,打开svn的视图 添加svn资源库,首次需要添加,以后就被eclipse记住了 选择需要检出的代码,选择“检出为” 单个项目检出,选择“做为工作空间中的项目检出” 多个项目检出,直接默认就可以。 工作空间默认,也可以自己指定 检出后的代码,是下面这个样子 上面检出的代码不是正规的工程,需要按照下述操作转成m原创 2016-10-22 08:24:34 · 1325 阅读 · 0 评论 -
jetty在项目中的应用
jetty是一个轻量级容器,你可以使用它作为生产应用服务器,不过我一般用它来做开发环境的启动容器。使用main函数就可以运行起来,使用非常方便。至于生产环境,可替代的方案较多,故而在开发环境使用jetty作为我的应用中间件。 一 maven插件jetty方式 在pom.xml中添加下面的插件,通过jetty:run -Djetty.port=8081可启动服务<plugin> <grou原创 2016-09-01 22:47:52 · 2480 阅读 · 0 评论 -
Plugin execution not covered by lifecycle configuration
我希望修改mybatis-generator-core-1.3.2的插件源码,于是思考着通过mybatis-generator-core-1.3.2-sources进行逆向,转成maven工程后,出现了如下问题:Plugin execution not covered by lifecycle configuration: org.apache.felix:maven-bundle-plugin:2原创 2016-10-19 09:41:57 · 1798 阅读 · 0 评论 -
数据结构 插入排序
插入排序 数据结构 java原创 2016-08-20 22:17:20 · 569 阅读 · 0 评论 -
javadoc编码 GBK 的不可映射字符
选择需要导出javadoc的java类,或者整个java工程,或某个目录。选择鼠标右键,选择export 找到javadoc 然后一直Next,到下面这个页面。在Extra Javadoc options中填写-encoding UTF-8 -charset UTF-8即可。原创 2016-09-30 09:24:39 · 445 阅读 · 0 评论 -
java反射机制实际应用
网上搜到的大部分是简单的demo,实际解析则跟业务逻辑有关系. 需要注意的是jdk1.7只能对类取参数名,jdk1.8之后才提供了对接口获取参数名的实现,且还需勾选下面的配置,保存接口的参数信息。 public class ControllerHttpBean { /** * 请求方式,GET、POST */ private String reqMethod;原创 2017-02-10 13:15:00 · 853 阅读 · 1 评论 -
druid连接池
连接池种类较多,例如BoneCP、C3P0、DBCP、Proxool、Druid,C3P0、DBCP、Proxool通过最佳实践已经淘汰了,Druid号称是最好的数据库连接池,阿里连接池调研结果,通过这链接也不见得阿里的Druid的好到那里去,因为线程数超过2的情况,这份报告中指示对DBCP和Druid进行了比对,而没有再做BoneCP的对比了。不知道是不是阿里自己不自信,还是怎地。 不过国人做的原创 2016-09-02 19:56:29 · 3328 阅读 · 2 评论 -
kaptcha验证码
虽然google的kaptcha验证码被破解了,但不代表不能使用。使用也比较方便,当然你也可以采用极验验证等新技术做登录验证码验证。 1 pom.xml<version.kcaptcha>0.0.9</version.kcaptcha><dependency> <groupId>com.github.axet</groupId>原创 2016-09-02 20:35:41 · 1124 阅读 · 0 评论 -
编程中的原则问题
DRY原则 DRY原则(Don’t Repeat Yourself,不做重复的事),旨在复用,实现系统的扩展性,领悟其精髓即可。 从系统层面讲,IT系统SOA之后,系统根据服务进行拆分,使复杂业务逻辑内聚,增强了扩展性。 从系统设计讲,通过maven管理各组件jar,将jar对功能进行拆分,使得系统内部业务逻辑内聚,降低组件之间的依赖,实现了扩展性。 从系统开发讲,将代码进行拆分,除了复用扩原创 2016-10-19 10:24:55 · 343 阅读 · 1 评论 -
eclipse导入maven工程
1 导入maven工程 在ProjectExplorer中空白位置,点击鼠标右键,按照下图import 找到Maven》Existing Maven Projects,点击Next 选择要导入的maven工程,从下图看到这里有两个pom.xml,那么也就是导入了连个maven工程。 下图没有异常,且目录结构如下所示,说明maven工程导入成功 2 转成maven工程 刚从gi原创 2016-12-12 14:05:51 · 607 阅读 · 0 评论 -
java代码混淆
如果你不想让别人知道你太多的实现细节,那么可以通过proguard对自己的代码进行混淆。jdk版本支持1.7,不支持jdk1.8. 下面是pom.xml中响应的配置,您在http://mvnrepository.com/中是找不到net.sf.proguard4.8的版本的,告诉大家一个地址:proguard48jar,这个地址不经可以下载proguard-4.8.jar,还可以下载其他的文件。也原创 2016-12-09 22:43:26 · 2977 阅读 · 2 评论 -
linux下jprofile
jprofile安装[root@ /]# cd /usr/local/src[root@ src]# tar -zxvf jprofiler_linux_8_0_7.tar.gz [root@localhost src]# mkdir -p /urs/local/jprofiler[root@localhost src]# cp -a jprofiler8 /urs/local/jp原创 2017-02-22 20:26:40 · 659 阅读 · 0 评论 -
mybatis generator dao扩展
当我使用插件来mybatis-paginator解决mybatis的分页问题时,我需要在mybatis generator插件生成的dao代码中加上下面的代码,这就涉及到mybatis generator源码的改造 PageList<AbmEmployee> selectByExample(AbmEmployeeExample example,PageBounds pageBounds); 分页原创 2016-10-21 10:43:29 · 1864 阅读 · 0 评论 -
org.apache.ibatis.ognl.MethodFailedException: Method "size" failed for object
1 问题描述 mybatis3.2.x版本,做压力测试,并发200用户,出现了如下异常.org.apache.ibatis.builder.BuilderException: Error evaluating expression 'size() > 0'. Cause: org.apache.ibatis.ognl.MethodFailedException: Method "size" fai原创 2016-09-20 10:11:05 · 6655 阅读 · 0 评论 -
mybatis扩展联合查询条件
在实际开发,一般都用mybatis generator插件,还有谁自己一行一行的写的吗? 业务逻辑最重要mybatis generator插件生成的mapper文件,不过mybatis generator插件生成针对单表的比较适合,但是联表查询就有些麻烦了。 1 自动生成的Example_Where_Clause<sql id="Example_Where_Clause"> <!--原创 2016-08-21 10:17:37 · 1740 阅读 · 0 评论 -
Mybatis高效可配置的查询
今天我使用mybatis,并通过mybatis生成pojo、example、dao、mapper,于是我根据mybatis generator生成代码的特性,以及参考了前人的例子,方便列表的查询。高手无所谓隐藏,我相信未来管理系统、前端开发技术越来越简单,所以这些东西藏着掖着犯不着,供程序猿们互相学习。原创 2016-09-03 19:17:04 · 3064 阅读 · 0 评论 -
通过mybatis产生序号
<select id="selectTopIndex" parameterType="com.dzmsoft.sms.base.pojo.SmsEmployeeExample" resultType="java.lang.String"> select right(concat('00000000',count(1)+1),8) from sms_employee <原创 2016-11-26 22:32:07 · 5106 阅读 · 0 评论 -
mybatis association封装对象
1 定义mybatis对象 其实association 跟hibernate的对象有些类似,而hibernate确实比较难用,搞了hql、二级缓存需要深入进去,模式比较笨重。我们做应用开发的,为啥要讲orm框架钻的那么深呢。权衡利弊,我觉得mybatis的实操占有优势。<resultMap id="SmsHouseholdOrderDto" type="com.dzmsoft.sms.base.d原创 2016-08-21 10:38:15 · 1924 阅读 · 0 评论 -
mybatis-plus
mybatis-plus原创 2022-12-10 09:07:09 · 1155 阅读 · 0 评论 -
mybatis collection使用
java开发就要考虑复用,能够复用就用复用,所以呢,通过mybatis generator自动生成的代码,针对一对多的关系怎么处理呢?那么就可以用到collection了。 1.SmsCommodityOrderDto 定义public class SmsCommodityOrderDto { private String id; private List<SmsCommodit原创 2016-08-21 10:50:33 · 1452 阅读 · 0 评论 -
mybatis generator mapper.xml扩展
Jeff Butler写的mybatis generator虽然许久未更新,不过带来的便利是巨大的。 可以在pom.xml中获取源码,然后转成maven工程,自行修改源码。<dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId>原创 2016-10-20 10:21:43 · 2328 阅读 · 0 评论 -
easyui datagrid json扩展
如果使用mybatis association,那么封装对象后,返回到页面是json格式的,这种格式 在页面中显示出来,跟一下数组方式有很大区别,不过还好easyui loadFilter支持这种扩展 1 easyui json表格function createDg(){ dgList=$('#dg').datagrid({ method: "post",url:ctx+原创 2016-08-21 10:58:01 · 443 阅读 · 0 评论 -
eclipse IDE配置最佳实践
1 JDK安装 JDK安装和环境变量配置教程参考:http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html 下载攻略参考: http://jingyan.baidu.com/article/e4511cf3e112ac2b845eaf8f.html 目前最新的jdk8。 按照下图设置java编译路径。注意不是J原创 2016-09-04 09:37:37 · 3410 阅读 · 0 评论 -
CompletableFuture异步并发
异步 completableFuture原创 2023-02-11 10:26:15 · 197 阅读 · 0 评论 -
jmap查看堆使用
堆解决数据存储的问题,栈解决程序如何运行和数据如何处理的问题。java堆是JVM内存中最大的一块,由所有线程共享,是由垃圾收集器管理的内存区域,主要存放对象实例下图来自终于搞懂了Java8的内存结构,再也不纠结方法区和常量池了!JAVA8 内存模型JVM内存模型以及JDK7和JDK8内存模型对比总结通过jmap分析内存泄漏在linux下面才能执行的,windows中执行不了# 什么类一直在增长,就是嫌疑犯了。windows只能写入到log中帅选了jmap -histo 6220 >原创 2021-10-27 21:35:19 · 564 阅读 · 0 评论 -
docker搭建nexus
参考Docker 环境下搭建nexus私服# 移除已有版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \原创 2021-07-12 19:18:17 · 735 阅读 · 1 评论 -
java8 stream操作总结
昨天看到java9 支持 reactive stream,但是java被oracle收购之后,我为什么一定要用reactive stream呢,掌握java8 stream感觉跟python中pandas、numpy一样高效的操作数据集。1 类型转换这里使用到map转,非常简洁,你只需要明白函数式编程,输入到输出,就容易理解了 List<Integer> currencys = Stream.of(accAccountSubject.getAssistAccounting().split(原创 2021-05-29 20:14:57 · 208 阅读 · 0 评论 -
SaaS中分布式缓存使用
美团的技术还是不错的,可以看看缓存那些事1 ehcachehibernate的时代就开始使用ehcache,Ehcache的超时设置主要是针对整个cache实例设置整体的超时策略,而没有较好的处理针对单独的key的个性的超时设置(有策略设置,但是比较复杂,就不描述了),因此,在使用中要注意过期失效的缓存元素无法被GC回收,时间越长缓存越多,内存占用也就越大,内存泄露的概率也越大。2 guava cacheCaffeine与Guava对比4 二级缓存二级缓存设计基本有个共识,一级本地缓存,内存级访原创 2021-05-15 14:46:00 · 353 阅读 · 1 评论 -
springfox swagger接口
现在的技术发展还是很迅猛,子曰:“志于道,据于德,依于仁,游于艺”,既然当年弃工程力学转向软件这个行业,就需要“游”于各种技术之中,虽然年长了,但还是应该熟悉这些新兴的技术,“自古美女如良将,不许人家到白头”,技术人员及时走到管理岗位又怎么样,庞统一天治理一个县城,那是基本功,这些基本功怎么能因为你到了管理岗位就可以不学呢?当年从北京回武汉,在公司接触了CMMI5,明白应该按照规范的流程做事情,因为那个是最佳实践的沉淀,接口文档用word写的很清楚,通讯协议、入参、出参、加密方式、签名方式、调用时序图都要原创 2021-05-09 10:53:23 · 2697 阅读 · 0 评论 -
spring中使用rabbitmq
2017年以前采用的spring xml配置的方式,这里先回忆一下,现在采用yaml方式,<!--rabbitmq依赖 --><dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>2.0.1.RELEASE</version></depend原创 2021-04-10 19:07:33 · 966 阅读 · 1 评论 -
drools性能优化
在多线程读58万数据处理后写入到另外一张表中性能调优实例遇到第一个问题就是drools的性能瓶颈,对CPU消耗比加大,那么如何优化呢?1原创 2021-03-29 21:02:44 · 5027 阅读 · 0 评论