- 博客(32)
- 收藏
- 关注
原创 spock
skill (skill_id: “4”,skill_name: “家居安装维修”,parent_id: “0”,sort: “1”,level: “1”,create_time: “1614061455573”,update_time: “1644839217688”)使用的时候把zip去掉,再导入到idea中。场景:在使用spock时发现的一个问题。配置 localCacheScope。github上的spock实战项目。发现无论怎么都是 pass。
2024-03-22 11:00:30 963
原创 单元测试的一些思考
在实际的单元测试中,总会遇到一些问题,所以需要思考,哪些地方需要放弃,然后关注哪些地方。写测试一定要简单,测试逻辑一定要有效。为实现这两个目标,我们定了两条规则:● 外部 http 请求一律 mock,这个基于 jarcoal/httpmock (我觉得使用apifox更简单)● mysql, memcache, redis 直接起服务,各测试用例自行维护自己的测试数据集(目前是这样做的)
2023-12-14 10:14:47 344
原创 java相关资料
这个看情况来的,在写service层的时候一般先写约束,再写实现类。在复杂的场景下,两者都会用上,一般抽象类当做父类(用于复用方法),接口做约束(细微差别)。所以符号位 S = 0,尾数 M = 1.001001(B),指数 E = 4(D) = 100(B)。总结:**先把10进制转换成2进制,再科学计算 **那什么时候用抽象类,什么时候用接口呢?作业:将 25.125转换成浮点数。答: 25.125 —>
2023-12-14 10:11:42 384
原创 关于方法参数传递的一些思考
这种现象很容易引起误解。实际上,在包装类赋值的过程中,会发生隐式转换,例如:Integer a = 1;因此,容易造成误解。如果想真正修改Integer的值,需要使用反射进行修改,就像上面的示例一样。这样的结果与第二种情况相同。但实际上,这也不是引用传递。在JVM结构中,对象会保存在堆中,变量只是保存了一个引用地址。如果进行赋值操作,只是改变了引用地址,并不会修改堆中的对象。在Java中,关于方法中的参数传递方式,存在一些争议,有人认为是引用传递,有人认为是值传递。
2023-12-14 10:11:10 401
原创 idea插件开发
1、idea plugin打包Idea插件开发(二)——插件的创建打包及发布_朱利尔的博客-CSDN博客_idea插件开发打包2、按照目前的idea plugin 开发一套适合spock格式的dbunit插件:::tipsskill (skill_id: “4”,skill_name: “家居安装维修”,parent_id: “0”,sort: “1”,level: “1”,create_time: “1614061455573”,update_time: “1644839217688”):::
2023-12-14 10:10:31 628
原创 elasticsearch 踩坑
场景:一个职位有多个工作地址,查询的时候需要查询最近的工作地点,并且需要给前端显示一个职位最近的一个地址记录一下查询代码。
2023-12-14 10:07:56 362 1
原创 用户不讲武德导致业务逻辑异常--死循环
char(11) NOT NULL DEFAULT ‘’ COMMENT ‘简历联系方式’,doResumeParse方法里就调用了一个简单的updateById方法。来的真是时候,导致我在游戏中分心,输掉了比赛,被狐朋狗友一顿喷。昨天晚上,我正在打游戏,三方接口出现异常调用。手机号使用了char(11) 固定11位的长度。查询日志,执行当时的sql语句,报了以下错误。然后用户在简历上写了12位手机号。真的是咖啡店里点蛋炒饭,不讲武德。
2023-12-14 10:05:25 365 1
原创 为什么service层一定要写接口?
通过之前的实验证明,如果springbean采用cglib方式进行代理,那么可能会出现依赖注入的类为null。那么就能解决之前的几个疑惑。
2023-12-14 10:03:37 639 1
原创 记录开发过程中的一些痛点
理由: 在线上需要手动启动定时任务一次时,没有入口。所以升级为xxlJob --在参考其他项目后,其实也可以写一个controller用来调用对应的定时任务 xxljob用于分布式服务的时候(例如有两个A服务)这个脚本假设你有两个Spring Boot应用实例,一个在8080端口,一个在8081端口,初始状态下,所有的流量都被引导到8080端口的应用。你的新版本应用将被部署到8081端口。通过以上方法,可以有效地解决后端开发过程中的痛点,并提高开发效率。实际的脚本需要后面整理。
2023-12-13 12:00:21 455
原创 地区问题踩坑
在更新地址数据前先把这几个地址的名称更新为高德一样的数据,更新后再更新回来。关于数据最新的问题,高德和腾讯各有旧数据,目前就民政局是更新最频繁的。采用腾讯数据的原因是因为code码的规则和目前系统的地区命名规则是一样的。有些code码和官网的不一样,这应该就是导致上面这问题的原因。腾讯的数据个人认证的并发量只有5,且每日调取数量很低(抠~)有一些地区是更新了名称,但是code码还是一样的(高德的数据有很多开发区的地址没有(这个影响不大)code码有些是一样的,但是地区名称不一样。最后使用了百度地图的数据。
2023-12-13 11:58:11 345
原创 swagger简化多个DTO、VO类中@ApiModelProperty注解修改流程
场景:在实际项目开发过程中,常常需要使用整数字段来表示某种含义。如果这个字段在多个接口中都被使用,那么需要在多个DTO类中添加@ApiModelProperty注解,以显示该字段的含义。然而,在项目迭代过程中,这样的修改需要进行多次,非常繁琐。为了简化这一流程,可以通过双亲委派机制来重写@ApiModelProperty注解,以添加自定义属性。这种dto、vo类可能会有很多个,在后期维护过程中通常需要频繁修改注释。这样在后期维护过程中只需要维护枚举类即可,效果和上面的注释一样。
2023-12-13 11:57:26 822
原创 ServletRequestAttributes 和 ThreadLocal 的使用场景
提供了一种方便、统一的方式来封装和处理 HTTP 请求的相关信息,能够简化 Spring 应用的开发和测试,并且可以方便地和其他 Spring 组件集成,提高应用的可维护性和可扩展性。由于每个线程都拥有自己的变量副本,在访问变量时不需要进行任何的同步操作,避免了多线程竞争锁的开销,从而提高了程序的执行效率。在多线程并发操作时,由于每个线程都拥有自己的变量副本,可能会导致上下文切换的开销增加,从而影响程序的执行效率。中存储的变量副本是与线程绑定的,如果线程不及时释放,则可能导致内存泄漏。
2023-12-13 11:56:18 610
原创 MySQL中的主键不能使用unsigned(无符号)
在进行一次旧数据兼容时,我们使用了UUID_SHORT()函数生成ID。在测试环境下生成的ID是18位,但在正式环境下生成的ID是19位。由于脚本按照测试环境的配置进行补全,所以在ID的前面添加了一个1。然而,在正式环境运行后,我们没有及时发现这个问题。因此,在后续的数据表设计中,我们禁止在主键上添加unsigned属性。[测试环境下生成的uuid](https://img-blog.csdnimg.cn/img_convert/5ea1d5265bf5d16b4110cf0d0fefc482.png)
2023-12-13 11:55:44 568
原创 mysql datetime可以为null
类可以更好地表示DateTime字段的空值情况,并与MyBatis Plus的更新方法兼容。方法更新数据时,如果DateTime字段为null,会被忽略掉,导致更新失败。MySQL的DateTime字段默认情况下是允许为NULL的。如果要设置具体的值,可以使用。查询数据时数据库为null那么程序中也为null,不会再包装一层。理由:为null时不会更新此字段,减少不必要的数据更新。类的方法来判断字段是否为null,并进行相应的处理。在这个示例中,DateTime字段被声明为。
2023-12-13 11:55:09 1440
原创 mybatisplus生成工具自定义类型转换
mybatisplus未提供自定义的机制,需要我们自己想办法进行转换,目前在当前项目中需要将 mysql(datetime)->java(Optional) 以下是具体代码。当然,最后虽然我写出来了,但是没有使用Optional,而是继续使用Date。
2023-12-13 11:54:31 734
原创 java使用cmd命令生成类
看到这个功能后就想起了之前在大学的时候,问了老师一个问题,当时在练习 ++i,i++。想用程序生成相关题目,然后生成代码然后直接给出答案,但是这个当时的老师也不会。
2023-12-13 11:53:08 354
原创 controller接口修饰符为private时,引发的问题
在Spring AOP中,动态代理会拦截被代理对象的方法调用,并在方法调用前后添加一些额外的逻辑(如事务管理、日志记录等)。该方法的主要作用是将原始的返回值转换为代理对象期望的返回值类型,以确保在返回时返回的是代理对象,而不是原始对象。所以最开始实例化的springbean将被后面的aop cglib代理类替换掉,导致调用private方法时,也是使用的cglib代理类。在Spring AOP中,如果一个方法的返回值类型是一个被代理的类型(即在AOP切面中被代理的类),Spring会使用。
2023-12-13 11:48:55 577
原创 controller 某个方法注入bean失败
在某些时候就算方法修饰符为private时,注入的service依然是有值的,但是后面又是null了。此时service为null 但是一个类里面的其他方法却注入成功。发现不一样,然后仔细一看,发现修饰符用错了。但是会出现这样的情况,也很奇怪。找了一下午也没找到。
2023-12-13 11:48:05 433
原创 AOP日志高级写法
场景:在日程开发过程中,通常需要记录某接口操作的日志,但是需要的参数需要通过查询数据库后才有,有的数据需要当前接口操作完成之后才有的,或者更加复杂的自定义规则。那么普通方式的aop切面日志就不太够用了先看使用后的案例需要使用的类以及注解OperationLogAspect类没有采用单例模式,原因:使用了局部变量临时保存数据,如果使用单例模式会有问题尽管涉及到的组件较多,但是一旦理解,就会明白这种方式非常便捷,可以处理更复杂的日志情况。这套AOP日志的源头是悟空CRM,我对原始AOP日志逻辑进行了
2023-12-13 11:45:33 441
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人