学习
文章平均质量分 51
CodersCoder
有人见星辰,有人见尘埃。
展开
-
Java可重入锁(GPT编写)
Java可重入锁是Java并发编程中常用的一种锁机制,它可以允许同一个线程多次获取同一个锁,从而避免死锁和其他并发问题。Java可重入锁的实现基于AQS框架,它通过状态变量state和等待队列来实现锁的获取和释放。Java可重入锁支持可重入性,即同一个线程可以多次获取同一个锁,而不会造成死锁或其他并发问题。原创 2023-10-18 15:55:46 · 802 阅读 · 0 评论 -
基于InsCode实现一个自己的chatgpt
。原创 2023-08-17 10:26:37 · 150 阅读 · 0 评论 -
BeanUtils工具类
public class BeanUtils { private static final String DEFAULT_HYPHEN = "-"; /** * 对象拷贝,先使用Spring的BeanUtils进行浅拷贝,再尝试拷贝属性名称相同、但类型不同的字段 * * @param source 源对象 * @param target 目标对象 */ public static void copyProperties(Objec原创 2023-04-07 16:13:15 · 170 阅读 · 0 评论 -
json对象出现$ref: “$.list[0]“
循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。原创 2023-03-14 14:40:56 · 998 阅读 · 0 评论 -
MySQL使用行号分页
MySQL查询优化(无主键无索引分页查询)原创 2023-02-08 19:18:20 · 166 阅读 · 0 评论 -
RocketMQ相关面试题简单整理
RocketMQ面试题整理原创 2022-06-29 16:11:27 · 1941 阅读 · 0 评论 -
Dubbo远程调用文件上传服务
背景:由于公司内部使用dubbo作为远程服务调用,在使用其他系统的文件上传服务时,系统出现报错。 @ResponseBody @RequestMapping(value = "uploadResourceImg", headers = "content-type=multipart/form-data", method = RequestMethod.POST) public RestResult<ResultDto> uploadImage(@RequestPa原创 2021-11-04 20:24:54 · 783 阅读 · 0 评论 -
2021-08-26Dubbo踩坑笔记
背景由于项目是多人协作,服务调用使用的dubbo,在定义接口出入参的时候,我自己定义了一个基本入参xxxReq,包含了两个分页属性,后续有其他同事将此类继承了一个BaseReq。base中包含分页字段。本地单元测试,接口都能根据分页数据的值查询出对应的数据,但是dubbo Consumer端查出的数据一直是走的默认数据。而且服务器上,根据分页条目的属性名查询日志,根本查不到日志输出,由于默认数据与数据库条目还是一致的,所以错误的以为触发了dubbo的缓存机制,并没有真正的将请求打到服务器上,也导致排查错原创 2021-08-27 15:17:47 · 280 阅读 · 0 评论 -
Dubbo原理学习(二)
Dubbo SPI在前面的学习中ServiceConfig中有一段private static final Protocol protocol = (Protocol)ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();点击进入Protocol ,可以看到一个特殊的注解@SPI。学习一下:java spi机制SPI,Service Provider Interface,主要是被框架的开发人员使用,比原创 2021-08-18 19:52:21 · 158 阅读 · 0 评论 -
Dubbo原理学习(一)
Dubbo简介项目中使用dubbo作为rpc框架,而且以前一直也是有过使用经验,但是没有深入学习过,近期项目进度不紧,就简单学习一下深入原理。dubbo官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html开头开始一张众所周知的dubbo原理图:节点角色说明Provider 暴露服务的服务提供方Consumer 调用远程服务的服务消费方Registry 服务注册与发现的注册中心Monitor 统计服务的调用次数和调用时间的监原创 2021-08-16 16:53:53 · 336 阅读 · 0 评论 -
List聚合
需求:数据库查出一批集合,时间各不相同,但是现在要求对同一天的金额和总数再次叠加处理:@Data@AllArgsConstructor@NoArgsConstructorpublic class ResultDO { private String times; private Double price; private Long count;}public class DataTest { public static void main(String[] a原创 2021-05-19 14:31:18 · 506 阅读 · 0 评论 -
BeanCopy
package com.example.demo.util;import com.baomidou.mybatisplus.extension.exceptions.ApiException;import net.sf.cglib.beans.BeanCopier;import net.sf.cglib.beans.BeanMap;import org.springframework.objenesis.ObjenesisStd;import java.util.ArrayList;impo原创 2021-05-13 17:52:46 · 239 阅读 · 0 评论 -
String转换List<JSONObject>
/** * 字符串格式化 */ public static List<JSONObject> getList(String data){ ObjectMapper mapper = new ObjectMapper(); JavaType javaType = getCollectionType(ArrayList.class, JSONObject.class); List<JSONObject> ...原创 2021-05-12 10:59:25 · 1546 阅读 · 1 评论 -
Mybatis-Plus 3.2.0与3.4.0的坑
批量插入3.2.0版本中,IService有一个看着很迷惑人的一个方法boolean saveBatch(Collection<T> entityList, int batchSize);以为这个是批量插入,其实不然,跟随代码进入底层会发现: public boolean saveBatch(Collection<T> entityList, int batchSize) { String sqlStatement = this.sqlStatemen原创 2021-04-03 15:42:32 · 1695 阅读 · 1 评论 -
对List进行分割的几种方式
1、使用google guava对List进行分割需要引入google guava依赖,引入后可以使用,简单方便但是需要引入额外依赖,如果不介意可以使用。//假设查询出很多用户信息List<User> users = userService.findAll();//按每100个一组分割List<List<User>> parts = Lists.partition(users, 100);parts.stream().forEach(list -> {原创 2021-04-02 13:31:21 · 34706 阅读 · 0 评论 -
java获取一天的起止时间
Calendar calendar = new GregorianCalendar(); // 0可以修改,0代表当前时间,-1代表前一天 calendar.add(Calendar.DAY_OF_MONTH,0); //一天的开始时间 yyyy:MM:dd 00:00:00 calendar.set(Calendar.HOUR_OF_DAY,0); calendar.set(Calendar.MINU...原创 2021-03-30 15:27:25 · 1983 阅读 · 0 评论 -
HTML简单入门学习(二)
分析一个简单HTML文档样例:<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>我的测试站点</title> </head> <body> <p>这是我的页面</p> </body></html>分析如下:在HTML中应用CSS和JavaScr原创 2020-12-24 20:39:45 · 215 阅读 · 0 评论 -
HTML简单入门学习(一)
什么是 HTML?HTML (HyperText Markup Language) 不是一门编程语言,而是一种用来告知浏览器如何组织页面的标记语言。HTML 可复杂、可简单,一切取决于开发者。它由一系列的元素(elements)组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈现或者工作。 一对标签( tags)可以为一段文字或者一张图片添加超链接,将文字设置为斜体,改变字号,等等。剖析一个 HTML 元素这个元素的主要部分有:开始标签(Opening tag):包含元素的名称(本例为原创 2020-12-23 20:52:50 · 134 阅读 · 0 评论 -
序列化和反序列化学习(三)
几种常见的序列化和反序列化协议ThriftThrift是Facebook开源提供的一个高性能,轻量级RPC服务框架,其产生正是为了满足当前大数据量、分布式、跨语言、跨平台数据通讯的需求。 但是,Thrift并不仅仅是序列化协议,而是一个RPC框架。相对于JSON和XML而言,Thrift在空间开销和解析性能上有了比较大的提升,对于对性能要求比较高的分布式系统,它是一个优秀的RPC解决方案;但是由于Thrift的序列化被嵌入到Thrift框架里面,Thrift框架本身并没有透出序列化和反序列化接口,这导致原创 2020-12-21 22:47:44 · 107 阅读 · 0 评论 -
序列化和反序列化学习(二)
几种常见的序列化和反序列化协议互联网早期的序列化协议主要有COM和CORBA。COM主要用于Windows平台,并没有真正实现跨平台,另外COM的序列化的原理利用了编译器中虚表,使得其学习成本巨大(想一下这个场景, 工程师需要是简单的序列化协议,但却要先掌握语言编译器)。由于序列化的数据与编译器紧耦合,扩展属性非常麻烦。CORBA是早期比较好的实现了跨平台,跨语言的序列化协议。COBRA的主要问题是参与方过多带来的版本过多,版本之间兼容性较差,以及使用复杂晦涩。这些政治经济,技术实现以及早期设计不成原创 2020-12-17 19:44:35 · 157 阅读 · 1 评论 -
序列化和反序列化学习(一)
概述序列化和反序列化几乎是工程师们每天都要面对的事情,但是要精确掌握这两个概念并不容易:一方面,它们往往作为框架的一部分出现而湮没在框架之中;另一方面,它们会以其他更容易理解的概念出现,例如加密、持久化。然而,序列化和反序列化的选型却是系统设计或重构一个重要的环节,在分布式、大数据量系统设计里面更为显著。互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议往往采用分层模型,不同模型每层的功能定义以及颗粒度不同,例如:TCP/IP协议是一个原创 2020-12-15 20:41:46 · 194 阅读 · 0 评论 -
java魔数
背景以前偶尔听朋友说过魔数,但是从来没有深入学习过,最近又开始经常听到这个字眼,所以觉得有必要认真了解一下。。。类型1、标识文件类型的“魔数”大多数情况下,我们是通过扩展名来识别一个文件的类型的,比如一些.java,.txt文件等,我们都能清楚知道它是什么文件,那一旦一个文件的扩展名被修改过,怎么识别一个文件的类型呢,这就是用到了魔数。很多类型的文件,其起始的几个字节内容都是固定的,因此这几个字节的内容也被称为魔数。因为根据这几个字节的内容就可以确定文件类型了,有了这些魔数,我们就可以很方便的区分原创 2020-12-14 20:45:47 · 1352 阅读 · 1 评论 -
Java通过URL发送GET或者POST请求
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.io.UnsupportedEncodingException;import java.net.URL;import java.net.URLConnection;import java.util.Iterator;import java原创 2020-12-13 21:34:53 · 319 阅读 · 1 评论 -
OAuth2.0授权码模式流程详细
流程图之前受朋友启发学习了一下阮一峰的理解OAuth2.0,里面的流程图如下:感觉不是很直观,有一点点难理解,找到了一个稍微美观一些的流程图,如下:步骤详情以及参数步骤1、用户访问客户端,后者将前者导向认证服务器2、用户选择是否给予客户端授权3、假设用户给予授权,认证服务器将用户导向客户端事先指定的重定向URI,同时附上一个授权码4、客户端收到授权码,附上早先的重定向URI,向认证服务器申请令牌。这一步是在客户端后台的服务器上完成的,对用户不可见。5、认证服务器核对了授权码和重定向的UR原创 2020-12-12 21:04:32 · 3708 阅读 · 0 评论 -
Oauth2使用入门
OAuth2 简介OAuth 2.0是用于授权的行业标准协议。OAuth 2.0为简化客户端开发提供了特定的授权流,包括Web应用、桌面应用、移动端应用等。OAuth2 相关名词解释Resource owner(资源拥有者):拥有该资源的最终用户,他有访问资源的账号密码;Resource server(资源服务器):拥有受保护资源的服务器,如果请求包含正确的访问令牌,可以访问资源;Client(客户端):访问资源的客户端,会使用访问令牌去获取资源服务器的资源,可以是浏览器、移动设备或者服务器;原创 2020-12-11 21:23:32 · 477 阅读 · 0 评论 -
Spring JPA 中的 Hibernate
Hibernate 架构分析首先看一下 Hibernate 5.2 版本中,官方提供的架构图。从架构图上,我们可以知道 Hiberante 实现的 ORM 的接口有两种,一种是 Hiberante 自己的 API 接口;一种是 Java Persistence API 的接口实现。因为 Hibernate 其实是比 Java Persistence API 早几年发展的,后来才有了 Java 的持久化协议。以我个人的观点来看,随着时间的推移,Hiberante 的实现逻辑可能会逐渐被弱化,由 Jav原创 2020-12-10 21:32:32 · 337 阅读 · 0 评论 -
MongoDB内嵌索引Java实现
背景项目组原有两个MongoDB的表,在经过不同的业务场景后分别去存储,后来由于个别业务调整,需要将两个表进行合并,第二个小表作为第一个表的一个内嵌来处理。实现样例分别创建主文档和内嵌文档mongodbTmeplate测试验证使用postman请求,之后查看MongoDB的结果:...原创 2020-12-09 19:30:12 · 411 阅读 · 0 评论 -
SpringBoot集成MyCat实现分库分表
Mycat它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。Mycat关键特性支持SQL92标准支持MySQL、Oracle、DB2、SQL Serv原创 2020-12-08 22:12:01 · 1882 阅读 · 1 评论 -
Spring Boot集成Jersey
背景由于近期协助其他项目组进行改造,在改造过程中,发现对方代码中有一些不太明白的地方,一直没有使用过,如下:由于没有接触过这种类似结构,改造起来毫无头绪,所以百度一下。。概述java.ws.rs是jax-rs规范中定义的包名jax-rs全称Java API for RESTful Servicesjax-rs规范目前版本是2.0规范文档jax-rs中定义了一组启动方式 (以jee作为http容器 还是配合servlet作为http容器)一组注解@GET, @POST, @DELETE,原创 2020-12-07 20:43:05 · 525 阅读 · 0 评论 -
DataSource相关学习(三)
DruidDataSource 的配置与介绍在实际工作中,由于 HikariCP 和 Druid 各有千秋,国内的很多开发者都使用 Druid 作为数据源,我们看看都是怎么配置的,每一步都很简单。第一步:引入依赖。两种方式,一种是基于Maven的,另外一种是Gradle <dependency> <groupId>com.alibaba</groupId> <artifactId>druid原创 2020-12-06 20:59:29 · 592 阅读 · 0 评论 -
DataSource相关学习(二)
数据源的加载原理和过程我们通过 spring.factories 文件可以看到 JDBC 数据源相关的自动加载的类 DataSourceAutoConfiguration,那么我们就从这个类开始分析。DataSourceAutoConfiguration 的关键源码://将spring.datasource.**的配置放到DataSourceProperties对象里面;@EnableConfigurationProperties(DataSourceProperties.class)@Impor原创 2020-12-05 19:39:34 · 593 阅读 · 0 评论 -
DataSource相关学习(一)
概述当我们用第三方工具去连接数据库(Mysql,Oracle 等)的时候,一般都会让我们选择数据源,我们以 MySQL 为例,当选择 MySQL 的时候就会弹出如下图显示的界面:其中,我们在选择了 Driver(驱动)和 Host、UserName、Password 等之后,就可以创建一个 Connection,然后连接到数据库里面了。同样的道理,在 Java 里面我们也需要用到 DataSource 去连接数据库,而 Java 定义了一套 JDBC 的协议标准,其中有一个 javax.sql.Dat原创 2020-12-04 20:47:59 · 528 阅读 · 0 评论 -
CentOS7安装Jenkins并构建Gitee项目
安装Jenkins准备工作1、安装jdk到官网下载,并将该包上传到linux服务器的/usr/local/java,进行解压,并配置/etc/profile,由于虚拟机之前已经安装过,此步骤略过。2、安装maven同样到maven官网下载,目前最新的是3.6.3版本,选择下载。下载上传到服务器的/usr/local/maven上解压,同样需要配置/etc/profile。设置后如下:3、Jenkins下载到Jenkins官网下载下载并将war包上传至服务器/usr/local/je原创 2020-12-03 21:02:26 · 373 阅读 · 0 评论 -
Springboot 2.X集成MapStruct
概述What is it?MapStruct是一个代码生成器,它基于约定优于配置的方法极大地简化了Java bean类型之间映射的实现。生成的映射代码使用简单的方法调用,因此快速,类型安全且易于理解。Why?多层应用程序通常需要在不同的对象模型(例如实体和DTO)之间进行映射。编写此类映射代码是一项繁琐且容易出错的任务。MapStruct旨在通过使其尽可能自动化来简化这项工作。与其他映射框架相比,MapStruct在编译时生成Bean映射,以确保高性能,允许快速的开发人员反馈和彻底的错误检原创 2020-12-01 20:07:26 · 475 阅读 · 0 评论 -
GC相关知识简单学习
识别垃圾方法引用计数法(Reference Counting): 对每个对象的引用进行计数,每当有一个地方引用它时计数器 +1、引用失效则 -1,引用的计数放到对象头中,大于 0 的对象被认为是存活对象。虽然循环引用的问题可通过 Recycler 算法解决,但是在多线程环境下,引用计数变更也要进行昂贵的同步操作,性能较低,早期的编程语言会采用此算法。可达性分析,又称引用链法(Tracing GC): 从 GC Root 开始进行对象搜索,可以被搜索到的对象即为可达对象,此时还不足以判断对象是否存活/死原创 2020-11-29 20:44:00 · 414 阅读 · 0 评论 -
Spring Data JPA实践与学习(十一)
Probe、ExampleMatcher 和 ExampleProbe:这是具有填充字段的域对象的实际实体类,即查询条件的封装类(又可以理解为查询条件参数),必填。ExampleMatcher:ExampleMatcher 有关如何匹配特定字段的匹配规则,它可以重复使用在多个实例中,必填。Example:Example 由 Probe 探针和 ExampleMatcher 组成,它用于创建查询,即组合查询参数和参数的匹配规则。public interface Example<T> {原创 2020-11-28 21:37:36 · 553 阅读 · 0 评论 -
Spring Data JPA实践与学习(十)
QueryByExampleExecutorQueryByExampleExecutor(QBE)是一种用户友好的查询技术,具有简单的接口,它允许动态查询创建,并且不需要编写包含字段名称的查询。类图:QueryByExampleExecutor 是 JpaRepository 的父接口,也就是 JpaRespository 里面继承了 QueryByExampleExecutor 的所有方法。QBE 的基本语法public interface QueryByExampleExecutor<原创 2020-11-27 21:27:05 · 202 阅读 · 0 评论 -
Spring Data JPA实践与学习(九)
Etity 之间的关联关系实体与实体之间的关联关系一共分为四种,分别为 OneToOne、OneToMany、ManyToOne 和 ManyToMany;而实体之间的关联关系又分为双向的和单向的。实体之间的关联关系是在 JPA 使用中最容易发生问题的地方。@OneToOne 关联关系@OneToOne 一般表示对象之间一对一的关联关系,它可以放在 field 上面,也可以放在 get/set 方法上面。其中 JPA 协议有规定,如果是配置双向关联,维护关联关系的是拥有外键的一方,而另一方必须配置 m原创 2020-11-26 20:34:15 · 175 阅读 · 0 评论 -
Spring Data JPA实践与学习(八)
联合主键在实际的工作中,我们会经常遇到联合主键的情况。那么JPA如何实现呢?1、通过 @IdClass 做到联合主键。样例:第一步:新建一个 UserInfoID 类里面是联合主键。@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class UserInfoID implements Serializable { private String name,telephone;}第二步:再新建一个 UserInfo原创 2020-11-25 20:37:18 · 206 阅读 · 0 评论 -
Spring Data JPA实践与学习(七)
EntityJPA关于实体有一些规定,大致如下:1、实体是直接进行数据库持久化操作的领域对象(即一个简单的 POJO,可以按照业务领域划分),必须通过 @Entity 注解进行标示。2、实体必须有一个 public 或者 protected 的无参数构造方法。3、持久化映射的注解可以标示在 Entity 的字段 field 上,也可以将持久化注解运用在 Entity 里面的 get/set 方法上,通常我们是放在 get 方法中。简而言之, Entity 里面的注解生效只有两种方式:将注解写在原创 2020-11-24 20:11:22 · 168 阅读 · 0 评论