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

多态实现的必要条件,实现多态的三个方法,输入一个URL的过程,死锁产生的原理和条件,进程和线程的定义及区别,进程通信的几种方式

  • 继承:面相对象编程中的核心概念,子类可以使用父类的属性和方法,无需重新编写,子类还可以添加新的属性和方法来提供特定的实现
  • 多态:同一件事,发生在不同的对象上,会产生不同的结果,传递不同的对象会调用对应类中的方法
  • 重载(Overload),同一个类中多个同名的方法,参数列表不同,提高代码复用性
  • 重写(Override),是继承中的一个概念,子类可以重写父类的方法,以后默认情况调用该方法都会执行子类的重写版本,如果还想执行父类版本的方法,可以在重写的方法里加上super.方法()

多态实现的必要条件

  1. 继承:多态性发生在有继承关系的类之间。子类继承自父类,能够继承父类的属性和方法。

  2. 方法重写:子类需要重写父类中的方法(对于privatestatic方法不适用多态,因为它们不受继承影响)。这样,当通过父类引用调用该方法时,可以执行到子类中的实现。

  3. 父类引用指向子类对象:(Animal myDog = new Dog);在程序中,需要有父类类型的引用变量指向子类对象。这是实现多态的关键,因为它允许我们以统一的接口(即父类接口)来操作不同的子类对象。

实现多态的三个方法

通过继承实现多态

// 父类
class Animal {void eat() {System.out.println("This animal eats food.");}
}// 子类 Dog
class Dog extends Animal {@Overridevoid eat() {System.out.println("Dog eats meat.");}
}// 测试类
public class TestInheritancePolymorphism {public static void main(String[] args) {Animal myDog = new Dog(); // 父类引用指向子类对象myDog.eat(); // 输出: Dog eats meat.}
}

通过接口实现多态(Override)

// 接口
interface Speakable {void speak();
}// 实现接口的类 Dog
class Dog implements Speakable {@Overridepublic void speak() {System.out.println("Woof!");}
}// 测试类
public class TestInterfacePolymorphism {public static void main(String[] args) {Speakable myDog = new Dog(); // 接口引用指向实现类对象myDog.speak(); // 输出: Woof!}
}

 使用抽象类实现多态(虽然抽象类本身不直接实现多态,但它与继承一起使用时可以)

// 抽象类
abstract class Vehicle {abstract void move();
}// 继承自抽象类的子类 Car
class Car extends Vehicle {@Overridevoid move() {System.out.println("Car is moving on wheels.");}
}// 测试类
public class TestAbstractClassPolymorphism {public static void main(String[] args) {Vehicle myCar = new Car(); // 抽象类引用指向子类对象myCar.move(); // 输出: Car is moving on wheels.}
}

输入一个URL的过程

输入一个URL到浏览器并按下回车键后,浏览器会执行一系列的操作来加载和显示网页,这个过程大致可以分为以下几个步骤:

  1. 解析URL:浏览器首先会对输入的URL进行解析,以确定协议(如HTTP、HTTPS)、主机名(域名)、端口号(默认为80或443)和路径等。

  2. DNS查询:如果URL中的主机名是域名,浏览器会向DNS服务器发送请求,将域名解析为IP地址。

  3. 建立TCP连接:浏览器通过解析得到的IP地址和端口号,与服务器建立TCP连接。如果是HTTPS,则还会在TCP连接的基础上建立SSL/TLS安全连接。

  4. 发送HTTP请求:浏览器向服务器发送HTTP请求,请求中包含了请求方法(如GET、POST)、URL、协议版本、请求头等信息。

  5. 服务器处理请求:服务器接收到请求后,会根据请求的内容进行相应的处理,如读取文件、执行数据库查询等。

  6. 服务器返回响应:服务器处理完请求后,会向浏览器返回HTTP响应,响应中包含了状态码、响应头、响应体(即网页的内容)等信息。

  7. 浏览器渲染网页:浏览器接收到响应后,会解析响应体中的HTML、CSS、JavaScript等内容,并渲染出网页的视觉效果。

  8. 连接关闭:浏览器和服务器之间的TCP连接在完成数据传输后会被关闭。如果是HTTP/1.1协议,可能会使用持久连接(Keep-Alive)来复用连接。

死锁产生的原理和条件

        死锁产生的原理主要涉及到多个进程或线程在执行过程中,因争夺资源而陷入的一种相互等待的状态,其中每个进程或线程都在等待对方释放资源以继续执行,但因为没有外力的干预,它们都无法继续推进,从而形成了死锁。

死锁产生的条件,也被称为死锁的四个必要条件,包括:

  1. 互斥条件(Mutual Exclusion):资源至少被一个进程或线程所占用,且该资源在一段时间内只能被一个进程或线程占用。即,资源是互斥的,不能被多个进程或线程同时访问。

  2. 请求与保持条件(Hold and Wait):进程或线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程或线程占用。此时,请求的进程或线程被阻塞,但它对已获得的资源保持不放。

  3. 不剥夺条件(No Preemption):进程或线程已获得的资源,在未使用完之前,不能被其他进程或线程强行剥夺。即,资源只能由持有它的进程或线程自愿释放。

  4. 循环等待条件(Circular Wait):系统中若干进程或线程之间形成了一种头尾相接的循环等待资源的关系。每个进程或线程都在等待链中下一个进程或线程所占有的资源。

        当这四个条件同时满足时,就可能发生死锁。为了避免死锁的发生,可以采取一些预防措施,如破坏死锁的四个必要条件中的至少一个,或者在检测到死锁后采取恢复措施,如撤销一些进程或线程,以解除死锁状态

进程是资源调度的独立单元:(很多app在后台,互不影响),它确保了每个程序都有自己独立的资源集合;

线程则是资源调度的基本单位:(其中一个浏览器里的一个标签页,共享浏览器的内存空间),它使得程序能够高效地并发执行多个任务。 

进程和线程的定义及区别

  • 进程:是程序运行的实例,拥有独立的资源空间,是系统资源分配和调度的基本单位。
  • 线程:是进程内的实体,共享进程资源,是CPU调度的基本单位,负责进程中的具体执行流。

区别:

  • 进程是包含线程的,每个进程里最少有一个线程
  • 进程和进程之间不共享内存空间,同一个进程里的线程共享同一个内存空间
  • 进程是系统分配资源的最小单位,进程是系统调度的最小单位

进程通信的几种方式 

在操作系统中,进程之间需要进行通信以实现协作和数据共享。以下是几种常见的进程通信方式:

1)管道(Pipe):管道是一种半双工的通信方式,它可以在两个进程之间传递数据。管道的特点是数据只能单向流动,而且通常只用于具有亲缘关系的进程之间进行通信,例如父子进程之间。

2)命名管道(Named Pipe):命名管道与管道类似,但是它可以在不具有亲缘关系的进程之间进行通信。与管道不同的是,命名管道具有一个唯一的名称,可以在文件系统中进行访问。

3)信号(Signal):信号是一种异步通信方式,它允许一个进程向另一个进程发送一个信号。信号通常用于处理异步事件,例如键盘中断、终端关闭等。

4)共享内存(Shared Memory):共享内存是一种高效的进程通信方式,它允许多个进程访问同一块物理内存,从而实现数据共享。共享内存的优点是速度快,但是需要处理并发访问和同步问题。

5)信号量(Semaphore):信号量是一种进程间同步和互斥的机制,它可以用于控制进程对共享资源的访问。信号量通常用于进程之间的同步和互斥,例如保护共享内存中的数据。

6)消息队列(Message Queue):消息队列是一种进程间通信方式,它允许进程之间传递消息。消息队列通常用于进程之间传递结构化的数据,例如进程之间传递命令和数据等。

7)套接字(Socket):套接字是一种进程间通信方式,它可以在不同的计算机之间进行通信。套接字通常用于实现分布式系统和网络通信。

相关文章:

多态实现的必要条件,实现多态的三个方法,输入一个URL的过程,死锁产生的原理和条件,进程和线程的定义及区别,进程通信的几种方式

继承:面相对象编程中的核心概念,子类可以使用父类的属性和方法,无需重新编写,子类还可以添加新的属性和方法来提供特定的实现多态:同一件事,发生在不同的对象上,会产生不同的结果,传递不同的对象会调用对应类中的方法重载(Overload),同一个类中多个同名的方法,参数列表不同,提高…...

Springboot+MybatisPlus项目中,数据库表中存放Date,查出后转为String

新增一条记录时,数据库表中会有一个gmt_created 的字段,存放创建时间。 该值在数据库中的默认值为:CURRENT_TIMESTAMP 在对应的JavaBean中,该值为 gmtCreated, 那么问题来了: 如何让在表中的Date类型&…...

JavaDS —— AVL树

前言 本文章将介绍 AVL 树的概念,重点介绍AVL 树的插入代码是如何实现的,如果大家对 AVL 树的删除(还是和二叉搜索树一样使用的是替换删除法,然后需要判断是否进行旋转调整)感兴趣的话,可以自行去翻阅其他…...

NSSCTF练习记录:[SWPUCTF 2021 新生赛]jicao

题目: 这段PHP代码的意思是: 对index.php文件进行语法高亮显示,插入flag.php文件,变量id的值为POST传递的值,变量json的值为GET传递的json类型的值。当id值为wllmNB且json中含有键为“x”,值为“wllm”的时…...

LabVIEW位移检测系统

工业控制器的位移检测在保证机械设备精确运行中发挥着重要的作用。开发了一种基于LabVIEW的高精度位移检测系统,该系统通过集成硬件与软件的优化配置,实现了对工业控制器位移的精确测量和分析。 项目背景 在传统工业生产中,位移检测系统往往…...

02、MySQL-DML(数据操作语言)

目录 1、添加数据(INSERT) 2、修改数据(UPDATE) 3、删除数据(DELETE) 1、添加数据(INSERT) 注意: 插入数据时,指定的字段顺序需要与值的顺序是一一对应的字符串和日期型数据应该包含在引号中插入的数据大小,应该在字段的规定范围内 给指定…...

vue3 项目部署到线上环境,初始进入系统,页面卡顿大概一分钟左右,本地正常无卡顿。localStorage缓存1MB数据导致页面卡顿。

使用vue3进行项目开发,前端框架使用jeecg-boot进行开发,项目初期,打包部署到生产环境,无异常。某天,进行前端项目打包部署到生产环境,突然出现异常情况,部署到线上环境,初始进入系统…...

软件更新中的风险识别与质量保证机制分析

​ ​ 您好,我是程序员小羊! “微软蓝屏”事件暴露了网络安全哪些问题? 近日,一次由微软视窗系统软件更新引发的全球性“微软蓝屏”事件,不仅成为科技领域的热点新闻,更是一次对全球IT基础设施韧性与安全性…...

QT下载与安装

我们要下载开源的QT,方式下载方式: 官网 登录地址:http://www.qt.io.com 点击右上角的Download. Try.按钮;进入一下画面: 如果进入的是以下画面: 直接修改网址:www.qt.io/download-dev; 改为w…...

Java 2.2 - Java 集合

Java 集合,也叫做容器,主要是由两大接口派生而来:一个是 Collection 接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于 Collection 接口,其下又有三个主要的子接口&#…...

Linux驱动.之I2C,iic驱动层(二)

一、 Linux下IIC驱动架构 本篇只分析,一个整体框架。 1、首先说说,单片机,的i2c硬件接口图,一个i2c接口,通过sda和scl总线,外接了多个设备device,通过单片机,来控制i2c的信号发生&…...

【STM32】USART串口和I2C通信

个人主页~ USART串口和I2C通信 USART串口一、串口1、简介2、电路要求3、参数及时序 二、USART外设1、USART结构2、波特率发生器 三、数据包1、HEX数据包HEX数据包接收 2、文本数据包文本数据包接收 I2C通信一、简介二、通信协议1、硬件电路2、I2C时序基本单元 三、I2C外设1、简…...

【Material-UI】按钮组:垂直按钮组详解

文章目录 一、按钮组概述1. 组件介绍2. 基本用法 二、垂直按钮组的应用场景1. 导航菜单2. 表单操作3. 选项切换 三、按钮组的样式定制1. 变体(Variants)2. 颜色(Colors) 四、垂直按钮组的优势1. 空间利用2. 可读性与易用性3. 视觉…...

DDR5 的优势与应用

DDR5 是新一代 DRAM 内存,具有一系列强大的功能,可提升可靠性、可用性和可维护性 (RAS),降低能耗并显著提高性能。请查看下方表格,了解 DDR4 和 DDR5 之间的一些主要特性差异。 DDR5 的优势 特性/选项 DDR4DDR5DDR5 优势数据速率…...

STM32 - 笔记

1 STM32的串口通信 【keysking的STM32教程】 第8集 STM32的串口通信_哔哩哔哩_bilibili 波特律动 串口助手...

基于QT实现的简易WPS(已开源)

一、开发工具及开源地址: 开发工具:QTCreator ,QT 5 开源地址: GitHub - Whale-xh/WPS_official: Simple WPS based on QTSimple WPS based on QT. Contribute to Whale-xh/WPS_official development by creating an acc…...

Flask-WTF 表单处理详细教程(第六阶段)

目录 Flask-WTF 表单处理详细教程1. 安装 Flask-WTF2. 创建 Flask 应用3. 创建表单类表单字段解释: 4. 渲染表单渲染模板CSRF 保护 5. 表单验证6. 处理错误7. 完整示例8. 结论 Flask-WTF 表单处理详细教程 Flask-WTF 是 Flask 框架的一个扩展,简化了 We…...

C语言 | Leetcode C语言题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; int minPatches(int* nums, int numsSize, int n) {int patches 0;long long x 1;int index 0;while (x < n) {if (index < numsSize && nums[index] < x) {x nums[index];index;} else {x << 1;patches;}}retu…...

无人机之测绘行业篇

无人机倾斜摄影技术凭借快速高效、机动灵活、成本低等优势&#xff0c;正慢慢颠覆传统测绘的作业方式&#xff0c;已成为测绘行业的“新宠”&#xff0c;将倾斜摄影技术应用到无人机上&#xff0c;实际上就是在做一个三维模型&#xff0c;而建立起来的这个模型更加真实&#xf…...

Java编程:每日挑战

目录 题目1.一个抽象类并不需要其中所有的方法都是抽象的。&#xff08; &#xff09;2.下面有关java hashmap的说法错误的是&#xff1f;A. HashMap 的实例有两个参数影响其性能&#xff1a;“初始容量” 和 “加载因子”。B. HashMap 的实现不是同步的&#xff0c;意味着它不…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...