封装neo4j的持久层和服务层
目录
持久层
mp
模仿:
1.抽取出通用的接口类
2.创建自定义的repository接口
服务层
mp
模仿:
1.抽取出一个IService通用服务类
2.创建ServiceImpl类实现IService接口
3.自定义的服务接口
4.创建自定义的服务类
工厂模式
为什么可以使用工厂模式
如何使用工厂模式
枚举类
工厂类
第一种方式:使用switch方式来判断要返回哪一种服务类型
第二种:通过反射来判断
使用工厂模式
这里我来分享以下参考mybatis-plus的格式来封装neo4j的持久层,和设计出一个服务层
持久层
mp
这里我们先看以下mp持久层的是如何操作的
可以发现mp抽取出了一个通用的BaseMapper接口,并使用泛型T代指对实体类对象的统一操作
public interface BaseMapper<T> extends Mapper<T> {int insert(T entity);int deleteById(Serializable id);int deleteById(T entity);
...
}
然后我们就可以创建一个mapper类,并继承自BaseMapper接口,然后泛型指定为PayChannelEntity实体类,这个实体类就是使用@TableName注解与数据表一一对应的实体类
@Mapper
public interface PayChannelMapper extends BaseMapper<PayChannelEntity> {}
总结,mp通过抽取出一个BaseMapper通用的接口,然后让我们自己创建的mapper类去继承BaseMapper,并指定要操作的实体类,这样一来,大多数的CURD操作我们就不用自己实现,并且我们自己创建的mapper类使用@Mapper注解,这个注解可以让Spring扫描并为其创建一个代理对象。
模仿:
1.抽取出通用的接口类
这个类继承Neo4jRepository接口,这个接口有neo4j提供的大多数CURD方法
并且也使用泛型,并且规定这个T泛型必须继承自BaseEntity类,还有另一个泛型ID,表示id属性的类型
这里使用@NoRepositoryBean注解的作用是不用给这个通用接口类生成bean,因为继承Neo4jRepository接口的接口都会被扫描生成代理对象,这里没必要生成,mp是使用了@Mapper注解才会生成代理对象
/*** Repository基本方法的实现**/
@NoRepositoryBean//让这个类不生成bean
public interface BaseRepository<T extends BaseEntity, ID> extends Neo4jRepository<T, ID> {/*** 根据业务id查询节点数据** @param bid 业务id* @return 节点数据*/Optional<T> findByBid(Long bid);/*** 根据业务id删除节点数据** @param bid 业务id* @return 删除的数据数量*/Long deleteByBid(Long bid);
}
2.创建自定义的repository接口
这里指定泛型为AgencyEntity类,和id属性为Long类
AgencyEntity类是与neo4j中AGENCY标签一一对应的实体类
通过实现getAgencyType()抽象方法来区别不同的机构实体类
/*** 网点数据操作*/
public interface AgencyRepository extends BaseRepository<AgencyEntity, Long> {}@Node("AGENCY")
@Data
@ToString(callSuper = true)
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
public class AgencyEntity extends BaseEntity {@Overridepublic OrganTypeEnum getAgencyType() {return OrganTypeEnum.AGENCY;}
}@Data
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
public abstract class BaseEntity {@Id@GeneratedValue@ApiModelProperty(value = "Neo4j ID", hidden = true)private Long id;@ApiModelProperty(value = "父节点id", required = true)private Long parentId;@ApiModelProperty(value = "业务id", required = true)private Long bid;@ApiModelProperty(value = "名称", required = true)private String name;@ApiModelProperty(value = "负责人", required = true)private String managerName;@ApiModelProperty(value = "电话", required = true)private String phone;@ApiModelProperty(value = "地址", required = true)private String address;@ApiModelProperty(value = "位置坐标, x: 纬度,y: 经度", required = true)private Point location;@ApiModelProperty(value = "是否可用", required = true)private Boolean status;@ApiModelProperty(value = "扩展字段,以json格式存储")private String extra;//机构类型public abstract OrganTypeEnum getAgencyType();}
还有另外两个持久层接口类
服务层
mp
这里看一下mp的服务层实现
可以发现mp的服务层也抽取出了一个通用的服务接口类,也使用了泛型T来代指操作的实体类
public interface IService<T> {int DEFAULT_BATCH_SIZE = 1000;default boolean save(T entity) {return SqlHelper.retBool(this.getBaseMapper().insert(entity));}@Transactional(rollbackFor = {Exception.class})default boolean saveBatch(Collection<T> entityList) {return this.saveBatch(entityList, 1000);}boolean saveBatch(Collection<T> entityList, int batchSize);
BaseMapper<T> getBaseMapper();Class<T> getEntityClass();
...
}
这个接口类是没有实现的,如果我们要自己创建一个服务类去实现这个接口,是十分麻烦的,所以mp提供了一个ServiceImpl类对这个接口进行了实现
这个实现类使用了一个泛型M代指继承了BaseMapper接口的类,还有泛型T代指实体类
这样一来就可以使用M来实现IService接口的所有方法操作了。
public class ServiceImpl<M extends BaseMapper<T>, T> implements IService<T> {protected Log log = LogFactory.getLog(this.getClass());@Autowiredprotected M baseMapper;protected Class<T> entityClass = this.currentModelClass();protected Class<M> mapperClass = this.currentMapperClass();public ServiceImpl() {}public M getBaseMapper() {return this.baseMapper;}public Class<T> getEntityClass() {return this.entityClass;}/** @deprecated */@Deprecatedprotected boolean retBool(Integer result) {return SqlHelper.retBool(result);}protected Class<M> currentMapperClass() {return ReflectionKit.getSuperClassGenericType(this.getClass(), ServiceImpl.class, 0);}
...
}
自定义的服务接口类,用来拓展自己特有的方法
public interface PayChannelService extends IService<PayChannelEntity> {}
自定义的服务类,把对应的mapper接口类型,和需要操作的实体类作为泛型传入
@Service
public class PayChannelServiceImpl extends ServiceImpl<PayChannelMapper, PayChannelEntity> implements PayChannelService {
}
模仿:
1.抽取出一个IService通用服务类
使用泛型T代指需要操作的实体类
public interface IService<T extends BaseEntity> {/*** 根据业务id查询数据** @param bid 业务id* @return 节点数据*/T queryByBid(Long bid);/*** 新增节点** @param t 节点数据* @return 新增的节点数据*/T create(T t);/*** 更新节点** @param t 节点数据* @return 更新的节点数据*/T update(T t);/*** 根据业务id删除数据** @param bid 业务id* @return 是否删除成功*/Boolean deleteByBid(Long bid);}
2.创建ServiceImpl类实现IService接口
这里使用R泛型代指repostory接口类,这样一来就可以使用R类型的repostory接口来对方法进行实现。
/*** 基础服务的实现*/
public class ServiceImpl<R extends BaseRepository, T extends BaseEntity> implements IService<T> {@Autowiredprivate R repository;@Overridepublic T queryByBid(Long bid) {return (T) this.repository.findByBid(bid).orElse(null);}@Overridepublic T create(T t) {t.setId(null);//id由neo4j自动生成return (T) this.repository.save(t);}@Overridepublic T update(T t) {//先查询,再更新T tData = this.queryByBid(t.getBid());if (ObjectUtil.isEmpty(tData)) {return null;}BeanUtil.copyProperties(t, tData, CopyOptions.create().ignoreNullValue().setIgnoreProperties("id", "bid"));return (T) this.repository.save(tData);}@Overridepublic Boolean deleteByBid(Long bid) {return this.repository.deleteByBid(bid) > 0;}
}
3.自定义的服务接口
public interface AgencyService extends IService<AgencyEntity> {}public interface OLTService extends IService<OLTEntity> {}
public interface TLTService extends IService<TLTEntity> {}
4.创建自定义的服务类
创建实现类,并把这个类都交给spring管理
@Service
public class AgencyServiceImpl extends ServiceImpl<AgencyRepository, AgencyEntity> implements AgencyService {
}@Service
public class TLTServiceImpl extends ServiceImpl<TLTRepository, TLTEntity>implements TLTService {
}@Service
public class OLTServiceImpl extends ServiceImpl<OLTRepository, OLTEntity>implements OLTService {
}
工厂模式
我们可以使用工厂模式来动态的生成不同的服务实现类供我们使用
为什么可以使用工厂模式
因为所有的服务类都实现了IService这个通用的服务接口,这样一来就可以使用父类引用指向子类对象的多态思想
如何使用工厂模式
我们可以创建一个工厂类,还有一个枚举类,代替不同的机构类型,然后再工厂类的静态方法中根据不同的枚举类的code值来创建对应的服务类并返回。
枚举类
public enum OrganTypeEnum implements BaseEnum {OLT(1, "一级转运中心"),TLT(2, "二级转运中心"),AGENCY(3, "网点");/*** 类型编码*/private final Integer code;/*** 类型值*/private final String value;OrganTypeEnum(Integer code, String value) {this.code = code;this.value = value;}public Integer getCode() {return code;}public String getValue() {return value;}public static OrganTypeEnum codeOf(Integer code) {return EnumUtil.getBy(OrganTypeEnum::getCode, code);}
}
工厂类
第一种方式:使用switch方式来判断要返回哪一种服务类型
根据传入的Integer类型数据,使用枚举类的codeOf方法,创建对应的枚举类对象
然后使用hutool的SpringUtil获取对应服务类的实例bean对象并返回
/*** 根据type选择对应的service返回** @author zzj* @version 1.0*/
public class OrganServiceFactory {public static IService getBean(Integer type) {OrganTypeEnum organTypeEnum = OrganTypeEnum.codeOf(type);if (null == organTypeEnum) {throw new SLException(ExceptionEnum.ORGAN_TYPE_ERROR);}switch (organTypeEnum) {case AGENCY: {return SpringUtil.getBean(AgencyService.class);}case OLT: {return SpringUtil.getBean(OLTService.class);}case TLT: {return SpringUtil.getBean(TLTService.class);}}return null;}}
第二种:通过反射来判断
以上方法我们要通过switch语句来判断是要返回哪一种类型的服务类,那如果枚举类型很多的话,这样是不是冗杂
定义一个接口,在接口里定义能返回对应机构枚举类型的方法
public interface OrganTypeService {/*** 获取对应的机构枚举类型*/OrganTypeEnum getOrganTypeEnum();
}
然后自定义的服务接口都继承这个接口
public interface AgencyService extends IService<AgencyEntity> ,OrganTypeService{}
public interface OLTService extends IService<OLTEntity> ,OrganTypeService{}
public interface TLTService extends IService<TLTEntity>,OrganTypeService{}
服务类实现这个方法,分别返回对应的枚举类型
@Service
public class AgencyServiceImpl extends ServiceImpl<AgencyRepository, AgencyEntity> implements AgencyService {@Overridepublic OrganTypeEnum getOrganTypeEnum() {return OrganTypeEnum.AGENCY;}
}
@Service
public class OLTServiceImpl extends ServiceImpl<OLTRepository, OLTEntity>implements OLTService {@Overridepublic OrganTypeEnum getOrganTypeEnum() {return OrganTypeEnum.OLT;}
}
@Service
public class TLTServiceImpl extends ServiceImpl<TLTRepository, TLTEntity>implements TLTService {@Overridepublic OrganTypeEnum getOrganTypeEnum() {return OrganTypeEnum.TLT;}
}
方法实现
public class OrganServiceFactory {public static IService getBean(Integer type) {OrganTypeEnum organTypeEnum = OrganTypeEnum.codeOf(type);if (null == organTypeEnum) {throw new SLException(ExceptionEnum.ORGAN_TYPE_ERROR);}//先从容器中获取所有的IService类型的bean实例对象Map<String, IService> beans = SpringUtil.getBeansOfType(IService.class);for (Map.Entry<String, IService> entry : beans.entrySet()) {//通过反射执行getOrganTypeEnum()方法Object invoke = ReflectUtil.invoke(entry.getValue(), "getOrganTypeEnum");//如果类型一致就返回对应的服务类实例if(ObjectUtil.equal(invoke,organTypeEnum)){return entry.getValue();}}return null;}}
对比:
第一种方式不用写额外的方法来返回对应的枚举类型,但是需要在工厂的静态方法里来判断枚举类型,如果枚举类型少而且不用经常改变代码,就可以使用这种方式
第二种方式需要写额外的方法来返回对应的枚举类型,但是在工厂方法里就可以使用反射直接执行获取枚举类型的方法来动态获取对应的服务类型。
使用工厂模式
@SpringBootTest
public class Test1 {@Testpublic void testo1(){IService iService = OrganServiceFactory.getBean(1);System.out.println(iService);}
}
成功返回OLT类型的服务实现类
如果不使用工厂模式,我们就要提前注入这三种类型的服务bean,这样是不是很冗余呢,然后还需要根据需要操作的实体类的不同来判断使用哪一个服务类,十分麻烦
如
if(type==1) 使用oltService来操作
else if(type==2) ...
@ResourceOLTService oltService;@ResourceTLTService tltService;@ResourceAgencyService agencyService;
相关文章:
封装neo4j的持久层和服务层
目录 持久层 mp 模仿: 1.抽取出通用的接口类 2.创建自定义的repository接口 服务层 mp 模仿: 1.抽取出一个IService通用服务类 2.创建ServiceImpl类实现IService接口 3.自定义的服务接口 4.创建自定义的服务类 工厂模式 为什么可以使用工厂…...
HTML 简介
1.什么是 HTML? 超文本:暂且简单理解为 “超级的文本”,和普通文本比,内容更丰富。 标 记:文本要变成超文本,就需要用到各种标记符号。 语 言:每一个标记的写法、读音、使用规则,…...
【AWS】EC2 安全组设置
在使用 Amazon Web Services (AWS) 的 EC2 实例时,很多用户会遇到关于 安全组 设置的问题,尤其是在创建或修改安全组时输入描述信息时。最近,有一个常见的错误是当用户在 EC2 安全组 配置中添加描述时,使用了中文字符,…...
git bisect 使用二分法查找引入错误的提交
git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时,首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...
STM32 Flash详解教程文章
目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易,请勿搬运,感谢理解!!! Flash基本概念…...
业务开发 | 基础知识 | Maven 快速入门
Maven 快速入门 1.Maven 全面概述 Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念(POM),Maven 可以从中央信息中管理项目的构建,报告和文档。 2.Maven 基本功能 因此实际上 Maven 的基本功能就是作为 Ja…...
Python实现从SMS-Activate平台,自动获取手机号和验证码(进阶版2.0)
前言 本文是该专栏的第52篇,后面会持续分享python的各种干货知识,值得关注。 在本专栏之前,笔者在文章《Python实现SMS-Activate接口调用,获取手机号和验证码》中,有详细介绍基于SMS-Activate平台,通过python来实现自动获取目标国家的手机号以及对应的手机号验证码。 而…...
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施 一、前言二、SIEM 系统的功能概述2.1 数据收集与整合2.2 实时监控与威胁检测2.3 事件响应与自动化2.4 合规性管理 三、SIEM 系统选型的关键因素3.1 功能需求评估3.2 可扩展性与性能3.3 易用性与可维…...
解决DeepSeek服务器繁忙问题
目录 解决DeepSeek服务器繁忙问题 一、用户端即时优化方案 二、高级技术方案 三、替代方案与平替工具(最推荐简单好用) 四、系统层建议与官方动态 用加速器本地部署DeepSeek 使用加速器本地部署DeepSeek的完整指南 一、核心原理与工具选择 二、…...
node.js+兰空图床实现随机图
之前博客一直用的公共的随机图API,虽然图片的质量都挺不错的,但是稳定性都比较一般,遂打算使用之前部署的兰空图床,自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作,有兴趣的话可…...
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗? 文章目录 DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT:谁更胜一筹?2.1 语言生成能力评测对比场景…...
mac搭建环境
从0-1搭建mac环境 先查看自己的芯片信息 bash uname -mbash-3.2$ uname -m arm64这里是自己的型号安装brew xcode-select --install xcode-select -p /bin/zsh -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)” source /Users/lanren/.…...
【R语言】t检验
一、基本介绍 t检验(t-test)是用于比较两个样本均值是否存在显著差异的一种统计方法。 t.test()函数的调用格式: t.test(x, yNULL, alternativec("two.sided", "less", "greater"), mu0, pairFALSE, var.eq…...
尚硅谷爬虫note005
一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...
词袋模型和词嵌入模型区别和关联分析(词袋模型是否属于词嵌入模型)
词袋模型(Bag of Words, BoW)不属于词嵌入模型,它们是两种完全不同的文本表示方法。以下从多个维度对比二者的核心区别 1. 本质区别 特性词袋模型 (BoW)词嵌入模型 (Word Embedding)表示形式离散的稀疏向量(高维,维度…...
借用python 学习 VM的 FTP(VisionMaster4.3)
无懒不python:看官方V社区有介绍: 需要安装 Quick Easy FTP Server V4.0.0.exe 为了表示敬意再次放出链接: V社区-机器智能技术交流-VM关于FTP存图的一点分享 好了VM先放一边 先用python自收 自发: 毕竟这个免费 FTP服务端: 0.ftpserver.py 需要安装的库 和 注意事项已经在…...
BDD风格测试
BDD风格测试(Behavior-Driven Development) BDD(行为驱动开发)是一种以自然语言描述系统行为的测试方法论,强调团队协作与业务价值验证。结合Mockito的BDD风格API,可以编写更符合业务场景描述、更易读的测…...
[免费]Springboot+Vue医疗(医院)挂号管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringbootVue医疗(医院)挂号管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue医疗(医院)挂号管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 在如今社会上,关于信息上…...
Linux 查看磁盘中的大文件
在 Linux 系统中,你可以使用以下方法来查看磁盘中的大文件信息: 1. 使用 find 命令 find 命令可以递归查找指定目录下的大文件。 find /path/to/directory -type f -size 100M -exec ls -lh {} \;/path/to/directory:要查找的目录路径&…...
浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别
DeepSeek回复: 以下是主流消息队列(MQ)的对比分析,结合核心特性、适用场景和实际案例说明: 一、主流MQ对比分析 维度 Kafka RabbitMQ RocketMQ ActiveMQ所属公司Apache(LinkedIn开源)…...
君海游戏岗位,需要私我
游戏岗位内推啦,需要找我哈 共14个职位 广告投放主管 社会招聘全国 广告投放 社会招聘全国 设计主管 社会招聘全国 海外投放 社会招聘广东省广州市 海外运营 社会招聘广东省广州市 产品运营专员 社会招聘广东省广州市 平台运营 社会招聘广东…...
Vue2/Vue3分别如何使用Watch
在 Vue 2 和 Vue 3 中,watch 用于监听数据的变化并执行相应的逻辑。虽然两者的核心功能相同,但在语法和使用方式上有一些区别。以下是 Vue 2 和 Vue 3 中使用 watch 的详细说明: Vue 2 中的 watch 在 Vue 2 中,watch 是通过选项式…...
boss直聘登录 网易易盾 无感 滑块 分析
声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 实测网站是存在风控的比较…...
蓝桥杯 Java B 组之日期与时间计算(闰年、星期计算)
Day 5:日期与时间计算(闰年、星期计算) 在编程竞赛中,日期和时间计算是常见考点,涉及 闰年判断、星期计算、日期间隔计算 等问题。本日的学习目标: 判断闰年计算某个日期是星期几计算两个日期之间相差多少…...
51单片机之引脚图(详解)
8051单片机引脚分类与功能笔记 1. 电源引脚 VCC(第40脚):接入5V电源,为单片机提供工作电压。GND(第20脚):接地端,确保电路的电位参考点。 2.时钟引脚 XTAL1(第19脚&a…...
掌控系统性能的利器:自动化系统性能监控工具
友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...
用大模型学大模型03-数学基础 概率论 随机变量 概率分布
deepseek.com:什么是概率,什么是随机变量?深度学习中常用概率的分布有哪些? 1. 什么是概率? 概率是描述事件发生的可能性的数值,范围在 0 到 1 之间: 0:事件不可能发生。1:事件必…...
ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件
FileStream 在向浏览器发送文件时节省了服务器内存和资源,但如果需要删除文件怎么办?本文介绍如何在发送文件后删除文件;用 C# 编写。 另请参阅:位图创建和下载 使用FileStream向浏览器发送数据效率更高,因为文件是从…...
如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件
DHTMLX Scheduler 是一个全面的调度解决方案,涵盖了与规划事件相关的广泛需求。假设您在我们的 Scheduler 文档中找不到任何功能,并且希望在我们的 Scheduler 文档中看到您的项目。在这种情况下,很可能可以使用自定义解决方案来实现此类功能。…...
UE_C++ —— Unreal Interfaces
目录 一,Declare an Interface in C 二,Interface Specifiers 三,Implement an Interface in C 四,Declare Interface Functions 五,C Only Interface Functions 六,Blueprint Callable Interface Fu…...
mapbox 从入门到精通 - 目录
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀总目录1.1 ☘️ mapbox基础1.2 ☘️…...
CentOS搭建PPPOE服务器
一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容: # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …...
在 CentOS 系统中配置交换空间(Swap)解决内存不足
🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …...
pytorch训练五子棋ai
有3个文件 game.py 五子棋游戏 mod.py 神经网络模型 xl.py 训练的代码 aigame.py 玩家与对战的五子棋 game.py class Game:def __init__(self, h, w):# 行数self.h h# 列数self.w w# 棋盘self.L [[- for _ in range(w)] for _ in range(h)]# 当前玩家 - 表示空 X先…...
超越DeepSeek R1的Moe开源大模型 Qwen2.5-max 和 Qwen Chat Web UI 的发布,阿里搅动AI生态
敲黑板,说重点,最近阿里推出的 Qwen2.5-max 和 Qwen Chat Web UI,将对AI生态又一次冲击。 说冲击,因为 DeepSeek R1的热潮还未散退的情况下,由于服务器压力不能注册新的API,然后价格涨价,服务有…...
动态规划两个数组的dp问题系列一>两个字符串的最小ASCII 删除和
这里写目录标题 题目解析:状态表示:状态转移方程:初始化:填表顺序:返回值:代码呈现: 题目解析: 状态表示: 状态转移方程: 初始化: 填表顺序&#…...
【C语言】程序环境与预处理
目录 程序的翻译环境和执行环境 粗谈编译链接 翻译环境 编译的几个阶段及链接 运行环境 预处理详解 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## 带副作用的宏参数 宏和函数的对比 命名约定 #undef 命令行定义 条件编译 …...
DeepSeek 背后的技术:GRPO,基于群组采样的高效大语言模型强化学习训练方法详解
强化学习(Reinforcement Learning, RL)已成为提升大型语言模型(Large Language Models, LLMs)推理能力的重要技术手段,特别是在需要复杂推理的任务中。DeepSeek 团队在 DeepSeek-Math [2] 和 DeepSeek-R1 [3] 模型中的…...
AnythingLLM打造私有知识库
一、 OllamaDeepSeek安装 https://blog.csdn.net/Stestack/article/details/145405151?spm1001.2014.3001.5502二、 nomic-embed-text nomic-embed-text主要用于文本嵌入和句子相似度任务,能够将这些任务应用于分类、聚类、检索等多种自然语言处理场景。该模型在…...
springboot多数据源事务管理
在Java应用中,使用多数据源时,事务管理是一个常见且复杂的问题。由于每个数据源都有自己的事务管理器,跨多个数据源的事务管理需要特别处理。以下是几种常见的解决方案: 1. JTA(Java Transaction API) JT…...
Lineageos 22.1 aosp15 定制学习专栏介绍
一.前言 学习了一段时间的rom开发,需求也大概做了一些,但是一直没有记录下来总结,这个专栏开始会基于如下平台开始尝试做一些常见模块的需求定制,记录学习,如果有错误欢迎指正,大家一起学习!至于pixel编译…...
win10中mstsc远程Centos-Stream 9图形化界面
文章目录 1 前置状态2 安装配置XRDP3 关闭SELinux3.1 查看selinux状态3.2 关闭selinux 4 启动XRDP5 Win10远程连接测试 1 前置状态 已安装CentOS9桌面版;Windows10。 2 安装配置XRDP sudo yum install epel-release sudo yum install xrdp sudo yum install tige…...
【Deepseek】解决Deepseek服务器繁忙的问题
随着Deepseek的爆火越来越多的人使用Deepseek,就导致很多情况下出现服务器繁忙的情况。本博客将讲述如何使用Deepseek不卡顿或者出现服务器繁忙的情况。 一.绕开官方服务器 现在无论是网页版还是app都是在访问【深度求索】的官方服务器,所以才会出现服务器繁忙的…...
【实战篇】室内设计师如何利用 DeepSeek 做设计:从灵感到落地的全方位指南
大家好!今天咱们来聊聊一个超级有趣的话题——室内设计师如何利用 DeepSeek 做设计。如果你是一名室内设计师,或者对室内设计感兴趣,那你一定知道,设计不仅仅是画画图、选选颜色那么简单。它涉及到灵感搜集、空间规划、材料选择、预算控制、客户沟通等一系列复杂的过程。而…...
从 ClickHouse 到 Apache Doris:在网易云音乐日增万亿日志数据场景下的落地
导读:日志数据已成为企业洞察系统状态、监控网络安全及分析业务动态的宝贵资源。网易云音乐引入 Apache Doris 作为日志库新方案,替换了 ClickHouse。解决了 ClickHouse 运维复杂、不支持倒排索引的问题。目前已经稳定运行 3 个季度,规模达到…...
Linux执行一条命令并自动重试直到成功,自动化脚本
编辑filename.sh文件 sudo vim filename.shi 插入模式,编辑文件 # 定义函数来执行并重试每个命令 execute_with_retry() {local cmd"$1"while true; do# 执行命令,并将返回状态存储在STATUS变量中eval $cmdSTATUS$?# 检查命令是否成功&…...
洛谷 acwing刷题 有关图的存储形式和djstra算法的例题
在以往的408学习中,我们 往往采用邻接表和邻接矩阵解决图的存储问题, 但是经过刷题过程发现也有一种新的存储形式值得我们学习,废话不多说,直接上代码 讲解 初始的数组 int e[N], w[N], ne[N], h[H], idx; 算法过程 void add…...
SQL 大厂面试题目(由浅入深)
今天给大家带来一份大厂SQL面试覆盖:基础语法 → 复杂查询 → 性能优化 → 架构设计,大家需深入理解执行原理并熟悉实际业务场景的解决方案。 1. 基础查询与过滤 题目:查询 employees 表中所有薪资(salary)大于 10000…...
用 Python 实现 DeepSeek R1 本地化部署
DeepSeek R1 以其出色的表现脱颖而出,不少朋友想将其本地化部署,网上基于 ollama 的部署方式有很多,但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署,让你轻松掌握,打造属于自己的 AI…...
ToDesk远程打印详细设置步骤教学
很多小伙伴常有打印、远程打印的需求,特别是对于电商人、跨境电商、教师、产品经理、实验人员等群体来说掌握这项技能可谓是能够在很多场景下带来便捷,大幅提升做事效率!那么是否有方法可以随时随地实现这样需求呐?答案是肯定的&a…...