自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(51)
  • 资源 (1)
  • 收藏
  • 关注

原创 大语言模型LLM应用篇

笔者认为大语言模型本身的开发应用可以分为三层:模型基础研发、模型定制优化和模型应用开发

2024-05-10 11:03:46 531

原创 大语言模型LLM原理篇

大模型本质上是一个维度非常巨大的矩阵;模型训练和微调本质上是调整模型矩阵的值;大模型回答用户问题,实质上是先将用户输入向量化之后,再与模型矩阵进行运算得到值最优的向量值,再将该向量值转为用户可以理解的信息返回给用户。

2024-05-10 11:00:23 1266

原创 大语言模型LLM入门篇

什么是大模型?大模型最终要解决的问题是什么?

2024-05-08 15:59:59 1299

原创 Windows PC上从零开始部署ChatGML-6B-int4量化模型

详细阐述ChatGML-6B-int4量化模型在Windows PC上的操作过程。

2024-05-08 15:56:37 819

原创 MyBatisPlus异常:Cannot determine value type from string

再仔细查看GoodsBO的定义,发现使用了注解@Builder和@Data,没有其他关于构造函数的注解了。而MybatisPlus将查询结果映射为对象,是通过调用对象类的无参构造函数实现的。鉴于此,笔者认真核对了SQL语句和resultType指定的实体类GoodsBO属性,发现goodsName字段是一致的,且是没有歧义的。通过搜索引擎查询到这种异常出现的主要原因是:SQL查询的字段与resultType属性指定对象类的字段不一致。

2024-04-29 16:01:59 883

原创 “This system is not registered to Red Hat Subscription Management”,这个问题一定要重新安装yum吗?

This system is not registered to Red Hat Subscription Management”,在使用RedHat系统上使用yum命令,碰到该问题,一定要卸载原系统的yum,然后下载centos的yum安装包重新安装吗?未必!

2024-04-29 15:58:30 658

原创 parallelStream()并发远程调用服务导致异常

采用parallelStream()并发远程调用服务导致异常::Could not find class [org.springframework.boot.autoconfigure.condition.OnPropertyCondition]

2024-03-19 20:14:15 492

原创 Javaer,你掌握了哪些开发技术?

年底了,笔者对自己接触或使用过的技术进行复盘,下面是一张复盘图,目前笔者还只复盘了【Java】和【设计模式】,做了一些详细的图文标注,后续会边复盘边更新,可能期间还会发表一些文章。

2024-02-02 16:20:43 460

原创 RedisTemplate批量往集合Set添加元素出现的转换异常问题分析

在上篇文章《Java项目中实现敏感词过滤功能》中为了避免每次过滤敏感词都要查询数据库加载敏感词库,笔者设计将敏感词库缓存到了Redis中,缓存时间5分钟。在后续开发联调中,敏感词过滤逻辑报错:类型转换错误,无法将HashSet转为String类型。/*** 从数据库或缓存加载敏感词库,默认缓存5min* @return*/try {log.warn("远程获取敏感词信息失败!", e);// 具体过滤逻辑代码。

2024-02-01 08:45:00 534

原创 同一个方法上多个自定义注解的执行顺序问题分析

在社交化电商项目中,除了需要对用户提交的敏感词进行拦截,也需要对黑名单用户进行拦截。因此,项目通过自定义注解的方式实现了两个注解@TextBlock和@BlackBlock,并实现了对应的拦截处理。当笔者将两个注解注释在同一个方法(比如:用户发布帖子)上时,突然意识到一个问题:这两个注解的处理逻辑谁先谁后?在注解对应的Aspect类上使用@Order注解指定执行顺序,指定值越小越先执行。(2)按照注解名称的大小(以字符串形式进行比较),小的先执行,大的后执行;由此,我们可以推出第2个观点是正确的。

2024-02-01 08:45:00 1486

原创 Java项目中实现敏感词过滤功能

在社交化的电商项目中,很多用户提交的信息涉及敏感性,比如:用户评论、用户发表的动态等。目前平台已经介入第三方平台的Saas服务,在线过滤用户提交的敏感词信息。然后,在实际使用过程中存在一些敏感词漏处理的情况,从而导致平台声誉受损。基于此,我们准备在平台增加一个自定义敏感词过滤的功能模块,对于第三方敏感词服务漏处理的敏感词,我们将通过后台配置在敏感词库中,并进行补充处理。

2024-01-29 15:41:00 2379

原创 MybatisPlus应用参数类型不一致导致索引失效

id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',`brand_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '品牌ID',`buy_count` int NULL DEFAULT 0 COMMENT '购买数量',

2024-01-29 15:39:43 1162

原创 设计模式在电商项目中的应用场景分析

在电商系统的设计开发过程中,可以使用多种设计模式来解决不同的业务场景。以下是一些常见的业务场景和相应的设计模式应用示例:订单处理:使用状态模式来管理订单的不同状态(例如待支付、已支付、已发货、已完成等),以及状态之间的转换规则。购物车功能:使用享元模式来管理购物车中的商品对象,以减少内存占用和提高性能。支付处理:使用策略模式来支持不同的支付方式(例如支付宝、微信支付、信用卡等),使系统能够灵活地适应不同的支付方式。

2024-01-25 09:00:00 965

原创 克隆虚拟机之后网络IP冲突解决方法

虚拟机的克隆是快速创建虚拟机的一种方法,但是克隆之后却带来了一些问题。如果被克隆虚拟机配置了静态IP地址,那么克隆之后的虚拟机会与之前的虚拟机出现IP地址、MAC地址和UUID的冲突,那么本文则阐述如何解决上述冲突。问题的解决分为两个步骤:1、修改虚拟网卡名称;2、修改网络IP配置。下面分别详细描述解决方法。

2024-01-24 15:42:15 1635

原创 spring eureka集群相关问题

EurekaServer节点启动的时候,DefaultEurekaServerContext.init()方法调用PeerEurekaNodes.start()方法,start方法中resolvePeerUrls()会从配置文件读取serviceUrl属性值获得集群最新节点信息,通过updatePeerEurekaNodes()方法将最新节点信息更新到PeerEurekaNodes类的属性peerEurekaNodes和peerEurekaNodeUrls中。这里算是个简图吧,省略了队列的转换和异常处理。

2024-01-24 15:38:13 2193

原创 Druid集群搭建手册

初始化mysql ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 这条命令执行后会产生一个初始密码: A temporary password is generated for root@localhost: tj+/Yssvc9Gb (要记下来)首先执行如下命令生成公钥和私钥对:ssh-keygen -t rsa,一直按回车键,直到命令执行完毕。

2024-01-23 16:15:11 2311

原创 MybatisPlus批量更新的小插曲

插曲背景在商城项目中涉及订单业务,有两个主要的表:订单表order和订单明细表order_detail。order表:主要存储订单的主要信息,订单总金额,收货人信息,订单状态等;order_detail表:主要存储订单购买的商品明细信息,每个SKU一条记录;order表和order_detail表的主键id都是自增的,order表有一个sn字段,order_detail表有一个order_sn字段,这两个表通过sn和order_sn两个字段进行关联,实现业务:1个订单有多少条订单明细记录。插曲

2024-01-23 14:23:29 460

原创 日志平台搭建手册

时间是搜索的辅助条件,真正搜索到想要的日志信息,需要通过关键字搜索。如果想要指定字段搜索,可以采用field:keyword的形式输入,比如上图中,搜索框输入loglevel:ERROR,表示日志记录的loglevel这个字段,如果字段值与“ERROR”匹配,则被搜索命中,命中关键字以绿色底白色字形式展示。LOG-END-OFFSET表示对应的Topic对应的Partition的总消息数量,CURRENT-OFFSET表示当前消费分组已经读取消费的消息量,LAG表示剩余的消息量,即消息堆积量。

2024-01-22 11:57:10 1183

原创 MySQL千万级数据存储以及查询优化

当前系统有一个交易流水表,按照每天一个表的策略进行分表存储交易流水。现在每张表大约3000W-4000W笔记录,即每天大约有3000w-4000w笔交易发生。该表采用Innodb存储引擎,默认支持事务。流水记录的ID由程序自己生成,基于UUID实现,无序混乱。现在碰到的问题是:每天下午,交易无法写入数据表,且当表的存储数据量增长到一定程序则无法进行查询。综上所述,涉及交易流水的相关操作在数据量增长到一定量之后均无法执行。

2024-01-22 11:40:01 1628

原创 一致性Hash详解

一致性哈希算法通过将节点和数据映射到一个哈希环上,实现了节点的动态添加和删除、容错性和负载均衡。该算法在分布式系统中具有重要的应用价值,可以提高系统的可扩展性、容错性和性能。希望本文对你对一致性哈希算法有所了解。如果有任何疑问,请随时提问。

2024-01-19 09:39:38 954

原创 ThreadPoolExecutor深入浅出

通过本文的介绍,我们了解了的构造函数各个参数的含义,并掌握了在实际开发中使用线程池的注意事项。合理配置线程池的大小、选择合适的工作队列、注意线程池的关闭以及考虑任务的执行时间,这些都是使用线程池时需要注意的重要方面。希望本文能够帮助读者更好地理解和应用,提高多线程编程的效率和质量。

2024-01-19 09:37:09 1094

原创 JVM的演变

本文深入浅出地介绍了JVM从JDK 7到JDK 21不同主流版本的演变和特性。我们学习了每个版本中的重要改进,包括垃圾收集器的改进、新的语言特性和性能优化。了解JVM的演变可以帮助我们编写更适合的Java代码,并充分利用JVM的功能和性能。希望本文能够帮助你理解JVM的演变和特性,并在实际项目中应用这些知识。如果你对JVM的更多细节和深入内容感兴趣,可以查阅官方文档和其他相关资源进行深入学习。

2024-01-18 09:43:33 1041

原创 CompletableFuture的深入浅出

CompletableFuture是Java中的一个类,它实现了CompletionStage接口,用于支持异步编程和操作的组合。它提供了一种更加优雅和灵活的方式来处理异步任务,可以方便地进行任务的串行、并行、组合和异常处理。本文深入浅出地介绍了CompletableFuture的基本用法和进阶用法。我们学习了如何创建和使用CompletableFuture,以及如何串行执行任务、并行执行任务、处理异常和处理超时。

2024-01-18 09:37:19 1070

转载 logback按照日期和文件大小切分日志

在实际项目中,如果采用TimeBasedRollingPolicy切分日志文件,每天生成一个日志文件,有时候该文件的体积也会比较大,不利于查看。那么,我们想每日的文件是不是还可以根据大小进行切分呢?答案是:可以的。使用:SizeAndTimeBasedRollingPolicy,从这个类名就可以看出来,该策略是从时间和文件大小两个维度进行切分文件的。本文紧接着来介绍如何使用该策略。

2024-01-14 14:21:44 761

转载 springboot工程中使用slf4j+logback实现日志唯一编号

在某些项目中,特别是实时交易项目中,需要根据一个唯一的编号把某个交易事务的所有日志都查询出来,通过grep命令可以快速定位该笔交易发生异常的位置和原因。本文基于springboot+slf4j+logback来实现上述需求。

2024-01-14 14:18:45 356

原创 关于rewriteBatchedStatements的源码分析

自此,关于rewriteBatchedStatements的源码分析结束,如果需要数据库驱动重写批量插入,只需要正常使用MybatisPlus的saveBatch方法,并在数据库连接中加上rewriteBatchedStatements=true的配置信息即可。在之前的优惠券兑换码需求中,涉及批量写入问题,其中有一个关键的连接配置参数非常重要——rewriteBatchedStatements,当该值配置为true时,Statement将可能对批量插入sql进行重写。

2024-01-13 10:29:24 842

原创 优惠券兑换码生成需求方案优化——批量插入、批量导出、异步方案

前段时间收到一个优惠券兑换码的需求:管理后台针对一个优惠券发起批量生成兑换码,这些兑换码可以导出分发到各个合作渠道(比如:抖音、京东等),用户通过这些渠道获取到兑换码之后,再登录到我司研发的商城,使用兑换码兑换获得对应的优惠券。整个需求大致分为两个部分:(1)批量生成兑换码;(2)使用兑换码兑换优惠券。接下来的几篇文章将针对批量生成兑换码功能实现过程中碰到的一系列问题进行分析描述,以便读者再碰到类似问题,可以快速解决。《方案优化:批量插入、批量导出、异步+补偿》

2024-01-13 10:19:29 1594

原创 优惠券兑换码生成需求——批量生成任务全局限制唯一

前段时间收到一个优惠券兑换码的需求:管理后台针对一个优惠券发起批量生成兑换码,这些兑换码可以导出分发到各个合作渠道(比如:抖音、京东等),用户通过这些渠道获取到兑换码之后,再登录到我司研发的商城,使用兑换码兑换获得对应的优惠券。整个需求大致分为两个部分:(1)批量生成兑换码;(2)使用兑换码兑换优惠券。接下来的几篇文章将针对批量生成兑换码功能实现过程中碰到的一系列问题进行分析描述,以便读者再碰到类似问题,可以快速解决。《批量生成任务全局限制唯一》

2024-01-12 09:31:56 1204

原创 优惠券兑换码生成需求——事务同步回调问题分析

前段时间收到一个优惠券兑换码的需求:管理后台针对一个优惠券发起批量生成兑换码,这些兑换码可以导出分发到各个合作渠道(比如:抖音、京东等),用户通过这些渠道获取到兑换码之后,再登录到我司研发的商城,使用兑换码兑换获得对应的优惠券。整个需求大致分为两个部分:(1)批量生成兑换码;(2)使用兑换码兑换优惠券。接下来的几篇文章将针对批量生成兑换码功能实现过程中碰到的一系列问题进行分析描述,以便读者再碰到类似问题,可以快速解决。《事务同步回调问题》《批量生成任务全局限制唯一》

2024-01-12 09:23:56 998

原创 优惠券兑换码生成需求——事务失效问题分析

前段时间收到一个优惠券兑换码的需求:管理后台针对一个优惠券发起批量生成兑换码,这些兑换码可以导出分发到各个合作渠道(比如:抖音、京东等),用户通过这些渠道获取到兑换码之后,再登录到我司研发的商城,使用兑换码兑换获得对应的优惠券。整个需求大致分为两个部分:(1)批量生成兑换码;(2)使用兑换码兑换优惠券。接下来的几篇文章将针对批量生成兑换码功能实现过程中碰到的一系列问题进行分析描述,以便读者再碰到类似问题,可以快速解决。文章系列如下:《事务失效问题分析》《事务同步回调问题分析》

2024-01-12 09:17:08 1143

原创 桥接模式之多融资场景多交易的设计方案

桥接模式很好地解决了多维度关联扩展问题。如果新增一个融资场景,只需要增加两个类:BankService接口的实现类和BankParamBuilder接口的实现类,与交易请求方法数量无关,而且本次扩展不会影响原来场景的实现代码。可能读者会发现一个问题,如果BankService接口增加一个交易方法呢,其当前各个场景的实现类代码都需要调整。这个问题,可以从业务角度考虑,提前考虑整个融资流程中涉及的所有需要与银行交互的交易,这个流程在各个银行应该都有一套固定业务流程,是可以提前考虑全面的。

2023-12-20 17:47:16 1148 1

原创 基于AspectJ和自定义注解实现挡板功能

目前项目已存在银行接口调用服务接口FinancingService及其实现类FinancingServiceImpl,为了保证开闭的设计原则,实现方案采用自定义注解和AspectJ技术,通过Nacos配置实现挡板机制的灵活切换。针对银行服务接口编写了对应的挡板服务实现类,通过自定义注解BankBaffle和注解拦截器BankBaffleAspect实现挡板服务与正常服务的切换,切换判断需要根据在Nacos中配置的挡板参数。首先定义一个银行服务接口的挡板实现类,实现挡板逻辑;2.2 定义银行接口挡板实现类。

2023-12-20 17:42:23 1042 1

原创 基于OpenFeign + Sentinel框架实现统一服务降级

,但是发现非常繁琐:针对每一个使用@FeignClient注释的远程服务都需要实现一个FallbackFactory,并将实现的FallbackFactory配置为@FeignClient注解fallbackFactory属性的值。举个例子:如果项目有10个RemoteXXService远程接口服务,每个服务包含5个方法。为了实现所有服务及其方法调用时的服务降级,需要自定义实现10个RemoteXXServiceFallbackFactory接口,总共需要实现50个方法。

2023-11-19 09:05:35 923 2

原创 消失的消息

昨天,一个上线已久的供应链金融项目出现异常,经过一整天的排查,终于定位了两个问题的原因,并通过重启服务解决了其中的1个问题,另一个问题需要发起上线流程,通过上线才能解决。重启还是很有效的,重启成功之后,通过观察日志知道服务正常消费队列消息了,平台页面也展示了最新的推送消息。上图虚线框内是供应链金融项目的服务,包括:银行对接服务(bank-adapter)、贷前服务(preloan)、贷中服务(onloan)和贷后服务(postloan),bank-adapter服务属于外联服务,主要和银行进行对接。

2023-09-28 12:59:57 112 1

原创 消失的字段

昨天,一个上线已久的供应链金融项目出现异常,经过一整天的排查,终于定位了两个问题的原因,并通过重启服务解决了其中的1个问题,另一个问题需要发起上线流程,通过上线才能解决。上图虚线框内是供应链金融项目的服务,包括:银行对接服务(bank-adapter)、贷前服务(preloan)、贷中服务(onloan)和贷后服务(postloan),bank-adapter服务属于外联服务,主要和银行进行对接。3、查看bank-adapter和onloan服务的日志,因为从代码里对服务间调用的请求和响应记录了日志。

2023-09-28 11:46:34 209 1

原创 Maven快照(snapshot)依赖无法下载

完成上述配置之后,重新对工程进行全局编译,则可畅通无阻,会自动完成com.ccc:ccc-framework:4.6.2.0-SNAPSHOT的下载。2. maven默认只下载非快照的依赖,如果对应自己开发上传的依赖,如果没有指定快照下载策略,则无法正常下载。1. 首先确认仓库中是否存在对应的依赖文件。

2023-09-25 14:27:49 1013 1

原创 Go+GoLand+Git实现代码版本管理(六)

如果是本地先安装了git,而且安装过程将git执行文件地址加入了系统环境变量%Path%中,后续GoLand安装之后会自动配置好【Path to Git executable】这个参数,笔者这里就是通过“Auto-deteched”自动发现填充的。由于本项目仅为练习项目,本次不演示如何将代码提交到远程仓库,如果读者感兴趣,可以自行查询git的使用文章,自学操作。

2023-09-05 16:05:40 893 1

原创 Go程序运行与调试(五)

Go程序的运行可以通过命令行和IDE集成功能来实现,而通过命令行也有两种实现方式,通过IDE非常方便。IDE在项目的入口主函数处会提示一个绿色三角块,表示该函数可以运行,直接点击这个绿色三角块,选择【Run 'go build hello1'】即可运行该程序。打开IDE自带的Terminal终端,进入当前项目的根目录hello1下,输入如下命令即可运行hello.go程序。本节我们主要来介绍Go程序的运行与调试方式。Go程序的调式使用IDE非常方便,首先,我们设置断点,所有IDE设置断点的方式基本一样。

2023-09-05 16:01:40 658 1

原创 GoLand开发HelloWorld项目(四)

在v1.11版本之前,Go项目的创建位置必须在GOPATH\src目录下,项目依赖包没有成熟的管理体系,相同依赖不同版本的包无法区分,依赖基本通过go get命令或者下载依赖源码的方式获取。打开【File】->【New】->【Project】,选择Go(GOPATH),Location默认是在%GOPATH%\src目录下,点击【Create】按钮,创建的项目下没有任何项目文件。

2023-08-30 09:48:13 297

原创 GoLand安装与配置(三)

2. 配置Go环境参数:打开【File】->【Settings】->【GO】,需要配置好GOROOT、GOPATH、GO MODULES,如果在上一篇中设置好了GOROOT和GOPATH环境变量,GoLand安装后会默认获取系统环境变量做好设置,GO MODULES中配置Enviroment,增加:GOPROXY=想学习更多Go开发知识,请看《Go学习导读》。笔者下载的安装包是:goland-2023.1.3.exe,双击安装包开始安装操作,安装过程只要注意安装路径的设置,其他默认下一步即可。

2023-08-29 09:11:51 524 2

实时OLAP引擎之Apache Druid集群搭建手册

本资料对开源的实时OLAP引擎之Apache Druid进行了实战记录,包含集群结构图以及具体搭建步骤,可以参考一二。

2024-01-21

Java中的线程与线程池.pptx

本文档对Java中的线程和线程池进行了简单介绍。首先,阐述了为什么需要线程、Java中实现线程的几种方式,线程的多种状态切换;然后,介绍了为什么需要线程池,JDK自带的线程池实现方式ThreadPoolExecutor的使用及其原理,最后强调ThreadPoolExecutor应用的注意点。

2024-01-20

区块链Hyperleger Fabric2.0 总结分享

本文档首先介绍了Fabric2.0与之前版本的差异,再详细阐述了Fabric2.0的系统组织结构,然后描述了Fabric2.0的交易流程和原理,最后介绍了Fabric2.0的智能合约管理,这是最大的变化,顺带提及了2个fabric的sdk,high level 和 low level.

2024-01-20

SpringBoot入门.pptx

本资料承前启后介绍了Spring、SpringFramework、SpringBoot、SpringCloud的关系,再介绍了SpringBoot化繁为简的巧妙设计和原理,最后介绍Springboot的自定义配置。

2024-01-20

SpringCloud微服务之揭开微服务的面纱.pptx

本资源通过与传统应用对比阐述了什么是微服务以及为什么需要使用微服务,并从实际运用角度说明微服务不单单只是代码层面的变革,还有很多开发周边需要同步更新迭代。最后,微服务不是银弹,什么时候不应该使用微服务。

2024-01-20

Akka简介.pptx

本资料是笔者在一个大数据项目中成功应用之后整理的文档,比较简单的介绍了Akka的消息模型,并提供了简单的应用代码示例,能够帮助读者对Akka快速的有个大致的了解,学会基本应用。

2024-01-20

兑换码生成工具类,快速生成安全的兑换码

简单好用的兑换码生成工具类,保证兑换码的无序性、唯一性和生成性能

2024-01-12

基于openfeign+sentinel的统一降级服务代码

默认的降级服务需要自定义实现很多FallbackFactory,本模块针提供统一默认的降级服务,同时也支持自定义降级服务。

2023-11-19

Python编程入门经典源代码

Python编程入门经典教程配套源代码,按照章节详细分类,容易上手

2013-02-17

空空如也

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

TA关注的人

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