当前位置: 首页 > article >正文

Dubbo学习笔记(快速入门)

一、分布式基础1.1 软件架构四大演变演变顺序单体 → 垂直 → 分布式 → 微服务解释架构进化本质为了解决流量变大、代码变多、维护困难。1单体架构所有模块一个工程一个jar包全部本地调用优点简单缺点耦合严重、一处崩全崩。通俗解释所有代码写在一个项目里商城、会员、订单全部在一起打包就是一个文件。服务器挂一下网站直接瘫痪。2垂直架构按业务线拆分多个单体项目解决宕机连锁问题但是代码大量重复、无法复用。通俗解释把大项目拆成多个独立小项目比如商城系统、后台管理系统分开部署但是每个项目都要写一遍短信、文件上传工具代码重复。3分布式架构抽公共服务分为web消费层、service提供层第一次出现远程调用RPC原生调用极其麻烦。通俗解释把重复代码单独抽出来做成服务专门给别人调用两个不同项目不在同一台电脑必须网络传输也就是远程调用。4微服务架构粒度极致细化一个功能一个服务服务数量爆炸必须使用服务治理框架Dubbo/SpringCloud。通俗解释拆分到极致用户服务、订单服务、支付服务全部独立服务太多人工管不过来必须用框架治理。1.2 RPC远程调用核心原理1.2.1 什么是RPCRPC远程过程调用跨JVM、跨服务器调用方法像本地调用一样简单。通俗解释你代码看起来是调用本地方法实际上调用的是另一台电脑上的代码屏蔽网络底层。1.2.2 RPC五大核心要素客户端消费者需要调用别人服务的一方。服务端提供者提供接口、被别人调用的一方。序列化Java对象不能直接网络传输必须转成二进制字节。网络传输采用TCP长连接稳定、可靠、适合业务调用。动态代理自动生成代理类不用手写Socket、不用写网络代码。1.2.3 RPC完整调用流程消费者调用代理方法 → 序列化参数 → 网络传输 → 服务端反序列化 → 反射执行业务 → 返回结果序列化 → 消费者反序列化拿到数据。通俗逐句解释①你调用方法②把对象变成字节③通过网络发给服务端④服务端把字节变回对象⑤通过反射执行代码⑥结果再次转字节传回⑦客户端转回对象展示。1.3 Dubbo 是什么高性能 RPC 框架阿里开源用于分布式服务调用核心远程调用像本地调用一样简单解决服务拆分、跨服务通信、服务治理1.4 Dubbo整体架构五大角色Provider提供者暴露服务注册到注册中心。解释写业务代码、对外提供接口的项目。Consumer消费者订阅服务调用远程接口。解释需要使用别人接口、不写业务逻辑的项目。Registry注册中心存放服务地址ZK/Nacos。解释中介、通讯录保存所有服务在哪台服务器。Monitor监控中心统计调用次数、耗时、异常。解释日志统计工具看哪个接口慢、报错多。Container容器Spring容器启动服务。解释Dubbo依托Spring运行本身不是独立服务器。二、Dubbo环境搭建快速入门2.1 注册中心ZooKeeper2.1.1 为什么选用ZK节点临时特性、心跳检测、适合Dubbo服务注册服务下线自动删除节点。通俗解释服务挂了ZK自动检测、自动删掉失效地址不会让消费者调用死掉的服务。2.1.2 ZK存储结构根节点/dubbo → 服务名节点 → 提供者节点、消费者节点、配置节点。通俗解释树形结构类似文件夹清晰保存每一个服务信息、IP、端口。2.2 Dubbo管理控制台dubbo-admin作用可视化查看服务、禁用服务、权重调整、路由配置。解释网页后台不用敲命令肉眼查看服务状态。部署方式war包部署tomcat、jar直接启动。解释新版jar一键启动老版本war包放tomcat。页面功能服务治理、应用管理、流量管控。解释上线灰度、临时禁用坏接口全部在这里操作。2.3 第一个Dubbo入门案例2.3.1 工程拆分规范公共接口工程api存放所有服务接口、实体类。解释专门放模板提供者实现、消费者引用。提供者工程provider实现接口、暴露服务。解释干活的服务。消费者工程consumer引用接口、调用远程服务。解释请求方不实现代码2.3.2 【代码实操】依赖引入pom.xml!-- Dubbo核心依赖 -- dependency groupIdcom.alibaba/groupId artifactIddubbo/artifactId version2.6.2/version /dependency !-- Zookeeper连接依赖 -- dependency groupIdorg.apache.zookeeper/groupId artifactIdzookeeper/artifactId version3.4.10/version /dependency dependency groupIdcom.github.sgroschupf/groupId artifactIdzkclient/artifactId version0.1/version /dependency2.3.3 【代码实操】公共API接口类/** * 公共服务接口api工程 * 提供者实现、消费者引用 */ public interface UserService { String sayHello(String name); }2.3.4 【代码实操】提供者实现类XML配置业务实现类public class UserServiceImpl implements UserService { Override public String sayHello(String name) { return Dubbo调用成功name; } }提供者dubbo-provider.xml配置?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:dubbohttp://dubbo.apache.org/schema/dubbo xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd !-- 1.当前服务应用名称 -- dubbo:application namedubbo-provider/ !-- 2.注册中心地址ZK默认端口2181 -- dubbo:registry addresszookeeper://127.0.0.1:2181/ !-- 3.通信协议及端口 默认20880 -- dubbo:protocol namedubbo port20880/ !-- 4.暴露服务接口 -- dubbo:service interfacecom.lwl.service.UserService refuserService/ !-- 5.注入实现类 -- bean iduserService classcom.lwl.service.impl.UserServiceImpl/ /beans2.3.5 【代码实操】消费者XML配置调用测试消费者dubbo-consumer.xml?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:dubbohttp://dubbo.apache.org/schema/dubbo xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd !-- 应用名称 -- dubbo:application namedubbo-consumer/ !-- 注册中心 -- dubbo:registry addresszookeeper://127.0.0.1:2181/ !-- 引用远程服务 生成代理对象 -- dubbo:reference iduserService interfacecom.lwl.service.UserService/ /beans测试启动类public class ConsumerTest { public static void main(String[] args) { ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(dubbo-consumer.xml); UserService userService context.getBean(UserService.class); // 像本地方法一样调用远程服务 String result userService.sayHello(Dubbo快速入门学习); System.out.println(result); } }三、Dubbo高级配置大全3.1 SpringBoot整合Dubbo三种方式XML配置方式老式写法企业遗留项目多。解释早期Spring写法现在新项目不用。注解方式主流DubboService、DubboReference。解释最简单、现在企业通用。JavaConfig配置类纯代码无xml。解释大型框架底层使用。3.1.1 【代码实操】SpringBoot注解版① 提供者 application.yml 配置# 服务名称 dubbo: application: name: dubbo-boot-provider # 注册中心 registry: address: zookeeper://127.0.0.1:2181 # 通信协议 protocol: name: dubbo port: 20880 # 扫描注解包 scan: base-packages: com.lwl.service # 关闭日志冗余打印 logging: level: root: info② 消费者 application.yml 配置dubbo: application: name: dubbo-boot-consumer registry: address: zookeeper://127.0.0.1:2181 # 开发环境关闭启动检查 consumer: check: false server: port: 8080③ 提供者启动类服务实现// 提供者实现类 暴露服务 DubboService // 新版注解 暴露服务 public class UserServiceImpl implements UserService { Override public String sayHello(String name) { return SpringBootDubbo注解调用成功; } } // 启动类 EnableDubbo SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class,args); } }④ 消费者引用RestController public class UserController { // 引用远程服务 DubboReference private UserService userService; GetMapping(/hello) public String hello(){ return userService.sayHello(注解方式); } }3.2 dubbo.properties全局配置统一配置公共属性超时、重试、注册中心。解释把重复配置抽出来不用每个类写一遍。属性加载优先级从高到低①启动命令(-D) ②xml/注解配置 ③dubbo.properties。3.2.1 【代码实操】dubbo.properties全局配置文件# 应用名称 dubbo.application.namedubbo-demo # 注册中心 dubbo.registry.addresszookeeper://127.0.0.1:2181 # 全局超时 dubbo.provider.timeout3000 # 全局重试次数 dubbo.provider.retries13.3 启动检查check默认true消费者启动必须检测服务是否存在不存在启动报错。解释生产环境必须保证服务齐全。开发环境常用checkfalse避免服务未启动导致报错。解释开发时服务没写完不用卡死启动。3.3.1 【代码实操】关闭启动检查① XML写法dubbo:reference iduserService interfacecom.lwl.service.UserService checkfalse/② .properties 写法# 消费者关闭启动检查全局默认 dubbo.consumer.checkfalse3.4 超时配置timeout默认1000ms超时直接抛出异常。解释一秒没返回直接判定失败。消费者超时优先级高于提供者。解释调用方说了算防止服务端卡死。业务耗时较长必须手动加大超时时间。解释报表、导出、大数据查询必须调大时间。3.4.1 【代码实操】超时配置XML properties 双版本① XML写法消费者局部配置、优先级最高!-- 消费者设置超时5秒 -- dubbo:reference iduserService timeout5000② dubbo.properties 写法# 消费者全局超时时间 单位ms dubbo.consumer.timeout5000 # 提供者全局超时消费者没配置才生效 dubbo.provider.timeout3000优先级1、精确优先方法级优先接口级次之全局配置再次之2、消费者设置优先如果级别一样则消费方优先提供方次之3.5 重试次数retries默认重试2次加上第一次一共3次请求。解释失败自动换服务器再试。幂等接口可以重试查询、删除。解释查多少次、删多少次结果都一样不会出错。非幂等禁止重试下单、扣款防止重复下单。解释扣款重试会扣多遍钱绝对禁止。3.5.1 【代码实操】关闭重试XML properties 双版本① XML写法单个接口禁用重试dubbo:reference idpayService retries0/② dubbo.properties 全局写法统一全局重试次数# 全局重试次数 0关闭重试 dubbo.consumer.retries2 # 提供者重试配置 dubbo.provider.retries23.6 多版本version用于灰度发布、平滑升级。解释新版本怕bug先少量人测试。老版本服务不升级新版本并行运行逐步切流。解释新旧服务共存不会一次性全量更新。消费者指定版本调用互不干扰。解释A用户调用旧版、B用户调用新版。3.6.1 【代码实操】版本控制XML properties 双版本① XML写法提供者dubbo:service interfacecom.lwl.service.UserService refuserService version1.0.0/消费者指定版本dubbo:reference interfacecom.lwl.service.UserService iduserService version1.0.0/② .properties 配置# 提供者全局版本号 dubbo.provider.version1.0.0 # 消费者引用默认版本 dubbo.consumer.version1.0.0灰度发布优先XML单独指定版本properties用来统一默认版本。3.7 本地存根stub客户端前置增强在调用远程方法之前执行。解释还没发网络请求先在本地执行代码。用途参数校验、本地缓存、日志打印、权限判断。解释简单判断不用浪费网络请求。不侵入业务代码增强扩展性。解释不用改业务代码就能加功能。3.7.1 【代码实操】本地存根编写① 本地存根 Java代码public class UserServiceStub implements UserService { // 注入远程代理对象 private UserService userService; public UserServiceStub(UserService userService){ this.userService userService; } Override public String sayHello(String name) { // 本地前置校验 if(name null){ return 参数不能为空; } // 正常远程调用 return userService.sayHello(name); } }②XML配置消费者配置绑定存根类!-- stub绑定本地存根类客户端优先执行存根代码 -- dubbo:reference iduserService interfacecom.lwl.service.UserService stubcom.lwl.stub.UserServiceStub/总结1、存根必须放在消费者端提供者不需要2、必须写有参构造Dubbo自动注入远程代理3、执行顺序本地存根 → 远程调用。3.8 SpringBoot与dubbo整合的三种方式1导入dubbo-starter在application.properties配置属性使用Service【暴露服务】使用Reference【引用服务】2保留dubbo xml配置文件; 导入dubbo-starter使用ImportResource导入dubbo的配置文件即可3使用注解API的方式 将每一个组件手动创建到容器中让dubbo来扫描其他的组件 //EnableDubbo //开启基于注解的dubbo功能package com.lwl.config; import com.lwl.service.UserService; import com.lwl.service.impl.UserServiceImpl; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.RegistryConfig; import org.apache.dubbo.config.ServiceConfig; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * P19 API编码配置方式 */ Configuration public class MyDubboConfig { /** * 1.应用配置 */ Bean public ApplicationConfig applicationConfig(){ ApplicationConfig applicationConfig new ApplicationConfig(); applicationConfig.setName(dubbo-api-provider); return applicationConfig; } /** * 2.注册中心配置 */ Bean public RegistryConfig registryConfig(){ RegistryConfig registryConfig new RegistryConfig(); registryConfig.setAddress(zookeeper://127.0.0.1:2181); return registryConfig; } /** * 3.手动暴露服务 */ Bean public ServiceConfigUserService serviceConfig(UserService userService){ ServiceConfigUserService serviceConfig new ServiceConfig(); // 设置接口 serviceConfig.setInterface(UserService.class); // 设置实现类 serviceConfig.setRef(userService); // 设置版本 serviceConfig.setVersion(1.0.0); // 方法级配置 ListMethodConfig methods new ArrayListMethodConfig(); MethodConfig method new MethodConfig(); method.setName(sayHello); method.setTimeout(10000); method.setRetries(0); methods.add(method); serviceConfig.setMethods(methods); return serviceConfig; } }四、Dubbo高可用机制4.1 ZK宕机故障转移注册中心宕机消费者本地缓存服务列表不影响正常调用。通俗解释消费者把服务地址存在本地内存ZK崩了照样干活。ZK恢复后自动重新同步服务。解释重启ZK后自动更新最新服务列表。直连模式开发调试直接指定提供者IP绕过注册中心。解释开发阶段不用启动ZK直接写死IP调试。4.1.1 【代码实操】直连模式!-- 绕过ZK 直连指定服务地址 -- dubbo:reference iduserService interfacecom.lwl.service.UserService urldubbo://127.0.0.1:20880/Reference(url127.0.0.1:20880) UserService userService;4.2 四大负载均衡策略4.2.1 Random随机默认随机挑选节点简单高效生产默认。解释压力分配均匀、不会集中压在一台服务器。4.2.2 RoundRobin轮询依次轮流调用适合性能一致服务器。解释1号、2号、3号轮流请求服务器配置一样时使用。4.2.3 LeastActive最少活跃优先调用耗时低、并发少的节点自动避开慢节点。解释哪台服务器轻松就去哪台自动规避卡顿机器。4.2.4 ConsistentHash一致性哈希相同参数永远访问同一节点会话保持、缓存命中高。解释同一个用户永远访问同一台服务缓存不会失效。4.2.5 【代码实操】修改负载均衡策略!-- 改为轮询负载均衡 -- dubbo:reference iduserService interfacecom.lwl.service.UserService loadbalanceroundrobin/Reference(loadbalanceroundrobin) UserService userService;4.3 服务降级Mock失败降级调用失败触发本地mock返回兜底数据。解释服务崩了返回写死的默认数据页面不报错。强制降级直接禁用远程服务全部走本地mock。解释高峰期直接关掉非核心服务保住主业务。场景流量洪峰、服务宕机、非核心业务降级保主流程。通俗解释双十一限流把公告、积分关掉保住下单付款。4.4 集群容错模式4.4.1 Failover失败重试默认失败自动换节点重试适合幂等查询接口。解释查数据失败换一台重试最常用、默认模式。4.4.2 Failfast快速失败只调用一次失败直接报错适合下单扣款非幂等接口。解释支付不能重试失败直接抛异常。4.4.3 Failsafe安全失败失败不报错、返回空用于日志、统计无关紧要接口。解释错了也不影响主业务不用报错。4.4.4 Failback失败通知失败后台异步重试用于消息推送、通知类业务。解释发短信失败后台慢慢重试不用用户等待。4.4.5 Forking并行调用同时调用多个节点取最快返回高可用、耗资源。解释同时请求3台服务器谁快用谁适合金融高可靠业务。

相关文章:

Dubbo学习笔记(快速入门)

一、分布式基础1.1 软件架构四大演变演变顺序:单体 → 垂直 → 分布式 → 微服务解释:架构进化本质:为了解决流量变大、代码变多、维护困难。1)单体架构所有模块一个工程,一个jar包,全部本地调用&#xff1…...

数据中心网络卡顿?可能是你的链路聚合负载分担策略没选对!

数据中心网络卡顿?深度解析链路聚合负载分担策略优化之道 当视频会议卡成PPT、网页加载转圈圈时,很多运维团队的第一反应是"带宽不够"。但在实际排查中,我们经常发现这样的场景:交换机之间的物理链路明明已经通过链路聚…...

终极微信聊天记录备份指南:免费开源工具WeChatExporter完整教程

终极微信聊天记录备份指南:免费开源工具WeChatExporter完整教程 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心珍贵的微信聊天记录会因手机损坏或…...

【C++笔记】内存管理流食般投喂

声明:以下知识相关资料来自比特官网和小编手搓~C/C内存管理1、C/C内存分布2、C语言中动态内存管理方式:malloc/calloc/realloc/free3、C内存管理方式3.1、new/delete操作内置类型3.2、new和delete操作自定义类型4、operator new 与 operator delete 函数…...

如何测量WIFI通讯中客户端的漫游时间

在工业WiFi通信中会有很多涉及漫游的场景,例如AGV车辆在整个车间内移动,车间范围内会布置多个AP来完成信号覆盖,AGV车辆运动过程中远离已连接AP,接近另一个AP时就会发生漫游,由于工业通讯协议对实时性要求很高&#xf…...

Display Driver Uninstaller:彻底解决显卡驱动问题的专业工具指南

Display Driver Uninstaller:彻底解决显卡驱动问题的专业工具指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-u…...

Perplexity谚语查询功能实测报告:7类典型误用场景+5步精准调优法,错过即降效40%

更多请点击: https://kaifayun.com 第一章:Perplexity谚语查询功能的核心价值与适用边界 Perplexity 的谚语查询功能并非通用语言模型的简单问答接口,而是一个面向文化语义深度解析的专用能力模块。它依托高质量结构化谚语知识图谱与上下文感…...

从零搭建Perplexity增强型新闻监控系统:Python+LangChain+自定义Fact-Check插件(含GitHub可运行代码仓链接)

更多请点击: https://intelliparadigm.com 第一章:Perplexity科技新闻搜索 Perplexity 是一款以实时性、可溯源和语义理解见长的AI驱动搜索工具,专为技术从业者与研究人员优化。其“科技新闻搜索”功能并非传统关键词匹配,而是基…...

直线模组选型别再“先选电机“了!导程才是起点(附正向推导五步法)

引言:一个高频"翻车"现场在直线模组(丝杆模组)选型中,有个环节经常出现逆向翻车——工程师先选好了电机,再去配丝杆导程,结果发现:❌ 速度上不去❌ 推力不够大❌ 电机严重发热问题的根…...

Perplexity生物检索黄金公式:[实体]+[关系]+[证据等级]+[时间窗]——经Nature子刊12篇方法论论文交叉验证

更多请点击: https://intelliparadigm.com 第一章:Perplexity生物检索黄金公式的提出与演进 Perplexity生物检索黄金公式(Perplexity-Bio Retrieval Golden Formula, PBRGF)并非源于单一论文,而是随着跨模态生物语义建…...

如何彻底解决Mac设备滚动方向冲突:Scroll Reverser终极配置指南

如何彻底解决Mac设备滚动方向冲突:Scroll Reverser终极配置指南 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是不是经常在Mac上同时使用触控板和鼠标&#xff0…...

Leetcode 思路-105.从前序与中序序列构造二叉树

105.从前序与中序序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。1.简单思路根据先序遍历根节点在前的特点,取到根节点后&a…...

如何用SMUDebugTool完全掌控AMD Ryzen处理器性能

如何用SMUDebugTool完全掌控AMD Ryzen处理器性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.com/gh_mir…...

终极量化数据获取指南:3步掌握pywencai高效获取同花顺问财数据

终极量化数据获取指南:3步掌握pywencai高效获取同花顺问财数据 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 在量化投资和金融数据分析领域,获取精准、实时的A股市场数据一直是技术开发者…...

终极指南:轻松解决TranslucentTB运行时依赖问题,让Windows任务栏完美透明化

终极指南:轻松解决TranslucentTB运行时依赖问题,让Windows任务栏完美透明化 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/Transluce…...

5步掌握网易云音乐无损下载的终极方案:轻松获取专业级FLAC音乐资源

5步掌握网易云音乐无损下载的终极方案:轻松获取专业级FLAC音乐资源 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 还在为在线音乐平台的音…...

ThingsBoard共享属性实战:从MQTT订阅到规则链触发的完整数据流解析

ThingsBoard共享属性实战:从MQTT订阅到规则链触发的完整数据流解析 在物联网平台开发中,数据流的清晰理解和精确控制是构建可靠系统的关键。ThingsBoard作为一款开源的物联网平台,其共享属性机制和规则链引擎为开发者提供了强大的数据流转能力…...

把闲置NAS变成数据中枢:Docker部署MySQL全流程与Python连接实战

把闲置NAS变成数据中枢:Docker部署MySQL全流程与Python连接实战 家里那台吃灰的NAS,除了存电影和备份照片,还能干点更有技术含量的事吗?当然可以!今天我们就来彻底激活它的潜力,将它打造成家庭数据处理的&q…...

5分钟快速上手Mermaid Live Editor:免费在线图表编辑器完全指南

5分钟快速上手Mermaid Live Editor:免费在线图表编辑器完全指南 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-li…...

从AVX512到Tensor Core:聊聊那些‘纸上算力’和‘实际跑分’为啥总对不上

从AVX512到Tensor Core:揭秘理论算力与实际性能的鸿沟 当你在产品手册上看到某款CPU标称2.4T FLOPS的峰值算力,或是GPU宣称能提供数十TFLOPs的AI加速性能时,是否曾兴奋地购入设备,却在运行实际工作负载时大失所望?这种…...

别再用math.atan了!用NumPy的angle函数处理复数相位,效率提升不止一点点

别再用math.atan了!用NumPy的angle函数处理复数相位,效率提升不止一点点 在信号处理、图像分析和科学计算领域,复数相位计算是基础但关键的操作。许多开发者习惯性地使用math.atan(y/x)来计算角度,却不知道NumPy提供的angle()函数…...

法学论文降AI工具免费推荐:2026年法学毕业论文知网AIGC超标4.8元一次过完整方案

法学论文降AI工具免费推荐:2026年法学毕业论文知网AIGC超标4.8元一次过完整方案 论文AI率超标这件事,选错工具比不选工具更耽误事。 综合试用和口碑,法学论文降AI我主推嘎嘎降AI(www.aigcleaner.com),4.8…...

从模型文件到孪生场景:一个Three.js三维模型管理系统的完整产品化思考

从技术原型到商业产品:构建Three.js数字孪生系统的全栈实践 在数字孪生技术快速渗透工业制造、智慧城市等领域的今天,如何将一个基于Three.js的模型展示Demo转化为真正具备商业价值的企业级管理系统?这个问题困扰着许多掌握前端3D技术的开发者…...

机械工程论文降AI工具免费推荐:2026年机械工程毕业论文降AI知网维普亲测4.8元达标完整指南

机械工程论文降AI工具免费推荐:2026年机械工程毕业论文降AI知网维普亲测4.8元达标完整指南 帮室友处理过机械工程论文降AI,前前后后试了四款工具,最后固定在嘎嘎降AI(www.aigcleaner.com)。 4.8元,达标率…...

高性价比AI编程神器Claude Code+deepseek v4 pro+vscode——详细安装指南(2026最新版)

一.简介 这套组合性价比极高。关于Claude Code:它由Anthropic公司打造,是直接运行在终端中的AI编程助手,让你不用离开命令行就能完成代码生成、调试、重构、甚至Git提交等各种开发任务。本文将带你完成安装与配置。众所周知Claude 模型集强大…...

新闻传播论文降AI工具免费推荐:2026年新闻传播毕业论文AIGC超标免费4.8元达标完整方案

新闻传播论文降AI工具免费推荐:2026年新闻传播毕业论文AIGC超标免费4.8元达标完整方案 帮室友处理过新闻传播论文降AI,前前后后试了四款工具,最后固定在嘎嘎降AI(www.aigcleaner.com)。 4.8元,达标率99.2…...

论文写得像流水账?资深教授推荐这几个AI写作辅助软件

论文写得像流水账?选题难、逻辑乱、语言差,是很多学生共同的困扰。其实,只要用对AI写作辅助工具,再配合科学的写作流程,就能大幅提升效率和质量。资深教授普遍推荐:千笔AI(中文全流程首选&#…...

3分钟学会:如何用Chrome扩展一键保存完整网页内容

3分钟学会:如何用Chrome扩展一键保存完整网页内容 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extension…...

2026年做了一个大胆的决定:我要收徒弟了!

如果你已经在测试/开发领域摸爬滚打几年,一定有过这样的困惑:• 报了很多课,学了很多工具/框架/技术,但遇到真实项目问题依然无从下手• 想转型测开/管理/AI测试,却不知道自己的短板到底在哪• 职场遇到瓶颈&#xff0…...

OBS多平台直播终极指南:一键同时推流到多个平台的完整教程

OBS多平台直播终极指南:一键同时推流到多个平台的完整教程 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾经想过,为什么每次直播都要为不同的平台单独配…...