什么是MCPMCP(模型上下文协议)是一种开放的技术协议,旨在标准化大型语言模型(LLM)与外部工具和服务的交互方式。你可以把MCP理解成像是一个AI世界的通用翻译官,让AI模型能够与各种各样的外部工具”对话”。
为什么需要MCP接口标准化缺失——不同大语言模型采用差异化的指令体系,各类工具API也具备独特的数据结构,迫使开发者必须为每个模型与工具的对接场景编写定制化桥接代码
而MCP则采用了一种通用语言格式(JSON - RPC),一次学习就能与所有支持这种协议的工具进行交流。一个通用翻译器,不管什么LLM,用上它就能使用工具 / 数据了。
MCP的工作原理MCP主要由三个核心部分组成的系统:MCP Host、MCP Client和MCP Server。
MCP Host 是一个 AI 应用,它在运行 MCP 客户端的同时,为执行基于 AI 的任务提供环境。它集成交互工具和数据,以实现与外部服务的顺畅通信。比如: Claude Desktop 用于 AI 辅助内容创建,Cursor 是一个 AI 驱动的 IDE,用于代码补全和软件开发,以及执行复杂任务的 AI Agent ...
深翻页问题普通翻页前端一般会有个分页条。能够指定一页的条数,以及任意选择查看第几页。
对应的参数就是pageNo和pageSize
假设前端想要查看第11页的内容,传的值pageNo=11,pageSize=10
对于数据库的查询语句就是。
1select * from table limit 100,10
其中100代表需要跳过的条数,10代表跳过指定条数后,往后需要再取的条数。
对应图片就是这样的一个效果,需要在数据库的位置先读出100条,然后丢弃。丢弃完100条后,再继续取10条选用。
如果我们翻页到了很深的地方,比如读到了第1000页,对应的sql语句就是
1select * from table limit 10000,10
需要先查询10000条进行丢弃,再取那么个10条选用。这个效率也太低了,
我们经常需要定时任务全量去跑一张表的数据,普通翻页去跑的话,到后面数据量大的时候,就会越跑越慢,这就是深翻页带来的问题。
有没有解决办法呢?有!
好好思考下,目前的问题在于每次翻页都需要花时间扫描一些不需要的记录,然后丢弃。那么是不是可以优化这个步骤呢? ...
后端开发
未读ip获取http请求对于controller的请求,我们只需要写个拦截器,将用户的ip设置进上下文即可,非常方便。
12345678@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { RequestInfo info = new RequestInfo(); info.setUid(Optional.ofNullable(request.getAttribute(TokenInterceptor.ATTRIBUTE_UID)).map(Object::toString).map(Long::parseLong).orElse(null)); info.setIp(ServletUtil.getClientIP(request)); RequestHolder.set(info); return true;}
ip在请求头中都会携带。直接 ...
常用命令
git clone - 从远程仓库克隆代码
git add - 添加文件到暂存区
git commit - 提交代码到本地仓库
git push - 推送到远程仓库
git pull - 拉取远程仓库更新
git checkout - 切换分支
git branch - 新建/列出分支
git merge - 合并指定分支
git log - 查看提交记录
git status - 查看文件状态
git diff - 比较差异
git reset - 回退版本
git revert - 撤销提交
git tag - 给指定提交打标签
git stash - 暂存当前进度
git rm - 删除文件
命令详解git commit –amend用来修改最后一次提交记录,示例如下
修改最近一次的提交记录历史
1git commit --amend "new commit history"
有新变动产生的文件
12git add .git commit --amend
修改提交时间
1git commi ...
后端开发
未读常用的属性映射方法一般来说,不使用MapStruct框架进行属性映射,常有的方法以下两种:
1.Getter/Setter方法手动映射
这种方法最朴素,手动编写代码将源对象的属性存入目标对象,需要注意实体类中嵌套属性的判空操作以防止空指针异常。
2.BeanUtils.copyProperties()方法进行映射
BeanUtils底层使用的是反射机制实现属性的映射。反射是一种在运行时动态获取类信息、调用方法或访问字段的机制,无法利用JVM的优化机制,因此通常比直接方法调用慢得多。
此外,BeanUtils 只能同属性映射,或者在属性相同的情况下,允许被映射的对象属性少;但当遇到被映射的属性数据类型被修改或者被映射的字段名被修改,则会导致映射失败
如何使用1. 定义实体类以及被映射类1234567891011121314151617181920212223242526272829303132333435// 实体类@Data@NoArgsConstructor@AllArgsConstructor@Builderpublic class User { priv ...


















