011_异常、泛型和集合框架
异常、泛型和集合框架
- 异常
- Java的异常体系
- 异常的作用
- 自定义异常
- 异常的处理方案
- 异常的两种处理方式
- 泛型
- 泛型类
- 泛型接口
- 泛型方法、通配符和上下限
- 泛型支持的类型
- 集合框架
- 集合体系结构
- Collection
- Collection集合
- Collection的遍历方式
- 认识并发修改异常问题
- 解决并发修改异常问题的方案
- List集合
- List集合的特有方法
- ArrayList底层原理
- LinkedList的底层原理
- LinkedList的应用场景
异常
- 异常代表程序出现的问题。
Java的异常体系
- Java.lang.Throwable
- Error
- Exception
- RuntimeException
- …
- 其他异常…
- RuntimeException
- Error:代表的系统级别错误(属于严重问题),也就是说系统一旦出现问题,sun公司会把这些问题封装为Error对象给出来。
- Exception:叫异常:它代表的才是我们程序可能出现的问题,所以通常会用Exception以及它的孩子来封装程序出现的问题。
- 运行时异常:RuntimeException及其子类,编译阶段不会出现错误提醒,运行时出现的异常
- 编译时异常:“其他异常…” 编译阶段就会出现错误提醒的。
- 抛出异常(throws)
- 在方法上使用throws关键字,可以将方法内部出现的异常抛出去给调用者处理。
方法 throws 异常1 ,异常2 ,异常3 ..{…
}
- 捕获异常(try…catch)
- 直接捕获程序出现的异常。
try{// 监视可能出现异常的代码!
}catch(异常类型1 变量){// 处理异常
}catch(异常类型2 变量){// 处理异常
}...
异常的作用
- 异常使用来定位程序bug的关键信息。
- 可以作为方法内部的一种特殊返回值,以便通知上层调用者,方法的执行问题。
自定义异常
- Java无法为这个世界上全部的问题都提供异常类来代表, 如果企业自己的某种问题,想通过异常来表示,以便用异常来管理该问题,那就需要自己来定义异常类了。
- 自定义运行时异常
- 定义一个异常继承RuntimeException。
- 重写构造器。
- 通过 throw new 异常类(xxx)来创建异常对象抛出
- 特点:编译阶段不报错,运行时才可能出现,提醒不属于激进型。
- 自定义编译时异常
- 定义一个异常继承Exception。
- 重写构造器。
- 通过 throw new 异常类(xxx)创建异常对象并抛出。
- 特点:编译阶段就报错,提醒比较激进。
异常的处理方案
- 方案一:底层异常层层往上抛出,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示。
- 方案二:最外层捕获异常后,尝试重新修复。
异常的两种处理方式
- 抛出异常(throws)
方法 throws 异常1 ,异常2 ,异常3 ..{…
}
- 捕获异常(try…catch)
try{// 监视可能出现异常的代码!
}catch(异常类型1 变量){// 处理异常}catch(异常类型2 变量){// 处理异常
}...
泛型
- 定义类、接口、方法是,同时声明了一个或多个类型变量(如:)
- 称为泛型类、泛型接口、泛型方法,它们统称为泛型。
public class ArrayList<E>{. . .
}
- 作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力. 这样可以避免强制类型转换,及其可能出现的异常。
- 泛型的本质:把具体的数据类型作为参数给类型变量。
泛型类
修饰符 class 类名<类型变量,类型变量,…> {
}
- 类型变量建议用大写的英文字母,常用的有:E、T、K、V 等
泛型接口
修饰符 interface 接口名<类型变量,类型变量,…> {
}
泛型方法、通配符和上下限
- 泛型方法
修饰符 <类型变量,类型变量,…> 返回值类型 方法名(形参列表) { }
- 通配符
- 就是 “?”,可以在 “使用泛型” 的时候代表一切类型; E T K V 是在定义泛型的时候使用。
- 泛型的上下限:
- 泛型上限:? extends Car: ? 能接收的必须是Car或者其子类 。
- 泛型下限:? super Car:? 能接收的必须是Car或者其父类。
泛型支持的类型
- 泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。
- 可以使用基本数据类型的包装类。
集合框架
- 集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。
集合体系结构
- Collection 代表单列集合,每个元素(数据)只包括一个值。
- Map 代表双列集合,每个元素包含两个值(键值对)。
Collection
- Collection
- List
- ArrayList
- LinkedList
- Set
- HashSet
- LinkedHashSet
- TreeSet
- HashSet
- List
- Collection集合特点
- List系列集合:添加的元素是有序、可重复、有索引。
- ArrayList、LinekdList:有序、可重复、无索引。
- Set系列集合:添加的元素是无序、不重复、无索引。
- HashSet:无序、不重复、无索引。
- LinkedHashSet:有序、不重复、无索引。
- TreeSet:按照大小默认升序排序、不重复、无索引。
- List系列集合:添加的元素是有序、可重复、有索引。
Collection集合
- Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。
方法名 | 说明 |
---|---|
public boolean add(E e) | 把给定的对象添加到当前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把给定的对象在当前集合中删除 |
public boolean contains(Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty() | 判断当前集合是否为空 |
public int size() | 返回集合中元素的个数。 |
public Object[] toArray() | 把集合中的元素,存储到数组中 |
Collection的遍历方式
- 迭代器遍历
- 迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
方法名称 | 说明 |
---|---|
Iterator iterator() | 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素 |
- Iterator迭代器中的常用方法
方法名称 | 说明 |
---|---|
boolean hasNext() | 询问当前位置是否有元素存在,存在返回true ,不存在返回false |
E next() | 获取当前位置的元素,并同时将迭代器对象指向下一个元素处。 |
- 增强 for 循环
- 增强for可以用来遍历集合或者数组
- 增强for遍历集合,本质就是迭代器遍历集合的简化写法。
for (元素的数据类型 变量名 : 数组或者集合) {
}
- Lambda表达式
- JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。
方法名称 | 说明 |
---|---|
default void forEach(Consumer<? super T> action) | 结合lambda遍历集合 |
Collection<String> lists = new ArrayList<>();
...
lists.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}
});
- 简化
Collection<String> lists = new ArrayList<>();
...
lists.forEach(s -> {System.out.println(s);
});
// lists.forEach(s -> System.out.println(s));
认识并发修改异常问题
- 遍历集合的同时又存在增删集合元素的行为时可能出现业务异常,这种现象被称之为并发修改异常问题。
解决并发修改异常问题的方案
- 如果集合支持索引,可以使用for循环遍历,每删除数据后做 i–;或者可以倒着遍历。
- 可以使用迭代器遍历,并用迭代器提供的删除方法删除数据。
- 增强for循环/Lambda遍历均不能解决并发修改异常问题,因此增它们只适合做数据的遍历,不适合同时做增删操作。
List集合
- ArrayList和LinkedList,底层实现不同,适应的场景不同。
List集合的特有方法
- List集合因为支持索引,所以多了很多与索引相关的方法。
方法名称 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
- List集合支持的遍历方式
- for循环
- 迭代器
- 增强for循环
- Lambda表达式
ArrayList底层原理
- ArrayList底层是基于数组存储数据的。
- 数组的特点
-
查询速度快:查询数据通过地址值和索引定位,查询任意数据耗时相同。
-
增删数据效率低:可能需要把后面很多的数据进行前移。
-
LinkedList的底层原理
- LinkedList底层是基于链表存储数据的。
- 基于双链表实现的。
- 特点:查询慢,增删相对较快,但对首尾元素进行增删改查的速度是极快的。
- 基于双链表实现的。
- 链表的特点:
- 链表中的数据是一个一个独立的结点组成的,结点在内存中是不连续的,每个结点包含数据值和下一个结点的地址。
- 查询慢,无论查询哪个数据都要从头开始找。
- 链表增删相对快.
- 双链表:对首尾元素进行增删改查的速度是极快的。
- LinkedList新增了很多首尾操作的特有方法。
方法名称 | 说明 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
LinkedList的应用场景
- 用来设计队列
- 队列的特点:先进先出,后进后出。
- 用来设计栈
- 栈的特点:后进先出,先进后出。
- 数据进入栈模型的过程称为:压/进栈(push)
- 数据离开栈模型的过程称为:弹/出栈(pop)
- 使用首尾元素,用Linked来实现很合适。
相关文章:
011_异常、泛型和集合框架
异常、泛型和集合框架 异常Java的异常体系异常的作用 自定义异常异常的处理方案异常的两种处理方式 泛型泛型类泛型接口泛型方法、通配符和上下限泛型支持的类型 集合框架集合体系结构Collection Collection集合Collection的遍历方式认识并发修改异常问题解决并发修改异常问题的…...
QTSql全解析:从连接到查询的数据库集成指南
概览 与数据库的有效集成是确保数据管理效率和应用性能的关键,Qt框架就提供了强大的QtSql模块,使得开发者能够轻松地进行数据库操作,包括连接、查询执行以及结果处理等 一、引入QtSql模块 首先,需要在项目中引入QtSql模块&…...
docker快捷打包脚本(ai版)
直接进入主题: 用这个脚本前提是你本地可以拉镜像仓库的镜像,并且在 本地有了,然后将所有的镜像tag写在一个文件中,和下面docker_tags.txt 对应,文件叫什么,脚本里对应改什么,给小白说的 #!/bi…...
分布式防护节点秒级切换:实战配置与自动化运维
摘要:针对DDoS攻击导致节点瘫痪的问题,本文基于群联AI云防护的智能调度系统,详解如何实现节点健康检查、秒级切换与自动化容灾,并提供Ansible部署脚本。 一、分布式节点的核心价值 资源分散:攻击者难以同时击溃所有节…...
TBE(TVM的扩展)
算子 张量 一个张量只有一种数据类型 在内存中只能线性存储,最终形成一个长的一维数组 晟腾AI的数据格式 AIPP是对我们常见的数据格式转化成AI core支持的数据格式 广播机制 TVM TBE的第一种开发方式:DSL TBE的第二种开发方式:TVM TBE的第…...
Jenkins配置的JDK,Maven和Git
1. 前置 在配置前,我们需要先把JDK,Maven和Git安装到Jenkins的服务器上。 (1)需要进入容器内部,执行命令:docker exec -u root -it 容器号/容器名称(2选1) bash -- 容器名称 dock…...
核心案例 | 湖南汽车工程职业大学无人机操控与编队技术实验室
核心案例 | 湖南汽车工程职业大学无人机操控与编队技术实验室 为满足当今无人机行业应用需求,推动无人机技术的教育与实践深度融合,北京卓翼智能科技有限公司旗下品牌飞思实验室与湖南汽车工程职业大学强强联手,共同建设无人机操控与编队技术…...
【阻抗匹配】
自动匹配的实现: 检测反射信号:通过传感器(如定向耦合器)监测反射功率或驻波比(SWR),判断是否失配。控制单元:利用微控制器或专用芯片(如FPGA)分析检测数据&a…...
micro常用快捷键
micro常用快捷键 以下是 micro 编辑器 的常用快捷键整理,按功能分类清晰,方便快速查阅: 1. 基础操作 快捷键功能Ctrl S保存文件Ctrl Q退出编辑器Ctrl O打开文件Ctrl E打开命令栏(输入命令)Ctr…...
DNS域名解析服务
目录 DNS系统 DNS系统的作用 DNS系统的类型(服务器分类) 1. 递归解析器(Recursive Resolver) 2. 根域名服务器(Root Name Server) 3. 顶级域服务器(TLD Name Server)…...
Linux的目录结构
倒根树状结构 【注意】 / 表示根目录,相当于Windows的C盘 进入跟目录命令: cd / /bin:存放的系统命令或二进制文件,如:cd ls cp等 /sbin /usr/bin /dev:存放的设备节点文件 , 驱动文件 /…...
【Python】Python 100题 分类入门练习题 - 新手友好
Python 100题 分类入门练习题 - 新手友好篇 - 整合篇 一、数学问题题目1:组合数字题目2:利润计算题目3:完全平方数题目4:日期天数计算题目11:兔子繁殖问题题目18:数列求和题目19:完数判断题目21…...
Three.js 系列专题 7:性能优化与最佳实践
内容概述 随着 3D 场景复杂度的增加,性能优化变得至关重要。Three.js 项目可能因几何体数量、纹理大小或渲染设置而变慢。本专题将介绍减少 draw call、优化纹理和使用调试工具的最佳实践。 学习目标 学会减少 draw call 和几何体复杂度。掌握纹理压缩与内存管理。使用 Stat…...
特权FPGA之Johnson移位
完整代码: module johnson(clk,rst_n,led,sw1_n,sw2_n,sw3_n);input clk; //时钟信号,50MHz input rst_n; //复位信号,低电平有效 output[3:0] led; //LED控制,1--灭…...
聊聊 CSS
先补充一些概念 C/S(客户端/服务器):要下载到本地才能用 需要安装、偶尔更新、不跨平台 B/S(浏览器/服务器):在浏览器输入网址就可以使用 无需安装、无需更新、可跨平台 [!NOTE] B/S 架构优点如此之多&am…...
域名系统DNS
一 概述 域名系统DNS是互联网使用的命名系统,用来把便于人们使用的机器名称转换为IP地址,比如我们熟知的www.baidu.com,www.sina.com,这些域名的背后都对应着一个又一个的IP地址。由域名转换为IP的过程我们称为解析,解析的过程大…...
大模型ui设计SVG输出
你是一位资深 SVG 绘画设计师,现需根据以下产品需求创建SVG方案: 产品需求 约拍app 画板尺寸: 宽度:375px(基于提供的HTML移动设计)高度:812px(iPhone X/XS 尺寸) 配…...
利用securecrt的tftp服务器功能传递文件
日常经常能用到需要调测一些openwrt设备,要互相拷贝文件,没有开启ftp功能时,这时可以用到crt的tftp内置服务器功能,利用tftp功能传递文件。 配置方法: 打开设置→全局配置→终端→tftp配置设置c上内置tftp服务器时&a…...
基于STM32、HAL库的IP2736U快充协议芯片简介及驱动程序设计
一、简介: IP2736U是一款高性能的USB Type-C和Power Delivery(PD)控制器芯片,支持最新的USB PD 3.0规范。它具有以下特点: 支持USB Type-C和PD 3.0协议 内置MCU,可编程配置 支持多种供电角色(Source/Sink/DRP) 支持PPS可编程电源 支持多种快充协议(PD/QC/AFC/FCP/SCP等) I…...
SQL学习笔记七
第九章用正则表达式进行搜索 9.1正则表达式介绍 正则表达式是用来匹配文本的特殊的串(字符集合)。如果你想从一个文本文件中提取电话号码,可以使用正则表达式。如果你需要查找名字中间有数字的所有文件,可以 使用一个正则表达式…...
MicroPython 开发ESP32应用教程 之 Timer、GPIO中断
随着我们课程的递进,大家会发现,我们之前课程中的例子,虽然功能都能实现,但总觉得体验感不够好,比如按键控制GRB灯珠的时候,很容易出现按键后,灯珠没有反应,还有蓝牙发送指令控制灯珠…...
【区块链安全 | 第三十七篇】合约审计之获取私有数据(一)
文章目录 私有数据访问私有数据实例存储槽Solidity 中的数据存储方式1. storage(持久化存储)定长数组变长数组 2. memory(临时内存)3. calldata 可见性关键字私有数据存储风险安全措施 私有数据 私有数据(Private Dat…...
20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常出现的list-iodomain.sh警告信息
rootrk3566-buildroot:/usr/bin# vi list-iodomain.sh rootrk3566-buildroot:/usr/bin# sync 【最后】 #chk_env #get_chip_id $1 #echo_msg "Get CHIP ID: $CHIP_ID" #get_iodomain_val 20250408在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统时拿掉经常…...
上下拉电阻详解
一、基本定义 上拉电阻:连接信号线与电源(VCC),确保信号在无驱动时保持高电平。 下拉电阻:连接信号线与地(GND),确保信号在无驱动时保持低电平。 二、核心作用 电平稳定 防止悬空引…...
特权FPGA之数码管
case语句的用法: 计数器不断的计数,每一个num对应数码管一种数据的输出。实例通俗易懂,一目了然。 timescale 1ns / 1ps// Company: // Engineer: // // Create Date: // Design Name: // Module Name: // Project Name: //…...
PyTorch 学习笔记
环境:python3.8 PyTorch2.4.1cpu PyCharm 参考链接: 快速入门 — PyTorch 教程 2.6.0cu124 文档 PyTorch 文档 — PyTorch 2.4 文档 快速入门 导入库 import torch from torch import nn from torch.utils.data import DataLoader from torchvision …...
MCP基础学习计划:从MCP入门到项目构建的全面指南
文章简介 ai生成的学计划有的连接是无效的,想着边学习边找输出文章,后续会继续链接更新 在人工智能和大语言模型(LLM)的快速发展下,掌握Model Context Protocol(MCP)成为提升AI应用能力的关键。…...
NO.77十六届蓝桥杯备战|数据结构-单调队列|质量检测(C++)
什么是单调队列? 单调队列,顾名思义,就是存储的元素要么单调递增要么单调递减的队列。注意,这⾥的队列和普通的队列不⼀样,是⼀个双端队列。单调队列解决的问题 ⼀般⽤于解决滑动窗⼝内最⼤值最⼩值问题,以…...
【有啥问啥】深入浅出讲解 Teacher Forcing 技术
深入浅出讲解 Teacher Forcing 技术 在序列生成任务(例如机器翻译、文本摘要、图像字幕生成等)中,循环神经网络(RNN)以及基于 Transformer 的模型通常采用自回归(autoregressive)的方式生成输出…...
redis数据迁移之通过redis-dump镜像
这里写目录标题 一、redis-dump 镜像打包1.1 安装windows docker1.2 idea项目创建1.3 idea镜像打包 二、redis数据迁移2.1 数据导出2.2 数据导入 一、redis-dump 镜像打包 没有找到可用的redis-dump镜像,需要自己打包一下,这里我是在idea直接打包的 1.…...
Redis哨兵模式下执行sentinel failover mymaster命令可能导致什么风险,如何避免
在 Redis 哨兵模式下执行 SENTINEL FAILOVER mymaster 命令会强制触发主节点切换(手动故障转移),虽然这是合法的管理操作,但可能带来以下风险及规避方法: 一、潜在风险 数据丢失风险 原因:主节点可能在故障…...
软考案例分析实例答题模板
案例分析(全部为主观问答题, 总 5 大题, 第一题必选, 剩下 4 选 2, 每题 25 分, 共75分) 第一题: 案例分析——某企业信息架构优化项目 案例材料: 某企业是一家从事电子商务的大型企业, 随着业务规模的不断扩大, 现有的信息架 构已无法满足企业快速发展的需求。 企业…...
Docker+Jenkins+Gitee自动化项目部署
前置条件 docker安装成功 按照下面配置加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": ["https://register.librax.org"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker一、…...
olib开源图书
8.olib开源图书 该软件作者已开源,开源地址:开源地址:https://github.com/shiyi-0x7f/o-lib 点击该软件,使用管理员权限打开,进入界面可以搜索图书并下载pdf文件。 蓝奏云下载:https://wwph.lanzout.com/…...
react: styled-components实现原理 标签模版
styled-components是针对react中一个前端广泛使用的css-in-js样式库B站 利用标签模版 利用ES6中的 标签模版文档标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。 let a 5; let b 10;…...
AI大模型从0到1记录学习 day15
14.3.5 互斥锁 1)线程安全问题 线程之间共享数据会存在线程安全的问题。 比如下面这段代码,3个线程,每个线程都将g_num 1 十次: import time import threading def func(): global g_num for _ in range(10): tmp g_num 1 # ti…...
macbook pro查询并修改命令提示符的格式
环境 MacBook Pro 描述 我的命令提示符总是: # 前面总是多了(base) (base) yutaoyutaodeMacBook-Pro ~ % vim .zshrc (base) yutaoyutaodeMacBook-Pro ~ % source .zshrc # 期望改成下面这样: yutaoyutaodeMacBook-Pro ~ % 找…...
Baumer工业相机堡盟工业相机如何处理偶发十万分之一或百万分之一几率出现的黑图现象(C#)
Baumer工业相机堡盟工业相机如何处理偶发十万分之一或百万分之一几率出现的黑图现象(C#) Baumer工业相机Baumer工业相机出现黑图的技术背景硬件层面软件层面环境因素 实际案例演示:BaumerVCXG-53M.I.XT 防护相机项目使用环境项目反馈问题项目…...
基于Resemblyzer 声纹识别门禁系统设计
一、整体结构与思路 这份程序的核心目的是: 用麦克风录音 ➜ 识别说话人是谁 ➜ 图形化展示 ➜ 语音播报反馈 它主要由 4 个部分组成: 全局配置和依赖加载 语音采集和声纹提取逻辑 图形界面与交互(PyQt5) 语音播报反馈系统 …...
分布式数据库LSM树
LSM树的核心结构与操作流程 Log-Structured Merge Tree,日志 结构化 合并 树。 追加写:永远不改,就算是update操作,也是追加写,一直新生成文件。 刷盘触发:追加到一定程序,比如到了几M…...
2143 最少刷题数
2143 最少刷题数 ⭐️难度:中等 🌟考点:2022、前缀和、省赛、二分 📖 📚 import java.util.Scanner; import java.util.Arrays;public class Main2 {public static void main(String[] args) {Scanner sc new Sca…...
Ansible:playbook 使用when和ith_items
文章目录 playbook使用 whenplaybook 使用迭代 with_items迭代嵌套子变量 if 和 for在template中使用了,在playbook中加以区分,因此使用when进行条件判断,with_items进行循环迭代 playbook使用 when when语句,可以实现条件测试。…...
python爬取1688.item_search_best-查询榜单列表返回数据说明
在当今数字化时代,电商平台的数据蕴含着巨大的商业价值。1688作为国内领先的B2B电商平台,其商品搜索榜单数据能够为供应商、采购商以及市场研究人员提供诸多洞察。本文将详细介绍如何使用Python爬取1688的商品搜索榜单数据,并对返回数据进行说…...
数据结构(一)KMP+滑动窗口+链表+栈+队列
数据结构-链表 单链表 #include<iostream> using namespace std; const int N 100010; int head,e[N],ne[N],idx; void init() {head -1;idx 0; } void add_to_head(int x) {e[idx] x;ne[idx] head;head idx;idx; } void add(int k,int x) {e[idx] x;ne[id…...
C语言 数据结构 【队列】动态模拟实现
引言 用动态方式模拟实现队列的各个接口 一、队列的结构与概念 概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列…...
Python | 第十三章 | 多态 | 魔术方法 | 静态方法 | 抽象类
P130 多态练习题(1)2025/2/21 一、isinstance函数 基本说明: isinstance()用于判断对象是否为某个类或其子类的对象基本语法:isinstance(object,classinfo)解读形参: object:对象 classinfo:可以是类名、基本类型或者由它们组成…...
线程安全问题的原因与解决方案总结
目录 一 什么是线程安全? 二 线程安全问题的实例 三 线程安全问题的原因 1.多个线程修改共享数据 2.抢占式执行 3.修改操作不是原子的 4.内存可见性问题 5.指令重排序 四 解决方案 1.同步代码块 2.同步方法 3.加锁lock解决问题 一 什么是线程安全&…...
设计模式-模版方法
目录 什么是模版方法? 怎么理解抽象类的算法骨架? Burn功能骨架 战士类 法师类 什么是模版方法? 借助抽象类定义算法的骨架,再由具体子类实现算法的特定步骤。这种设计模式让算法的整体结构得以固定,同时又能让不…...
c# 运用策略模式与模板方法模式实例
策略模式 策略模式的核心在于定义一系列算法,把它们封装起来,并且让它们能够相互替换。策略模式让算法的变化独立于使用算法的客户端。在这个方法里,策略模式的体现如下: convertFunc 参数:这是一个委托类型的参数&a…...
基于51单片机的3路温度报警器proteus仿真
地址: https://pan.baidu.com/s/1qrCpGuzZRbeFVVjaGMffQA 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…...