第一章:服务架构演进史_《凤凰架构:构建可靠的大型分布式系统》_Notes
第一章 服务架构演进史
1. 原始分布式时代(1970s-1980s)
核心问题:如何用不可靠的硬件构建可靠的大规模系统?
关键知识点:
-
技术背景:
- 硬件限制:微型计算机性能低下(如Intel 8086处理器仅128KB内存)。
- 分布式探索:通过多台机器协作突破单机算力限制。
-
DCE(分布式运算环境):
- 贡献:首创RPC(远程过程调用)、DFS(分布式文件系统)、Kerberos认证、UUID等基础技术。
- 设计理念:追求“透明性”,让远程调用像本地调用一样简单。
- 失败原因:
- 性能鸿沟:远程调用速度比本地调用慢几个数量级。
- 复杂性爆炸:网络分区、容错、一致性等问题难以解决。
- 开发难度:需高超技巧应对分布式特有缺陷(如超时、序列化)。
-
历史教训:
- Kyle Brown的结论:“能分布式≠应分布式”,过度追求透明性得不偿失。
- 启示:分布式需权衡透明性与复杂性,硬件提升是更优路径。
2. 单体系统时代(1990s-2000s)
核心问题:如何在单机上构建大规模系统?
关键知识点:
-
架构特征:
- 单一进程:所有模块运行在同一进程内,无IPC(进程间通信)。
- 分层设计:表现层、业务层、数据层纵向解耦。
- 模块化:横向按功能拆分模块(如JAR/WAR包)。
-
优势与局限:
- 优点:
- 开发/测试/部署简单,适合中小系统。
- 进程内调用高效,无序列化/网络开销。
- 缺点:
- 错误传播:内存泄漏、线程阻塞等问题影响全局。
- 技术栈单一:难以混用多种语言/框架。
- 扩展困难:垂直扩展(Scale Up)成本高,水平扩展(Scale Out)需副本冗余。
- 优点:
-
适用场景:
- 中小型系统、团队规模小(如“2 Pizza Team”)。
- 无需频繁更新或高可用性要求的场景。
3. SOA时代(2000s-2010s)
核心问题:如何整合企业内异构系统?
关键知识点:
-
SOA(面向服务架构)核心思想:
- 服务化:将功能封装为独立服务,通过标准化接口(如WSDL)通信。
- 企业级整合:解决ERP、CRM等系统间数据孤岛问题。
-
核心组件:
- ESB(企业服务总线):集中式通信枢纽,负责路由、转换、监控。
- 服务契约:严格定义接口(如SOAP协议),强调松耦合。
-
挑战与局限:
- ESB复杂性:成为单点故障和性能瓶颈。
- 服务粒度争议:粗粒度导致灵活性差,细粒度增加管理成本。
- 厂商绑定:依赖特定中间件(如IBM WebSphere)。
4. 微服务时代(2010s-至今)
核心问题:如何实现敏捷开发和系统弹性?
关键知识点:
-
微服务特征(Martin Fowler定义):
- 独立部署:每个服务可单独开发、测试、部署。
- 去中心化治理:允许技术异构(如不同语言/数据库)。
- 轻量通信:HTTP/REST或gRPC替代ESB。
-
解决的问题:
- 敏捷性:小团队专注单一服务,快速迭代。
- 弹性伸缩:按需扩展特定服务(如电商促销时库存服务独立扩容)。
- 容错性:通过熔断、降级隔离故障。
-
挑战:
- 分布式复杂性:需处理服务发现、链路追踪、最终一致性等。
- 运维复杂度:需CI/CD、容器化(如Docker)支持。
- 数据管理:跨服务事务难(需Saga模式或事件溯源)。
5. 后微服务时代(云原生时代)
核心问题:如何降低分布式系统复杂度?
关键知识点:
-
云原生的三大基石:
- 容器化(Docker):实现环境一致性,资源隔离。
- 动态编排(Kubernetes):自动化部署、扩缩容。
- 服务网格(Istio):下沉通信、安全、监控到基础设施层。
-
服务网格核心能力:
- 透明通信:通过Sidecar代理(如Envoy)实现流量管理、熔断、重试。
- 可观测性:集成监控(Prometheus)、日志(ELK)、追踪(Jaeger)。
-
意义:
- 开发者聚焦业务逻辑,无需处理分布式底层细节。
- 基础设施的“不可变性”提升系统可靠性。
6. 无服务时代(Serverless)
核心问题:如何极致简化运维和成本?
关键知识点:
-
核心特征:
- 事件驱动:由HTTP请求、消息队列等事件触发执行。
- 按需计费:仅按实际执行时间/资源付费(如AWS Lambda)。
- 无状态:依赖外部存储(如DB、对象存储)管理状态。
-
适用场景:
- 突发流量处理(如秒杀活动)。
- 异步任务(如图片处理、数据分析)。
-
局限性:
- 冷启动延迟:首次调用需初始化运行时环境。
- 状态管理难:不适合长时间运行或有状态任务。
- 厂商锁定:深度依赖云平台特定服务(如Azure Functions)。
总结:架构演进的核心驱动力
- 硬件发展:从单机性能提升到云计算资源池化。
- 业务需求:从企业内部整合到快速响应市场变化。
- 技术成熟:容器、服务网格等技术解决分布式复杂度。
- 成本优化:从购买物理机到按需使用云资源。
思考:架构无绝对优劣,需根据团队规模、业务场景、技术储备选择合适方案。微服务并非终点,未来可能向“函数即服务”“边缘计算”等方向持续演进。
多选题目
-
关于原始分布式时代(20世纪70-80年代)的主要挑战,以下哪些正确?
A. 网络通信的高延迟和高错误率
B. 缺乏统一的技术标准和协议
C. 硬件算力不足导致分布式系统无法实用化
D. 分布式透明性带来的复杂性问题 -
DCE(分布式运算环境)对计算机科学的主要贡献包括?
A. 发明了RESTful架构风格
B. 提出了远程过程调用(RPC)的参考实现
C. 开发了首个分布式文件系统(DFS)
D. 制定了微服务架构的核心规范 -
单体系统架构的常见误解是?
A. 单体系统完全不可拆分
B. 单体系统天然支持分层架构
C. 单体系统无法横向扩展
D. 单体系统必须使用单一编程语言 -
单体系统的核心缺陷包括?
A. 模块间隔离能力不足
B. 技术异构困难
C. 本地调用性能低下
D. 动态更新需停机部署 -
原始分布式时代的重要教训是?
A. 透明分布式操作是终极目标
B. 分布式系统的复杂性可能超过其收益
C. 微服务是解决分布式问题的唯一方案
D. 硬件性能提升能完全消除分布式挑战 -
关于分层架构在单体系统中的表现,正确的描述是?
A. 仅支持纵向拆分,无法横向扩展
B. 请求在各层间通过进程间通信传递
C. 分层设计是单体架构的典型特征
D. 分层导致性能显著下降 -
单体系统技术异构困难的主要原因是?
A. 不同模块必须共享同一进程
B. 缺乏标准化接口
C. 硬件资源无法隔离
D. 需统一编程语言和框架 -
导致单体系统逐渐被取代的核心原因是?
A. 无法支持分层架构
B. 隔离能力不足导致可靠性下降
C. 动态更新需停机部署
D. 硬件算力提升使单体性能过剩 -
关于原始分布式时代的透明性追求,正确的描述是?
A. 完全实现了本地与远程调用的透明性
B. 透明性导致开发复杂度大幅上升
C. 透明性是DCE设计的核心原则之一
D. 透明性通过硬件性能提升得以实现 -
单体系统扩展的局限性体现在?
A. 仅支持纵向扩展(Scale Up)
B. 横向扩展需负载均衡器辅助
C. 扩展后模块间通信成本激增
D. 无法通过增加机器提升性能
答案与解析
-
答案:C、D
- 解析:书中指出原始分布式时代硬件算力不足(C)导致系统实用性受限,而透明性追求(D)带来复杂性。网络通信问题(A/B)是衍生挑战,但非核心原因。
-
答案:B、C
- 解析:DCE贡献了RPC(B)和DFS(C)。RESTful(A)和微服务(D)是后续技术。
-
答案:A、C
- 解析:单体支持模块拆分(B正确,非误解)和横向扩展(C错误)。实际可拆分(A是误解),且允许多语言(D错误)。
-
答案:A、B、D
- 解析:单体隔离差(A)、技术异构难(B)、更新需停机(D)。本地调用高效(C错误)。
-
答案:B
- 解析:教训是复杂性超过收益(B)。透明性(A)是目标但未实现,硬件(D)无法完全解决问题。
-
答案:C
- 解析:分层是单体典型特征(C)。请求通过进程内传递(B错误),横向扩展可行(A错误)。
-
答案:A、D
- 解析:共享进程(A)需统一语言/框架(D)。技术异构困难主因在此。
-
答案:B、C
- 解析:隔离差(B)和更新难(C)是核心缺陷。单体支持分层(A错误),硬件提升非主因(D错误)。
-
答案:B、C
- 解析:透明性是DCE目标(C),但导致复杂度上升(B)。未完全实现(A错误)。
-
答案:B
- 解析:单体横向扩展需负载均衡(B)。可横向扩展(D错误),但进程内通信成本不变(C错误)。
相关文章:
第一章:服务架构演进史_《凤凰架构:构建可靠的大型分布式系统》_Notes
第一章 服务架构演进史 1. 原始分布式时代(1970s-1980s) 核心问题:如何用不可靠的硬件构建可靠的大规模系统? 关键知识点: 技术背景: 硬件限制:微型计算机性能低下(如Intel 8086处…...
BUUCTF-web刷题篇(13)
22.NiZhuanSiWei 分析:有三个参数需要以get方式传入,发现有file_get_contents(),所以要使用php伪代码,preg_match("/flag/",$file)说明正则匹配不能含有flag,同时还有反序列化,存在漏洞。 已知前…...
7-9 趣味游戏
题目解析 在某个学校的趣味游戏活动中,N 名同学站成一排,他们的年龄恰好是 1 到 N ,需要注意的是他们并不是按照年龄的大小排列的,而是随机排列的。 游戏的规则是请同学们快速计算出,如果在这 N 名同学的小组中&…...
用 Python 制作仓库自动化指南
1. 环境准备 Python 3.x pip (Python 包管理工具) 文本编辑器或 IDE (如 VS Code、PyCharm) 2. 安装依赖库 pandas: 数据处理 openpyxl: Excel 文件操作 sqlite3: SQLite 数据库交互 smtplib: 邮件发送 bash pip install pandas openpyxl sqlite3 smtplib 3. 功能实现…...
Johnson算法——两阶段流水线调度的最优解法
前言:写这个题目的时候感觉就是说任务a的时候是一定需要的,无法避免,怎么才能节约时间呢,就是进行任务a时候也进行任务b 第一个进行的任务a肯定时间越短越好,因为这样b的等待时间越短 最后一个进行的任务b的时候越短越…...
反向查询详解以Django为例
以下给出两张表格 class User(AbstractUser):mobilemodels.CharField(max_length11,default0,uniqueTrue,verbose_name手机号)email_activemodels.BooleanField(defaultFalse,verbose_name邮箱验证状态)default_address models.ForeignKey(Address, related_nameusers, nullT…...
PDP动物性格测试:趣味性格分析工具
PDP动物性格测试:趣味性格分析工具 📝 简介 大家好!今天我想向大家推荐一个有趣且实用的在线工具 —— PDP动物性格测试。这是一个基于PDP(Process Dynamic Pattern)理论的性格测试工具,通过将性格特征与…...
蓝桥杯 完全平方数 刷题笔记
关键分析 --- ### **完全平方数的质因数指数特性** **核心结论**: 一个数是完全平方数,当且仅当它的所有质因数的指数均为偶数。 --- #include <bits/stdc.h> using namespace std; #define int long long int n;signed main(){cin >>…...
C++自学笔记---数组和指针的异同点
数组和指针的异同点 0. 复习一下:指针运算符 * 和 & 我们前两篇有讲过这两个运算符,& 是取地址运算符,* 是解引用运算符。这两个运算符是理解指针的关键,因为它们分别代表了获取变量地址和访问指针指向的值这两个基本操…...
【学习笔记】pytorch强化学习
https://www.bilibili.com/video/BV1zC411h7B8 文章目录 [mcts] 01 mcts 基本概念基本原理(UCB)及两个示例[mcts] 02 mcts from scartch(UCTNode,uct_search, pUCT,树的可视化) [mcts] 01 mcts 基本概念基本…...
C++学习之线程同步
目录 1.线程同步相关概念 2.锁属性-建议锁 3.Mutex互斥锁操作 4.互斥锁使用注意事项 5.互斥量的初始化方法 6.死锁 7.读写锁特性 8.读写锁操作函数 9.读写锁使用示例 10.条件变量操作函数 11.生产者消费者模型简单分析 12.条件变量实现生产者消费者模型代码预览 13…...
定积分的应用(4.39-4.48)
battle cry 前言4.394.404.414.424.434.444.454.464.474.48 前言 题目确实比较多。slow down and take your time. 4.39 狂算了一遍,然后发现不是计算出问题了,是积分上下限写错了。还有把函数代进去也出了一点问题。 点火公式一家人我不记得&#x…...
Java EE期末总结(第三章)
目录 一、JavaBean 1、规范与定义 2、与JavaBean相关的JSP动作标签 二、MV开发模式(JSPJavaBean) 三、Servlet组件 1、Servlet定义 2、基于HTTP请求的Servlet开发 3、Sevlet执行原理 4、控制器程序的分层设计(DAO)模式 5、…...
Data_Socket和UDP_Socket
Data_Socket 和 UDP_Socket 是两种不同类型的网络套接字,它们用于不同的协议和应用场景。以下是它们的主要区别: 协议类型: UDP_Socket:使用的是 UDP(User Datagram Protocol) 协议,这是一种无连…...
6547网:蓝桥STEMA考试 Scratch 试卷(2025年3月)
『STEMA考试是蓝桥青少教育理念的一部分,旨在培养学生的知识广度和独立思考能力。考试内容主要考察学生的未来STEM素养、计算思维能力和创意编程实践能力。』 一、选择题 第一题 运行下列哪个程序后,飞机会向左移动? ( ) A. …...
使用MATIO库读取Matlab数据文件中的多维数组
使用MATIO库读取Matlab数据文件中的多维数组 MATIO是一个用于读写Matlab数据文件(.mat)的开源C库。下面是一个完整的示例程序,展示如何使用MATIO库读取Matlab数据文件中的多维数组。 示例程序 #include <stdio.h> #include <stdlib.h> #include <…...
Spring @Transactional 注解是如何工作的?
Transactional 注解是 Spring 框架中用于声明式事务管理的核心注解。它可以应用于类或方法,用于指定事务的属性,例如传播行为、隔离级别、超时时间、只读标志等。下面详细解释 Transactional 注解的工作原理: 1. 启用事务管理: …...
spring security 过滤器链使用
Spring Security 的过滤器链提供了灵活的安全控制机制,以下是其在实际开发中的 常见用法 及对应的过滤器配置示例: 一、认证方式配置 1. 表单登录认证 • 过滤器:UsernamePasswordAuthenticationFilter • 配置: http.formLogi…...
k8s 自动伸缩的场景与工作原理
k8s 自动伸缩的场景与工作原理 在现代云原生架构中,应用的访问量和资源需求常常存在波动。为了解决高峰时资源不足、低谷时资源浪费的问题,Kubernetes 提供了自动伸缩功能。自动伸缩可以根据预设的指标(如 CPU 利用率、内存占用、网络流量等…...
SYN Flooding攻击原理
SYN Flooding攻击原理详解 SYN Flooding(SYN洪泛攻击)是一种典型的拒绝服务攻击(DoS/DDoS),利用TCP协议的三次握手缺陷耗尽目标系统资源。以下是其工作原理、影响及防御措施的全面解析: 1. TCP三次握手回顾…...
【爬虫案例】采集 Instagram 平台数据几种方式(python脚本可直接运行)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、概述1.1 Instagram基础信息1.2 Instagram平台架构核心技术栈1.3 采集提示1.4 几种采集方案对比二、四种采集方案分析三、写爬虫采集Instagram案例3.1 采集作品信息并下载视频或图片(无需登录)3.2 explore接口的采…...
通过构造函数和几何条件,研究了不同函数的最近点存在性、性质及单调性
解: (1)对于函数 f ( x ) 1 x f(x) \frac{1}{x} f(x)x1 和点 M ( 1 , 0 ) M(1, 0) M(1,0),构造函数 s ( x ) ( x − 1 ) 2 ( 1 x ) 2 s(x) (x - 1)^2 \left(\frac{1}{x}\right)^2 s(x)(x−1)2(x1)2。求导得到 s ′ …...
项目复杂业务的数据流解耦处理方案整理
目前项目中使用mobx,项目比较久了,每个Store的内容是越来越多了,逻辑也是越来越复杂,如果不梳理估计以后模块的层级会很乱。 之前整理了一些数据流管理的对比实践和最佳方案的梳理,最后写来写去感觉还是要整理一个架构…...
手部穴位检测技术:基于OpenCV和MediaPipe的实现
手部穴位检测是医学和健康管理领域的重要技术之一。通过准确识别手部的关键穴位,可以为中医诊断、康复治疗以及健康监测提供支持。本文将介绍一种基于OpenCV和MediaPipe的手部穴位检测方法,展示如何利用计算机视觉技术实现手部关键点的检测,并进一步标注手部的穴位位置。 技…...
Pycharm 启动时候一直扫描索引/更新索引 Update index/Scanning files to index
多个项目共用一个虚拟环境,有助于加快PyCharm 启动吗 chatgpt 4o认为很有帮助,gemini 2.5pro认为没鸟用,我更认可gemini的观点。不知道他们谁在一本正经胡说八道。 -------- 打开pycharm的时候,下方的进度条一直显示在扫描文件…...
解锁健康密码,拥抱品质生活
在生活节奏不断加快的今天,健康养生已成为人们关注的焦点。它不仅关乎当下生活质量,更是对未来幸福的投资。从日常生活的点滴出发,掌握正确养生方法,我们就能轻松收获健康。 饮食是健康的基石。我们应当遵循 “食物多样&#x…...
安卓开发工程师- Intent 机制
Intent 的作用是什么? Intent(意图)是 Android 中用于组件之间通信的一种机制。它主要用于以下几种场景: 启动 Activity:从一个 Activity 跳转到另一个 Activity。启动 Service:用于启动后台服务或与服务…...
iOS 使用 - 修改屏幕为黑白显示(墨水屏)
iOS 18 设置 – 辅助功能 – 显示与文字大小 – 色彩滤镜 打开色彩滤镜,选择 灰度,最下方调节 强度值 怀念起那个用电子词典的岁月,一个个字母键入,就可以获得很多知识。 触屏时代,一切好像更简单了,但也更…...
小白速通:Verilog流水线实现及时序分析
目录 题目:时序分析:时钟频率为50MHz数据1: a10, b20, c30, d40, e2数据2: a5, b15, c25, d35, e3数据3: a8, b12, c16, d24, e4 流水线效率分析 题目: verilog中,y(abcd)*e,时钟频率为50Mhz,用流水线的形式…...
微软的 Copilot 现在可以浏览网页并为您执行操作
在庆祝其 50 岁生日之际,微软正在向其人工智能驱动的 Copilot 聊天机器人传授一些新技巧。 从 BASIC 到 AI,改变世界的公司:微软 微软表示,Copilot 现在可以在“大多数网站”上采取行动,使其能够预订门票、预订餐厅等…...
【C++】vector的模拟实现
文章目录 前言一. vector的底层二. 关于容量和大小的函数2.1 size和capacity2.2 reserve2.3 resize2.4 empty 三. vector的默认成员函数3.1 构造函数3.1.1 无参构造函数3.1.2 构造初始化为n个val值3.1.3 用initializer_list构造初始化3.1.4 使用迭代器区间进行构造初始化 3.2 拷…...
C# Winform 入门(9)之如何封装并调用dll
封装dll 首先创建 .Net平台 类库 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace _09.Encapsulation_dll {public class Program{/// <summary>/// 求两个double类型的数值的和/// &l…...
【C语言】内存函数
大家好,很高兴又和大家见面了!!! 在C语言标准库中,有一些直接对内存进行操作的函数,我们将其称之为内存函数,这些函数位于头文件<string.h>,在网站https://cplusplus.com/ref…...
SDL视频显示函数
文章目录 1. **`SDL_Init()`**2. **`SDL_CreateWindow()`**3. **`SDL_CreateRenderer()`**4. **`SDL_CreateTexture()`**5. **`SDL_UpdateTexture()`**6. **`SDL_RenderCopy()`**7. **`SDL_RenderPresent()`**8. **`SDL_Delay()`**9. **`SDL_Quit()`**总结示例代码:代码说明:…...
博客文章:深入分析 PyMovie - 基于 Python和 MoviePy 的视频管理工具
这是一个使用 wxPython 构建界面、moviepy 处理视频的自定义 GUI 应用程序。该工具提供了视频播放、元数据提取、格式转换、视频裁剪和截图等功能。通过分析其设计和实现,我们将了解其工作原理、优点和潜在的改进空间。 C:\pythoncode\new\output\pymovieSample.py …...
Redis中AOF的实现方式和AOF重写
一、AOF 的实现方式 核心原理 AOF 通过将写操作命令以追加方式记录到日志文件中,重启时通过重放命令恢复数据。与 RDB 的快照机制不同,AOF 是增量记录,更适用于数据一致性要求较高的场景。写入流程 命令执行:客户端发送写命令&am…...
Supervisor的安装和使用
Supervisor 使用笔记(CentOS 8 环境) 本周,老师让我使用supervisor管理项目服务,当时第一次听说过这个进程管理工具😶🌫️,就上网搜了搜安装和使用,又用ai查了一些细节࿰…...
JVM 内存区域详解
JVM 内存区域详解 Java 虚拟机(JVM)的内存区域划分为多个部分,每个部分有特定的用途和管理机制。以下是 JVM 内存区域的核心组成及其功能: 一、运行时数据区(Runtime Data Areas) 1. 线程共享区域 内存…...
【java】在 Java 中,获取一个类的`Class`对象有多种方式
在 Java 中,获取一个类的Class对象有多种方式。Class对象代表了 Java 中的一个类或接口的运行时类信息,可以用于反射操作。以下是获取Class对象的几种常见方法: 1.使用.class属性 每个类都有一个.class属性,可以直接获取该类的Cl…...
蓝桥杯:对字符串处理常用知识笔记
一、前面四个是计算带有空格字符串的的长度计算 C语言代码 #include<string.h> #include<stdio.h> int main() { char s[105]; gets(s); printf("%d", strlen(s)); return 0; } 算法2 C 代码(常用) #include <iostream> #in…...
c++网络编程,信号透传可能是什么意思
在 C 网络编程中,**信号透传**(Signal Pass-Through)通常 refers to the concept of allowing signals to propagate through a network protocol stack without being interrupted or modified. 具体来说,信号透传可以涉及到几个…...
数据结构与算法学习笔记----贪心·绝对值不等式
数据结构与算法学习笔记----贪心绝对值不等式 author: 明月清了个风 first publish time: 2025.4.5 ps⭐️感觉其实是一个数学的问题, Acwing 104. 货仓选址 [原题链接](104. 货仓选址 - AcWing题库) 在一条数轴上有 N N N家商店,他们的坐标分别为 A…...
CUDA学习--体验GPU性能
学习来源:2 CUDA Python--并行计算基础-卷积计算以及共享内存_哔哩哔哩_bilibili 处理一张图片的处理速度对比 import cv2 from numba import cuda import time import math cuda.jit() def process_gpu(img,channels):tx cuda.blockIdx.x*cuda.blockDim.xcuda…...
博途 TIA Portal之1200做主站与200SMART的S7通讯
有时候,我们与之作S7通讯的西门子系PLC并不是同一个厂商或是同一时期供货的,也有可能不在一个编程软件中。此时进行S7能讯会有所不同。本文将演示博途与200SMART做S7通讯。 1、硬件准备 1200PLC一以,200SMART一台,网线2根,交换机一台。 2、关于编程 1200做主站,因此需…...
a标签download下载图片
a标签的download属性是HTML5中新增的一个属性,用于指定链接点击时直接下载文件,而不是在浏览器中打开文件。 基本用法 指定下载文件名:在a标签中添加download属性,并指定一个文件名。例如: <a href"…...
#SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法
SystemVerilog 断言(SVA)中 disable iff、matched 和 expect 的语法知识。 1. disable iff (condition) 功能与定义 作用:当指定条件(condition)为真时,禁用当前属性的检查。 常用于复位(rese…...
Day2-2:前端项目uniapp壁纸实战
再在wallpaper新建一个目录components 在components下新建组件common-title 记得点击创建同名目录 在index加 <view class"select"><common-title></common-title></view> 图片换了下,原来的有点丑,图片可按自己喜欢…...
pycharm如何通过跳板机连接服务器在本地debug
现在假设你有一个服务器,需要跳板机登陆,但是你从跳板机到服务器,只知道能直接通过ssh连接。 首先你可以现在本地创建一个 SSH 配置文件(~/.ssh/config): Host jumpHostName 跳板机地址Port 端口User 用户…...
Mysql explain中列的解析
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL possible_keys:查询可以利用的索引&#…...
场馆预定系统小程序PHP+uniapp
场馆预定系统小程序:基于PHPUniApp的多场景体育场馆智慧化解决方案 随着全民健身意识的提升,体育场馆的数字化管理需求日益增长。场馆预定系统小程序凭借其轻量化、高便捷性,成为体育馆、羽毛球馆、兵乒球馆等场所提升运营效率的核心工具。本…...