Java生态圈
文章平均质量分 71
一个优秀的Java 攻城狮需要了解的生态圈。专栏包括Java基础以及进阶知识,JVM、线程池、高并发、常用的设计模式、算法知识、linux、网络知识、spring框架,spring boot、mysql、redis、zookeeper、elasticjob、dubbo等中间件的理解和使用。
Think_Higher
内存虽快,但不持久,好记性不如烂笔头。
展开
-
mongo表table1的 rtId字段和mongo表table2的_id字段是关联字段,现要求,根据table1表的rtId字段关联table2表中记录,将table1 中的orderId字段的值更
这个脚本首先遍历table1表中的每一条记录,获取rtId和orderId字段的值。然后,通过rtId字段在table2表中查找相应的记录。如果找到对应的记录,则更新该记录的orderId字段为table1表中的orderId值。原创 2024-07-10 15:45:04 · 137 阅读 · 0 评论 -
java: 找不到符号 符号: 方法 onMethod_() 位置: @interface lombok.Setter
比如和我这个冲突的插件就是。原创 2024-04-12 20:42:28 · 337 阅读 · 0 评论 -
spring data mongo 在事务中,无法自动创建collection
这个错误表明在执行写操作时出现了问题,错误消息指出无法在多文档事务中创建命名空间"xxx.xxx"。这通常与MongoDB的事务性操作或者数据库命名空间相关。您可能需要检查数据库配置、事务管理以及数据模型,以确保操作的正确性和有效性。原创 2024-01-19 16:09:10 · 195 阅读 · 0 评论 -
Spring Security的使用条件
由于Spring Security旨在以自包含的方式运行,因此您无需在Java运行时环境中放置任何特殊的配置文件。特别是,您无需配置特殊的Java认证和授权服务(JAAS)策略文件,也无需将Spring Security放置在常见的类路径位置。同样,如果您使用EJB容器或Servlet容器,您无需在任何地方放置任何特殊的配置文件,也无需将Spring Security包含在服务器类加载器中。所有所需的文件都包含在您的应用程序中。Spring Security要求使用Java 8或更高版本的运行时环境。原创 2024-01-17 17:17:44 · 212 阅读 · 0 评论 -
跨站点请求伪造攻击 - Cross Site Request Forgery (CSRF)
最好理解CSRF攻击的方式是看一个具体的例子。假设你的银行网站提供一个表单,允许当前登录用户将钱转账到另一个银行账户。例如,转账表单可能如下所示:原创 2024-01-17 17:07:43 · 234 阅读 · 0 评论 -
AbstractHttpMessageConverter + easyexcell优雅下载附件
【代码】AbstractHttpMessageConverter + easyexcell优雅下载附件原创 2024-01-15 20:38:39 · 302 阅读 · 0 评论 -
com.fasterxml.jackson.databind.exc.InvalidFormatException异常
因为报错是找不到构造方法,只能按照枚举的类index来找,而总共有3个元素,最大的index =2,给了index =3 ,自然无法找到。序列化问题,低版本的服务,jackson-databind 调用了高版本的依赖服务。2.10.0调用2.15.0.升级依赖到至少2.13.0以上。原创 2024-01-11 17:58:11 · 755 阅读 · 0 评论 -
mongodb “org.springframework.dao.dataintegrityviolationexception multi-document transaction
解决:Spring正在支持 MongoDB 4.0 提供的一个新功能,该功能支持多文档事务。该功能仅适用于现有集合,即多文档事务不能包括会导致创建新集合的插入操作。因此,在使用这个功能之前,应该提前创建您的集合。原创 2023-12-26 16:54:21 · 113 阅读 · 0 评论 -
在使用mapstruct,想忽略掉List<DTO>字段里面的,`data` 字段的映射, 如何写ignore: 使用@IterableMapping
在使用mapstruct,想忽略掉List字段里面的,字段的映射, 如何写ignore。原创 2023-12-20 16:09:52 · 473 阅读 · 0 评论 -
DDD设计模式需要在存储层之前就需要有ID,如何实现?
在DDD设计领域中, 聚合根 或者实体在存储层之前就需要有id。一般采用如下类提前生成,然后直接落库。原创 2023-11-14 17:32:06 · 456 阅读 · 0 评论 -
@CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
JetCache 是一款基于注解的缓存框架,提供了丰富的缓存功能和灵活的配置选项,可用于增强应用程序的性能和可扩展性。使用 @CacheInvalidate 注解,可以方便地在方法执行后无效化指定的缓存数据,确保下次访问时能够获取最新的数据。它的作用是在指定的缓存中,根据给定的条件,使缓存中的数据无效化(即删除或失效)。属性的组合作为缓存的键(key),将缓存中匹配的数据进行无效化。属性发生变化时,通过该代码可以立即使缓存中与这些变化相关的数据失效,以确保下次访问时能够重新从数据源获取最新的数据。原创 2023-11-13 10:28:53 · 868 阅读 · 0 评论 -
mongo实际业务场景实战
查询时将员工的具体属性(如部门、岗位、职级、专业)和“ALL”作为查询条件,从而找到适用的业务值。在这个设计中,每个字段都存储了一个数组,包含了该业务值适用的所有层级、岗位、职级和专业。现在使用mongo作为存储介质,请分别设计存储和查询的方法,在保证高效的情况下,能够快速的将员工找到对应的业务值。操作符,可以同时匹配员工的具体属性和“ALL”,“ALL”相当于是一个通配符,表示适用于所有的情况。此时,有一个员工,是来自部门是D001002003,岗位是岗位C,职级是M-3,专业是专业C。原创 2023-11-10 13:45:13 · 135 阅读 · 0 评论 -
一句话介绍spring的依赖倒置
依赖注入是指Spring容器将依赖关系从代码中移除,通过配置文件或注解来进行管理,使得对象之间的依赖关系更加清晰和易于维护。依赖倒置是指,高层次的模块不应该依赖于底层次的模块,二者都应该依赖于抽象。Spring是一个开源的Java应用程序框架,它提供了一系列的工具和组件,用于开发企业级Java应用程序。总之,Spring的依赖倒置是一种非常有用的设计模式,它将应用程序的不同部分解耦,提高了代码的可维护性和可。Spring容器将对象的创建和管理交给了框架,应用程序只需要关注对象的使用,降低了代码的复杂度。原创 2023-11-07 15:49:06 · 141 阅读 · 0 评论 -
DDD领域模式的模块层级及其依赖关系
DDD领域模型设计是一种常用的软件设计模式,它强调将业务逻辑和数据模型放在最核心的位置,以便更好地满足业务需求。在DDD领域模型设计中,应用程序被分为四个层次:用户界面层、应用服务层、领域模型层和基础设施层。原创 2023-11-07 15:32:26 · 278 阅读 · 0 评论 -
如何写出匹配Java方法注释的正则表达式
如何写出匹配Java方法注释的正则表达式原创 2023-11-06 17:20:03 · 399 阅读 · 0 评论 -
在idea命令行,or linux 终端执行命令,快速获取通过脚本上证指数、创业板实时行情
编写shell脚本如下,并保存命名为stock。原创 2023-11-06 11:43:20 · 159 阅读 · 0 评论 -
在Spring中,教你一招优雅的获取国际化语言配置的方法
在 Spring 中,可以通过 HttpServletRequest 对象获取 HTTP 头部信息,包括 Accept-Language 头部,该头部用于指示用户所选的语言。在Spring中,可以将国际化语言放到HTTP请求头部,以便后端程序能够获取并解析该语言。一种常见的方式是使用Accept-Language标头字段来设置语言。在上面的例子中,通过方法参数注入 HttpServletRequest 对象,可以在 sayHello 方法中获取 HTTP 头部信息,并解析出用户所选的语言配置信息。原创 2023-11-03 15:41:39 · 357 阅读 · 0 评论 -
@JsonCreator 和 @JsonValue使用说明
JsonCreator 和 @JsonValue 是 Jackson 中非常有用的注解,它们可以帮助我们自定义 JSON 对象和 Java 对象之间的转换。使用 @JsonCreator 注解,我们可以告诉 Jackson 如何将 JSON 对象转换为 Java 对象;使用 @JsonValue 注解,我们可以告诉 Jackson 如何将 Java 对象转换为 JSON 对象。这两个注解可以让我们更加灵活地处理序列化和反序列化过程,使我们的代码更加简洁和易于维护。原创 2023-11-01 15:15:55 · 1101 阅读 · 0 评论 -
MappingMongoConverter原生mongo 枚举类ENUM映射使用的是name
这些异常通常是由于代码中的枚举常量名称拼写错误或不存在导致的。要解决这些异常,您需要检查代码中涉及的枚举类和枚举常量名称是否正确。确保枚举常量名称与代码中定义的名称完全匹配。如果枚举常量名称正确,则需要检查代码中是否正确地引用了枚举常量。原创 2023-10-30 17:02:35 · 258 阅读 · 0 评论 -
Java 脚本实现mongo中某一个库中的表数据,导出到另外一个mongo数据库中
在上面的代码中,我们首先创建了两个 MongoDB 客户端,分别连接到源数据库和目标数据库。然后,我们获取了源数据库的数据表和目标数据库的数据表,并使用 find() 方法遍历源数据库中的每一条数据,并将其插入到目标数据库中。在上面的代码中,如果目标数据库中的 dest_collection 表还不存在,MongoDB 会自动创建该表。需要注意的是,在实际使用中,我们需要根据实际情况修改代码中的数据库连接配置、数据库名和数据表名。另外,如果要导出的数据表比较大,需要注意的是,如果使用异步操作,需要使用。原创 2023-10-26 15:29:37 · 217 阅读 · 0 评论 -
一句话解释什么是出口IP
如果你使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 IP 地址,因此出口 IP 地址可能会与本地网络内部的 IP 地址不同。需要注意的是,如果使用的是 NAT(网络地址转换)技术,则在 NAT 设备内部会进行地址转换,使得多个设备可以共享同一个公共 IP 地址,从而隐藏了内部设备的真实 IP 地址。当一台设备(如电脑、手机、路由器等)连接到因特网时,它会被分配一个全球唯一的 IP 地址,这个 IP 地址称为该设备的出口 IP 地址。原创 2023-10-25 15:08:59 · 6198 阅读 · 0 评论 -
org.springframework.dao.InvalidDataAccessApiUsageException: Cannot autogenerate id of type java.lang
确认实体对象中 @Id 注解的字段是否正确生成了 Long 类型的值,并且不为 null。如果需要使用 MongoDB 自动生成 _id,可以将注解的字段类型改为 String 类型。需要注意的是,使用 insert 方法时,如果 _id 的值已经存在于集合中,插入操作将会失败。使用 save 方法时,如果 _id 的值已经存在于集合中,将会执行更新操作。中时,@Id 注解的字段的值为 null,导致 MongoDB 无法自动生成 Long 类型的 _id。注解,以及注解的字段类型是否为 Long 类型。原创 2023-10-22 16:08:06 · 740 阅读 · 0 评论 -
@JsonCreator(mode = JsonCreator.Mode.DELEGATING) @JsonValue解释
JsonCreator 注解是 Jackson 序列化库提供的一个用于反序列化的注解,用于标记一个构造方法、静态工厂方法或者实例方法作为反序列化时使用的工厂方法。mode 属性指定了使用的模式,包括 DEFAULT(使用默认的构造函数或无参静态工厂方法)、DELEGATING(使用有参构造函数或有参静态工厂方法)、PROPERTIES(使用带有 @JsonProperty 注解的属性)等。在这个例子中,@JsonValue 注解标记了一个方法 getId(),并指定了该方法在序列化时使用的方法。原创 2023-10-19 20:43:44 · 607 阅读 · 0 评论 -
Map<String, Object> 和 com.fasterxml.jackson.databind.node.ObjectNode区别
使用Map时,您可以通过键来访问对应的值,并且可以使用各种方法来添加、删除、修改和遍历键值对。类的子类,是Jackson库中的一个重要组成部分。使用ObjectNode时,您可以像使用Map一样访问对象的属性,并且可以使用各种方法来添加、删除、修改和遍历属性。Map可以存储任何类型的值,而ObjectNode只能存储JSON中的基本数据类型(如字符串、数字、布尔值、null)以及JSON对象和数组。原创 2023-10-18 20:13:46 · 551 阅读 · 0 评论 -
Method threw ‘java.time.format.DateTimeParseException‘ exception.
这个错误通常是由于时间字符串与解析格式不匹配导致的。在这个例子中,可以检查一下 DATETIME_FORMATTER_PATTERN_T 这个格式化器的格式是否正确,是否与输入字符串的格式一致。如果格式不一致,需要更新格式化器的格式来匹配输入字符串的格式。另外,如果使用的是 .NET 等其他平台生成的时间字符串,需要注意它们的时间格式可能与 Java 的时间格式略有不同,需要进行转换或适配。,以匹配字符串中的小数点后面的 7 个数字。,第 19 个字符是最后的 ‘0’。,需要将时间格式化器的格式更新为。原创 2023-08-31 10:46:36 · 410 阅读 · 0 评论 -
关于mysql 的冷知识
在MySQL中,最大的行宽为65,535字节,请注意,这里是行宽,而不是列宽。如果我们将其中一个列定义为最大宽度为65,535的VARCHAR类型,那么其他的列便没有存放空间了。根据数据库中所定义VARCHAR列的数量,我们需要对每一列的宽度进行限制。在这种情况下,我们可能需要将某些列定义为TEXT类型,因为TEXT列和BLOB列存储在不同的块中。因此,对于不同的数据库,我们需要找到适当的限制列宽的方法,以避免在领域模型中对字符串长度进行验证。原创 2023-07-21 11:58:19 · 193 阅读 · 0 评论 -
解决spring security No AuthenticationProvider found for com.问题
No AuthenticationProvider found for com.这个错误通常表示在 Spring Security 配置中缺少对 ThirdAuthAuthentication 类型的身份验证提供程序的配置。原创 2023-07-18 12:02:36 · 688 阅读 · 0 评论 -
redisTemplate.scan 使用注意
这段代码中,为什么redis中只有一个key,但是却返回三个相同的结果。在Redis中,一个键可以有多个版本(version),也就是说,同一个键可以被多次修改,每次修改都会产生一个新的版本。这些版本之间是按照时间顺序排序的,即最新的版本总是排在前面。当使用SCAN命令遍历某个模式匹配的所有键时,如果某个键有多个版本,那么它会被多次返回,每次返回的版本都不同。这就是为什么你在Redis中只有一个键,但是在Java代码中却返回了多个相同的键的原因。原创 2023-07-04 14:46:58 · 450 阅读 · 0 评论 -
onceperrequestfilter 和 webmvcconfigurer 区别
在使用Spring框架进行Web开发的时候,我们经常会遇到需要对每个请求做一些统一的处理的情况。例如,我们可能需要在每个请求到达Controller之前进行身份验证,或者在每个请求结束后记录请求的日志信息。这时候,我们可以使用两种不同的方式来实现这些功能:onceperrequestfilter 和 webmvcconfigurer。onceperrequestfilter 是一个过滤器,它可以对每个请求进行拦截,并在请求到达Controller之前或之后执行一些操作。原创 2023-05-27 19:28:44 · 1139 阅读 · 0 评论 -
warning: fetch updated the current branch head. fast-forwarding your working tree from commit
这段提示信息表明你在执行 git fetch 命令时,由于远程分支的更新,当前分支的 HEAD 已经被更新了。因此,Git 会尝试将你的工作树(working tree)快进(fast-forward)到最新的提交(commit)上。这通常是因为你在执行 git fetch 命令时,获取了远程分支的最新提交,而这个提交已经超过了当前分支 HEAD 所指向的提交。这意味着 Git 会尝试使用最新的提交来更新你的工作目录(working directory),以便让你的工作目录与最新的提交一致。原创 2023-05-23 17:47:10 · 557 阅读 · 0 评论 -
领域驱动设计(Domain Driven Design)之建立领域模型
用领域模型表达领域概念建立模型使用通用语言验证模型识别构造块类型设计聚合如何使用领域模型原创 2023-05-07 16:30:40 · 562 阅读 · 0 评论 -
网易三面:数据库查询树形结构层面如何找出一个节点的所有子孙节点和祖先节点?
一、邻接表:依赖父节点查询一个节点的所有后代(求子树)怎么查呢?添加一条记录修改一个节点位置或一个子树的位置删除子树删除中间节点,并提升子节点二、路径枚举路径枚举的优点查询某个节点的全部祖先查询某个节点的全部后代路径枚举的缺点三、嵌套集嵌套集的优点嵌套集缺点四、闭包表优点1、查询所有后代节点(查子树)2、查询所有祖先(查祖先树):3、插入新节点4、删除叶子节点5、删除子树总结原创 2023-04-26 16:26:59 · 846 阅读 · 0 评论 -
面试官:你知道JVM的卡表吗?
跨代引用跨代引用假说卡表(Card Table)卡表元素如何维护——写屏障原创 2023-04-20 10:43:56 · 417 阅读 · 0 评论 -
面试官:谈谈你对领域模型设计(DDD)的理解和心得
一、业务开发的职责业务在实际开展中遇到的问题软件复杂度二、DDD的本质是什么1、领域复杂度2、技术实现的复杂性三、复杂度处理-领域模型描述问题域的准确性合理性证明什么是问题域如何实现问题域的分析1 四色原型法2 用例分析法问题域的拆分四、复杂度处理-进一步降低问题域的复杂度-限界上下文限界上下文的诞生背景限界上下文的本质上下文映射五、复杂度处理 - 分层不合理传统的三层架构六边形架构洋葱架构DDD 架构CQRS我们团队里面的架构实践六、复杂度 - 软件变成一个原创 2023-04-17 21:18:26 · 1078 阅读 · 0 评论 -
面试官:如何设计分布式日志系统?
什么是日志日志的价值分布式架构的日志运维4.1 为什么要有运维工具4.2 运维工具建设APM和可观测性5.1 Metrics和Prometheus5.2 Logging和ELK5.3 Tracing、OpenTracing和Apache SkyWalking5.4 Metrics,Logging和 Tracing 结合文库在日志运维上的实践6.1 汇聚监控6.2 批量查询6.3 链路跟踪日志的坏味道日志 good case原创 2023-04-12 21:28:02 · 1068 阅读 · 0 评论 -
MyBatis 批量插入的正确姿势
在我们的项目中,会不停地使用批量插入这个方法,而因为MyBatis对于含有的语句,无法采用缓存,那么在每次调用方法时,都会重新解析sql语句。所以,如果非要使用 foreach 的方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 的个数,最好能达到上面曲线的最底部的值,使速度最快。乍看上去这个foreach没有问题,但是经过项目实践发现,当表的列数较多(20+),以及一次性插入的行数较多(5000+)时,整个插入的耗时十分漫长,达到了14分钟,这是不能忍的。原创 2023-04-12 21:09:39 · 509 阅读 · 0 评论 -
面试官:你知道SPI吗?Java、Spring、Dubbo三者SPI机制的原理和区别了解吗?
什么是SPIJava SPI机制--ServiceLoader举例实现原理优缺点使用场景Spring SPI机制--SpringFactoriesLoader举例核心原理使用场景1、自动装配2、PropertySourceLoader的加载与Java SPI机制对比Dubbo SPI机制--ExtensionLoader举例dubbo核心机制1、自适应机制2、IOC和AOP2.1、依赖注入2.2、接口回调2.3、自动包装3、自动激活总结原创 2023-04-10 11:12:23 · 436 阅读 · 0 评论 -
高并发下如何保证接口幂等
1. insert前先select2. 加悲观锁3. 加乐观锁4. 加唯一索引5. 建防重表6. 根据状态机7. 加分布式锁8. 获取token原创 2023-04-08 12:17:25 · 664 阅读 · 0 评论 -
如何设计一个秒杀架构设计?
1. 秒杀业务的特点2. 总体思路2.1 削峰限流安全保护页面优化,动静分离异步处理热点分离2.2 Nginx的设计细节2.3 页面优化细节降低交互的压力安全控制2.4 Redis集群的应用分布式悲观锁(参考redis悲观锁的代码)异步处理订单2.5 消息队列限流2.6 数据库设计2.7 答题验证码的设计3. 注意事项原创 2023-04-08 12:16:35 · 408 阅读 · 0 评论 -
几种常见的微服务网关介绍
API网关基础什么是API网关网关的主要功能API网关选型常用API网关NginxZuulSpring Cloud GetWayKongTraefikAPI网关对比原创 2023-04-08 12:00:02 · 692 阅读 · 0 评论