自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天草二十六

Java编程、CICD、K8S容器化部署、DevOps

  • 博客(250)
  • 资源 (19)
  • 收藏
  • 关注

原创 容器化部署之JDK升级为21版本,程序启动报错standard_init_linux.go:228: exec user process caused: exec format error

本文主要是解决了两个问题,一是线上机器无法拉取dockerhub镜像,二是机器架构与容器架构不一致。当本地机器与生产机器的架构不一致时,本地拉取镜像一定要指定架构,否则就出现本地可以,生产环境却报错“standard_init_linux.go:228: exec user process caused: exec format error”。当然,如果你是自己制作openjdk镜像,在docker build构建镜像的时候,也一定要指定要构建的镜像架构是arm64还是amd64。

2025-05-30 20:52:48 837

原创 Macbook 安装Parallels Client连接远程windows计算机

什么是Parallels Client?使用 Parallels Client,用户可以在 Windows、Linux、Mac、iOS、Android、Google Chromebook和任意HTML5浏览器设备上安全访问远程应用程序和虚拟桌面。Parallels Client 常用操作有:运行发布的应用程序、管理快捷方式、会话管理等。在App Store下载并安装。

2025-04-21 15:55:55 344

原创 Macbook IntelliJ IDEA终端无法运行mvn命令

idea工具里执行Maven命令mvn package,报错提示 zsh: command not found: mvn。macOS,默认使用的是zsh,环境变量通常配置在 ~/.zshrc 文件中。而我之前一直是配置在~/.bash_profile文件中。

2025-04-21 15:37:15 726

原创 Macbook安装git后,SSH密钥的类型不匹配导致拉取代码失败

我在拉取gitlab代码的时候,报错但是,我已经把本地的公钥添加到了gitlab ssh keys另外本机是macbook pro m3,这是为什么呢?

2025-04-21 15:00:57 391

原创 Macbook amd芯片安装robo3t免费版软件

连接mongodb数据库的客户端,好用点的要属Robo 3T了,好用的关键是免费。可是Macbook笔记本电脑的芯片自从M1起,就不能直接安装了,会一直提示“软件已损坏”。那应该怎么办呢?它只有x84版本的软件,并没有adm64的版本。如果你也遇到相同的问题,可以参考本文。

2025-04-21 13:36:49 391

原创 Devops系列之对接Gerrit的设计与实现(三)-- Java编程实现

截止到目前,对接gerrit的设计与详细实现均已完整梳理,后文将解决代码提交的消息提醒。本文只实现了自动创建gerrit项目以及权限项,创建了owner组和dev组。因为缺少信息–每个组里应该添加哪些人。后期将实现给组里加人的操作。也就是说,gerrit工程创建后,申请新项目的人,如果不在上面的owner组内,你会看不到已创建好的gerrti工程!!不要慌,让owner组里的人员把你加入进组里。

2025-04-10 09:54:21 446

原创 Devops系列之对接Gerrit的设计与实现(二)-- shell编程实现

本文先通过一个shell命令,讲述如何创建gerrit项目,下一篇文章我们将使用java语言实现。分为以下几步:前三步都比较简单,复杂的点主要在于权限这块。三、测试验证创建后的gerrit项目,查看其权限详情,见下:

2025-04-10 09:53:56 972

原创 JPA编程,group分组配合max函数实现数据的去重并排序

有一个数据库表Like,存储的是用户推荐材料的记录, 有以下字段:一个用户可以推荐多个材料,反之,一个材料也能为多个用户推荐。在展示推荐列表的时候,需要按浏览次数排序进行排列。所以本表冗余存储了浏览次数字段, 按推荐表的常规设计,只需要用户ID+材料编号两个字段即可。有一个需求点是:不能重复展示推荐表中的材料,因为浏览次数最多的材料,当被多个用户推荐时,本表会存储多条记录。查询数据,见下图:对于材料6325868f67bf41438d62cf20ade464e8,它的浏览次数是17,被多个人推荐,所

2025-04-01 09:49:38 355

原创 Rabbitmq消息被消费时抛异常,进入Unacked 状态,进而导致消费者不断尝试消费(下)

消息在消费的时候,如果出现异常,直接抛弃,不想进入重试流程。回到最上面的流程图,其实还是无法解决消息消费失败的死循环。虽然不会进入重试, 但是在消费消息的时候,由于抛异常,又会进入消息队列。最终导致死循环。解决方法是: 对于不想要重试,而又不陷入死循环。那么就只有一个办法,使用个大大的try-catch住消息监听方法。

2025-03-25 13:51:25 1450

原创 Rabbitmq消息被消费时抛异常,进入Unacked 状态,进而导致消费者不断尝试消费(上)

在对阿里云成本分析的时候,发现SLS日志的费用暴增,由平均每月的2000元突然增至6000多。查看日志的费用明细,按应收金额降序得知,原来是某个java服务打印的jvm日志暴增。再已进入SLS查看打印的日志量,更是惊呆了。。。不仅是打印的数量多,打印的时间点是遍布整天24小时。也就是说,该日志是整天整夜地打印,像是进入了死循环。围绕着这个问题,尝试让AI给我回答原因是什么。可能是我提问水平不够,未能准确得出答案,在排查这个问题的过程中,代码是一分钟就定位出。

2025-03-25 13:47:55 1190

原创 微信小程序的业务域名配置(通过ingress网关的注解)

是依靠kong实现,本文将通过ingress网关实现。而我们的服务是部署于阿里云K8S容器,当然内核与ingress无异。找到k8s–>网络–>路由。

2025-03-20 17:05:08 650

原创 Java对接豆包等AI大模型的设计方案(六)-- 对接OpenAI的java库

请求和响应的POJO类,包括com.theokanning.openai.completion.chat.ChatMessage(请求上下文消息),com.theokanning.openai.completion.CompletionResult(正常响应体),com.theokanning.openai.OpenAiError(处理错误异常)这个jar包复用性比较高,除了多模态上下文,无法直接使用ChatMessage外。

2025-03-19 15:04:24 728

原创 Java对接豆包等AI大模型的设计方案(五)-- 编程实现(下)

接着上文,我们将通过监听者SseEventSourceListener实现SseEmitter与okhttp请求的串联。为了做到二者的关联,在SseEventSourceListener对象构造的时候,便把SseEmitter对象传递进去。实现onEvent()方法如果你也需要解析并保存data中的数据,给一个参考实现。

2025-03-19 09:15:00 967

原创 Java对接豆包等AI大模型的设计方案(四)-- 编程实现(上)

返回体是一个SseEmitter,它继承ResponseBodyEmitter,同属于spring-webmvc模块。方法send()负责传输数据给客户端方法complete()告知客户端断开连接,终止传输@ApiOperation(value = "AI问答")@ApiModel@Data@Builder@ApiModelProperty(notes = "会话ID", required = true)@NotNull(message = "会话ID必填")

2025-03-18 09:21:35 920

原创 Java对接豆包等AI大模型的设计方案(三)-- 概要设计(下)

chat作为会话聊天室,每次的一问一答则是chatItem会话明细,它们是一对多的关系。这本身没有什么难点,想着重说明的是,我们把操作本地数据库表与调用AI大模型分离开来。总是先操作chat和chatItem,把提问内容保存好,再向第三方AI大模型发起http请求。等待AI大模型返回数据后,再更新chat和chatItem的回复字段。这里会遇到一个问题:在遇到网络或账号等异常时,导致AI大模型返回报错信息,此时的chatItem会话明细会出现空回复的异常。

2025-03-18 08:37:42 454

原创 Java对接豆包等AI大模型的设计方案(二)-- 概要设计(上)

这是以kimi为示例,在实际业务中,我们会让业务方在创建会话聊天室的时候,传入提问的内容。如果用户没有开始发起提问,也就无需创建会话聊天室了。点击“开启新会话”,就是创建了一个聊天室。换句话说,一个会话聊天室,必须有一个提问。这里解释下什么是重问AI。

2025-03-17 16:02:34 586

原创 Java对接豆包等AI大模型的设计方案(一)-- 需求分析

接下来几篇文章,我试着从需求分析、概要设计到编程实现等角度,梳理并总结java语言是如何对接豆包等AI大模型。本文作为对接AI的第一篇文章,先从需求着手,讲一讲在小公司是如何使用AI大模型。不同的业务在需要问AI的时候,调用ai-assist服务,创建一个聊天会话。在聊天会话中,支持发送文字及图片,也即多模态上下文。AI回复的内容需要保存至本地数据库,留待用户回看。

2025-03-17 15:40:40 601

原创 kong搭建一套微信小程序的公司研发环境

本文通过图文的方式,把微信小程序的公司研发环境搭建整过程详细描述,使用到的api网关是kong。如果是其他网关,原理大同,见文章最开头的架构图。另外,你需要知道公司研发环境的网络相关知识,比如外网和内网的端口映射应该如何做。

2025-03-14 10:23:39 2237

原创 es查询报错Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]

es查询报错:Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]

2025-03-11 20:25:25 781

原创 JPA编程,去重查询ES索引中的字段,对已有数据的去重过滤,而非全部字典数据

课程管理界面,查询前,需要把查询元数据给出。学科列表、学段列表和分类列表,我们把它定义为查询元数据。一般的业务需求是:系统维护好多个字典,比如学科、学段等等,相当于属性库。但是,这有一个不友好的地方,字典列表数据过多,比如学段字典包括了幼儿园和大学等,而实际上,课程只有初中或高中,连小学学段也没有。这样展示的学段列表,就显得数据冗余,增加选择的干扰。修改后的需求:基于已有课程的属性,进行去重查询出学科列表等数据,也即上文提到的查询元数据。(已非原始字典)

2025-03-06 11:12:15 2301

原创 JPA编程,批量统计每个课程下的讲次数,编写自定义SQL查询语句

在查询课程列表的时候,需要统计每个课程下的讲次数。一般,我们是不建议把讲次总数冗余存储于课程里,而是采用实时查询统计的方式展示。课程与讲次的关系是一对多。本文主要是通过Jpa编程实现批量查询每个课程下的讲次数。先介绍讲次的实体,然后是持久层,最后是service层的使用。

2025-03-06 10:15:39 537

原创 微信小程序的业务域名配置(通过kong网关的pre-function配置)

本文并没有按传统的做法,把校验文件放在文件服务上,而是通过kong网关的插件,对访问接口做了一个预处理。

2025-02-10 17:38:48 306

原创 说一说mongodb组合索引的匹配规则

有一张1000多万条记录的大表,需要做归档至历史表,出现了大量慢查询。查询条件是耗时近5秒,且是全表扫描为什么没有使用到任何索引呢?请看该集合创建的索引有哪些:建立了两个组合索引userId_1_classroomId_1_isDelete_1和userId_1_classroomId_1,但是二者的重复度极高。(可以删掉userId_1_classroomId_1_isDelete_1,再新建一个单索引classroomId_1)

2025-01-13 10:52:52 1370

原创 xxl-job回调执行器,发生NPE空指针异常

问题找到了,其解决办法就简单了:让xxl-job-core和xxl-job-admin的版本保持一致。

2025-01-08 22:54:02 637

原创 微服务框架,Http异步编程中,如何保证数据的最终一致性

异步编程,要求数据的一致性,往往采取的是最终一致性。意味着在绝大多数情况下,实时回调可以保证数据更新的及时性,少数以及异常情况下,通过主动查询可以保证数据的最终一致性。本案例中,主要是回调的速度快于本地数据库的入库,所以问题是少见的,一般也很难排查。

2025-01-06 15:08:22 802

原创 json报文的序列化与反序列化问题总结(对比fastjson和jackson)

通过上面代码的运行结果可以得知,fastjson在处理带反斜杠的json字符串时,兼容性比jackson要强。

2025-01-06 11:31:33 588

原创 Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(下)

文章到此,关于商品检索的复杂查询就全部完成。还是那句话,这里的设计思路,不仅限于商品,可谓是打开业务设计的万能钥匙。对于提高程序的鲁棒性非常有帮助,微服务设计中的CQRS以及数据重构,绕开了关系型数据库的多表查询,又使用到关系型数据库的事务机制。程序设计得更加抽象且通用,而不是跟着需求打转,变动大且提测周期长。顺便说一句,除本文提及的方案外,还有一种更简的方案。去掉类目领域,只使用属性及选项即可。如果是课程领域,那么就是这么几张表搞定。

2024-12-25 11:14:45 572

原创 Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(中)

再次声明,使用属性及选项实现高效检索,不仅仅适用于商品业务模型,像课程、任务、用户等领域都适用。另外,这里说检索的高效,不单指检索速度,而是指代码的健壮性,适应业务需求的灵活与多变。这里以课程举例:课程常见的属性有科目和年级,哪天业务需求方又想要增加按课程分类过滤,常规设计是在课程基础信息表增加一个字段叫课程分类,涉及课程的增删改查统统增加该字段。(数模变更、接口变更、提测并上线)可以说,常规设计,应付这个简单的需求变化,是很容易。但是代码变更的地方多,伤害性不大,影响范围大,上线流程长。

2024-12-25 11:09:13 539

原创 Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(上)

本文我们以某商城的商品检索为例,说一说如何使用属性及选项,实现复杂的逻辑表达式的查询。先贴图,总结出业务需求。可以通过一系列属性及选项的组合,过滤出用户想要的商品列表。

2024-12-25 11:03:22 635

原创 kong网关使用pre-function插件,改写接口的返回数据

总之,kong的这款pre-function插件可以适用于许多场景,好处是灵活配置,支持lua脚本。当然,它只返回相对固定的报文,除非你使用Lua脚本去连接数据存储中间件。不过,对于简单的一些场景够用了,这也提醒我们一点,在客户端请求接口的时候,尽量把一些标识性的字段通过http header上传上来。比如schoolId 、 userId、 deviceId、ip等等,后期在kong网关便于读取并判断是否拦截请求。

2024-12-24 13:37:20 907

原创 记一次因误删mongodb索引,而导致集群数据库的内存飙升和锁数量剧增的生产事故(下)

在MongoDB数据库中,currentOp是一个命令,用于返回当前数据库实例中正在执行的操作的信息。这个命令可以帮助用户诊断性能问题和识别长时间运行的操作。client:请求由哪个客户端发起。opid:操作的ID,可以通过db.killOp(opid)终止该操作。secs_running/microsecs_running:代表请求运行的时间,如果这个值特别大,需要检查请求是否合理。query/ns:可以看出是对哪个集合正在执行什么操作。lock*:与锁相关的参数。

2024-12-17 12:33:47 1006

原创 记一次因误删mongodb索引,而导致集群数据库的内存飙升和锁数量剧增的生产事故(中)

先说一说我们的排查思路,在其他业务没有显著剧增的情况下,我们很容易定位出嫌疑最大的后端服务。于是,我们尝试在外网网关,把该服务关闭,不让外网域名访问进来。第二步,让mongodb缓口气,坐等其性能好转。预期把这个服务停掉之后,数据库就会好转。但是,事与愿违,数据库的性能指标并没有显著变化,cpu和内存还是跟过山车一样,下降了又上升,上升了又下降,循环往复。期间,为了让嫌疑服务不访问数据库,还尝试把节点数由6个降低至1个,当然也使用了重启大法。

2024-12-17 11:30:09 884

原创 记一次因误删mongodb索引,而导致集群数据库的内存飙升和锁数量剧增的生产事故(上)

本文欲梳理一次mongodb的生产事故,在不确定事故起因的情况下,我们从早上六七点,一直到中午才定位出问题。持续时间之长,不可谓不是一次惨痛的教训。首先,我们是第一时间收到了Mongodb数据库监控告警的信息,体现最明显的是cpu使用率达到了100%。(遗漏了其他信息,或者说不同于以往的指标,待下文细说)其次,客户端应用反馈说后端响应巨慢,无法访问。说明后端服务挂了,此时再使用应用重启这一大招也不好使。基于这两点,我们无法排查并定位出问题,因为此mongodb数据库集群是一批应用共用。

2024-12-17 11:25:15 331

原创 对接浦发银行支付(十四)-- 支付回调接口,未收到回调或验签出错

这一篇,我们再次梳理下支付回调的相关注意事项。另外回调报文解密后,在验签的时候,浦发外调RSA公钥内容不要写错了,具体注意事项见后文。

2024-12-15 10:49:13 157

原创 Undertow容器线程池配置及监控

选取一个java应用,看一看它的线程池,主要是工作线程worker-threads的值。默认线程池大小是如何的呢?从阿里云arms监控的线程池,可以看到,核心线程数默认是CPU核数 * 8所以线程池的最大线程数为3 * 8 = 24上图中,在12月04日 17点45分时,活跃线程数达到极大值–24,剩下的75个请求自然就在队列中等待了。在高并发的业务场景下,需要上调工作线程值。

2024-12-09 10:03:38 969

原创 对接浦发银行支付(十三)-- 接口对接前的准备,IP白名单

当浦发开放平台的API接口申请通过后,也得到了浦发商户的商户号和终端号。接下来,我们开始发起API接口,第一个接口当然是支付请求下单。这个错误的原因是,浦发银行需对请求方的IP地址进行管控,也就是要我们把出口IP登记给对方。下面就说一说,具体是有哪些IP地址登记。(难道有好几个地方?是的,避免你少走弯路,这里一一陈述出来)

2024-12-02 13:20:32 257

原创 Nexus搭建go私有仓库,加速下载go依赖包

本文我们梳理一下go依赖包的私库搭建以及使用。它只分为proxy和group两种仓库,这一点和maven仓库有所不同。

2024-11-22 15:24:19 1103

原创 Java编程,配置mongoUri连接mongodb时,需对特殊字符进行转义

感叹号这样的特殊字符,它的转义方式则是反斜杠。否则java程序在解析uri的时候,会提前截取到第一个@,把前半部分错认为数据库的密码。比较是在内网环境下,不对外网访问的情况下,密码相对安全即可。有时候,为了安全性,dba会设置比较复杂的密码,含有特殊字符,比如@符号等。当使用uri方式连接mongodb时,对特殊符号,特别是@符号,进行转义。遇到特殊字符的时候多留个心眼,设置数据库密码的时候,不要太复杂了哈。但是,如果使用方式二(uri)连接,则需要对@符号转义为%40。以用户数据库为例,注意看它的密码。

2024-11-22 10:22:51 1376

原创 Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化

本文的内容比较长,既描述了阿里云对mongodb数据库的监控(着重是连接数指标),以及Mongos的使用及购买的坑,也从Java语言的 Mongo驱动程序作为切入点,分析并总结了支持哪些数据库连接池的配置项。本案例是基于生产实际中遇到的一个棘手问题,希望可以帮助到你。通过本文,让我们对连接数这个指标有更深的体会,它是一个很冷的指标,却非常致命。说它致命,是说我们在遇到程序报错的时候,极容易陷入平常思维,以为是有慢查询,或者程序QPS过高导致程序挂了。

2024-11-20 10:45:40 1341

原创 kubepi管理k8s集群,演示如何连接阿里云k8s容器

对k8s容器运维的过程中,如果是自建k8s的话,一般会安装dashboard,方便管理;如果是阿里云k8s容器,它是有提供web ui,但是它有个不便之处–需要定期登录,且缺少命令控制台。当你需要使用命令控制台时,阿里云会建议你安装kubectl本文推荐一款k8s管理工具–kubepi,它可以方便地管理多个k8s集群,不仅提供kubectl命令控制台,还有web UI。下面将介绍如何使用Kubepi连接阿里云k8s容器。

2024-11-19 09:52:38 669

nodejs项目打包,因网络问题下载node-v16.13.0-headers异常

相关文章见https://blog.csdn.net/zhuganlai168/article/details/141335444

2025-04-22

D+接入过程指引.pdf

DNSPod接入技术设计方案,域名解析成IP的缓存策略,可再加上app启动预加载。注意解析域名的过程一定是异步去做。

2019-06-14

JVM线程状态和Thread.sleep的实现原理探究.pdf

jvm线程生命周期以及线程的状态切换,探究sleep和唤醒的原理。

2019-06-14

Software-Transactional-Memory.pptx

多线程使用很普遍,但是存在许多问题,比如死锁,内存屏障,饥饿等。把事务模型作为一个通用的编程模型,作为解决事务的一个新思路。

2019-06-14

tidb-manual-cn.pdf

豌豆荚团队的良心作品,分布式数据库,也是codis的开发团队。本附件是tidb的中文指导手册,非常全面。

2019-06-19

浦发银行支付api对接

浦发银行支付api对接,使用java语言实现,包括签名,sm2方式的加解密。使用okhttp框架调用浦发银行api。适用于支付、退款以及查询支付或退款结果的接口。它还依赖于其他的几个基础jar,详细见于本jar包里的Pom.xml文件。

2024-04-21

学习笔记之Oracle教程(免费).pdf--超详细

学习笔记之Oracle教程(免费).pdf--超详细 sql 数据库 java

2010-09-15

delphi代码格式化工具,插件

delphi代码格式化工具,插件,很好用的,内附使用说明,确保能够很好使用,测试平台为delphi 7

2010-10-26

PHP实现的一个开源的企业门户网站

采用PHP语言来实现的一个门户网站,你可以在此基础上进行修改扩充,完善功能。

2010-09-15

MyDac 7.0.1 ODAC 8.0.1 for Delphi 7 / 2010 Delphi XE2

MyDac 7.0.1 ODAC 8.0.1 for Delphi 7 / 2010 Delphi XE2

2015-03-13

pinpoint中文学习(包含插件、警告).zip

pinpoint中文学习文档,比较全,介绍了基本的安装使用、插件、报警等功能。

2019-05-29

Frontend plus 2.03 (cracked)

Frontend plus 2.03 Frontend java 反编译 eclipse

2010-12-24

PHP网上问卷调查系统,源码

PHP网上问卷调查系统,源码,建议有点Php基础的朋友使用。实现单选,复选,留言等功能。

2010-12-24

Packet.Tracer5.2.0.0068-汉化包

Packet.Tracer5.2.0.0068-汉化包.rar 思科路由器交换机模拟软件》(Cisco packet tracer )官方5.2版+汉化包

2010-07-09

电子商务网站,供开发人员二次开发

电子商务网站,供开发人员二次开发,php168开源

2010-07-09

设计模式之禅的源码

设计模式 Java 源代码 秦小波著 使用通俗易懂的文字生动形象地讲解了各种设计模式,本资源主要是源码的整理,使用java语言实现。

2018-09-04

JavaScript特效大全

JavaScript特效,实用型的一些基本的js操作。

2010-01-04

传智博客--张孝祥--java培训课件以及源代码

传智博客--张孝祥--java培训课件以及源代码,希望对你有帮助,有用的话请留言哦,

2010-09-19

宠物商店Swing+JPA

宠物商店Swing+JPA,当前最为流行的技术。开发环境为:jdk1.6

2010-01-04

My97Datepicker日历控件

My97Datepicker日历控件java

2010-12-23

visual basic语言经典课件大全

visual basic语言经典课件大全,ppt格式的文件,教学使用,也可以用来替代书籍以学习编程入门使用。

2010-09-15

空空如也

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

TA关注的人

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