今天给大家分享的是 java 的 简单的 java 基础数据类型。首先依旧 hello world 的 起手 控制台输出 hello world。 接下来给大家介绍一下 java 的 基础数据类型。 一、 short 短整型, int 整型, long 长整型,整数如数字一二三二 double float 浮点型,小数一点一一二点一一 三, char string 字母串,如英语单词。四, boolean 布尔类型, true false 五, bite 字节基本不用。 下面我调用几个类型的对应类型的方法输出一下,这里要注意定义相对应的类型变量去接受数据,然后再执行输出。 点击运行后,可以看到控制台已经输出了我们方法中定义的数据,我们把定义的三个方法都输出一下,可以看到控制台都成功输出了。 在这里我们可以看到如果数据类型对应不上它,这里就会报错,我们可以按住 alt 加 enter 进行解决, 感兴趣的小伙伴可以自己动手进行尝试。好了,今天的分享到此结束,如果没有软件可以私信我。
粉丝55获赞127

一天一个计算机知识,今天要讲的是 swiger, swiger 是 什么架构?是怎么样的?想象你是一家科技公司的后端开发人员,你刚刚完成了一个新的 api 应用程序编程接口的开发,这个 api 可以 实现用户注册、登录、 查询信息等功能。现在前端开发人员需要根据你提供的 api 来开发用户界面,但问题来了, 他们怎么知道这个 a p i 的 具体细节呢?比如有哪些接口可以调用,每个接口需要传入什么参数,返回的数据格式是什么样的?要是没有清晰的说明,前端开发人员就只能不断地来问你, 这不仅浪费彼此的时间,还容易在沟通中出现理解偏差,导致开发效率低下。这种情况在很多项目开发中都很常见。那么有没有一种工具可以解决这个问题, 让 api 的 信息清晰明了的展示出来呢?答案就是 swagger。 我 们先来看看 swagger 是 怎么一步步发展而来的。在没有 swagger 之前,开发人员通常会使用文档来记录 api 的 信息。就好比你去图书馆借书,需要一本图书目录来告诉你每本书在哪里,有什么内容。 开发人员会手动编辑一份文档,详细描述每个 api 的 功能参数、返回值等。但这种方式有很多弊端,文档更新不及时是常有的事,当 api 发生变化时,开发人员可能忘记更新文档,导致文档和实际的 api 不 一致。而且手动编辑文档很麻烦, 需要花费大量的时间和精力。所以能不能有一种更智能、更高效的方式来管理 api 文档呢? 斯基就应运而生了。斯基的核心是一个规范,它定义了一种描述 api 的 标准格式,就像一种大家都能理解的语言。通过遵循这个规范,我们可以用一种结构化的方式来描述 api。 比如我们可以用 jason 或者 yaml 格式来描述一个 api 的 所有信息, 就像用一种特定的语法来写一篇文章,让文章的结构和内容都很清晰。 swagger 的 架构主要由几个部分组成,首先是 swagger specification。 swagger 规范, 这是整个 swagger 的 基础,它规定了如何描述 api 的 各个方面,就像建筑的设计图纸,规定了建筑的各个部分应该是什么样子。如何连接 swagger specification 定义了 api 的 路径、请求方法,如 getpost 等参数响应等信息。有了这个规范,不同的工具就可以根据它来生成各种有用的东西。然后是 swagger editor, 这就像是一个写作工具,开发人员可以在里面编辑符合 swagger 规范的 api 描述文件。 它提供了一个可适化的界面,让开发人员可以方便地输入和编辑 api 的 信息。就像你用 word 来写文章一样, swag editor 可以 帮助你更轻松地创建 api 文档。 swag editor 还能实时检查你编辑的内容是否符合规范,如果有错误会及时提示你。 接着是 swag editor, 这是一个非常重要的部分,它可以将 swag editor 规范描述的 api 信息以一种美观直观的方式展示出来,就像把一本枯燥的图书目录变成了一个精美的图书馆。导航系统前端,开发人员可以通过 swag editor 直观地看到 api 的 所有信息, 还可以直接在界面上测试 api, 它们可以输入参数,发送请求,查看返回结果,就像在实际使用 api 一 样。这样,前端开发人员不需要再依赖后端开发人员的口头描述或者文档,自己就可以快速了解 api 的 使用方法。 最后是 swagger codegen, 它就像是一个代码生成器,可以根据 swagger 规范描述的 api 信息生成客户端和服务器端的代码, 这大大提高了开发效率。比如,如果你要开发一个客户端应用程序, swagger codegen 可以 帮你生成调用 a p i 的 代码,你只需要在这个基础上进行一些简单的修改和扩展就可以了。 就像给你提供了一个半成品,你只需要进行一些装饰和完善,就能完成整个作品。 swagger 是 什么?简单来说, zogger 是 一组工具和规范,用于设计、构建文档化和使用 restful api。 它通过统一的规范,让 api 的 信息更清晰,更利于管理和使用。 zogger 在 很多领域都有广泛的应用,在企业及应用开发中,它可以帮助不同团队之间更好地合作。后端团队可以专注于 api 的 开发, 前端团队可以根据 swag 一 y 提供的信息快速进行开发。在开源项目中, swag 可以 让更多的开发者更容易地使用和贡献代码。 而且 swag 还有丰富的插件和扩展,可以根据不同的需求进行定制。现在大家明白了吗?最后遗留一个问题, swagger 虽然功能强大,但在一些复杂的分布式系统中,如何更好地管理和集成多个 a p i 呢?这就涉及到 swagger 的 一些高级应用和集群管理了。下期我们聊聊这个话题。

字节二面挂了。昨天有个兄弟找我哭诉,说被问到订单超时自动取消,他直接回了个定时任务,结果当场凉凉。兄弟们千万别再这么答了。我还整理了一份一百万次的面试题库,包括学习路线啊,简历模板以及啊公开试听课。你想想, 如果是双十一,你手里有一千万条未支付订单,你搞个 crown job, 每分钟去数据库全表扫描一次 select from orders, 这哪是做业务啊,你这是在想方设法搞崩你家低 b a 的 数据库, cpu 直接飙到百分之一百,这不挂你挂谁?而且每分钟扫一次,意味着用户的订单可能超时了五十九秒才被发现,这时效性也太差了,对不对?那有的同学就变聪明了,说, fox 老师,那我用 radis redist 不是 有个 key 过期回调 keyexpiry 吗?过期了通知我不就行了,千万别用,这是个致命误区,一定要记住 redist 的 这个过期通知机制, 它是发后即忘。 fire and forget 的, 什么意思呢?就是它发通知的那一瞬间,万一你的服务重启了,或者网络稍微抖了一下,这个通知就丢了。一旦丢了,这个订单就永远卡在未支付状态。 这在生产环境就是批零级的事故,绝对不能用。那靠谱的方案是什么来看,这就行了, register 延迟队列,这是中高级开发的标准答案。 逻辑其实很简单,我们利用 that 的 score 属性来存订单,过期的时间戳 value 就 存订单号。比如现在是十二点三十分, 你要找超时的,就写一个 scan 的 现成,每秒钟去数据库捞一次 range b score key 零当前时间戳, 只要是 score 小 于当前时间的,全是超时的,拿出来取消,既精准又高效。但是如果面试官问你,我有十个节点同时在轮询,同一个订单被重复取出来怎么办? 这时候你要是卡壳了,前面的努力全白费,你必须马上抛出这个大杀器。路由脚本一定要跟面试官强调,读取 range 和删除 range 必须是一个原子操作,我用路由脚本把这两个动作包起来,谁抢到谁删, 删成功的才算抢到了任务。这就是原子绑定,完美解决并发重复消费的问题。到了这一步, p 六已经稳了, 但如果你想充 p 七架构师,面试官还会追杀到底。如果你的 lua 脚本刚把数据拿出来,还没来得及取消订单,你的服务器突然宕机了怎么办?这笔订单是不是就丢了? 这时候你要记出二段式处理,也就是 ack 机制。看这张图,我们不要直接删除,而是用 lua 脚本把它从 delete q 移动到 processing q, 处理中对列等业务逻辑彻底跑完了,再发个 ack 把它删掉。万一服务挂了,没关系, 我们后台有个兜底守护县城 watchdog, 专门扫描那些在处理中对列里赖着不走的任务进行重试, 这就叫 at least once, 至少消费一次数据,绝对不丢。那如果数据量再大一点,几亿条订单 在 set 撑不住了怎么办?两个方向,第一, reddit 分 片杀顶搞十个在 set 按订单 id 取模分散开,解决大题问题。第二,直接上时间轮算法 time view, 像 kefka netty 底层那样纯内存操作,极致高效。 或者呢?如果你不想造轮子,直接用 rocket team q 五点零,现在它已经支持任意时间的延迟消息了,直接把压力甩给 mq。 所以 一个完美的架构应该是这样的, 业务层清量级,中间键做节藕,最下面还得有个 mycircle t 加一的离线扫描做最后的兜底,保证最终一致性。最后这张图截个屏, 面试直接背这个模板,拒绝轮询,首选塞塞,配合撸啊,引入 ack, 保证可靠,一级流量上时间轮或 mq, 最后必须有兜底。 技术面试考的不仅仅是代码,考的是你对极端情况的防御。我是 fox, 关注我,技术面试不迷路。

一个技巧就能让你的 idea 变成全自动代码生成器,这就是 idea 的 提效天花板 live template, 看这个洛克屁,它不需要你手动拼接制服串就能自动抓取方法名,自动格式化所有入餐。按照你的要求写好日历, 你以为它只是简单的代码片段?太小看它了。 livetime play 真正的核心是上下文感知,它能调用内置的 gui 脚本去抓取你的剪贴板、方法名,甚至是入参列表演示更多的视例如下 抛异常时,敲 log 一, 自动生成 error 字,并附带所有入参。敲 lint, 直接生成 listintigo, 敲 mstring, 直接生成 map, 敲 lambda, 连箭头都一键帮你生成好。 它有点像智能版 linux alice。 后续任何让你觉得敲起来麻烦的代码,你都可以把它封装成模板。 这些肌肉记忆的重复工作一键就能搞定,一秒钟都不要浪费。我自己的 idea 配置了几十个好用的 live time play 的, 直接导入就能用。详细的配置教程和我自己的模板我已经整理好了评论区,扣个 live time play 的 直接带走。关注我,解锁更多实战技术干货!

m c p 的 解析是大模型上下文协议,它可以和各种外部系统连接,请问大模型是直接调用外部的服务吗? 如果你所在公司的内网搭建了 m c p 的 服务,外部的大模型它怎么能够调用呢?直接说结论,大模型只是一颗脑子,它绝对不可能和任何外部系统进行连接。所有和外部系统打交道必须得通过 n g t 这三者的关系类似于皇帝、钦差、大臣和地方官员,皇帝要办什么事情,永远都是通过钦差和地方官来对接。钦差再把结果上折子禀奏皇上, 皇上再批折子给钦差进行下一步的指令,就这么一直循环,直到任务完成。这其实也是上期视频讲的恩赐的,永远的在循环的干三件事情,第一件事情,收集好信息之后发送给大模型的结果,然后获取这个执行的指令。 第三件事情就是执行指令操作,把执行的结果再次发给这个大模型,现在关键就是这个指令,大模型到底可以下达哪些指令呢? n g 的 一开始就要和大模型约定好一个清单, 并且每次交互都要把这个清单一起发给这个大模型,然后大模型再从清单中选择指令返回给 int, 让他去执行。这里的清单到底长什么样子呢?以 card code 为例,这是我们抓包获取的工具,列表总共有十七个,包括读取、编辑、写入、搜索等, 具体内容有名称描述、参数类型、参数描述以及是否必传,非常的详细。现在我有一个问题,这个清单给到了大模型,是不是让大模型来调用这个工具肯定不是,好比把菜单给顾客,难道让顾客自己去做菜? 大模型永远只是下达指令,最终的执行一定是 n g t 自己来做。我为啥反复的跟大家强调这一点,就是因为很多人都理解错了。其实这种工具最早的时候叫做方心括函数调用,现在的话都改名叫做工具调用了, 几乎主流的大模型都支持这个机制。现在我们以 deep c 为例为大家演示整个过程,你们就明白了, 你现在看到的是 deepseek 的 官方 api 文档关于工具调用的一个说明,它开头的第一句话就是酷啊,酷啊,是让模型能够调用外部工具来增强自身的能力。 他第一句话就让人误解,让模型能够调用外部工具,实际上不是模型能够调用外部工具,应该是 nget 来调用外部工具。接下来我们给大家演示完之后,你们就明白了,我们就直接用它官方的势力来进行演示。好在这里的话,我们是直接来调用 deepsafe 的 一个 api, 问他北京今天的天气怎么样, 在这个 toos 里面我们是什么都不带。这个时候我们来看一下他的回复啊,他说他没有办法直接去获取天气数据,你要自己去百度搜索。那么如果说我们给他加入一个工具,是不是他就可以自己去 调用这个获取天气的工具来获取这个天气信息了呢?接下来我们来试一下,在这里我们就给他添加了一个工具,就放行可以去获取天气,这个是要传的参数城市,我们再来执行。 我敢来看一下他的返回,你看他的返回的就是一句话,我来帮你查询北京今天的天气情况,这里面是返回的是就是我要调用哪个方法,调用这个获取天气的方法,以及传哪些参数,但是 传给你之后,你得你自己去调用这个函数,你不能让大模型来调用,然后返回给结果给你,知道吗?这个调用的过程是 n 的 来做的, 这个 tools 里面我们是可以加入更多的工具,让大模型有的选择。通过演示我们明白了,所谓工具就是 n g 的 与大模型一开始就约定好的清单。接下来问题是,如果说我想要更多的工具怎么办? 聪明的你肯定想到了,那么就是为 ng 的 设计这个插件扩展机制,然后大家一起来写插件,但这个插件是不是得有一个规范啊?不同的 ng 的, 不同的模型都可以基于这个规范来开发,这样的话插件就可以通用了。 这个规范就是 m c p 协议,它是由 oracle 二零二四年十一月提出,就是为了让他们家的 code 能够支持更多的工具要用,比如说 github, 本地数据库等, 有了 mcp 协议以后,插件就可以通用,这就是很多视频把 mcp 比喻成 usb 的 原因。但如果只讲 usb, 不 讲前因后果,就会让人一头雾水。为了让大家彻底的整明白,我们就一起来看一下 整个 m c p 完整的交付和协助过程到底是怎么样子的。我们以 cloud code 为例,首先 cloud code n g 的 启动与 m c p 服务进行连接,调用 initialize 来获取这个基础信息,包括它的方法、版本、描述之类的,接着 他去调用这个 tuxlist, 去看他有哪些工具有名称、描述参数。当用户提出问题的时候, m c p。 就 会把用户的问题连同他的工具一起加入到 tux 当中,一起发给这个大模型。 如果说大模型发现用户的问题需要调用该工具,就会把工具执行的命令连同参数一起封装好,返回给 int ngit, 再通过 toos core 来远程的调用该工具,接着 ngit 再把结果反馈给大模型,等待下次交互流程循环进行,直到任务的一个结束。以上讲的全部都是理论,接下来让我们进入实战, 这个是我用 java 写的一个非常简单的关于 m c p 服务的一个演示项目,先思考一下,就整个 m c p 服务里面要实现三个非常重要的接口是什么?第一个就是初识化,这个所谓的初识化就是获取一些你这个 m c p 服务的一些基本信息,比如说像版本或者名称之类的。 第二个就是获取工具列表,就是一个 top list, 请注意在 mcp 规范里面,这些接口的名字是写死的。第三个就是远程调用,具体的方法通过那个接收 rpc 的 方式去调用。 好,那么接下来我们就把这个项目启动起来,执行一下这三个接口,看一下到底是怎么回事。好,启动了之后我们在这里面来执行。 首先第一个结果是什么?进行初步化,所谓的初步化其实就是返回你当前这个 m c p 服务的一些基本信息, 比如说协议的版本,这个一定不能写错了,就它这里面协议的版本和我们常规的版本不一样,我们常规版本是 v 零点零点几是吧?它就是用日期来代替的,而且这个日期不能随便写, 你写错了是连不上的。第二个就是他的服务的一些名称和你服务本身的版本,就这么一回事,接下来我们要获取这个工具的列表,在这里面这个就是我们的工具的列表 名称描述以及它里面的一些参数。接下来就是去调用具体的一个工具了,我们这个 m c p 实现的功能就是让这个 color code 可以 去执行 ru 的 一个代码,执行方法就是调用这个 toos, 那 么接下来的话我们就把这个 ru 代码发给他,然后看他能不能执行 一加二加三等于几,对吧?结果就等于六。接下来我们就让 color code 来连接一下我们所开发的这个 m c p 服务,让这个 color code 能够去支持执行这个 google 的 一个代码。 好,那么在 color code 连接之前,我们还得先配置一下我们的服务,这个就是点 m c p 点节省,我们就直接在当前工程来启动 color code, 配置下我们的一个请求地址。接下来的话啊,我们就可以去启动 color code, 启动之前我们也可以抓包看一下 color code 在 启动的时候要干几件事情,就是关于 m c p, 第一是初步化, 第二个就是获取列表,其实在新版的 m c p 协议协议里面,它其实还会调用第三个接口确认初次化。完成这一步其实没啥用啊,但我们这里面也写上去啊, 接下来我们就启动 color code, 看他是不是干了这三件事情来我们启动,启动完之后我们来看一下看到没有,他是不是访问了我三次本地的 m c p 的 一个 gp 请求。第一件事情初使化,我们来看一下 指纹,那看是不是调用这个 initialize 进行抽象。第二件事情,获取这个工具的列表,我们来看一下它的返回,你看这里面就返回了我们所刚所提供的这个工具列表 名称描述以及它的属性。然后还有这个接口,这个接口告诉 m c p 服务它已经初步化完成了。接下来我们再来实际的调用一下,看一下它是怎么访问的,我们先把对应的这个请求给它清空掉,我们来来问他一个问题,帮我执行谷维代码一加一, 我们来执行,你看这里面他就已经把结果计算出来了,代码的执行结果等于二,我们来看一下他是具体是怎么去通过调用 m c p 服务计算出这个一加一的结果等于二的呢?我们还是来先猜一下啊。第一件事情,是不是把用户的问题加上这个 m c p 所提供的工具列表一起发给大模型。我们来看一下是不是干了这么一件事情,用户的问题,将 m c p 工具列表一起发给这个大模型看。在这里面啊,它的这第一条请求是没啥用的,它只是为了判断当前是不是一个新的绘画,这个才是真正的请求。在这里面它有个 tools toos 的 话,它一定会把我们的 grub 的 那个工具给它加进来,看到没有?这是不是在工具列表里面把对应的这个关于这个 grub 的 执行工具给它加进来了, 它原来的工具还是存在的,我们把它复制过来,复制过来在这边看方便一些,你看这台原来工具还一直都在,在最后面就把我们对应的工具给它加进来了,这就是我们所对应的工具。所以说你的 m c p 里面有多少个工具, 它就会全部把它加进来,而且是每次都加进来,就我们还只是一个 m c p, 有 很多人说一个 m c p 它可能提供了几十个工具,然后你的一个项目里面可能会有五六个 m c p 服务,大家想想整个项项目就会非常的大啊。更夸张的是什么? 它是每次请求都要发哦,这就是为什么大家很多人装了很多的 m c p 工具之后,这个 token 就 消耗的非常快,原因就在这里。 ok, 好, 然后大家想一下,当我发送了这一条请求之后, 那个大模型应该怎么给我返回呢?他是不是发现用户提示的问题是让我去执行谷锐代码,那么他是不是就要去 返回一个谷锐的执行工具的一个调用?那么我们来看一下,但是这个内容呢?看起来不是特别方便。我,我这里面是有做了一个工具啊,这工具的话可以帮我们去解析对应这个 sse 的 内容,看起来就更方便一些。 好,我们来访问一下,然后把对应的内容,你看,他是说用户让我执行一段简单的 java 代码来计算一加一,我可以使用这个 m c p 的 工具来执行 java 代码,然后他就返回了 m c p 的 工具,就用户去执行这个工具 参数是脚本一加一,那么 n g 的 拿到对应的这个工具指令之后,接下来他是不是就得去调用这个工具,在这里面调用这个工具,那么在这里面通过这个 toos 库来调用这个工具 参数就是脚本一加一,最后那个 m c p 就 会给他返回一个结果,结果就是二 result 二,他再把这个结果连同之前的历史记录一起发给这个大模型, 我们来看一下,这个是他之前的问题,这个是大模型返回的这一个结果以及工具调用,嘿,接下来他就把工具调用的结果一起发给大模型,大模型拿到之后,大模型就会返回最终的一个答案, 这样能看起来好像是大模型在执行一样的对不对?实际上不是大模型在执行,是 and 在 执行,只不过说大模型提供 具体的思考可以,所以说 n g 的 就相当于是手,大模型就相当于是脑子看,这个就是固定的执行,结果就是二, 那么这就是完整的大模型 n g 的 以及 m c p 三者之间的一个交互和协助过程。不知道大家听明白了没有? 通过演示我们了解到,所谓的 m c p 其实就是 n g 的 工具列表的一个扩展和延伸,让 n g 的 可调用的工具变得更多,但是光有工具我们就能够做出一盘好菜了吗? 是不是还得有菜谱和方法论?这就该 skill 出场了,它其实就是系统提示词的延伸。我们下期继续点赞,越多更新越快,让我们下期再见。

什么是 java tennes 了?然后如何创建一个有特定时间间隔的任务? 今天 ken 老师给他们来具体讲一下。其实这个扎瓦又替啊贪呢,他是一个工具类啊,他往往呢可以用于安排一个县城在未来的某个时间去执行一个特定的任务,或者是特定的时间来执行。所以呢,贪的类往往呢可以用来安排一次性的任务,或者是周期性的任务。 比如说像 g u c 中间的啊,这个 g 啊不是叫做扎瓦 u t 中间的 tanner task, 它其实是实现了一个 roundabol 接口的。抽象内我们可以使用继承的方式啊, 继承这个类来创建我们自己的一个定时任务,并且使用贪呢去安排他的执行。比方像我的代码当中,我去继承了 tennis stuck, 创建了一个 my stuck, 然后呢,里面进行任务的 rangle 执行对不对?然后的话呢,这个地方怎么来跑了,这个地方具体执行的话,我们就可以通过 ten, 我们可以通过我们刚才的这个 time 扭出来,在慢方法中间对不对,然后进行具体的一个执行。这个地方呢,它的 sky 的方法设置具体的一个执行时间。 这个呢就是我们刚才讲的什么是扎瓦中间的抬脑类以及代码中间如何去创建一个有特定时间间隔的任务。

正常的话我一个是监控,还有一个是定时任务,我,我这次演示的话,我就只启动一下项目, 这里就代表了其实我们项目已经启动好了,就是后端已经启动好了。接下来我们启动前端, 简单的话,其实正常我们是要安装那个 npm 的, 我建议大家装一下那个 nvm, 可以 切换切换那个挪动 gs 的 多版本,这样子比较灵活一点。 那首先前端项目给的可隆下来,我们先要更新依赖 这里,我们依赖其实已经好了,我们直接直接启动这个前端项目, 嗯,这里其实我们前端的这个项目已经记起来了,嗯,而且后端的其实接口应该也是 已经连上了,重新重新进入一下。 其实大家在启动后端的时候,其实一定要准备好那个后端的服务,比如说像 my circle 和 radis, 正常的话其实我是用 pdf study 的, 就是我之前已经分享了。 呃,大家也可以用,比如说 deck, 嗯, dock desktop 去启动那个数据库服务,或者是启动一些那个自定义的那个,比如说数据库服务 啊,其实这个项目其实一进来你其实就看到它其实是一个多租户的项目,它可以选择对应的租户公司之后去那个选择。当然你如果需要使用多租户的话,其实在呃 application 的, 在 application 的 这个配置里面,其实你也可以取消多租户模式。我们先进项目看一下 这个项目,其实呃像基础的那个 ibac, 它其实都有的,比如说像用户管理,用户管理对应对应的有,比如说像公司的,呃部门角色、岗位啊,都已经是完善的, 就是就简单来说就是开箱即用。像,比如说字典管理啊,都是有的,像像操作日式,比如说你用户登录啊,或者是代码生成的呀,他其实这些日制管理都是好的。 还有就是他其实自带的那个租户,租户管理也是比较好的,像系统监控的话,其实 他自带了那个那个艾的命监控,可以监控,比如说你的系统日式,这里我服务没有启动就算了。还有自带的任务调度,其实你也可以不用呃叉 l job 就 自带的那个任务调度系统。 其次就是代码生成,代码生成的话,其实你可以选择生成为 z 波或者是同步,同步到我们的那个代码里,这些就是代码生成都是有的。 那这个框架弄好了,其实我们就可以基于我们未来要做的业务就可以做一个啊二开了, 我这里做了一个福利平台,同时我用 ai 帮我生成了需求文档及那个 solo。 嗯,后面就是基于比如说这个,嗯框架的,二开的话,后面我有空的话会直播去播的, 但是这次视频就不播了,那这里就谢谢大家,觉得有用的话就关注我一下。

嗨,大家好。呃,这两天刚好有一些朋友啊,就是跟我互动聊聊这个就是说,呃像我们这个程序员,特别是早期这个做 java 的 这一批程序员,我们怎么样能够更快的去切入,去接入这个 ai, 接入这个大摩星开发这一块, 呃,刚好赶着机会跟大家瞎聊一下哈。首先第一点就是说是我自己有点感慨,感慨就是说所有的技术哈它都出现, 呃它都有它的一些具备的一些应用场景,那在咱们大模型里应用啊,就说是如果一个做加入开花的人,咱们想要转行,或者说想要呃加强 ai 这一块接触的话,那第一步, 呃你要稍微熟悉一下这个叫一个叫 s s e 的 一个东西啊,这是,这是最开始的,对吧?因为我们想入门的话,我们首先要学会的一个东西,就说,呃如何去使用大模型,那我个人认为,呃最适合入门的就是你去写一个这个 呃提字词工程,对吧?给客户去干一个事情,呃去帮助用户去组织这种动态的提字词啊。然后动态提字词组装的过程中,你首先要解决第一个事情,就是你要去调用呃大模型已经封装好的接口, 那咱们常规里面的调用接口肯就是很简单,对吧?一次 h t p 请求,然后呢服务器那边返回一个接口给你,这就完事了啊,这是咱们常规的 h t p 请求, 然后大模型这一块呢?嗯,它里面就有一个场景,呃特别适用于它,那这个东西就叫 sse, 因为咱们知道, 呃大模型的输出,它不是像我们以前那一样就是瞬间能吐出来的,它可能需要思考的一个过程,对吧?它是一段一段的来吐它这个内容就是我们问的一句话,你看我们用切的 gpt 啊,还有这个 delete 等等的时候, 它的内容是一块一块出来,一段一段出来,是吧?或是一个字一个字的出来,它都是这样的,类似咱们也通常把它叫流式输出, 所以说我们想接入这一块,小伙伴第一件事,呃,你可以练练手,就就是使用这个 deepsafe api 什么之类的啊,这个在网站上就能,网站里面他们提供的都有开发者文档,那也都提供了一些免费的接入, 那你首先,呃免费接入它,然后呢用 http 请求啊,用你的程序去访问它。 呃,这里面跟我们以前不一样的点,就是你一定要了解 sse 这种流逝输出啊,就大模型它的输出方式变成了 sse 的 流逝输出,那你这边就就要给他能够做到。 呃,如果说你是做这个智能体,对吧?你或者做其实工程你可能要包装一些东西给第三方用,那这时候你就要解决个问题,就说你要去 呃,去发力请求去获取到这个大模型方返回的这种流逝的输出。完了之后呢,你还要把你的你接收的这些内容再流逝的输出给调用方啊。这个这个时候你就要稍微把这一块的一个 http 交付, 呃,要给它了解一下啊。这我是,这我个人认为是我们作为加入开发者要想入门的话,你第一步要了解的东西。 呃,早期不用过多的去专注于这什么大模型,怎么训练的大模型,呃,工作原理这些我认为都是以后的事情,第一步你要做的事情就是先要会这一块啊,这最基础的,最实用的,马上你就用的到的啊。接受了请求之后啊,你怎么样包装给到第三方啊?你解决这个问题 解决完了之后,那你才能去下一步去怎么去整合智能体啊?什么项链啊,对吧?这就是后面的事情了。那如果后面大家感兴趣,咱们继续聊啊,谢谢大家,再见啊。

我们如何去保证啊,日制能够按时的去清理,避免日制占满磁盘,影响我们的一个性能。 嗯,给大家定时任务。嗯,这道题啊,核心考的呢,就是定时任务的可能性,以及清理交易的逻辑和融错的机制。 那么你可以这么回答,如果你担心简历上的东西讲不出来,我已经把面试经常问到的一些技术站场景题都整理在两百万字的面试文档了,里面针对每个知识点都有很详细的解析思路, 只要你是我的粉丝,留言六六六就可以打包带走。首先呢,是日制清理的核心实现方式,分两种场景血型。第一个呢,就是本地日制的清理,我们可以用定时任务工具按策略去执行清理命令,比如说啊, point table 配置每日凌晨两点删除七天前的普通日制,保留三十天的核心业务日制。 同时呢,限制我们单日制文件的大小,避免超大文件无法清理。第二呢,就是分布式的一个日制清理 啊,如果用一二 k 等组件,那么通过组件自带的锁影生命周期管理而配置锁影过期自动删除分片策略,适配大规模的一些日制场景。为了避免任务执行了,但是日制可能没有清理掉的问题呢,我们可以用两种方式来检验。第一个呢就是日制目录的检验, 清理后查询目标目录下日制文件的创建时间数量,确认无超期的文件残留。第二个呢,就是任务执行的一个校验, 呃,记录清理任务的执行日期,包括开始时间,结束时间,清理的文件数,释放空间的大小,如果因为权限不足啊,或者的文件被占用导致清理报错,就可以去报警。 最后呢,还要考虑到融错与兜底,如果清理失败了,可以设置重置机制,以及要根据日制的一个生产速度设置合理的清理时间,提高任务的处理效率,也避免了磁盘占用对系统的一个影响。 ok, 清楚了吗?

挂了一个五年后端简历上写着熟练、高并发和分布式。我问你们,系统上了三台服务器,那个每小时清理订单的定时任务怎么保证在集权力只执行一次,而不是同时跑三遍?他犹豫了一下说,用 radis 分 布式锁抢到锁的那台机器执行。 我追问到,如果那台机器刚拿到锁就当机了,或者任务执行时间比锁的过期时间还长怎么办?他停顿了一下说可以设长一点的超时时间。我叹了口气,这种回答说明他只停留在会用工具的层面。真正的系统设计必须考虑工具失效和极端情况。如果这道题你也不会 回答,我整理了让面试官眼前一亮的高频失效、 jvm 故障突围、 spring 源码破局点等 常见的面试题及刁钻的场景题,有需要的同学可以拿去看看。下面我拆解一下一个健壮的分布式任务调度该怎么设计第一道防线,选对锁的机制, 并知道它的软肋。用 radis 锁是常规操作,但你必须明白两个坑,一是锁的过期时间不好设置,短了任务没完就丢锁,长了档机后恢复慢。二是 radis 集群自身故障时可能锁状态异常。 所以只把 radis 锁作为第一层简单防护,不能当作为一依靠第二道防线。基于数据库的选举,更稳定的做法是利用数据库的唯一性约束 创建一个任务执行记录表,任务开始时用任务名加执行批次作为唯一键去插入记录,哪个实力插入成功,哪个就获得执行权。数据库的事务特性保证了强一致性,即使服务重启,记录也还在。它的代价是数据库有压力, 且需要自己处理执行中实力档期后的记录清理。第三道防线使用专业的协调服务。在要求苛刻的生产环境,应直接用租 keep 或 etcd。 他 们提供了原生的临时有序节点和租约机制。实力可以竞争创建节点创建成功地成为 leader。 关键在于当创建节点的实力试炼时,节点会自动删除,其他实力能立刻被通知并重新选举。 这是最可靠、最优雅的解决方案。第四道防线,状态可查与人工都抵。任何自动方案都可能失败,必须有后手。任务执行前后都要在数据库或日记中明确记录状态开始执行。执行成功失败执行者 并配置监控,如果到点发现没有成功记录,就发出告警。支持运维手动触发或查看问题。 这保证了在任何自动逻辑失效时,人类可以介入这道题。表面考定时任务,实际在考察你的分布式系统设计思维。 你是否理解不同工具的一致性模型失效场景,并能为核心业务流程设计包含降级和兜底的完整方案。最后,你们项目中类似的分布式任务是怎么保证可靠性的?