自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 获取所有Header和QueryParam的最佳方法

网上逛了一圈,发现提到的方法都是首先在Controller注入HttpServletRequest,然后再通过request.getHeaderNames()遍历一遍,再通过request.getHeader()来获取相应的值。其实有一个更方便的方法。但你是否知道,其实这两个注解,还可以用来一次获取所有Header和QueryParam的呢?

2023-08-17 17:47:10 218

原创 Gradle实现Maven中的dependencyManagement

在Maven中,我们可以通过dependencyManagement把Jar包版本进行统一管理,以后各项目引用组件时,就不用标注组件的版本号了。这为解决多项目版本冲突问题带来了很大的便利。那么在Gradle中,是否也可以实现Maven的这个特性呢?答案是肯定的。看了网上的一些资料,发现有些方法比较绕,感觉思路不是很对。其实在官网上就有介绍这个问题,在这里也和大家再做一个分享。1)创建一个项目,里面只需一个build.gradle文件即可。待会我们把要管理的依赖及其版本都封装到这个gradle脚本中,最后把它

2022-07-04 23:20:46 3616 1

原创 达梦数据库企业版误用安全版的key后的恢复方法

如果不小心误用了安全版的key后,只要用管理器连接数据库,就会提示SSL验证失败这时需要先把数据库的一个参数清掉,再换上正确的企业版key,才能恢复正常方法是,先用SYSDBA登录,然后执行:sp_set_para_value(2,'ENABLE_ENCRYPT',0);之后就可以了...

2022-04-11 18:52:27 533

原创 达梦数据库,给用户赋予系统权限 Any 时报“授权者没有此授权权限”

原因是达梦数据库默认把Any的授权给禁用了,需要先进行开启方法 1:在 dm.ini 文件中修改参数 ENABLE_DDL_ANY_PRIV 为 1。方法 2: 通过以下语句修改参数 ENABLE_DDL_ANY_PRIV。 sp_set_para_value(1,'ENABLE_DDL_ANY_PRIV',1);或者alter SYSTEM set 'ENABLE_DDL_ANY_PRIV'=1 both; ...

2022-02-15 14:14:20 4968 1

原创 升级JUnit5的注意事项

主要给用惯JUnit4的童鞋提个醒,不然就会出现一系列摸不着头脑的问题,因为JUnit5的注解变化很大1、@RunWith没了,改为@ExtendWith@ExtendWith(MockitoExtension.class)class SomeTest { // test something...}2、@BeforeClass和@AfterClass没了,改为@BeforeAll和@AfterAll@BeforeAllpublic static void init() {

2021-12-25 00:33:11 359

原创 Lombok是否会破坏对象的封装性

前几天,在网上看到一些评论,说:Lombok的@Data注解,会把所有属性的get/set方法都生成出来,从而把不必要暴露的属性也暴露出来,破坏了对象的封装性这句话对不对呢?对了一半,确实@Data会把所有属性的get/set方法都进行生成。但是,破坏封装性是可以避免的,有这样忧虑是因为Lombok只学了一半其实,我们可以在不想暴露的属性上,添加@Getter注解,把它的AccessLevel修改下就行了,例如说:@Datapublic class MyData { pri

2021-10-22 10:28:01 174

原创 LogMiner使用小记

1)检查有没有开启扩充日志select SUPPLEMENTAL_LOG_DATA_MIN from v$database;若无开启的话,执行以下语句开启,否则LogMiner返回的信息比较少alter database add supplemental log data;2)查看有哪些重做日志文件select * from v$log;select * from v$logfile;3)添加要分析的重做日志文件(文件名在v$logfile里面有)exec dbms_logmn

2021-10-13 11:41:22 136

原创 新版ECharts实现“暂无数据”的完美解决方案

在旧版ECharts中,此功能是通过配置noDataLoadingOption来实现的,但此配置项在新版中已经被移除综合网上找到的一些方法,大致如下:借用Title来显示“暂无数据” 通过showLoading的方法来显示 通过graphic来配置第一种方法属于取巧的方法,如果不使用统计图自带标题的话,是没问题的。但如果使用了标题的话,就会产生冲突了title: { show: data.length == 0, // 没数据才显示 extStyle: {

2021-09-22 14:20:34 13652 5

原创 一图记住Parameter和Argument的区别

喜欢读框架源代码的童鞋,对这两个单词肯定不会陌生。但这框架里面一会Parameter,一会Argument,两单词的字面意思又都是“参数”,可能有些童鞋就搞昏头了其实这两个“参数”是有区别的。“形参”和“实参”相信每一个程序猿都听过,Parameter(Param)对应的正是“形参”,而Argument(Arg)对应的是“实参”我们来看看实际例子,就很容易记住它们了:Method m = String.class.getMethod("indexOf", String.class, int.c

2020-11-05 14:41:35 1006

原创 CLASSPATH环境变量,没必要再配置了

最近有个项目在部署时,出现了一个奇怪的问题:本地调试都是正常的,部署到服务器后就出现了找不到配置文件的报错,而配置文件经确认过又都是存在的。折腾了一番后,发现元凶是服务器上的CLASSPATH环境常量正常情况下,我们都是通过如下方式获取项目的class目录路径的(配置文件放在class目录中)XXX.class.getResource("/").getPath();但如果系统中配置了CLASSPATH这个环境变量后,上述代码就变成了获取CLASSPATH中指定的路径,自然也就找不到你新部署

2020-10-13 14:24:07 846

原创 如何在Oracle中把XML转换成物理表字段的形式返回

思路:把整个xml,通过extract函数,把记录节点(依旧是xml形式)都提取出来 通过table和xmlsequence,把记录节点转换成物理表字段的形式 通过extractvalue,从每行的记录节点xml中,提取出具体的字段值来 举例:假设xml数据已经导入到temp_xml表的data字段中,records为整个xml的根节点,则可以通过下面的语句,实现xml到表字段形式的转换。配合insert into语句,就可以把xml数据直接导入到物理表中了。是不是很方便呢?sele.

2020-09-04 11:47:29 434

转载 一些英文词的标准缩写

有些词可能共用一些缩写。带星号的缩写或词来源于PeopleSoft标准。The following standard word abbreviations should be used in naming records, fields, and SQRs:Word(s)AbbreviationDescription Abbre...

2018-12-04 17:04:35 1617

原创 巧用Java匿名类,实现Windows编程中回调函数的效果

以前在编写Win32程序时(如C++、Delphi等),我们常会用到回调函数,来实现“注册/调用”的功能。在Java中,一切都是对象,因此并不存在回调函数这样的概念(除非硬用反射来获取Method对象),在实现“注册/调用”这样的功能时,我们必须借助观察者模式,也就是Listener的概念。// 自定义排序器public interface ICustomSorter<T> {...

2018-11-30 17:07:46 207

原创 shiro-quartz的坑

用过Shiro的朋友应该知道,我们在进行Session有效性验证的时候,常会用到QuartzSessionValidationScheduler这个类,它用了quartz的计划任务,定时触发检查Session是否已失效问题是,现在Quartz已经出到2.2了,shiro-quartz这个包(哪怕是最新版本)所调用的quartz还停留在Quartz 1.x的阶段(Quartz 2.x里面的结构大...

2018-11-30 16:57:38 1871 1

转载 遗传算法资料整理

从入门到掌握(第一篇):http://blog.csdn.net/emiyasstar__/article/details/6938608从入门到掌握(第二篇):http://blog.csdn.net/emiyasstar__/article/details/6938715遗传算法例子:http://blog.csdn.net/b2b160/article/details/4...

2018-11-30 16:54:00 206

原创 乱谈程序自测与玩RPG

这几个月真是非常忙,经常都要加班,原来自己的一些打算都基本没怎么实施,也很久没写过日志了,今天上来随便聊几句。无可否认的是,BUG越早消灭,所需要的代价越低。撇除需求不明确,设计不正确所带来的BUG,最早能发现BUG的时间,理所当然就是自测了。首先,自己必须要端正态度,有些程序员的态度很差,对自己的程序不负责,甚至测都不测就提交测试,这样的人是必须给予BS的。其次,一定要在写程序的时候...

2018-11-29 13:27:40 257 2

原创 Delphi跨单元访问其它类protected下的属性方法

我们知道,对于DELPHI来说,同一个单元中的类都互为友元,可以互相访问彼此的非public方法和属性,子类也可以访问父类private下的属性方法。虽然从单元内部讲,这似乎不是很符合封装的原则,容易引起初学者的混乱。只有在某些特殊设计(如刘艺举例的那个备忘录模式),或为了让两个类更紧耦合一点时,才应使用此“特性”。不过跨单元后,此“特性”便会消失,一切重新遵循回标准的面向对象原则。然而,是不...

2018-11-29 11:42:51 608

原创 如何让Delphi控件在编译时,自动添加所需的单元

在开发控件的时候,常会类似碰到这样的情况:我某个方法或事件的参数的类型,并不在Delphi默认添加的单元中,如果此时直接编译,必然会报错。但是让用户逐个把所需的单元添加回来,又显然太麻烦了,甚至用户也不知道该添加哪些单元。有没有办法让它自动化一点,在编译时,让控件自动给单元添加所需的单元呢?答案是肯定的。首先引用DesignEditors和DesignIntf单元。然后在控件单元,编写一个...

2018-11-29 11:39:21 679

原创 一种较为高效的TreeList生成算法(Delphi实现)

记得不久前曾写过篇关于TreeList生成的文章。虽然那个算法里,我已经有对叶节点做判断,避免无用的Filter操作。但是非叶节点的Filter操作依然是无可避免的。而Filter又是影响整个生成的最重要因素,因此当带子节点的节点很多时,速度还是要被拖下去的。后来我看到了一种觉得不错的思路,就是用调整节点的方法来形成树。先一次过把所有数据当根节点加进TreeList中,然后再根据它们之间的ID...

2018-11-29 11:35:51 814

原创 在Java中如何根据枚举索引值来获取枚举值(范型适用)

我们知道在JAVA编写一个枚举类之后,在调用时系统就会自动给它生成一个values()的数组,通过这个数组就可按索引获取枚举值但是如果我们声明的是一个枚举的范型类呢?我们知道所有的JAVA枚举类,其实都是继承Enum类的,然而Enum只有一个静态的方法valueOf(),用于把字符串转化成枚举值。可是如果想把索引值转化成枚举值呢,怎么办?咋一看,Enum下面似乎真的没有这么一个方法可以让你实现...

2018-11-29 11:15:38 10304

原创 Java函数返回值的“魔术”转型

先看一段代码:public Object get(String name) {  return map.get(name);}其中获取的返回值,可能是字符串,也可能是数字等等。那么调用它的代码,可能就充斥着各种各样的转型:String value1 = (String)get("key1");Integer value1 = (Integer)get("key2");Dat...

2018-11-29 11:06:37 291

原创 MyBatis的UnsupportedOperationException解决方法

在编写一个返回列表类型的ResultMap时,ResultType设置为List.class后报错。原来,即使返回列表,这个ResultType是指列表元素的类型,而不是列表类型。。。太具有欺骗性了。。。...

2018-11-29 11:02:43 1542

原创 不通过构造函数来创建类的实例 - Unsafe类的使用

我们知道,当使用反射构造类的实例时,我们常会用到xxx.class.newInstance()这个方法。但是这个方法有一个限制,就是要求类必须有默认的构造函数。但我们在做框架的时候,很难保证要动态构造的类实例,都是有默认构造函数的,那怎么办呢?其实用过C++或者Delphi的都知道,其实构造一个对象,分配内存和调用构造函数实际是两个不同的步骤。我们要创建一个对象,实际只需要分配它的内存就可以了...

2018-11-29 11:00:59 869

原创 Java中static final“常量”的坑

在Java中,其实语言本身并没有“常量”这样的概念。但是我们根据常量的特点(不可修改),经常会使用“static final”关键字,对一个变量进行修饰,以达到不创建类就可直接使用,并且该变量不允许修改的目的,看起来就跟“常量”一样。无论是教科书,还是上网查资料,都会教我们这样写这样的写法在纯class文件发布的环境,没有问题,因为class文件只要一修改就会被eclipse重新编译。但在Ja...

2018-11-29 10:50:44 5542 1

Delphi下的轻量级IoC容器 - Elite Container (Demo 0.1版)

Elite Container是DELPHI下的一个轻量级IoC对象容器(IoC:Inverse of Control,反转控制)。它是参考了Java中的Spring框架(主要是配置文件的写法),并结合DELPHI的特点来构建的。相比Spring的对象容器,它提供的功能更为精简常用(如对象延迟创建、对象属性自动注入等),降低了学习的难度,并且提供了很多扩展点,你只需简单地写一个插件实现类,并在配置文件中进行简单配置,就可以让Elite Container拥有你的自定义功能! 借助Elite Container和Ioc思想,你可以更轻易地构建出具有松散耦合、重用度高的应用程序。它的核心思想就是拆分功能的接口和实现,上层只依赖于下层的接口,然后通过Elite Container的配置,把不同的实现类注入到该接口中,达到更换功能,也就是复用已有代码的目的。设计人员可以真正地发挥好自己的面向对象思想和相关设计模式,来架构企业级的应用程序,而无需象以前那样,在Delphi中用起面向对象总有点捉襟见袖的感觉。 ps. 由于写程序,还有精心准备的26个例子,都花费了我很多的时间,所以象征性地收2个资源分,希望大家不会介意:) ps2. 说明一下,开发出来的程序在发布的时候,除了发布EliteCore.bpl、EliteContainer.bpl外,还需要发布rtl.bpl(EliteCore.bpl引用到了它)。由于一时疏忽,例子中的Bin目录里忘记带上它了,请大家注意,谢谢~

2009-12-11

300多个精品程序图标

很不错很实用的应用程序图标:)

2007-12-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除