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

C#计算矩形面积:通过定义结构 vs 通过继承类

目录

一、涉及到的知识点

1.结构

2.结构和类的区别

3.继承

4.使用类继承提高程序的开发效率

5.属性 

(1)属性定义

(2)get访问器

(3)set访问器

6. 属性和字段的区别

二、实例:通过定义结构计算矩形面积

1.源码

2.生成效果

三、实例:通过继承类计算梯形面积

1.源码

2.生成效果


一、涉及到的知识点

1.结构

        结构是一种可以包含数据成员和方法成员的值类型数据结构。为结构分配数据时不需要从托管堆中分配内存,结构类型的变量直接包含了该结构的数据。结构中可以包括构造函数、常量、字段、方法、属性、运算符、事件和嵌套类型等,但如果要同时包括上述几种成员,则应该考虑使用类。

        使用结构对于小的数据结构特别有用,能够节省大量的分配内存,如复数和坐标系中的点。结构具有以下特点:

  • 结构是值类型。
  • 向方法传递结构时,是通过传值方式传递的,而不是作为引用传递的。
  • 结构的实例化可以不使用new运算符。
  • 结构可以声明构造函数,但它们必须带参数。
  • 一个结构不能从另一个结构或类继承。所有结构都直接继承自System.ValueType,而System.ValueType继承自System.Object。
  • 结构可以实现接口。
  • 在结构中初始化实例字段是错误的。

        由于结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值来实现默认构造函数。

        C#中,使用struct关键字来定义结构,语法格式如下:       

 【结构修饰符】 struct 【结构名】{}

2.结构和类的区别

        结构是值类型,它在栈上分配数据,并且结构的赋值将分配产生一个新的对象;

        而类是引用类型,它在堆上分配数据,对类的对象进行赋值时只是复制了引用,它们都指向同一个实际对象分配的内存。

3.继承

        继承是面向对象编程最重要的特性之一,任何类都可以从另外一个类继承,这就是说,这个类拥有它继承的类的所有成员。在面向对象编程中,被继承的类称为父类或基类。C#中提供了类的继承机制,但只支持单继承,而不支持多重继承,即在C#中一次只允许继承一个类,不能同时继承多个类。

        利用类的继承机制,程序开发人员可以在已有类的基础上构造新类,这一性质使得类支持分类的概念。例如,用户可以通过增加、修改或替换类中的方法对这个类进行扩充,以适应不同的应用要求。在日常生活中很多东西都很有条理,那是因为它们有着很好的层次分类,如果不用层次分类,则需要对每个对象都定义其所有的性质。使用继承后,每个对象就可以只定义自己的特殊性质,每一层的对象只需定义本身的性质,其他性质可以从上一层继承下来。

        继承一个类时,类成员的可访问性是一个重要的问题。子类(派生类)不能访问基类的私有成员,但是可以访问其公共成员,这就是说,只要使用public声明类成员,就可以让一个类成员被基类和子类(派生类)同时访问,同时也可以被外部的代码访问。

        为了解决基类成员访问问题,C#还提供了另外一种可访问性,即protected,只有子类(派生类)才能访问protected成员,基类和外部代码都不能访问protected成员。

        除了可以定义成员的保护级别外,还可以为成员定义其继承行为。基类的成员可以是虚拟的,成员可以由继承它的类重写。子类(派生类)可以提供成员的其他执行代码,这种执行代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问它们。如果没有提供其他执行方式,外部代码就直接访问基类中成员的执行代码。

        另外,基类还可以定义为抽象类。抽象类不能直接实例化,要使用抽象类就必须继承这个类,然后再实例化。C#中实现继承的语法格式如下:

class DerivedClass:BaseClass {}
说明:继承类时,必须在子类和基类之间使用冒号(:)。

4.使用类继承提高程序的开发效率

        类可以从另外一个类继承,也就是说,这个类拥有它继承的类的所有成员(除构造方法外)。利用类的继承机制,程序开发人员可以在已有类的基础上构造新类,从而更快地提高程序的开发效率。

5.属性 

         在定义类尤其定义基类时离不开对属性的声明。 属性定义的过程中需要用到get访问器和set访问器。

(1)属性定义

        属性是对现实实体特征的抽象,它提供了对类或对象性质的访问。类的属性描述的是状态信息,在类的实例中,属性的值表示对象的状态值。属性不表示具体的存储位置,属性有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句。所以属性提供了一种机制,把读取和写入对象的某些特性与一些操作关联起来,程序员可以像使用公共数据成员一样使用它。属性的声明格式如下:

【修饰符】【类型】【属性名】
{get {get访问器体}set {set访问器体}
}
参数说明
修饰符:指定属性的访问级别。
类型:指定属性的类型,可以是任何的预定义或自定义类型。
属性名:一种标识符,命名规则与字段相同,但是,属性名的第一个字母通常都大写。

(2)get访问器

        get访问器相当于一个具有属性类型返回值的无参数方法,它除了作为赋值的目标外,当在表达式中引用属性时,将调用该属性的get访问器计算属性的值。get访问器体必须用return语句来返回,并且所有的return语句都必须返回一个可隐式转换为属性类型的表达式。

(3)set访问器

        set访问器相当于一个具有单个属性类型值参数和void返回类型的方法。set访问器的隐式参数始终命名为value。当一个属性作为赋值的目标被引用时就会调用set访问器,所传递的参数将提供新值。不允许set访问体中的return语句指定表达式。由于set访问器存在隐式的参数value,所以set访问器中不能自定义使用名称为value的局部变量或常量。

        由于set访问器中可以包含大量的语句,因此可以对赋予的值进行检查,如果值不安全或者不符合要求,就给予提示,这样可以避免因为给属性设置了错误的值而导致的错误。

6. 属性和字段的区别

        属性和字段都可以访问对象中包含的数据。对象数据用来区分不同的对象,同一个类的不同对象可能在属性和字段中存储了不同的值。字段和属性都可以输入,通常把信息存储在字段和属性中,但是属性和字段是不同的,属性不能直接访问数据,字段可以直接访问数据。在属性中可以添加对数据访问的限制,例如,有一个int类型的属性,可以限制它只能存储1~5的数字,但如果用字段就可以存储任何int类型的数值。

二、实例:通过定义结构计算矩形面积

1.源码

//定义一个结构,然后通过结构计算矩形面积
namespace _112
{public partial class Form1 : Form{private GroupBox? groupBox1;private TextBox? textBox2;private TextBox? textBox1;private Label? label2;private Label? label1;private Label? label3;private TextBox? textBox3;private Button? button1;public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // label1// label1 = new Label{AutoSize = true,Location = new Point(16, 30),Name = "label1",Size = new Size(32, 17),TabIndex = 0,Text = "长:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(16, 57),Name = "label2",Size = new Size(32, 17),TabIndex = 1,Text = "宽:"};// // textBox1// textBox1 = new TextBox{Location = new Point(76, 24),Name = "textBox1",Size = new Size(100, 23),TabIndex = 2};// // textBox2// textBox2 = new TextBox{Location = new Point(76, 51),Name = "textBox2",Size = new Size(100, 23),TabIndex = 3};// // groupBox1// groupBox1 = new GroupBox{Location = new Point(12, 12),Name = "groupBox1",Size = new Size(190, 81),TabIndex = 0,TabStop = false,Text = "矩形参数:"};groupBox1.Controls.Add(textBox2);groupBox1.Controls.Add(textBox1);groupBox1.Controls.Add(label2);groupBox1.Controls.Add(label1);groupBox1.SuspendLayout();// // label3// label3 = new Label{AutoSize = true,Location = new Point(12, 105),Name = "label3",Size = new Size(44, 17),TabIndex = 4,Text = "面积:"};// // textBox3// textBox3 = new TextBox{Location = new Point(67, 99),Name = "textBox3",Size = new Size(77, 23),TabIndex = 5};// // button1// button1 = new Button{Location = new Point(155, 99),Name = "button1",Size = new Size(47, 23),TabIndex = 6,Text = "计算",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(214, 131);Controls.Add(button1);Controls.Add(label3);Controls.Add(textBox3);Controls.Add(groupBox1);Name = "Form1";Text = "定义结构计算面积";groupBox1.ResumeLayout(false);groupBox1.PerformLayout();}/// <summary>/// 按钮事件/// </summary>private void Button1_Click(object? sender, EventArgs e){Rectangle myRectangle = new(Convert.ToDouble(textBox1!.Text), Convert.ToDouble(textBox2!.Text));textBox3!.Text = myRectangle.RectangleArea().ToString();}/// <summary>/// 使用自定义构造函数实例化矩形结构/// 构造函数,初始化矩形的宽和高/// 计算矩形的面积/// </summary>/// <param name="x">矩形的宽</param>/// <param name="y">矩形的高</param>public struct Rectangle(double x, double y){public double width = x;public double height = y;/// <summary>/// 计算矩形面积/// </summary>/// <returns>矩形面积</returns>public readonly double RectangleArea(){return width * height;}}}
}

2.生成效果

 

三、实例:通过继承类计算梯形面积

1.源码

//通过继承类计算梯形的面积
namespace _113
{public partial class Form1 : Form{private GroupBox? groupBox1;private TextBox? textBox3;private TextBox? textBox2;private TextBox? textBox1;private Label? label3;private Label? label2;private Label? label1;private Label? label4;private TextBox? textBox4;private Button? button1;public Form1(){InitializeComponent();StartPosition = FormStartPosition.CenterScreen;Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // textBox3// textBox3 = new TextBox{Location = new Point(83, 80),Name = "textBox3",Size = new Size(100, 23),TabIndex = 5};// // textBox2// textBox2 = new TextBox{Location = new Point(83, 48),Name = "textBox2",Size = new Size(100, 23),TabIndex = 4};// // textBox1// textBox1 = new TextBox{Location = new Point(83, 16),Name = "textBox1",Size = new Size(100, 23),TabIndex = 3};// // label3// label3 = new Label{AutoSize = true,Location = new Point(11, 86),Name = "label3",Size = new Size(32, 17),TabIndex = 2,Text = "高:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(11, 54),Name = "label2",Size = new Size(44, 17),TabIndex = 1,Text = "下底:"};// // label1// label1 = new Label{AutoSize = true,Location = new Point(11, 22),Name = "label1",Size = new Size(44, 17),TabIndex = 0,Text = "上底:"};// // groupBox1// groupBox1 = new GroupBox{Location = new Point(12, 12),Name = "groupBox1",Size = new Size(200, 118),TabIndex = 0,TabStop = false,Text = "梯形参数:"};groupBox1.Controls.Add(textBox3);groupBox1.Controls.Add(textBox2);groupBox1.Controls.Add(textBox1);groupBox1.Controls.Add(label3);groupBox1.Controls.Add(label2);groupBox1.Controls.Add(label1);groupBox1.SuspendLayout();// // label4// label4 = new Label{AutoSize = true,Location = new Point(12, 142),Name = "label4",Size = new Size(68, 17),TabIndex = 1,Text = "梯形面积:"};// // textBox4// textBox4 = new TextBox{Location = new Point(77, 136),Name = "textBox4",Size = new Size(70, 23),TabIndex = 2};// // button1// button1 = new Button{Location = new Point(168, 136),Name = "button1",Size = new Size(44, 23),TabIndex = 3,Text = "计算",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(224, 166);Controls.Add(button1);Controls.Add(textBox4);Controls.Add(label4);Controls.Add(groupBox1);Name = "Form1";Text = "通过继承计算面积";groupBox1.ResumeLayout(false);groupBox1.PerformLayout();}/// <summary>/// 按钮事件:实例化类对象/// 计算梯形面积/// </summary>private void Button1_Click(object? sender, EventArgs e){TrapeziaArea myTrapezoid = new(){SD = Convert.ToDouble(textBox1!.Text),XD = Convert.ToDouble(textBox2!.Text),Height = Convert.ToDouble(textBox3!.Text)};textBox4!.Text = myTrapezoid.Area().ToString();}}/// <summary>/// 自定义Trapezia类/// 该类定义了3个属性/// </summary>class Trapezia{private double sd = 0;      //定义int型变量,作为梯形的上底private double xd = 0;      //定义int型变量,作为梯形的下底private double height = 0;  //定义int型变量,作为梯形的高/// <summary>/// 上底/// </summary>public double SD{get{return sd;}set{sd = value;}}/// <summary>/// 下底/// </summary>public double XD{get{return xd;}set{xd = value;}}/// <summary>/// 高/// </summary>public double Height{get{return height;}set{height = value;}}}/// <summary>/// 自定义类,该类继承自Trapezia/// 继承了父类的3个属性/// </summary>class TrapeziaArea : Trapezia{/// <summary>/// 求梯形的面积/// </summary>/// <returns>梯形的面积</returns>public double Area(){return (SD + XD) * Height / 2;}}
}

2.生成效果

相关文章:

C#计算矩形面积:通过定义结构 vs 通过继承类

目录 一、涉及到的知识点 1.结构 2.结构和类的区别 3.继承 4.使用类继承提高程序的开发效率 5.属性 &#xff08;1&#xff09;属性定义 &#xff08;2&#xff09;get访问器 &#xff08;3&#xff09;set访问器 6. 属性和字段的区别 二、实例&#xff1a;通过定义…...

【复现】Panalog大数据日志审计系统 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流…...

react【五】redux/reduxToolkit/手写connext

文章目录 1、回顾纯函数2、redux2.1 redux的基本使用2.2 通过action修改store的数值2.3 订阅state的变化2.4 目录结构2.5 Redux的使用过程2.6 redux的三大原则2.7 Redux官方图 3、redux在React中的使用4、react-redux使用4.1 react-redux的基本使用4.2 异步请求 redux-thunk4.3…...

.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2

前言 很多同学都不愿给电脑设动态壁纸&#xff0c;其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费&#xff08;MIT license&#xff09;的一个小而快并且功能强大的 Windows 动态桌面软件&#xff0c;支持视频和网页动画播放&#xff1a;DreamScene2。 …...

jsp计算机线上教学系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 计算机线上教学系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…...

RabbitMQ的高可用机制

RabbitMQ通过多种机制提供高可用性(HA)支持&#xff0c;以确保消息系统的稳定性和可靠性。下面将详细介绍这些机制&#xff0c;并提供代码示例。 集群&#xff08;Clustering&#xff09; RabbitMQ的集群提供了高可用性和负载均衡。集群中的节点共享同一个Erlang分布式数据库…...

人机协同中的贝叶斯和马尔可夫

人机协同中的马尔可夫链是指在人与机器之间协同工作过程中&#xff0c;可能涉及到的状态转移概率模型。马尔可夫链是一种数学模型&#xff0c;描述了在给定当前状态下&#xff0c;未来状态的概率分布只依赖于当前状态&#xff0c;而与过去状态无关的随机过程。在人机协同工作中…...

STM32的SDIO

一.SDIO简介 SDIO&#xff0c;全称Secure Digital Input/Output&#xff0c;是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能&#xff0c;允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…...

Unity中的Lerp插值的使用

Unity中的Lerp插值使用 前言Lerp是什么如何使用Lerp 前言 平时在做项目中插值的使用避免不了&#xff0c;之前一直在插值中使用存在误区&#xff0c;在这里浅浅记录一下。之前看的博客或者教程还多都存在一个“永远到达不了&#xff0c;只能无限接近”的一个概念。可能是之前脑…...

年后上来面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…...

代码随想录算法训练营DAY20 | 二叉树 (8)

一、LeetCode 701 二叉搜索树中的插入操作 题目链接&#xff1a; 701.二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 思路&#xff1a;见缝插针罢辽。 class Solution {public TreeNode insertIntoBST(TreeNode root, i…...

2023年全球软件开发大会(QCon北京站2023)2月:核心内容与学习收获(附大会核心PPT下载)

本次峰会是一个汇集了最新技术趋势、最佳实践和创新思维的盛会。对于从事软件开发和相关领域的专业人士来说&#xff0c;参加这样的大会将有助于他们了解行业动态、提升技能水平、拓展职业视野&#xff0c;并与同行建立联系和合作。 本次峰会包含&#xff1a;AI基础架构、DevO…...

键盘输入4个数,从小到大排序

题目 键盘输入4个整数&#xff0c;从小到大排序 思路 代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//键盘输入4个整数&#xff0c;从小到大排序 int main() {int n1, n2, n3, n4;scanf_s("%d %d %d %d", &n1, &n2, &n3, &n4);…...

Day11-Linux系统iNode及链接知识及企业按哪里精讲

Day11-Linux系统iNode及链接知识及企业按哪里精讲 1. 文件核心 属性知识1.1 什么是索引节点&#xff08;inode&#xff09;。1.2 索引节点作用1.3 inode是怎么产生的&#xff1f;1.4 inode的特点&#xff1f;1.5 Linux系统读取文件的原理1.6 企业生产案例&#xff1a;No space …...

C# Thread的使用

在C#中&#xff0c;线程用于实现程序的并发执行。通过创建和管理多个线程&#xff0c;可以同时处理不同的任务或操作&#xff0c;从而提高程序性能和响应性。以下是如何在C#中使用线程的基本步骤&#xff1a; 创建新线程 // 使用System.Threading命名空间 using System.Threa…...

ETL数据集成工具DataX、Kettle、ETLCloud特点对比

ETL数据集成工具 对于数据仓库&#xff0c;大数据集成类应用&#xff0c;通常会采用ETL工具辅助完成。ETL&#xff0c;是英文 Extract-Transform-Load 的缩写&#xff0c;用来描述将数据从来源端经过抽取(extract) 、交互转换(transform) 、加载(load)至的端的过程当前的很多应…...

OpenAI:Sora视频生成模型技术报告(中文)

概述 视频生成模型作为世界模拟器 我们探索视频数据生成模型的大规模训练。具体来说&#xff0c;我们在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。我们利用transformer架构&#xff0c;在视频和图像潜在代码的时空补丁上运行。我们最大的模型Sor…...

Java基于微信小程序的乐室预约小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

Linux常见指令(一)

目录 一、基本指令 1.1ls指令 1.2pwd指令 1.3cd指令 1.4touch指令 1.5mkdir指令 1.6rmdir指令、rm指令 1.7man指令 1.8cp指令 1.9mv指令 1.10cat 一、基本指令 1.1ls指令 语法 &#xff1a; ls [ 选项 ][ 目录或文件 ] 功能&#xff1a;对于目录&#xff0c;该命令…...

大端和小端传输字节完整版

大端和小端传输字节序 大端和小端一、最高有效位、最低有效位1.MSB(Most significant Bit)最高有效位2.LSB(Least Significant Bit)最低有效位 二、内存地址三、大端和小端四、网络字节序和主机字节序五、C#位操作符六、C#中关于大端和小端的转换七、关于负数八、关于汉字编码以…...

华为23年9月笔试原题,巨详细题解,附有LeetCode测试链接

文章目录 前言思路主要思路关于f函数的剖析Code就到这&#xff0c;铁子们下期见&#xff01;&#xff01;&#xff01;&#xff01; 前言 铁子们好啊&#xff01;今天阿辉又给大家来更新新一道好题&#xff0c;下面链接是23年9月27的华为笔试原题&#xff0c;LeetCode上面的ha…...

ES实战--性能提升

触发冲刷的条件: 1.内存缓冲区已满 2.自上次冲刷后超过了一定时间 3.事务日志达到了一定阀值 对名为get-together的Elasticsearch索引执行优化操作&#xff0c;将索引中的数据段&#xff08;segments&#xff09;合并到指定的数量1 GET /get-together/_optimize?max_num_segm…...

解决ModuleNotFoundError: No module named ‘pysqlite2‘

目录 一、问题描述&#xff1a; 二、问题分析&#xff1a; 三、问题解决&#xff1a; 四、参考文章&#xff1a; 一、问题描述&#xff1a; 在重新安装的anaconda环境中自建了一个新虚拟环境&#xff0c;再安装完jupyter后&#xff08;pip install jupyter&#xff09;&am…...

腾讯云4核8G服务器够用吗?能支持多少人?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…...

React 的调度系统 Scheduler

原文地址1 原文地址2 其中startTime是任务开始的时间&#xff0c;默认是-1&#xff0c;任务开始时将任务开始时间赋值给了startTime&#xff0c; 这里意思是判断这个任务执行时间是否超过5ms(写死的)。若超过&#xff0c;则要交出。...

微服务OAuth 2.1认证授权Demo方案(Spring Security 6)

文章目录 一、介绍二、auth微服务代码1. SecurityConfig2. UserDetailsService3. 总结 三、gateway微服务代码1. 统一处理CORS问题 四、content微服务代码1. controller2. SecurityConfig3. 解析JWT Utils4. 总结 五、一些坑 书接上文 微服务OAuth 2.1认证授权可行性方案(Sprin…...

WSL使用Centos7发行版(rootfs)

参考 导入要与 WSL 一起使用的任何 Linux 发行版 microsoftWSL2 的 2.0 更新彻底解决网络问题install daemon and client binaries on linuxInstall Compose standalone WSL配置 在HOST中&#xff0c;编辑用户目录下的.wslconfig文件 我需要使用docker&#xff0c;测试发现a…...

ClickHouse--04--数据库引擎、Log 系列表引擎、 Special 系列表引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.数据库引擎1.1 Ordinary 默认数据库引擎1.2 MySQL 数据库引擎MySQL 引擎语法字段类型的映射 2.ClickHouse 表引擎3.Log 系列表引擎几种 Log 表引擎的共性是&#…...

docker的底层原理

概述&#xff1a;Docker的底层原理基于容器化技术&#xff0c;通过使用命名空间和控制组等技术实现资源的隔离与管理。 底层原理&#xff1a; 客户端-服务器架构&#xff1a;Docker采用的是Client-Server架构&#xff0c;其中Docker守护进程&#xff08;daemon&#xff09;运…...

有关光猫、路由器、交换机、网关的理解

前提 在了解计算机网络的过程中&#xff0c;出现了这四个名词&#xff1a;光猫、路由器、交换机、网络。有点模糊&#xff0c;查阅互联网相关资料&#xff0c;进行整理。如有错误&#xff0c;欢迎大家批评指正。 光猫 首先光猫是物理存在的&#xff0c;大家在家里应该都可以…...