第七章:从类库到服务的分布式基石_《凤凰架构:构建可靠的大型分布式系统》
第七章:从类库到服务的分布式基石
一、服务发现(Service Discovery)
核心目标:解决分布式系统中服务实例动态变化时如何定位可用服务的问题。
1. 服务发现的意义
- 动态环境挑战:
微服务架构中,服务实例的IP、端口可能频繁变化(如容器化部署、自动扩缩容)。
示例:Kubernetes Pod的动态创建销毁导致IP不稳定。 - 解耦服务调用:
调用方无需硬编码服务实例地址,通过服务名进行抽象通信。 - 核心机制:
- 服务注册:服务启动时向注册中心注册自身信息(IP、端口、健康状态)。
- 服务查询:客户端通过服务名从注册中心获取可用实例列表。
2. 可用性与可靠性的设计
- 注册中心的高可用:
- 采用集群部署(如Eureka Server集群、Consul集群)避免单点故障。
- CAP权衡:
- CP型(如ZooKeeper):强一致性,适合金融等强一致性场景。
- AP型(如Eureka):高可用性,容忍短暂不一致,适合大多数互联网应用。
- 客户端缓存与容错:
- 客户端本地缓存服务列表,避免每次调用依赖注册中心。
- 心跳机制:服务实例定期发送心跳,注册中心剔除失效节点。
- 重试与降级:调用失败时自动切换实例或触发熔断。
3. 注册中心实现对比
工具 | 一致性模型 | 健康检查方式 | 适用场景 |
---|---|---|---|
Eureka | AP | 客户端心跳 | Spring Cloud生态 |
Consul | CP/AP可选 | 主动TCP/HTTP探测 | 多数据中心、服务网格 |
ZooKeeper | CP | 会话超时 | 强一致性需求场景 |
Nacos | AP/CP可选 | 客户端心跳/主动探测 | 多环境、动态配置管理 |
难点解析:
- 脑裂问题:在CP型系统中,网络分区可能导致多个Leader,需通过Quorum机制解决。
- 最终一致性延迟:AP型系统可能短暂返回旧数据,需客户端配合重试策略。
二、网关路由(API Gateway)
核心目标:作为系统入口,统一处理流量路由、协议转换、安全控制等。
1. 网关的核心职责
- 路由转发:
根据请求路径、Header等将流量分发到后端服务。
示例:/user/**
路由至用户服务,/order/**
路由至订单服务。 - 协议转换:
支持HTTP/HTTPS、gRPC、WebSocket等协议的接入与转换。 - 安全控制:
- 认证鉴权:集成OAuth2、JWT验证请求合法性。
- 限流熔断:根据QPS、并发数限制异常流量。
- 监控与日志:
收集请求指标(如延迟、错误率)并记录访问日志。
2. 网络I/O模型与性能优化
-
I/O模型对比:
模型 特点 适用场景 阻塞式I/O 简单但线程资源消耗大 低并发传统应用 非阻塞式I/O 轮询检查就绪状态,减少线程阻塞 中等并发场景 多路复用 单线程管理多个连接(如epoll) 高并发(Nginx) 异步I/O 回调机制,完全非阻塞 超高并发(Netty) -
Netty的应用:
基于事件驱动的异步框架,通过ChannelHandler
链处理请求,适合构建高性能网关(如Spring Cloud Gateway)。
3. BFF(Backend for Frontend)模式
- 核心思想:
为不同客户端(Web、移动端)定制专属网关,聚合多个后端服务接口。
示例:移动端BFF合并用户信息与订单列表接口,减少客户端请求次数。 - 优缺点:
- 优点:前端与后端解耦,快速响应客户端需求变化。
- 缺点:增加了网关层的复杂性,可能成为性能瓶颈。
三、客户端负载均衡(Client-Side Load Balancing)
核心目标:在客户端实现流量分发,提升系统扩展性与容错能力。
1. 负载均衡器类型
- 客户端负载均衡:
- 实现方式:客户端(如微服务应用)内置负载均衡逻辑(如Ribbon)。
- 优点:减少中心节点压力,避免单点故障。
- 缺点:客户端需维护服务列表,更新可能延迟。
- 服务端负载均衡:
- 实现方式:独立负载均衡器(如Nginx、HAProxy)。
- 优点:集中管理,易于监控和配置。
- 缺点:可能成为性能瓶颈,需高可用设计。
2. 负载均衡策略
-
常见策略:
策略 描述 适用场景 轮询(RR) 依次分配请求至每个实例 实例性能均匀场景 加权轮询 根据实例权重分配流量 异构硬件环境 随机 随机选择实例 简单快速,无状态服务 最少连接 选择当前连接数最少的实例 长连接服务(如数据库) 一致性哈希 相同请求参数路由到固定实例 需要局部会话保持 -
自适应策略:
- 响应时间加权:根据实例历史响应时间动态调整权重。
- 区域感知:优先选择同区域实例,减少跨区域延迟。
3. 地域与区域(Zone & Region)
- 多数据中心部署:
- Region:地理区域(如华东、华北),跨Region通信延迟高。
- Zone:同一Region内的故障隔离单元(如不同可用区)。
- 流量调度策略:
- 区域亲和性:优先访问同Zone实例,故障时切换至其他Zone。
- 权重分配:根据Zone容量分配流量,避免热点问题。
难点解析:
- 雪崩效应:某个Zone故障导致流量涌入其他Zone,需通过限流和降级防护。
- 延迟差异:跨Region调用可能引入数百毫秒延迟,需业务容忍或异步设计。
四、实践案例分析:Fenix’s Bookstore
- 服务发现实现:
- 使用Consul作为注册中心,服务启动时通过
/v1/agent/service/register
API注册。 - 客户端通过Consul DNS接口(如
user.service.consul
)查询实例列表。
- 使用Consul作为注册中心,服务启动时通过
- 网关路由配置:
- Spring Cloud Gateway定义Predicate(路径匹配)和Filter(限流、鉴权)。
routes:- id: user_routeuri: lb://user-servicepredicates:- Path=/api/user/**filters:- StripPrefix=2
- 客户端负载均衡:
- Ribbon配置加权策略,根据实例CPU使用率动态调整权重。
- 区域感知路由优先选择同一可用区的订单服务实例。
五、常见问题与解决方案
- 注册中心集群脑裂:
- 解决方案:使用Raft算法保证Leader选举,客户端重试多个节点。
- 网关性能瓶颈:
- 优化手段:启用异步非阻塞I/O(如WebFlux),缓存热点请求结果。
- 负载均衡不均:
- 排查方向:检查健康检查配置,确保失效实例及时剔除;调整权重算法。
六、进一步学习建议
- 开源项目实践:
- 搭建Consul集群,模拟服务注册与发现过程。
- 使用Kubernetes Service对比其内置服务发现机制。
- 论文与文档:
- 阅读Google Borg论文,了解大规模集群调度与负载均衡设计。
- 研究Istio的流量管理模型,理解服务网格中的负载均衡实现。
多选题
题目1:服务发现的核心价值体现在哪些方面?
A. 解决动态IP地址变化问题
B. 降低服务间耦合度
C. 提供统一的流量调度策略
D. 支持跨语言服务调用
题目2:关于注册中心高可用设计的正确描述是?
A. ZooKeeper使用Paxos协议保证数据一致性
B. Eureka采用AP模型优先保证可用性
C. Consul使用Raft协议实现强一致性
D. 所有注册中心必须依赖持久化存储
题目3:网关路由的关键职责包括哪些?
A. 协议转换(如gRPC转HTTP)
B. 分布式事务协调
C. 基于JWT的鉴权管理
D. 服务熔断降级策略实施
题目4:关于BFF(Backend for Frontend)网关的正确描述是?
A. 应由后端团队主导开发
B. 可针对不同客户端定制数据格式
C. 必须使用GraphQL实现
D. 会显著增加前端开发复杂度
题目5:客户端负载均衡与代理负载均衡的核心差异是?
A. 客户端负载均衡需要独立部署中间件
B. 代理负载均衡更易实现灰度发布
C. 客户端负载均衡减少网络跳数
D. 代理负载均衡支持更细粒度的路由规则
题目6:地域(Region)与区域(Zone)设计对系统的影响包括?
A. 优先保证同Zone内服务调用
B. 跨Region流量需考虑数据一致性
C. Zone划分必须基于物理机房位置
D. 可降低全局故障的影响范围
题目7:服务发现中"最终一致性"可能导致的问题有?
A. 新节点注册后立即被所有消费者发现
B. 服务下线后仍有短暂流量进入
C. 注册中心集群间数据同步延迟
D. 客户端缓存过期策略失效
题目8:网关路由选择NIO模型的优势包括?
A. 避免线程上下文切换开销
B. 更适合长连接场景
C. 减少内存碎片产生
D. 支持更高的并发连接数
题目9:客户端负载均衡器需要实现的关键能力是?
A. 服务实例健康检查
B. 动态权重调整算法
C. 全局流量监控大盘
D. 客户端请求重试策略
题目10:注册中心数据持久化的必要性体现在?
A. 防止服务实例元数据丢失
B. 支持跨集群服务发现
C. 避免服务重启后重新注册
D. 必须配合分布式事务使用
答案与解析
题目1答案:AB
解析:服务发现核心解决动态拓扑变化(A正确)和解耦服务地址硬编码(B正确)。流量调度属于负载均衡范畴(C错误),跨语言调用需通过RPC协议实现(D错误)。
题目2答案:BC
解析:ZooKeeper使用ZAB协议(A错误),Eureka为AP模型(B正确),Consul基于Raft(C正确)。部分注册中心(如Eureka)允许内存存储(D错误)。
题目3答案:AC
解析:网关负责协议转换(A正确)和鉴权(C正确)。事务协调由分布式事务框架处理(B错误),熔断降级属于服务治理层(D错误)。
题目4答案:BD
解析:BFF需前端团队主导(A错误),可定制数据(B正确)。GraphQL是可选方案(C错误),合理设计不会显著增加复杂度(D错误)。
题目5答案:CD
解析:客户端负载均衡减少中间跳数(C正确),代理支持更细粒度规则(D正确)。客户端无需中间件(A错误),灰度发布两者均可实现(B错误)。
题目6答案:ABD
解析:优先同Zone调用(A正确),跨Region需一致性考虑(B正确),Zone可逻辑划分(C错误),地域设计隔离故障(D正确)。
题目7答案:BC
解析:最终一致性导致同步延迟(C正确)和短暂脏流量(B正确)。节点注册需传播时间(A错误),缓存过期是独立机制(D错误)。
题目8答案:BD
解析:NIO通过事件驱动支持高并发(D正确),适合长连接(B正确)。线程切换由线程池管理(A错误),内存碎片与模型无关(C错误)。
题目9答案:ABD
解析:健康检查(A正确)、动态权重(B正确)、重试策略(D正确)是核心能力。监控大盘属于运维系统(C错误)。
题目10答案:AC
解析:持久化防止元数据丢失(A正确),服务重启需重新注册(C正确)。跨集群发现不依赖持久化(B错误),与分布式事务无关(D错误)。
相关文章:
第七章:从类库到服务的分布式基石_《凤凰架构:构建可靠的大型分布式系统》
第七章:从类库到服务的分布式基石 一、服务发现(Service Discovery) 核心目标:解决分布式系统中服务实例动态变化时如何定位可用服务的问题。 1. 服务发现的意义 动态环境挑战: 微服务架构中,服务实例的…...
spring-ai-alibaba第九章使用Milvus构建大模型RAG应用
1、pom文件 <dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>${spring-ai-alibaba.version}</version></dependency><dependency&g…...
手撕LLM(一):从源码出发,探索LLM推理全流程
2025年,大模型爆发元年,各种各样的大模型、框架、工具层出不穷,不断刷新人们应用大模型的门槛,短短10行代码,就能完成“加载模型加载数据集推理强化学习”的全流程训练,但其底层的运行机制也被高度抽象的接…...
讯飞语音听写(流式版)开发指南
语音交互大模型的功能越来越受到重视。讯飞语音听写(流式版)为开发者提供了一种高效、准确的语音识别解决方案。本文将基于 Home.vue、iat_xfyun.js 和 sparkChat.js 这三个文档,详细阐述讯飞语音听写(流式版)的开发逻…...
P3654 First Step (ファーストステップ)
题目描述 可是……这个篮球场,好像很久没有使用过的样子啊…… 里面堆满了学校的各种杂物呢…… 我们 Aqours 的成员要怎么在里面列队站下呢? 我们浦之星女子学院的篮球场是一个 R 行 C 列的矩阵,其中堆满了各种学校的杂物 (用 # 表示)&a…...
MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略
MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略 MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略一、引言二、为什么需要分库分表2.1 性能瓶颈2.2 存储瓶颈2.3 高并发压力 三、分库分表的方…...
SonarQube 配置SQL Server 数据库遇到的问题
之前本机跑了一套SonarQube的社区版,默认使用的是H2数据库,那么我把它练到我机器上的SQL Server数据库了,期间遇到以下两个问题,并在配置过程中解决掉,特将这个过程记录下来。 一、JDBC连接SQL Server问题 1. 问题出…...
23种设计模式-行为型模式-备忘录
文章目录 简介问题解决代码关键实现要点功能扩展方向 总结 简介 备忘录是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。 问题 假如你正在开发一款文字编辑器应用。你想加入撤销功能。你可以采用直接的方式来实现: 程序在执行任…...
IDEA/WebStrom操作之commit前批量清除console.log()与debugger
前言: 在前端开发过程中,往往需要频繁用到console.log()与debugger,来观察数据具体情况以及断点调试。在经历了水生火热的开发动作后,往往会残留一地console.log()和debugger,若开发者还得手动在多个文件中一个个去除…...
每日算法-250405
34. 在排序数组中查找元素的第一个和最后一个位置 题目 思路 本题的核心思路是二分查找。 解题过程 问题分析:在一个升序排列的数组中查找一个目标值 target 的起始和结束位置。这是一个典型的二分查找应用场景。核心转换:题目要求找到 target 的第一个…...
设计模式简述(四)模板方法模式
模板方法模式 描述基本定义使用 描述 当一系列业务的基本流程是相同的,对于不同的业务可以在各自子类实现 所谓模板方法指的就是父类中固定的那部分代码 其实这里的思想和前面设计原则中开闭原则的描述是一致的,父类中的模板代码就是稳定的部分&#x…...
论文修改时有哪些需要注意的问题?
论文修改是学术写作中不可或缺的环节,直接影响成果的专业性和说服力。许多作者因忽略细节或急于定稿,导致论文质量大打折扣。那么,如何修改才能提升论文的严谨性与可读性呢? 一、逻辑结构 论文修改时,先从头到尾通读…...
JAVA阻塞队列
目录 一、什么是阻塞队列?特点是什么? 二、阻塞队列的两种创建方式: 1、使用 ArrayBlockingQueue<>( ) : 2、使用 LinkedBlockingQueue<>( ) : 三、阻塞队列方法的使用: 阻塞队列关键的两个方法&…...
tomcat与spring-web
文章目录 SpringServletContainerInitializerWebApplicationInitializerWebApplicationInitializer接口AbstractContextLoaderInitializer抽象类AbstractDispatcherServletInitializer抽象类AbstractAnnotationConfigDispatcherServletInitializer抽象类 WebApplicationContext…...
将电脑控制手机编写为MCP server
文章目录 电脑控制手机后,截屏代码复习MCP server构建修改MCP的config文件测试效果困惑电脑控制手机后,截屏代码复习 def capture_window(hwnd: int, filename: str = None) -> dict:""&...
[ctfshow web入门]burpsuite的下载与使用
下载 吾爱破解网站工具区下载burpsuite https://www.52pojie.cn/thread-1544866-1-1.html 本博客仅转载下载链接,下载后请按照说明进行学习使用 打开 配置 burpsuite配置 burpsuite代理设置添加127.0.0.1:8080 浏览器配置 如果是谷歌浏览器,打开win…...
文章记单词 | 第25篇(六级)
一,单词释义 mathematical:形容词,意为 “数学的;数学上的;运算能力强的;关于数学的”trigger:名词,意为 “(枪的)扳机;(炸弹的&…...
讯飞语音合成(流式版)语音专业版高质量的分析
一、引言 在现代的 Web 应用开发中,语音合成技术为用户提供了更加便捷和人性化的交互体验。讯飞语音合成(流式版)以其高效、稳定的性能,成为了众多开发者的首选。本文将详细介绍在 Home.vue 文件中实现讯飞语音合成(流…...
【MediaPlayer】基于libvlc+awtk的媒体播放器
基于libvlcawtk的媒体播放器 libvlc下载地址 awtk下载地址 代码实现libvlc相关逻辑接口UI媒体接口实例化媒体播放器注意事项 libvlc 下载地址 可以到https://download.videolan.org/pub/videolan/vlc/去下载一个vlc版本,下载后其实是vlc的windows客户端࿰…...
复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect
这款模拟复古未来主义显示器效果直接取材于 90 年代赛博朋克电影中的黑客巢穴,将粗糙的屏幕辉光和像素化的魅力强势回归。它精准地模仿了老式阴极射线管显示器,能将任何图像变成故障频出的监控画面或高风险的指挥中心用户界面。和……在一起 2 个完全可编…...
Kafka 如何保证消息有序性?
Kafka 保证消息顺序性,是基于 Partition(分区)级别的顺序 来实现的。下面我们详细拆解一下: ✅ 同一个 Partition 内,消息是严格有序的 Kafka 在 同一个分区(Partition)内,消息是按…...
【积木画】——第十三届蓝桥杯(2022)T7思路解析
题目描述 关键词 递推、dp 思路 显然这是一道递推题。 但是为什么我还要写在这呢?因为我虽然看了题解但是还是没想明白,综合了下面两篇 参考文献我才初步理解这题的精髓。所以还是自己写一遍为好。 我们把最终结果记为F(n)。 情况1 直接以一个竖着…...
Android studio xml布局预览中 Automotive和Autotive Distant Display的区别
在 Android Studio 中,Configure Hardware Profile 设置中的 Device Type 选项有两个不同的设置:Android Automotive 和 Android Automotive Distant Display,它们的含义和用途如下: 1. Android Automotive 含义:这个…...
第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》
第十三章 持久化存储 一、Kubernetes存储设计核心概念 (1)存储抽象模型 PersistentVolume (PV):集群级别的存储资源抽象(如NFS卷/云存储盘)PersistentVolumeClaim (PVC):用户对存储资源的声明请求&#…...
Nginx 基础使用(2025)
一、Nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相…...
Docker基础1
本篇文章我将从系统的知识体系讲解docker的由来和在linux中的安装下载 随后的文章会介绍下载镜像、启动新容器、登录新容器 如需转载,标记出处 docker的出现就是为了节省资本和服务器资源 当企业需要一个新的应用程序时,需要为它买台全新的服务器。这样…...
【奇点时刻】GPT4o新图像生成模型底层原理深度洞察报告
个人最近一直在关注openai的新图像生成特性,以下内容基于现阶段社区及研究者们对 GPT-4O 图像生成功能的公开测试、逆向分析与技术推测综合而成,OpenAI 并未正式发布完整的技术报告,因此本文为非官方推断总结。但从多方信息与技术背景出发&am…...
Java的Selenium的特殊元素操作与定位之模态框
Modal Dialogue Box,又叫做模式对话框,是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。如单击【确定】或【取消】按钮等将该对话框关闭。 alert(警告) //访问本地的HTML文件 chromeDr…...
回归预测 | Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测
回归预测 | Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-LSTM多输入单输出回归预测…...
Python菜鸟教程(小程序)
目录 一.简易计算器 二.学生成绩分级 三.密码设置 四.作业选择 点赞收藏,评论支持 一.简易计算器 print(-------使用的运算符-------\n) print(1.加号) print(2.减号) print(3.乘号) print(4.除号) Aint(input(请输入第一个数: )) Bint(input(请输入第二个数: )) Fi…...
类的(多态性、虚函数)基础练习
练习1:(简单) #include <iostream> using namespace std; class Vehicle { public: virtual void run() const0; }; class Car: public Vehicle { public: void run() const { cout << "run a car. "<<…...
特殊的质数肋骨--dfs+isp
1.dfs全排列组数,an记得还原 2.如果范围确定且只比较质数,isp比线性筛快,主要这个范围太大了 https://www.luogu.com.cn/problem/P1218 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typed…...
智能体开发实战指南:提示词设计、开发框架与工作流详解
在大语言模型(LLM)驱动的智能体(Agent)快速发展的今天,构建一个实用、智能的Agent已不再遥不可及。无论你是开发法律助手、租房合同分析器,还是通用办公自动化助手,理解提示词工程(P…...
jetson orin nano学习(torch+OpenCV+yolov5+)
一:入门第一件事:跟着商家教程配置哈哈 指令:nvidia-smi -h 帮助命令 sudo jtop --查看nvidia的gpu状态 Tip:教程下载的pytorth,cuda,cudnn版本不一定是你项目符合的,要提前想好 1.2 安装虚拟环境包(要安…...
client-go如何监听自定义资源
如何使用 client-go 监听自定义资源 在 Kubernetes 中使用 client-go 监听自定义资源(Custom Resource,简称 CR)需要借助 Dynamic Client 或 Custom Informer,因为 client-go 的标准 Clientset 只支持内置资源(如 Pod…...
【51单片机】3-3【定时器/计数器/中断】超声波测距模块测距
1.硬件 51最小系统超声波测距模块 2.软件 #include "reg52.h"//距离小于10cm,D5亮,D6灭,反之相反现象sbit D5 P3^7;//根据原理图(电路图),设备变量led1指向P3组IO口的第7口 sbit D6 P3^6;//根据原理图&…...
C语言求3到100之间的素数
一、代码展示 二、运行结果 三、感悟思考 注意: 这个题思路他是一个试除法的一个思路 先进入一个for循环 遍历3到100之间的数字 第二个for循环则是 判断他不是素数 那么就直接退出 这里用break 是素数就打印出来 在第一个for循环内 第二个for循环外...
金仓数据库KCM认证考试介绍【2025年4月更新】
KCM(金仓认证大师)认证是金仓KES数据库的顶级认证,学员需通过前置KCA、KCP认证才能考KCM认证。 KCM培训考试一般1-2个月一次,KCM报名费原价为1.8万,当前优惠价格是1万(趋势是:费用越来越高&…...
leetcode每日一题:替换子串得到平衡字符串
引言 今天的每日一题原题是1863. 找出所有子集的异或总和再求和,比较水,直接对于集合中的每一个元素,都有取或者不取2种情况,直接递归进去求和即可。更换成前几天遇到的更有意思的一题来写这个每日一题。 题目 有一个只含有 Q,…...
2025年数字化社会与智能计算国际学术会议 (ICDSIC 2025)
基本信息 官网:www.icdsic.net 时间:2025年4月18-20日 地点:中国-深圳 主题 数字化社会 智能计算 数字化制造、经济 数字化政务、转型 数字化农业、水利、管理 数字化医疗、学习、社区 数字基建、通信、交通 数字…...
BN测试和训练时有什么不同, 在测试时怎么使用?
我们来彻底搞懂 Batch Normalization(BN) 在训练和测试阶段的区别,以及 测试时怎么用。 🧠 一句话总结: 训练时:使用 当前 mini-batch 的均值和方差 测试时:使用 整个训练集估计的“滑动平均均值…...
为什么卷积神经网络适用于图像和视频?
我们常听说“卷积神经网络(CNN)擅长图像和视频”,但其实 CNN 的核心本质远不止图像领域。我们先搞懂它为啥适合图像/视频。 🧠CNN 为什么适用于图像和视频? 主要因为 图像/视频具有空间局部性和结构平移性,…...
python爬虫:DrissionPage实战教程
如果本文章看不懂可以看看上一篇文章,加强自己的基础:爬虫自动化工具:DrissionPage-CSDN博客 案例解析: 前提:我们以ChromiumPage为主,写代码工具使用Pycharm(python环境3.9-3.10) …...
【Python爬虫高级技巧】BeautifulSoup高级教程:数据抓取、性能调优、反爬策略,全方位提升爬虫技能!
大家好,我是唐叔!上期我们聊了 BeautifulSoup的基础用法 ,今天带来进阶篇。我将分享爬虫老司机总结的BeautifulSoup高阶技巧,以及那些官方文档里不会告诉你的实战经验! 文章目录 一、BeautifulSoup性能优化技巧1. 解析…...
【动手学深度学习】卷积神经网络(CNN)入门
【动手学深度学习】卷积神经网络(CNN)入门 1,卷积神经网络简介2,卷积层2.1,互相关运算原理2.2,互相关运算实现2.3,实现卷积层 3,卷积层的简单应用:边缘检测3.1࿰…...
IPSG 功能协议
IPSG(IP Source Guard)即 IP 源保护,是一种基于 IP 地址和 MAC 地址绑定的安全功能,用于防止 IP 地址欺骗和非法的 IP 地址访问。以下是配置 IPSG 功能的一般步骤: 基于端口的 IPSG 配置 进入接口配置模式࿱…...
19.go日志包log
核心功能与接口 基础日志输出 Print 系列:支持 Print()、Println()、Printf(),输出日志不中断程序。 log.Print("常规日志") // 输出: 2025/03/18 14:47:13 常规日志 log.Printf("格式化: %s", "数据") Fatal…...
横扫SQL面试——TopN问题
横扫SQL面试 电商平台的"销量Top10商品"🛍️,内容社区的"热度Top5文章“”🔥,还是金融领域的"交易额Top3客户"💰——TopN问题无处不在! 无论是日常业务分析📊&#x…...
高级:微服务架构面试题全攻略
一、引言 在现代软件开发中,微服务架构被广泛应用于构建复杂、可扩展的应用程序。面试官通过相关问题,考察候选人对微服务架构的理解、拆分原则的掌握、服务治理的能力以及API网关的运用等。本文将深入剖析微服务架构相关的面试题,结合实际开…...
使用MATIO库读取Matlab数据文件中的cell结构数据
使用MATIO库读取Matlab数据文件中的cell结构数据 MATIO是一个用于读写Matlab数据文件(.mat)的C/C库。下面我将展示如何使用MATIO库来读取Matlab文件中的cell结构数据。 示例程序 #include <stdio.h> #include <stdlib.h> #include <matio.h>int main(int …...