nand flash spec

nand flash简介

nand flash是一种非易失性存储器。它具有高存储密度、低成本和高耐用性的特点。

nand flash的特性是非易失性,即在电源关闭的情况下,数据仍然保留。 nand flash的存储单元由浮动栅极晶体管组成,每个存储单元可以存储一位或多位数据。nand flash通过编程和擦除操作来写入和删除数据,这与传统的随机存取存储器 (RAM) 不同。

nand flash的基本存储类型有以下几种:

  • SLC(Single-Level Cell):每个存储单元存储 1 位数据,具有较高的速度和耐久性,但成本较高。
  • MLC(Multi-Level Cell):每个存储单元存储 2 位数据,成本较低,但速度和耐久性相对较差。
  • TLC(Triple-Level Cell):每个存储单元存储 3 位数据,进一步降低了成本,但速度和耐久性进一步下降。
  • QLC(Quad-Level Cell):每个存储单元存储 4 位数据,成本最低,但速度和耐久性最差

nand flash的架构基本如下:

块和页:NAND Flash 存储器被分成多个块,每个块又被分成多个页。数据写入以页为单位,而擦除则以块为单位。 控制器:管理 NAND Flash 的读写操作、错误纠正和磨损均衡等功能。

nand flash的主要规范如下:

  • 容量:NAND Flash 的总存储容量,通常以 GB 或 TB 为单位。

  • 页大小:NAND Flash 中最小的可写单元,通常为 2KB、4KB 或 8KB。

  • 块大小:包含的页数,每块大小通常为 64 页、128 页或 256 页。

  • 读取速度:读取数据的速度,通常以 MB/s 为单位。

  • 写入速度:写入数据的速度,通常以 MB/s 为单位。

  • 擦除时间:擦除一个块所需的时间,以毫秒(ms)为单位。

  • 耐久性:每个块可承受的编程/擦除循环次数,通常为几千到几十万次。

  • 数据保持:无电源情况下数据能够可靠保存的时间,通常为几年到十几年。

  • 接口:使用的通信接口类型,如并行接口、SPI 接口或 ONFI 标准接口。

  • 电压:核心和 I/O 操作的工作电压范围。

  • 封装:NAND Flash 的物理形态,如 TSOP、BGA 或 LGA 封装。

  • 温度范围:工作和存储温度范围。

    规范示例

    假设一个 NAND Flash 规格表如下:

    • 容量:128GB
    • 页大小:4KB
    • 块大小:256 页(1MB)
    • 读取速度:25 MB/s
    • 写入速度:10 MB/s
    • 擦除时间:2 ms
    • 耐久性:100,000 次编程/擦除循环
    • 数据保持:10 年
    • 接口:ONFI 2.2
    • 电压:1.8V 至 3.3V
    • 封装:48 针 TSOP
    • 温度范围:-40°C 至 85°C

nand 的interface 和pin脚

一个典型的 NAND Flash 存储器可以分为以下几个主要部分:

  • 存储单元阵列:由多个存储单元组成,每个存储单元可以存储 1 位或多位数据。
  • 页缓冲区:用于存储数据的临时区域,在数据写入或读取时使用。
  • 控制逻辑:负责管理数据的编程、读取和擦除操作。
  • 地址和数据寄存器:存储操作过程中用到的地址和数据。
  • 状态寄存器:存储当前操作的状态信息,如忙/闲状态、错误状态等。
  • 接口控制器:负责与外部主机进行通信

NAND Flash 存储器主要通过以下几种接口与外部设备通信:

  • 并行接口:传统的 NAND Flash 使用 8 位或 16 位并行接口进行数据传输,数据传输速率较高,适用于高速存储需求。
  • 串行接口:如 SPI (Serial Peripheral Interface) NAND,采用串行数据传输方式,接口简单,适用于较低数据传输速率的应用场景。
  • ONFI (Open NAND Flash Interface):一种标准化的 NAND Flash 接口协议,旨在提高 NAND Flash 的兼容性和互操作性。

以下是常见的 NAND Flash 存储器引脚及其功能描述:

  • CE# (Chip Enable):芯片使能引脚,低电平有效。当 CE# 低电平时,芯片被选中,可以进行数据传输操作。
  • CLE (Command Latch Enable):命令锁存使能引脚,高电平有效。当 CLE 高电平时,写入的数据被解释为命令
  • ALE (Address Latch Enable):地址锁存使能引脚,高电平有效。当 ALE 高电平时,写入的数据被解释为地址。
  • WE# (Write Enable):写使能引脚,低电平有效。当 WE# 低电平时,数据被写入 NAND Flash。
  • RE# (Read Enable):读使能引脚,低电平有效。当 RE# 低电平时,数据从 NAND Flash 读取。
  • WP# (Write Protect):写保护引脚,低电平有效。当 WP# 低电平时,禁止写入和擦除操作,保护存储器数据。
  • R/B# (Ready/Busy):就绪/忙引脚,低电平表示存储器忙,高电平表示存储器就绪。
  • IO0-IO7 (或 IO0-IO15):数据输入/输出引脚,用于传输数据、命令和地址。
  • VCC:电源引脚,为 NAND Flash 提供工作电压。
  • VSS (GND):地引脚,提供电路参考地。

nand flash的组成和寻址方式

NAND Flash 的组成如下:

1.存储单元队列

  • 页 (Page):最小的可编程和可读取单元。典型的页大小是 2KB、4KB 或 8KB。
  • 块 (Block):由多个页组成,通常是 64、128 或 256 页。擦除操作以块为单位进行。
  • 平面 (Plane):由多个块组成,通常一个 NAND Flash 芯片有一个或多个平面。
  • 晶圆 (Die):由一个或多个平面组成。一个 NAND Flash 芯片可以包含一个或多个晶圆。

2.页缓冲区:用于临时存储数据的缓冲区,在数据写入和读取过程中使用。

3.控制逻辑:包括命令解码、地址生成、数据传输控制和错误校正码 (ECC) 等。

4.地址和数据寄存器:用于存储地址和数据,在传输过程中使用。

5.状态寄存器:用于存储当前操作的状态信息,如忙/闲状态、错误状态等。

6.接口控制器:负责与外部主机进行通信。

NAND Flash 的寻址方式

NAND Flash 的寻址方式包括逻辑地址和物理地址。逻辑地址是主机系统看到的地址,而物理地址是实际存储单元的地址。以下是 NAND Flash 的寻址机制:

逻辑到物理地址转换

由于 NAND Flash 存储器的磨损均衡 (Wear-Leveling) 和坏块管理 (Bad Block Management) 机制,逻辑地址与物理地址之间通常存在映射关系。这种映射关系由 NAND Flash 控制器管理。

物理地址结构

页地址:

​ 页地址用于选择具体的页。页地址包括平面地址、块地址和页内偏移。

​ 页地址的高位用于选择平面,中间位用于选择块,低位用于选择页。

块地址:

​ 块地址用于选择具体的块。块地址的高位用于选择平面,中间位用于选择块。

​ 一个块内包含多个页。

平面地址:

​ 平面地址用于选择具体的平面。平面地址的高位用于选择平面。

地址格式示例

假设一个 NAND Flash 存储器具有以下参数:

每页大小:4KB

每块包含页数:128 页

每平面包含块数:1024 块

每芯片包含平面数:2 个

一个具体地址可以表示为:

  • 页地址 (低 12 位):用于选择页内偏移
  • 块地址 (中间 10 位):用于选择块
  • 平面地址 (高 1 位):用于选择平面
  • 完整地址格式:平面地址 (1 位) + 块地址 (10 位) + 页地址 (12 位)

nand flash的各个cmd的功能以及作用场景

读取命令

读页命令 (Read Page):

  • 功能:从指定的页读取数据。
  • 使用场景:需要从 NAND Flash 中读取数据时使用。
  • 典型命令序列:发送读命令,指定页地址,然后读取数据。

写入命令

页编程命令 (Page Program):

  • 功能:将数据写入指定的页。
  • 使用场景:需要将数据存储到 NAND Flash 时使用。
  • 典型命令序列:发送写命令,指定页地址,传输数据,然后发送确认命令以开始编程。

擦除命令

块擦除命令 (Block Erase):

  • 功能:擦除指定块的所有数据。
  • 使用场景:需要清空一个块的数据,以便写入新数据时使用。
  • 典型命令序列:发送擦除命令,指定块地址,然后发送确认命令以开始擦除。

状态命令

读状态命令 (Read Status):

  • 功能:读取 NAND Flash 当前的状态。
  • 使用场景:需要检查 NAND Flash 是否忙碌,或者是否有错误发生时使用。
  • 典型命令序列:发送读状态命令,然后读取状态寄存器。

初始化和复位命令

复位命令 (Reset):

  • 功能:复位 NAND Flash,使其进入初始状态。
  • 使用场景:在进行大规模操作前,需要确保 NAND Flash 处于已知状态时使用。
  • 典型命令序列:发送复位命令,然后等待复位完成。

隐藏命令

缓存读取命令 (Cache Read):

  • 功能:从缓存中读取数据,提高读取速度。
  • 使用场景:需要快速连续读取多个页的数据时使用。
  • 典型命令序列:发送缓存读命令,然后读取数据。

随机数据读取命令 (Random Data Read):

  • 功能:从页内的任意位置读取数据。
  • 使用场景:需要从特定位置读取数据时使用。
  • 典型命令序列:发送随机读命令,指定地址,然后读取数据。 命令执行的流程示例 写入操作 发送页编程命令:将命令发送到 CLE。 指定地址:将要写入的页地址发送到 ALE。 传输数据:将数据发送到数据寄存器。 开始编程:发送确认命令,启动编程过程。 读取操作 发送读页命令:将命令发送到 CLE。 指定地址:将要读取的页地址发送到 ALE。 读取数据:从数据寄存器中读取数据。

reset 在各个sequence下的复位时序

理解 NAND Flash 存储器中的复位命令(Reset)的时序对确保设备正确初始化和恢复正常工作至关重要。复位命令会将 NAND Flash 重置到初始状态,清除所有进行中的命令并返回到空闲状态。以下是不同操作序列中的复位时序解释:

复位时序

复位命令通常包括以下步骤:

  1. 发送复位命令:在命令锁存使能(CLE)高电平时,将复位命令(通常为 0xFF)发送到 NAND Flash。
  2. 等待复位完成:复位操作需要一些时间来完成,这段时间称为复位时间(tRST)。 可以通过查询就绪/忙(R/B#)引脚或读取状态寄存器来确认复位是否完成。
  3. 检查状态寄存器:复位完成后,可以读取状态寄存器以确保 NAND Flash 处于正常状态。

复位命令在不同操作中的使用

  1. 在初始化过程中 在系统启动时,为了确保 NAND Flash 处于已知状态,发送复位命令。 确保所有寄存器和内部状态清除,准备接收新的命令。
  2. 在错误恢复过程中 当发生错误或意外情况时,复位命令用于恢复 NAND Flash 的正常工作状态。 例如,在编程或擦除操作失败后,可以发送复位命令进行恢复。

复位时序示例

在这个时序图中:

       ____________________________
CE#  __|                            |__
        ___________                 _______
CLE  __|           |_______________|
        ___________                 _______
WE#  __|           |_______________|
                    _______________________
IOx  | 0xFF       |
       ____________________________
R/B# |____________________________|
  • CE#:芯片使能引脚
  • CLE:命令锁存使能引脚
  • WE#:写使能引脚
  • IOx:数据引脚
  • R/B#:就绪/忙引脚
  1. CE# 低电平:选中芯片。
  2. CLE 高电平:命令锁存使能。
  3. WE# 低电平:写使能。
  4. 发送复位命令(0xFF):通过数据引脚传输命令。
  5. 等待 R/B# 高电平:表示复位完成。

不同操作序列中的复位命令

  • 在写操作中的复位 如果写操作过程中发生错误,可以发送复位命令清除错误状态,恢复 NAND Flash 的正常工作。
  • 在读操作中的复位 在读操作过程中,如果 NAND Flash 进入不可预期的状态,可以通过复位命令恢复正常状态。

通过理解复位命令的时序,可以确保 NAND Flash 在各种操作场景中正确恢复并准备接收新的操作命令。

read id的应用场景以及解析方法

应用场景

  1. 设备识别:在系统启动时,使用 Read ID 命令识别连接的 NAND Flash 芯片型号和制造商,以便选择正确的驱动程序和配置。
  2. 兼容性检查:确保主控芯片(如微控制器或 FPGA)能够识别和正确配置不同型号的 NAND Flash 存储器。
  3. 诊断和调试:在开发和调试过程中,通过读取 ID 来确认 NAND Flash 芯片型号和版本,帮助定位和解决问题。

解析方法

  1. 发送 Read ID 命令:向 NAND Flash 发送 Read ID 命令(通常为 0x90)。

  2. 读取 ID 数据:按顺序读取一系列字节,这些字节包含制造商 ID、设备 ID、第三、第四和第五字节等信息。

读取 ID 数据的结构示例

假设 NAND Flash 返回如下 ID 数据:

  • 第1字节:制造商 ID(如 0x2C)
  • 第2字节:设备 ID(如 0xA1)
  • 第3字节:扩展信息
  • 第4字节:保留
  • 第5字节:保留

解析步骤:

  • 制造商 ID:识别 NAND Flash 的制造商,例如 0x2C 对应 Micron。
  • 设备 ID:识别具体的 NAND Flash 型号,例如 0xA1 对应某型号。
  • 扩展信息:包含页大小、块大小、平面数等具体参数。

示例解析

假设读取到以下数据:0x2C(制造商 ID) 0xA1(设备 ID) 0x90(扩展信息) 0x15(保留) 0x00(保留)

解析:

  • 0x2C:Micron 制造商 ID。
  • 0xA1:设备 ID,对应特定型号。
  • 0x90:扩展信息,可能表示页大小为 4KB,块大小为 128 页。
  • 其余字节保留或未使用。

通过读取和解析这些 ID 数据,系统能够正确识别和配置 NAND Flash 存储器,确保兼容性和正常运行。

interface change 和driver strength setting

Interface Change 主要指在 NAND Flash 和主控芯片之间改变通信接口的模式或速率

应用场景

  • 不同模式切换: 切换 NAND Flash 通信模式,如从传统的并行接口切换到 ONFI(开放 NAND 闪存接口)标准。
  • 速率调整: 根据系统需求调整数据传输速率,提高数据传输效率。

Driver Strength Setting 指调整 NAND Flash 芯片驱动信号的强度,以适应不同的负载条件和信号完整性要求。

应用场景

  • 信号完整性: 在长电缆或高速传输情况下,增强驱动强度以减少信号衰减和噪声干扰。

  • 功耗优化: 在短距离或低速传输情况下,降低驱动强度以减少功耗。

Interface Change 示例

假设从传统的并行接口切换到 ONFI 3.0 标准:

  • 发送切换命令:主控芯片发送接口切换命令。
  • 配置寄存器:设置相关寄存器以启用新的接口模式。
  • 确认切换:通过读取状态寄存器确认切换成功。

Driver Strength Setting 示例

假设在高速数据传输情况下需要增强驱动强度:

  • 发送设置命令:主控芯片发送驱动强度设置命令。
  • 配置寄存器:调整驱动强度寄存器以设置新的强度值。
  • 确认设置:通过读取状态寄存器确认设置成功。 通过合理的 Interface Change 和 Driver Strength Setting,能够优化 NAND Flash 的性能和可靠性。

各个sequence的基本时序

读操作时序

步骤:

  • 发送读命令:在 CLE 高电平时,发送读命令。
  • 发送地址:在 ALE 高电平时,发送页地址和列地址。
  • 读取数据:等待数据准备好,通过数据引脚读取数据。
       ____________________________
CE#  __|                            |__
        ___________                 _______
CLE  __|           |_______________|
        ___________                 _______
WE#  __|           |_______________|
                    _______________________
IOx  | 命令        | 地址         | 数据
       ____________________________
R/B# |____________________________|

写操作时序

步骤:

  • 发送写命令:在 CLE 高电平时,发送写命令。
  • 发送地址:在 ALE 高电平时,发送页地址和列地址。
  • 传输数据:在 WE# 低电平时,通过数据引脚传输数据。
  • 发送编程确认命令:在 CLE 高电平时,发送编程确认命令。
  • 等待编程完成:通过 R/B# 引脚检测编程完成状态。
       ____________________________
CE#  __|                            |__
        ___________                 _______
CLE  __|           |_______________|
        ___________                 _______
WE#  __|           |_______________|
                    _______________________
IOx  | 命令        | 地址         | 数据
       ____________________________
R/B# |____________________________|

擦除操作时序

步骤:

  • 发送擦除命令:在 CLE 高电平时,发送擦除命令。
  • 发送块地址:在 ALE 高电平时,发送块地址。
  • 发送擦除确认命令:在 CLE 高电平时,发送擦除确认命令。
  • 等待擦除完成:通过 R/B# 引脚检测擦除完成状态。
       ____________________________
CE#  __|                            |__
        ___________                 _______
CLE  __|           |_______________|
        ___________                 _______
WE#  __|           |_______________|
                    _______________________
IOx  | 命令        | 地址         | 确认
       ____________________________
R/B# |____________________________|

复位操作时序

步骤:

  • 发送复位命令:在 CLE 高电平时,发送复位命令(0xFF)。
  • 等待复位完成:通过 R/B# 引脚检测复位完成状态。
       ____________________________
CE#  __|                            |__
        ___________                 _______
CLE  __|           |_______________|
        ___________                 _______
WE#  __|           |_______________|
                    _______________________
IOx  | 0xFF       |
       ____________________________
R/B# |____________________________|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/762939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车零部件材料耐候性测试氙光太阳辐射系统试验箱

概述 汽车零部件等领域的材料耐候性测试是一项关键的质量控制环节,它关乎汽车部件在各种气候条件下的性能表现和寿命。塑料件光照老化实验箱,即氙灯老化试验箱,在其中扮演着至关重要的角色。通过模拟自然环境中的光照、温度、湿度等条件&…

顺序表(C语言详细版)

1. 线性表 线性表(lina list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...... 线性表在逻辑上是线性结构,也就是说连续的一条直线。但是在物理结构上并…

开源205W桌面充电器,140W+65W升降压PD3.1快充模块(2C+1A口),IP6557+IP6538

开源一个基于IP6557和IP6538芯片的205W升降压快充模块(140W65W),其中一路C口支持PD3.1协议,最高输出28V5A,另一路是A口C口,最高输出65W(20V3.25A),可搭配一个24V10A的开关…

Ubuntu20.04 安装 cudatookit 12.2 + cudnn 安装

最简约的部署Ubuntu20.04深度学习环境的教程 1. 安装Ubuntu20.04 系统 B站详细的安装教程 简约安装版 2. 安装Nvidia显卡驱动 我参考了各种资料,重装系统,完美解决开机显示器黑屏无法进入桌面的情况 黑屏问题主要是由linux内核更新导致,…

混合注意力机制 -- Convolutional Block Attention Module(CBAM)

CBAM CBAM 模块概述 通道注意力模块(Channel Attention Mechanism)和空间注意力模块(Spatial Attention Mechanism)是注意力机制的两种主要形式,它们分别通过对通道维度和空间维度的特征图进行加权,从而使…

算法金 | Transformer,一个神奇的算法模型!!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在现代自然语言处理(NLP)领域,Transformer 模型的出现带来了革命性的变…

每日一题-验证回文串

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” //验证回文串 #include<vector> class Solution { public:bool reverseString(char s) {return (s > a && s < z) ||(s > 0 && s < 9) ||(s…

Lesson 43 Hurry up!

Lesson 43 Hurry up! 词汇 of course 当然【口语】 经常出现在口语交际中&#xff1a; Of course not. 当然不。 同义词&#xff1a; Certainly 当然。 Certainly not. 当然不。 注意语气&#xff1a;略带挑衅。Sure. 当然。 Sure not. 当然不。 Not sure. 不一定。 kettle…

Pandas 学习笔记(一)

一、pandas简介 Pandas 是 Python 语言的一个扩展程序库&#xff0c;用于数据分析。 Pandas 名字衍生自术语 "panel data"&#xff08;面板数据&#xff09;和 "Python data analysis"&#xff08;Python 数据分析&#xff09;。 Pandas 是一个开放源码…

Python + OpenCV 酷游地址教学V鄋KWK3589

本篇文章汇整了一系列的Python OpenCV 教学&#xff0c;只要按照教学文的顺序阅读和实作&#xff0c;就可以轻松入门OpenCV&#xff0c;并透过OpenCV 实现许多影像相关的创意应用。 接下来我们来介绍OpenCV-- OpenCV 是一个跨平台的电脑视觉函式库( 模组) &#xff0c;可应用…

CesiumJS【Basic】- #042 绘制纹理线(Primitive方式)

文章目录 绘制纹理线(Primitive方式)1 目标2 代码2.1 main.ts3 资源文件绘制纹理线(Primitive方式) 1 目标 使用Primitive方式绘制纹理线 2 代码 2.1 main.ts var start = Cesium.Cartesian3

SSM泰华超市商品管理系统-计算机毕业设计源码11946

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据新增流程 3.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

一键把二次元老婆拉进现实(Stable Diffusion进阶:ControlNet LineArt模型)

大家好我是极客菌&#xff01;&#xff01;&#xff01; 操作&#xff0c;就能将二次元老婆拉进现实&#xff0c;成为你的专属女友。本文将带你深入了解ControlNet LineArt模型的使用方法&#xff0c;助你轻松实现这一梦想。 ControlNet LineArt模型是Stable Diffusion的最新…

AI大模型日报#0701:Meta发布LLM Compiler、扒一扒Sora两带头人博士论文

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff01;《AI大模型日报》今日要点&#xf…

32.哀家要长脑子了!

1.299. 猜数字游戏 - 力扣&#xff08;LeetCode&#xff09; 公牛还是挺好数的&#xff0c;奶牛。。。妈呀&#xff0c;一朝打回解放前 抓本质抓本质&#xff0c;有多少位非公牛数可以通过重新排列转换公牛数字&#xff0c;意思就是&#xff0c;当这个数不是公牛数字时&#x…

控制器方法执行流程和 @InitBinder【Spring源码学习】

控制器方法执行流程 InitBinder 加在ControllerAdvice中 首先说明ControllerAdvice和aop没有任何关系&#xff01; 加在ControllerAdvice中只对所有控制器都生效 全局的在开始时就会保存到handlerMappingAdapter中的cache中&#xff1b; 加在Controller中 加在controller中只对…

TS---typescript的安装和tsc命令使用

什么是TS---typescript&#xff1f; &#xff08;TypeScript是Microsoft公司注册商标&#xff09; TypeScript具有类型系统&#xff0c;且是JavaScript的超集&#xff0c; 它可以编译成普通的JavaScript代码。TypeScript支持任意浏览器&#xff0c;任意环境&#xff0c;任意系…

仓库管理系统24--统计报表

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、引用LiveCharts 2、创建LiveChartViewModel using GalaSoft.MvvmLight; using LiveCharts.Wpf; using LiveCharts; using Sy…

手把手搞定报名亚马逊科技认证

引言 亚马逊云科技认证考试为我们这些技术从业者提供了提升专业技能的机会。无论选择线上还是线下考试&#xff0c;每种方式都有其独特的优势和挑战。选择合适的考试方式将帮助我们更好地展示自己的技术水平。以下是我对不同考试方式的优缺点介绍&#xff0c;以及各科目的考试…

Java案例抢红包

目录 一&#xff1a;题目要求&#xff1a; 二&#xff1a;思路分析&#xff1a;&#xff08;遇见问题先想出完整的思路逻辑再去动手事半功倍&#xff09; 三&#xff1a;具体代码&#xff1a; 一&#xff1a;题目要求&#xff1a; 二&#xff1a;思路分析&#xff1a;&#x…