
Java
文章平均质量分 52
Mosiclone
这个作者很懒,什么都没留下…
展开
-
mapstruct default 方法覆盖其他参数
后面联调发现名称字段被覆盖了,和班级名称一模一样,然后去检查注解是否写错。后续去检查 mapstruct 生成的实现类发现 setName 也调用了 getClassNameFun 方法,所以导致被覆盖。由于对 mapstruct 仅会用点皮毛,当时以为碰到了一个诡异的 bug,后面排查发现是由于 default 方法使用不当。发现,生成实现类的时候,如果有 default methods 会去匹配输入输出的类型,如果相同那么会默认使用这个方法。converter 类似这样。原创 2023-02-28 23:22:37 · 1145 阅读 · 0 评论 -
常用的限流方式 Java 实现
限流器通过限制请求次数来达到保护服务的目的,每次请求都会尝试执行,如果接口返回成功则可以执行,如果返回失败则需要等待或者直接返回失败。限流器主要分为固定时间窗口限流、滑动时间窗口限流、漏斗式限流和令牌桶限流。比较常用的是 guava 中的限流器,采用的是令牌桶的限流方式。固定时间窗口限流的方式比较简单,但是无法限制住突发流量。假设固定窗口大小为 1s,限制请求次数为 100,如果在 0.99s 和 1.01s 都被请求 100 次,对于固定时间窗口限流器来说,是正常流量,但是可能就导致服务异常。原创 2023-02-15 22:20:29 · 1846 阅读 · 0 评论 -
spring 事务中先删除再插入后唯一键冲突 delete then insert duplicate key
今天在同事碰到了一个比较有意思的问题,为了实现某个场景中的数据更新和删除,想通过 delete all entities 然后 insert new entities 的方式减少判断数据是否删除的操作,结果由于表内有其他唯一索引报错唯一键冲突。并且也没有对唯一索引进行更新,从而导致后面插入新版本数据的过程中,如果是修改的数据那么会在唯一索引找到重复的键从而导致冲突。后面在 debug 的过程中,用 evaluate 查询数据确实不在,但是 insert 的时候会报唯一键冲突导致插入失败事务回滚。原创 2022-11-30 23:36:04 · 5267 阅读 · 3 评论 -
Java8 函数式编程常用方法总结
class Student{ private String name; private int grade; //get set ..}List<Student> list = new ArrayList<>();Predicate 判定public interface Predicate<T>{ // lamda表达式匿名函数修改的test boolean test(T t); // 可以和其他判定条件进行逻辑运算 (还原创 2022-05-22 23:10:09 · 365 阅读 · 0 评论 -
【RPC项目】3.增加注册中心
增加注册中心工作内容主要是服务注册、服务发现、服务下线,负载均衡。并且将服务端提供的服务用 ZkServiceProviderImpl 保存。注册中心使用 ZooKeeper 实现,使用 Curator 框架对 ZooKeeper 进行调用。服务注册包括注册服务的方法,将服务写到 ZooKeeper 中。服务发现包括发现服务的方法,通过负载均衡选择服务地址。服务下线包括删除所有服务端的服务。负载均衡这里只实现了最简单的随机分配。ZkServiceProviderImpl 需要使用单例模式,增加原创 2022-02-22 01:03:02 · 2296 阅读 · 0 评论 -
【RPC项目】2.项目标准化
上一篇文章中的项目比较乱,并且只能对一个类中的方法进行远程调用,如果需要对其他类中的方法进行远程调用还需要进行修改,这一节把远程调用一些关键的信息提取出来,通过 RpcRequest 和 RpcResponse 来传输关键信息。网络传输这里也为了之后升级为 netty 增加了 RpcRequestTransport 接口,现在先实现 Socket 传输的方法。其他就是优化了 RpcClientProxy 客户端动态代理,因为将网络传输独立处理,之前的 Proxy 类需要进行修改。还优化了 Server原创 2022-02-20 21:13:47 · 2112 阅读 · 0 评论 -
【RPC项目】1.从不代理到动态代理
先放一些公共类: ServiceImpl ```javapackage common.ServiceImpl;import common.Hello;import common.HelloService;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class HelloServiceImpl implements HelloService {@Overridepublic String hello(Hello hello) { .原创 2022-02-17 22:06:15 · 485 阅读 · 0 评论 -
从字节码角度深入理解 String 常量池
直接上菜,本文环境为 jdk1.8之前一直对字符串常量池理解不深,看了一些文章和自己一些实验整理一下。文章主要是解释了 “一段代码会创建多少个对象?” 以及 “两个字符串变量是否指向同一个地址?” 的问题。首先 String 是一种不可变类型,和 Integer 之类的包装类型有 [-128,127] 的常量池一样,String 也有它的常量池,只不过 Integer 是在创建实例的时候就创建了这个常量池(具体实现如下),而 String 是在创建过程中新增到常量池中。 private stat原创 2021-09-22 00:42:40 · 199 阅读 · 0 评论 -
Java List 类型转换为整形数组 int[]
网上普遍都是循环什么的。有个不用那么长的方法:public static void main(String args[]){ List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); int[] array = list.stream().mapToInt(Integer::intValue).toArray(); //array = {1,2,3};}...原创 2020-12-10 10:28:07 · 2786 阅读 · 0 评论 -
spring cloud+vue在线视频网站 4.单表查询功能前后端开发
1 大章列表查询后端模块这里首先新建一个 Maven 模块,取名 busines 。这个模块的具体功能是实现大章列表的查询,在模块中会有启动类和 controller 层,controller 层是前端调用后端的接口,controller 层通过 server 模块中的 service 层和 mybatis-generator 代码生成的 XML 查询语句得到对应的数据,并将其通过 dto 数据传输类返回到前端。从前面的描述可以知道,首先我们需要完成 business 模块的内容填充;然后用 mybat原创 2020-10-16 17:31:01 · 1087 阅读 · 2 评论 -
spring cloud+vue在线视频网站 3.vue搭建管理页面
文章目录1 使用 vue 创建 admin 项目2 集成 bootstrap 后台管理模板 ace1 使用 vue 创建 admin 项目使用 vue 创建前端项目网上有很多教程,这里简单说一下。首先需要有 npm 和 node,先下载这两个工具。brew install npm 和brew install node,完成后可以npm -v和node -v检查,若显示版本号说明安装成功。然后在 idea 打开 terminal 输入npm install -g @vue/cli 下载 vue 脚手架原创 2020-10-15 11:30:41 · 67117 阅读 · 0 评论 -
java中的map方法
Map 是一种键值映射的数据结构,相对 List 结构查找效率更高。public class hello{ public static void main(String args[]){ Student s = new Student("xiaoming", 99); Map<String, Student> m = new HashM...原创 2020-03-17 10:09:45 · 322 阅读 · 0 评论