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

第二章:访问远程服务_《凤凰架构:构建可靠的大型分布式系统》

第二章 访问远程服务

2.1 远程服务调用(RPC)
2.1.1 进程间通信机制
  • 核心方式
    • 管道(Pipe):单向通信,用于父子进程
    • 信号(Signal):异步事件通知,不传递数据
    • 套接字(Socket):跨网络通信基础,支持TCP/UDP
    • 共享内存:高效但需同步机制,适用于高频数据交换
    • 消息队列:异步通信,解耦生产消费方
2.1.2 通信成本关键要素
  • 网络延迟:物理距离、路由跳数、协议栈处理时间
  • 序列化开销:JSON/XML文本协议 vs ProtoBuf/Thrift二进制协议
  • 资源消耗:连接池管理、线程模型(阻塞IO vs NIO)
  • 典型延迟对比
    • 本地方法调用:纳秒级
    • 同机房RPC:0.1~1ms
    • 跨地域RPC:10~100ms
2.1.3 三大核心问题
  1. 数据表示(序列化)

    • 类型安全:强类型语言需要严格类型映射
    • 版本兼容:字段增删时的前向/后向兼容策略
    • 性能指标:序列化速度、数据压缩率、内存占用
    • 典型协议:Protobuf(Google)、Thrift(Facebook)、Avro(Hadoop)
  2. 传输协议

    • TCP长连接:复用连接降低握手开销
    • HTTP/1.1:文本协议,支持持久连接
    • HTTP/2:多路复用,头部压缩
    • QUIC:基于UDP的可靠传输,0-RTT握手
  3. 服务定位

    • 接口描述语言(IDL):定义服务契约
      • .proto(gRPC)
      • .thrift(Apache Thrift)
    • 服务发现机制:
      • 客户端直连(硬编码IP)
      • 注册中心(Zookeeper、Consul、Nacos)
      • DNS服务发现
2.1.4 RPC统一化尝试
  • CORBA(公共对象请求代理架构)

    • ORB核心组件实现跨语言调用
    • IDL编译器生成存根代码
    • 失败原因:复杂规范、厂商实现差异、性能问题
  • Web Service体系

    • SOAP协议:XML格式信封
    • WSDL服务描述
    • UDDI服务注册
    • 问题:XML解析开销大,协议臃肿
2.1.5 RPC框架分化
  • 主流实现对比

    框架协议序列化传输特点
    gRPCHTTP/2ProtobufTCP多语言支持,流式通信
    Thrift自定义二进制ThriftTCP跨语言,代码生成
    Dubbo自定义HessianNetty阿里生态,服务治理
    Spring CloudHTTP RESTJSONHTTP声明式接口,生态整合
  • 性能关键点

    • 二进制协议相比文本协议节省30%-50%带宽
    • 连接复用减少TCP握手开销
    • 零拷贝技术降低内存复制次数
2.2 REST设计风格
2.2.1 REST本质理解
  • 架构约束

    1. 客户端-服务器分离:前后端独立演进
    2. 无状态:请求包含完整上下文
    3. 可缓存:明确缓存声明(Cache-Control)
    4. 统一接口
      • 资源标识(URI)
      • 表述操作(HTTP方法)
      • 自描述消息(Content-Type)
      • 超媒体驱动(HATEOAS)
    5. 分层系统:代理、网关透明接入
    6. 按需代码:JavaScript扩展客户端
  • 常见误区

    • ≠ HTTP API:REST是架构风格,HTTP是实现载体
    • ≠ CRUD映射:复杂操作可通过资源状态变更表达
2.2.2 RESTful设计实践
  • 资源设计原则

    • 名词化URI:/users/{id}/orders
    • 避免动词:用PUT /orders/{id}/cancel代替POST /cancelOrder
    • 版本控制:URI路径(/v1/users) vs 请求头(Accept-Version)
  • HTTP方法语义

    方法幂等性安全典型应用
    GET获取资源
    POST创建资源或触发操作
    PUT全量更新
    PATCH部分更新
    DELETE删除资源
  • 超媒体控制(HATEOAS)

    {"id": 123,"status": "pending","_links": {"self": { "href": "/orders/123" },"cancel": { "href": "/orders/123", "method": "DELETE" }}
    }
    
2.2.3 Richardson成熟度模型
  • Level 0:使用HTTP作为传输隧道(SOAP over HTTP)
  • Level 1:资源分离(不同端点对应不同操作)
  • Level 2:HTTP动词+状态码规范使用
  • Level 3:超媒体驱动,实现HATEOAS
2.2.4 REST局限性
  • 复杂操作表达
    • 批处理需设计特殊资源(/batch-operations)
    • 事务性操作难以用单一资源表达
  • 性能瓶颈
    • 多次请求问题(n+1查询)
    • 无二进制协议支持(可通过Protocol Buffers over HTTP缓解)
  • 版本管理挑战
    • URI版本导致客户端硬升级
    • 媒体类型协商(Content Negotiation)复杂度高
关键对比:RPC vs REST
维度RPCREST
通信范式动作导向(调用方法)资源导向(操作资源状态)
协议绑定强绑定(特定协议)弱绑定(HTTP通用协议)
服务发现需要IDL和代码生成通过超媒体动态发现
性能高(二进制协议)中(文本协议)
适用场景内部服务间高效通信公开API、跨组织集成
变更影响接口变更需重新生成代码可通过超媒体减少客户端修改
现代架构融合趋势
  • gRPC-Web:浏览器端支持gRPC协议
  • GraphQL over HTTP:声明式查询与REST端点结合
  • RSocket:双向流式通信,支持RPC模式
  • Service Mesh:在基础设施层统一处理RPC通信(如Istio的Envoy代理)

多选题


题目1:关于远程服务调用(RPC)的三个基本问题,以下哪些描述正确?
A. 如何表示数据(序列化协议)
B. 如何传递数据(传输协议)
C. 如何确定调用哪个方法(服务发现与路由)
D. 如何保证调用的高性能(负载均衡)


题目2:REST设计风格的核心约束条件包括哪些?
A. 客户端-服务器架构
B. 无状态通信
C. 统一接口
D. 必须使用JSON格式


题目3:RMM(Richardson成熟度模型)的四个层级包括哪些?
A. Level 0:基于HTTP的简单RPC
B. Level 1:资源化接口
C. Level 2:使用HTTP动词和状态码
D. Level 3:超媒体驱动(HATEOAS)


题目4:以下哪些是RPC与REST的典型区别?
A. RPC基于方法调用,REST基于资源操作
B. RPC通常使用二进制协议,REST使用文本协议(如HTTP)
C. RPC强调透明性,REST强调显式通信约束
D. RPC天然支持缓存,REST不支持缓存


题目5:关于“透明通信”的挑战,以下哪些描述正确?
A. 网络延迟和分区容错会影响透明性
B. 本地调用和远程调用的错误处理逻辑可以完全一致
C. 序列化/反序列化可能引入性能瓶颈
D. 服务发现与负载均衡是实现透明通信的必要条件


题目6:RESTful系统的“统一接口”原则包含哪些具体约束?
A. 资源的唯一标识(URI)
B. 通过标准HTTP方法操作资源
C. 自描述消息(如Content-Type)
D. 必须使用HATEOAS实现超媒体驱动


题目7:以下哪些是RPC分裂的原因?
A. 不同厂商对性能和协议的优化需求不同
B. 语言和框架的生态系统差异
C. REST设计风格的普及取代了RPC
D. 分布式事务的复杂性


题目8:关于HTTP/2对REST的影响,以下哪些描述正确?
A. 多路复用技术降低了HTTP/1.1的队头阻塞问题
B. 头部压缩减少了网络传输开销
C. HTTP/2的二进制协议更适合REST的文本交互
D. HTTP/2的流式通信与REST的无状态原则冲突


题目9:REST的不足与争议包括哪些?
A. 缺乏强类型接口定义,导致开发效率低
B. 超媒体驱动(HATEOAS)在实际应用中难以实现
C. 无状态约束无法满足复杂业务场景的会话管理需求
D. 对性能敏感的场景(如高频交易)不适用


题目10:以下哪些是设计分布式系统时需权衡的通信成本?
A. 网络延迟与带宽限制
B. 序列化/反序列化的计算开销
C. 服务发现与路由的复杂度
D. 代码的可维护性和团队协作成本


答案与解析


题目1答案:ABC
解析

  • RPC的三个基本问题是:数据表示(序列化)、数据传输(协议)、方法确定(服务定位)。
  • D选项“高性能”是优化目标,但并非基本问题。

题目2答案:ABC
解析

  • REST的六大核心约束包括:客户端-服务器、无状态、统一接口、分层系统、缓存、按需代码(Code-On-Demand)。
  • D选项“必须使用JSON”错误,REST支持多种数据格式(如XML、JSON等)。

题目3答案:ABCD
解析

  • RMM的四个层级为:
    Level 0(简单RPC)、Level 1(资源化)、Level 2(HTTP动词+状态码)、Level 3(HATEOAS)。

题目4答案:ABC
解析

  • D错误,REST通过HTTP缓存机制(如Cache-Control)支持缓存,而RPC通常不原生支持缓存。

题目5答案:ACD
解析

  • B错误,远程调用需处理网络超时、重试等特有错误,与本地调用不同。

题目6答案:ABC
解析

  • D是Level 3的约束,属于RMM的扩展,非“统一接口”原则本身。

题目7答案:AB
解析

  • C错误,REST并未取代RPC;D是分布式系统的通用问题,非RPC分裂的直接原因。

题目8答案:AB
解析

  • C错误,HTTP/2的二进制协议与REST的文本交互无直接关联;D错误,HTTP/2的流式通信与无状态原则不冲突。

题目9答案:ABCD
解析

  • 所有选项均为REST的典型争议点。

题目10答案:ABCD
解析

  • 所有选项均属于通信成本范畴(网络、计算、系统复杂度、开发成本)。

相关文章:

第二章:访问远程服务_《凤凰架构:构建可靠的大型分布式系统》

第二章 访问远程服务 2.1 远程服务调用(RPC) 2.1.1 进程间通信机制 核心方式: 管道(Pipe):单向通信,用于父子进程信号(Signal):异步事件通知,不…...

一键自动备份:数据安全的双重保障

随着数字化时代的到来,数据已成为企业和个人不可或缺的核心资产。在享受数据带来的便捷与高效的同时,数据丢失的风险也随之增加。因此,备份文件的重要性不言而喻。本文将深入探讨备份文件的重要性,并介绍两种实用的自动备份方法&a…...

C++11之std::is_convertible

目录 1.简介 2.实现原理 3.使用场景 4.总结 1.简介 std::is_convertible 是 C 标准库 <type_traits> 头文件中的一个类型特性&#xff08;type trait&#xff09;&#xff0c;它用于在编译时检查一个类型是否可以隐式转换为另一个类型。下面的原型&#xff1a; temp…...

从零开始:在Qt中使用OpenGL绘制指南

从零开始&#xff1a;在Qt中使用OpenGL绘制指南 本文只介绍基本的 QOpenGLWidget 和 QOpenGLFunctions 的使用&#xff0c;想要学习 OpenGL 的朋友&#xff0c;建议访问经典 OpenGL 学习网站&#xff1a;LearnOpenGL CN 本篇文章&#xff0c;我们将以绘制一个经典的三角形为例&…...

我的购物车设计思考:从个人项目到生产实战思考的蜕变

一、代码初体验&#xff1a;我踩过的那些坑 还记得大二做课程设计时&#xff0c;我写的购物车直接用ArrayList存商品&#xff0c;结果改数量时遍历半天找商品。现在看你这个HashMap实现&#xff0c;确实清爽很多&#xff0c;但有几点让我想起当年惨痛经历&#xff1a; 1. 线程…...

【算法实践】算法面试常见问题——数组的波浪排序

问题描述 给定一个无序整数数组&#xff0c;将其排列成波浪形数组。若数组 arr[0..n-1] 满足以下条件&#xff0c;则称为波浪形&#xff1a; arr[0] > arr[1] < arr[2] > arr[3] < arr[4] > ... 或 arr[0] < arr[1] > arr[2] < arr[3] > arr[4] &l…...

【大模型深度学习】如何估算大模型需要的显存

一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中&#xff0c;参数量的单位通常以“百万”&#xff08;M&#xff09;或“亿”&#xff08;B&#xff0c;也常说十亿&#xff09;来表示。 百万&#xff08;M&#xff09;&#xff1a;表示…...

[论文阅读]PMC-LLaMA: Towards Building Open-source Language Models for Medicine

PMC-LLaMA&#xff1a;构建医学开源语言模型 摘要 最近&#xff0c;大语言模型在自然语言理解方面展现了非凡的能力。尽管在日常交流和问答场景下表现很好&#xff0c;但是由于缺乏特定领域的知识&#xff0c;这些模型在需要精确度的领域经常表现不佳&#xff0c;例如医学应用…...

`use_tempaddr` 和 `temp_valid_lft ` 和 `temp_prefered_lft ` 笔记250405

use_tempaddr 和 temp_valid_lft 和 temp_prefered_lft 笔记250405 以下是 Linux 系统中与 IPv6 临时隐私地址相关的三个关键参数 use_tempaddr、temp_valid_lft 和 temp_prefered_lft 的详细说明及协作关系&#xff1a; &#x1f4dc; 参数定义与功能 参数作用默认值依赖关…...

如何设置 JVM 内存参数(-Xms、-Xmx、-Xss 等)?

JVM 内存参数用于控制 Java 虚拟机使用的内存大小和行为。以下是一些常用的 JVM 内存参数及其设置方法&#xff1a; 1. 堆内存 (Heap Memory): -Xms<size>: 设置 JVM 初始堆大小 (initial heap size)。 例如&#xff1a;-Xms2g (初始堆大小为 2GB)默认值&#xff1a;物…...

【MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南】

MATLAB TCP/IP客户端与NetAssist上位机双向通信实战指南 一、前言 在工业控制和数据采集领域&#xff0c;TCP/IP通信是最常用的网络通信协议之一。MATLAB作为强大的科学计算软件&#xff0c;与各种上位机软件(如NetAssist)进行通信可以实现数据采集、设备控制和实时监控等功能…...

联合、枚举、类型别名

数据类型&#xff1a; 已学--整数、实数、字符、字符串、数组、指针、结构待学--向量&#xff08;vector&#xff09;类型&#xff1a;优于数组非主流的类型--联合&#xff08;union&#xff09;、枚举&#xff08;enum&#xff09; 一、联合 联合类似于结构&#xff0c;可以容…...

Array 和 ArrayList 有何区别?什么时候更适合用 Array?

面试官提问&#xff1a; 你能简要说明 Array 和 ArrayList 之间的主要区别吗&#xff1f;在什么场景下更适合使用 Array&#xff1f; 标准回答&#xff1a; 在 Java 中&#xff0c;Array&#xff08;数组&#xff09;和 ArrayList&#xff08;动态数组&#xff09;都可以用于存…...

对状态模式的理解

对状态模式的理解 一、场景二、不采用状态模式1、代码2、缺点 三、采用状态模式1、代码1.1 状态类1.2 上下文&#xff08;这里指&#xff1a;媒体播放器&#xff09;1.3 客户端 2、优点 一、场景 同一个东西&#xff08;例如&#xff1a;媒体播放器&#xff09;&#xff0c;有一…...

【学Rust写CAD】31 muldiv255函数(muldiv255.rs)

源码 // Calculates floor(a*b/255 0.5) #[inline] pub fn muldiv255(a: u32, b: u32) -> u32 {// The deriviation for this formula can be// found in "Three Wrongs Make a Right" by Jim Blinn.let tmp a * b 128;(tmp (tmp >> 8)) >> 8 }代…...

使用VSCode编写C#程序

目录 一、环境搭建&#xff1a;构建高效开发基础1. 安装VSCode2. 配置.NET SDK3. 安装核心扩展 二、项目开发全流程1. 创建项目2. 代码编辑技巧3. 调试配置4. 高级调试技巧5. 编译与运行 三、常见问题解决指南1. 项目加载失败2. IntelliSense失效3. 代码格式化4. 典型编译错误&…...

chromadb

chromadb是一个轻量化的向量数据库&#xff0c;可以和llama-index等RAG框架使用。底层基于sqllite。 Getting Started - Chroma Docs 1、安装 $pip install chromadb pip install chromadb-client --在CS模式下&#xff0c;如果机器A上只需要安装客户端 2、可以使用客户端…...

第十章: 可观测性_《凤凰架构:构建可靠的大型分布式系统》

第十章: 可观测性 可观测性是现代分布式系统监控和故障排查的核心能力。本章从事件日志、链路追踪、聚合度量三个维度构建完整的可观测性体系&#xff0c;以下是各部分的重点解析与实践要点&#xff1a; 一、事件日志&#xff08;Event Logging&#xff09; 1. 核心目标 全链…...

vscode和cursor对ubuntu22.04的remote ssh和X-Windows的无密码登录

这里写自定义目录标题 写在前面需求的描述问题的引出 昨天已使能自动登录上午我的改变UBUNTU 22.04关闭密码规则一&#xff1a;修改 /etc/pam.d/common-password 文件二&#xff1a;修改 /etc/security/pwquality.conf 文件方法三&#xff1a;禁用 pam_pwquality.so 模块 vscod…...

Mlivus Cloud SDK v2的革新:性能优化与实战解析

作为大禹智库的向量数据库高级研究员王帅旭,我在过去30多年的AI应用实战中见证了向量数据库技术的演进历程。今天,我将从专业角度深入剖析Mlivus Cloud SDK v2的架构革新,特别是针对性能瓶颈问题的突破性解决方案。本文不仅会详细解析技术原理,还将提供可操作的优化建议,帮…...

stl_list的模拟实现

文章目录 stl_list的模拟实现迭代器的介绍以及分类stl_list的基本接口介绍stl_list的模拟实现结点类迭代器类基本迭代器操作 链表类链表基本操作 结语 我们今天又见面啦&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路 作者&#xff1a;٩( ‘ω’ …...

【蓝桥杯】十五届省赛B组c++

目录 前言 握手问题 分析 排列组合写法 枚举 小球反弹 分析 代码 好数 分析 代码 R 格式 分析 代码 宝石组合 分析 代码 数字接龙 分析 代码 拔河 分析 代码 总结 前言 主播这两天做了一套蓝桥杯的省赛题目&#xff08;切实感受到了自己有多菜&#x…...

变分自编码器(VAE)概念解析与用法实例:根据原图像生成新图像

目录 1. 前言 2. VAE原理 2.1 什么是VAE&#xff1f; 2.2 编码器&#xff08;Encoder&#xff09; 2.3 重参数化技巧&#xff08;Reparameterization Trick&#xff09; 2.4 解码器&#xff08;Decoder&#xff09; 2.5 损失函数 3. Pytorch实现&#xff1a;根据原图像…...

AI随身翻译设备:从翻译工具到智能生活伴侣

文章目录 AI随身翻译设备的核心功能1. 实时翻译2. 翻译策略3. 翻译流程4. 输出格式 二、AI随身翻译设备的扩展功能1. 语言学习助手2. 旅行助手3. 商务助手4. 教育助手5. 健康助手6. 社交助手7. 技术助手8. 生活助手9. 娱乐助手10. 应急助手 三、总结四、未来发展趋势&#xff0…...

基于大模型的重症肌无力的全周期手术管理技术方案

目录 技术方案文档1. 数据预处理模块2. 多任务预测模型架构3. 动态风险预测引擎4. 手术方案优化系统5. 技术验证模块6. 系统集成架构7. 核心算法清单8. 关键流程图详述实施路线图技术方案文档 1. 数据预处理模块 流程图 [输入原始数据] → [联邦学习节点数据对齐] → [多模态特…...

Linux常用命令详解:从基础到进阶

目录 一、引言 二、文件处理相关命令 &#xff08;一&#xff09;grep指令 &#xff08;二&#xff09;zip/unzip指令 ​编辑 &#xff08;三&#xff09;tar指令 &#xff08;四&#xff09;find指令 三、系统管理相关命令 &#xff08;一&#xff09;shutdown指…...

【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具

【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具 资源简介 DeepSeek谷歌版1.1.5是目前全球领先的免费AI助手&#xff0c;性能超越国内主流AI产品&#xff0c;提供类似GPT-4的智能体验。 版本信息 最新版本&#xff1a;1.1.5&#xff08;2024最新版&#xff09;应用…...

JWT认证服务

JSON Web Token&#xff08;JWT&#xff09;是一种用于在网络应用间安全地传递信息的紧凑、自包含的方式。以下是关于 JWT 认证服务器更详细的介绍&#xff0c;包括其意义、作用、工作原理、组成部分、时效性相关内容、搭建条件以及代码案例。 JWT 的意义与作用 意义&#xf…...

Raft算法

Raft算法用于保证分布式环境下多节点数据的一致性。 原理 Raft算法的主要思想是一个 选主(leader selection) 的算法思想&#xff0c;集群种每个节点都有可能成为三种角色。 三种角色 leader 对客户端通信的入口&#xff0c;对内数据同步的发起者&#xff0c;一个集群通常只…...

Kotlin 类委托深入解析:以 MMKV 为例看委托机制在 Android 中的巧妙应用

Kotlin 中的类委托&#xff08;class delegation&#xff09;是一个非常实用的特性&#xff0c;它允许我们将接口的实现交给另一个对象&#xff0c;从而简化代码&#xff0c;提升复用性和灵活性。本文将通过简单的 Demo 介绍类委托的基本用法&#xff0c;并以 Android 中的 MMK…...

2025年渗透测试面试题总结-某一线实验室实习扩展(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 某一线实验室实习扩展 一、流量分析深度实践 1. FTP反弹定时确认包流量检测 1.1 攻击原理与特征 1.…...

2025大唐杯仿真3——移动性管理

仅仅是1-2之间的信息交互...

云原生与微服务的关系

云原生&#xff08;Cloud Native&#xff09;和微服务&#xff08;Microservices&#xff09;是现代软件开发和部署中密切相关的两个概念&#xff0c;它们共同推动了应用程序的架构设计、开发模式和运维方式的变革。以下是两者的关系及核心要点&#xff1a; 定义与核心概念 云原…...

【百日精通JAVA | SQL篇 | 第三篇】 MYSQL增删改查

SQL得最核心就是增删改查 一个后端开发&#xff0c;在工作中&#xff0c;最常见的场景就是CRUD。 插入数据 insert into student values (1,zhangsan); 指定列插入数据 同时多个列明之间使用逗号&#xff0c;来分割 insert into student (name) values (zhaoliu); 这个黑框…...

【leetcode】记录与查找:哈希表的题型分析

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣的几篇题解的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…...

如何在 Windows 10 上安装 PyGame

PyGame 是 Python 编程语言中的一组跨平台模块&#xff0c;这意味着您可以在任何操作系统上安装它&#xff0c;这篇文章告诉您如何在 Windows 10 上安装 PyGame。 如何在 Windows 10 上安装 PyGame&#xff1f; PyGame 依赖于 Python&#xff0c;这意味着您必须在安装 PyGame …...

LVGL修改标签文本,GUI Guider的ui不生效

一.问题背景 笔者最近在学习LVGL框架&#xff0c;同时准备使用该框架作为课程设计的一部分&#xff0c;于是需要从静态显示进阶到动态显示以及事件交互。一方面由于笔者是初次接触LVGL&#xff0c;对它并不熟悉&#xff0c;另一方面由于其网络上的针对性具体资料太少&a…...

制造装备物联及生产管理ERP系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装制造装备物联及生产管理ERP系统软件来发挥其高效地信息处理…...

PowerPhotos:拯救你的Mac照片库,告别苹果原生应用的局限

如果你用Mac管理照片&#xff0c;大概率被苹果原生「照片」应用折磨过——无法真正并行操作多个图库。每次切换图库都要关闭重启&#xff0c;想合并照片得手动导出导入&#xff0c;重复文件更是无处可逃…… 直到我发现了 PowerPhotos&#xff0c;这款专为Mac设计的照片库管理…...

软件工程面试题(三十)

将ISO8859-1字符串转成GB2312编码&#xff0c;语句为&#xff1f; String snew String(text.getBytes(“iso8859-1”),”gb2312”). 说出你用过的J2EE标准的WEB框架和他们之间的比较&#xff1f; 答&#xff1a;用过的J2EE标准主要有&#xff1a;JSP&Servlet、JDBC、JNDI…...

Java面试黄金宝典35

1. A 和 B 两个表做等值连接 (Inner join) 怎么优化 索引优化&#xff1a;在连接字段上创建索引&#xff0c;让数据库在进行等值连接时&#xff0c;能够快速定位匹配的记录&#xff0c;减少全表扫描的开销。例如&#xff0c;若 A 表和 B 表通过 id 字段进行连接&#xff0c;可在…...

openssl-1.0.1e.tar.gz编译安装步骤

下载与验证 openssl-1.0.1e.tar.gz下载链接&#xff1a;https://pan.quark.cn/s/d682551565e8 校验文件完整性&#xff08;示例&#xff09;&#xff1a; # 检查 SHA256 哈希值 sha256sum openssl-1.0.1e.tar.gz # 对比官方发布的哈希值&#xff08;需从 OpenSSL 官网获取&a…...

供应链业务-供应链全局观(二)

概述 我们在供应链业务知识分享的第一篇供应链业务-供应链全局观&#xff08;一&#xff09;中大致聊了以下三点&#xff1a; 1、供应链的本质&#xff1a;环环相扣的增值网络。供应链是从供应商的供应商到客户的客户之间&#xff0c;通过采购、生产、运输、仓储、销售等环节…...

在 Flutter 中Navigator.push 用于实现页面之间的导航

在 Flutter 中&#xff0c;Navigator.push 是一个非常重要的方法&#xff0c;用于实现页面之间的导航。通过 Navigator.push&#xff0c;你可以将一个新的页面&#xff08;路由&#xff09;推送到导航栈中&#xff0c;从而显示新的内容。 以下是一个详细的教程&#xff0c;帮助…...

安永启用AI驱动SAP云ERP系统

安永&#xff08;EY&#xff09;宣布与 SAP 和微软展开战略合作&#xff0c;正式启动将其内部业务系统升级为基于 SAP S/4HANA Cloud 私有版的现代化 ERP 系统&#xff0c;并部署在 Microsoft Azure 云平台上。此次转型不仅涉及系统更新&#xff0c;还将通过引入人工智能&#…...

Augment Code:下一代AI编程助手,能否超越GitHub Copilot?

1. 背景介绍 近日&#xff0c;AI编程助手公司 Augment Code 宣布完成 2.27亿美元B轮融资&#xff0c;估值接近 9.77亿美元&#xff0c;距离独角兽企业仅一步之遥。本轮融资由 Sutter Hill Ventures、Index Ventures、Innovation Endeavors、Lightspeed Venture Partners 和 Me…...

图像处理之《直方图规定化和低失真数据隐藏的可逆对比度增强》论文阅读

全文目录 一、文章摘要二、直方图规定化三、提出的方法A.峰值和零点的选择B.数据序列扩展C. V L D E \mathrm{VLD_E} VLDE​: 带有扩展的极低失真D.提出的RCE-HS方案四、实现细节五、汇报PPT一、文章摘要 本文研究可逆对比度增强(RCE)。图像增强是通过直方图规定化实现的,直方…...

状态模式~

状态模式 在软件系统中,有些对象也像水一样具有多种状态,这些状态在某些情况下能够相互转换,而且对象在不同状态下也将具有不同的行为. 状态模式(state pattern)的定义: 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式就是用于解决系统…...

Latex入门之超详细的Latex环境配置教程

最近在学习Latex&#xff0c;顺便给大家分享一下Latex环境配置的心得。Latex作为一种高质量的排版系统&#xff0c;广泛应用于学术论文、书籍和报告的排版中。对于初学者来说&#xff0c;配置Latex环境可能是个挑战&#xff0c;但只要按照本文的步骤来&#xff0c;其实并不难。…...

[WUSTCTF2020]CV Maker1

进来是个华丽的界面&#xff0c;我们先跟随这个网页创造一个用户 发现了一个上传端口&#xff0c;尝试上传一个php文件并抓包 直接上传进不去&#xff0c;加个GIF89A uploads/d41d8cd98f00b204e9800998ecf8427e.php 传入 并且报告了 上传路径&#xff0c;然后使用蚁剑连接...