深入浅出SSD笔记 第1章 SSD综述

  • 第1章 SSD综述
    • 1.1.1 存储技术概览
      • 易失性存储器(VM,Volatile memory)
      • 非易失性存储器(`NVM, Non-Volatile memory`)
      • 新型存储器(非易失性)
    • 1.1.2 SSD组成
  • 1.2 SSD vs HDD
    • 1.2.1 SSD性能好
    • 1.2.2 SSD功耗低
    • 1.2.3 抗震防摔
    • 1.2.4 无噪声
    • 1.2.5 体积小
  • 1.3固态存储及SSD技术发展史
    • 1.3.1 闪存
    • 1.3.2 PCIe进入消费者市场
  • 1.4 SSD基本工作原理
  • 1.5 SSD产品核心参数
    • 1.5.1 SSD容量
    • 1.5.2 介质信息
    • 1.5.3 外观尺寸
    • 1.5.4 温度和认证及兼容性信息

第1章 SSD综述

1.1.1 存储技术概览


电路断电后,易失性存储器Volatile memory无法保留数据,非易失性存储器Non-Volatile memory可以保留数据。存储分为内存和外存。

  • 内存以前也叫运行内存(运存),计算机通电后,配合CPU等进行工作。断电后,数据就没有了,属于易失性(VM)存储器。
  • 外存,也就是硬盘,存放了大量的数据文件。当计算机关机后,只要你执行了保存(写入)操作,数据就会继续存在,属于非易失性(NVM)存储器。

现在很多资料也将半导体存储器分为随机存取存储器(RAM)和只读存储器(ROM)

  • ROM(只读存储器):很好理解,可以读取,不可以写入。
  • RAM(随机存取存储器):指的是它可以“随机地从存储器的任意存储单元读取或写入数据”,这是相对传统磁存储必须顺序存取(Sequential Access)而言的。

易失性存储器(VM,Volatile memory)

易失性存储器主要分为DRAM(动态随机存取存储器,Dynamic RAM)和SRAM(静态随机存取存储器,Static RAM)

  • DRAM

    • DRAM由许多重复的位元格(Bit Cell)组成,每一个基本单元由一个电容和一个晶体管构成(又称1T1C结构)。电容中存储电荷量的多少,用于表示“0”和“1”。而晶体管,则用来控制电容的充放电。由于电容会存在漏电现象。所以,必须在数据改变或断电前,进行周期性“动态”充电,保持电势。否则,就会丢失数据。因此,DRAM才被称为“动态”随机存储器。

    • DRAM一直是计算机、手机内存的主流方案。计算机的内存条(DDR)、显卡的显存(GDDR, Graphics Double Data Rate)、手机的运行内存(LPDDR, Low Power Double Data Rate),都是DRAM的一种。(DDR基本是指DDR SDRAM,双倍速率同步动态随机存储器,Double Data Rate Synchronous Dynamic Random Access Memory,简称DDR SDRAM)

    • 显存这边,除了GDDR之外,还有一种新型显存,叫做HBM(High Bandwidth Memory)。它是将很多DDR芯片堆叠后,与GPU封装在一起构成的(外观上看不到显存颗粒了)。


  • SRAM

    • SRAM其实就是我们CPU缓存所使用的技术。
    • SRAM的基本单元,则最少由6管晶体管组成:4个场效应管(M1, M2, M3, M4)构成两个交叉耦合的反相器,2个场效应管(M5, M6)用于读写的位线(Bit Line)的控制开关,通过这些场效应管构成一个锁存器(触发器),并在通电时锁住二进制数0和1。因此,SRAM被称为“静态随机存储器”。
    • SRAM不需要定期刷新,响应速度快,但功耗大、集成度低、价格昂贵。所以,它主要用于CPU的主缓存以及辅助缓存


非易失性存储器(NVM, Non-Volatile memory


  • ROM

    • 最老式的ROM,那是“真正”的ROM——完全只读,出厂的时候,存储内容就已经写死了,无法做任何修改。这种ROM,灵活性很差,万一有内容写错了,也没办法纠正,只能废弃。掩模型只读存储器(MASK ROM),就是这种ROM的代表。说白了,就是直接用掩膜工艺,把信息“刻”进存储器里面,让用户无法更改,适合早期的批量生产。

  • PROM(Programmable ROM,可编程ROM)

    • 这种ROM一般只可以编程一次。出厂时,所有存储单元皆为1。通过专用的设备,以电流或光照(紫外线)的方式,熔断熔丝,可以达到改写数据的效果。PROM的灵活性,比ROM更高一些,但还是不够,最好是能够对数据进行修改(EPROM)

  • EPROM(Erasable Programmable,可擦除可编程ROM)

    • 擦除的方式,可以是光,也可以是电。电更方便一点,采用电进行擦除的,就叫做EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程EEPROM)

  • EEPROM(Electrically Erasable Programmable read only memory, 电可擦可编程只读存储器))

    • EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,也就是说,可以往每个bit中写0或者1,不必将内容全部擦除后再写
    • 它的擦除操作,也是以“bit”为单位,但是速度还是太慢了。

  • Flash(闪存)

    • 上世纪80年代,日本东芝的技术专家——舛冈富士雄,发明了一种全新的、能够快速进行擦除操作的存储器,也就是——Flash(闪存)
    • Flash在英文里,就是“快速地”的意思。
    • Flash存储是以“块”为单位进行擦除的。常见的块大小为128KB和256KB。1KB是1024个bit,比起EEPROM按bit擦除,快了几个数量级。
    • FLASH的主流代表产品也只有两个,即:NOR FlashNAND Flash
  • NOR Flash(代码型闪存)

    • NOR Flash属于代码型闪存芯片,其主要特点是芯片内执行(XIP,Execute In Place),即应用程序不必再把代码读到系统RAM中,而是可以直接在Flash闪存内运行。所以,NOR Flash适合用来存储代码及部分数据,可靠性高、读取速度快,在中低容量应用时具备性能和成本上的优势。但是,NOR Flash的写入和擦除速度很慢,而且体积是NAND Flash的两倍,所以用途受到了很多限制,市场占比比较低。
    • 早期的时候,NOR Flash还会用在高端手机上,但是后来,智能机开始引入eMMC后,连这块市场也被排挤了。近年来,NOR Flash的应用有所回升,市场回暖。低功耗蓝牙模块、TWS耳机、手机触控和指纹、可穿戴设备、汽车电子和工业控制等领域,使用NOR Flash比较多。
  • NAND Flash(数据型闪存)

    • 它以页为单位读写数据,以块为单位擦除数据,故其写入和擦除速度虽比DRAM大约慢3-4个数量级,却也比传统的机械硬盘快3个数量级,被广泛用于eMMC/EMCP、U盘、SSD等市场。

  • eMMC(embedded Multi Media Card, 嵌入式多媒体卡)

    • 它把MMC(多媒体卡)接口、NAND及主控制器都封装在一个小型的BGA芯片中,主要是为了解决NAND品牌差异兼容性等问题,方便厂商快速简化地推出新产品。而eMCP,是把eMMC与LPDDR封装为一体,进一步减小模块体积,简化电路连接设计。

  • UFS(Universal Flash Storage,通用闪存存储)

    • 2011年,UFS(Universal Flash Storage,通用闪存存储)1.0标准诞生。后来,UFS逐渐取代了eMMC,成为智能手机的主流存储方案。当然了,UFS也是基于NAND FLASH的。

  • SSD(Soild state drive)

    • SSD基本上都是采用NAND芯片的,目前发展非常迅猛。
    • 根据内部电子单元密度的差异,NAND又可以分为SLC(单层存储单元)、MLC(双层存储单元)、TLC(三层存储单元、QLC(四层存储单元),依次代表每个存储单元存储的数据分别为1位、2位、3位、4位。
    • 由SLC到QLC,存储密度逐步提升,单位比特成本也会随之降低。但相对的,性能、功耗、可靠性与P/E循环(擦写循环次数,即寿命)会下降。
    • 早期的NAND,都是2D NAND。工艺制程进入16nm后,2D NAND的成本急剧上升,平面微缩工艺的难度和成本难以承受。于是,3D NAND出现了。简单来说,就是从平房到楼房,利用立体堆叠,提升存储器容量,减小2D NAND的工艺压力。2012 年,三星推出了第一代3D NAND闪存芯片。后来,3D NAND技术不断发展,堆叠层数不断提升,容量也越来越大

新型存储器(非易失性)

  • 2021年,美国IBM提出“存储级内存〞(SCM, Storage-Class Memory)的概念。IBM认为,SCM能够取代传统硬盘,并对DRAM起到补充作用。SCM的背后,其实是行业对新型存储器(介质)的探索。

  • 按行业的共识,新型存储器可以结合了DRAM内存的高速存取,以及NAND闪存在关闭电源之后保留数据的特性,打破内存和闪存的界限,使其合二为一,实现更低的功耗,更长的寿命,更快的速度。

  • 目前,新型存储器主要有这么几种:相变存储器(PCM),阻变存储器(ReRAM/RRAM),铁电存储器(FeRAM/FRAM),磁性存储器(MRAM,第二代为STT-RAM),碳纳米管存储器。


1.1.2 SSD组成

  • SSD硬件包括几大组成部分:主控、闪存、缓存芯片DRAM(可选,有些SSD上可能只有SRAM,并没有配置DRAM)、PCB(电源芯片、电阻、电容等)、接口(SATA、SAS、PCIe等)。

  • 软件角度:SSD内部运行固件(Firmware,FW)负责调度数据从接口端到介质端的读写,还包括嵌入核心的闪存介质寿命和可靠性管理调度算法,以及其他一些SSD内部算法。
  • SSD控制器、闪存和固件是SSD的三大技术核心,后面章节会依次深度介绍。

1.2 SSD vs HDD

1.2.1 SSD性能好

  • 传统的HDD(Hard disk drive)是“马达+磁头+磁盘”的机械结构,
  • SSD(Soild disk drive)则变成了“主控+闪存介质”的半导体存储芯片结构,两者有完全不同的数据存储介质和读写方式。对比如表1-1所示。


1.2.2 SSD功耗低

  • 关于功耗,业界定义有几类:峰值功耗(Peak Power)、读写功耗(Active Power)、空闲功耗(Idle Power)省电功耗(启动SSD内部休眠,尽可能多地关掉不工作的硬件模块, 专业上定义为Standby/Sleep Power和DevSleep Power,本书后面有专门章节介绍)。
  • 特别是DevSleep Power,功耗可降到10mW以下,功耗极低,可应用于能耗要求苛刻的应用场景,如消费级笔记本休眠状态,此种场景下SSD省电是非常重要的。

  • 从SSD功耗分解来看,读写功耗主要消耗在闪存上。数据读取和写入并发在后端的闪存,闪存的单位读写功耗是决定性的,如16KB闪存页(Page)的读写功耗决定了主机端满负荷下SSD的平均读写功耗。

  • 其次影响读写功耗的是主控功耗,其约占功耗的20%,而ASIC主控CPU的频率和个数、后端通道的个数、数据ECC的编码器/解码器的个数和设计等因素影响了主控整体的功耗。

  • 科学地比较功耗的方法应该是Power/IOPS,也就是比较单位IOPS性能上的功耗输出,该值越低越好。

  • 由于SSD极高的性能,相对于HDD而言,相当于单位功耗产生出了百倍的性能,所以SSD被称为高性能、低功耗的节能产品,符合数据中心(Data Center)的使用定位。


1.2.3 抗震防摔

  • SSD内部不存在任何机械部件,相比HDD更加抗震。
  • HDD是机械式结构,磁头和磁片之间发生跌落时接触碰撞会产生物理损坏,无法复原。
  • SSD是电子和PCB结构,PCB加半导体芯片,跌落时不存在机械损伤问题,因此更加抗震和可靠。

1.2.4 无噪声

客观上,由于结构上没有马达的高速运转,SSD是静音的。


1.2.5 体积小

HDD一般只有3.5寸和2.5寸两种形式,SSD除了这两种,还有更小的可以贴放在主板上的M.2形式,甚至可以小到芯片级,例如BGA SSD的大小只有16mm×30mm,甚至可做得更小。



1.3固态存储及SSD技术发展史

  • RAM的优点是可以随机寻址,就是每次可以只读写一个字节的数据,速度很快。缺点也很明显,掉电数据就没了,价格还巨贵。

1.3.1 闪存

1967年,贝尔实验室的韩裔科学家姜大元和华裔科学家施敏一起发明了浮栅品体管(Floating GateTransistor),这是现在SSD基础——闪存的技术来源。图1-9相比MOSFET就多了个Floating Gate,悬浮在中间,所以叫浮栅。它被高阻抗的材料包裹,和上下绝缘,能够保存电荷,而电荷通过量子隧道效应进人浮栅。


1.3.2 PCIe进入消费者市场

台式机和笔记本觉得SATA已经不够用了,SATA是为HDD(Hard disk drive)设计的接口,最大速度是6Gbps,只能达到最高600MB/s的带宽(扣除协议开销,实际速度可能只有560MB/s左右),同时命令队列不够深,不适合SSD使用。SSD开始在协议上引发存储技术的变革。


1.4 SSD基本工作原理

   从主机PC端开始,用户从操作系统应用层面对SSD发出请求,文件系统将读写请求经驱动转化为相应的符合协议的读写和其他命令,SSD收到命令执行相应操作,然后输出结果,每个命令的输入和输出经协议标准组织标准化,这是标准的东西,和HDD无异,只不过HDD替换成SSD硬件存储数据,访问的对象变成SSD。

  • SSD的输入是命令(Command),输出是数据(Data)命令状态(Command Status).
  • SSD前端(Front End)接收用户命令请求,经过内部计算和处理逻辑,输出用户所需要的数据或状态


   从图1-13所示可以看出,SSD主要有三大功能模块组成:

  • 前端接口和相关的协议模块:
  • 中间的FTL层(Flash Translation Layer)模块;
  • 后端和闪存通信模块。

   SSD前端负责和主机直接通信,接收主机发来的命令和相关数据,命令经SSD处理后,最终交由前端返回命令状态或数据给主机。SSD通过诸如SATA、SAS和PCIe等接口与主机相连,实现对应的ATA、SCSI和NVMe等协议,如表I-5所示。


   我们看看SSD是怎么进行读写的,以写为例。
   主机通过接口发送写命令给SSD,SSD接收到该命令后执行,并接收主机要写入的数据。数据一般会先缓存在SSD内部的RAM中,FTL会为每个逻辑数据块分配一个闪存地址,当数据凑到一定数量后,FTL便会发送写闪存请求给后端,然后后端根据写请求,把缓存中的数据写到对应的闪存空间。

   由于闪存不能覆盖写,闪存块需擦除才能写入。主机发来的某个数据块,它不是写在闪存固定位置,SSD可以为其分配任何可能的闪存空间写入。因此,SSD内部需要FTL这样一个东西,完成逻辑数据块到闪存物理空间的转换或者映射

举个例子,假设SSD容量为128GB,逻辑数据块大小为4KB,所以该SSD一共有128GB/4KB=32M个逻辑数据块。每个逻辑块都有一个映射,即每个逻辑块在闪存空间都有一个存储位置。闪存地址大小如果用4字节表示,那么存储32M个逻辑数据块在闪存中的地址则需要32M×4B=128MB大小的映射表。


   正因为SSD内部维护了一张逻辑地址到物理地址转换的映射表,当主机发来读命令时,SSD能根据需要读取的逻辑数据块查找该映射表,获取这些逻辑数据在闪存空间所在的位置,后端便能从闪存上把对应数据读到SSD内部缓存空间,然后前端负责把这些数据返回给主机。

   由于前端接口协议都是标准化的,后端和闪存的接口及操作也是标准化的(闪存遵循ONFI或者Toggle协议),因此,一个SSD在前端协议及闪存确定下来后,差异化就体现在FTL算法上了。FTL算法决定了性能、可靠性、功耗等SSD的核心参数。


   前面提到,闪存不能覆盖写,因此随着用户数据的不断写入,闪存空间会产生垃圾(无效数据)。FTL需要做垃圾回收(Garbage Collection),以腾出可用闪存空间用以写用户数据。
   以图1-14所示为例,在Block x和Block y上有很多垃圾数据,其中Block x上的A、B、C为有效数据,Block y上的D、E、F、G为有效数据。**垃圾回收就是把一个或者几个Block上的有效数据搬出来集中写到某个空闲Block上(比如Block z)。**当这些Block上的有效数据都搬走后,FTL便能擦除这些Block,然后又能把这些Block拿出来供SSD写入新的数据了。


   还有,闪存都是有寿命的,每个闪存块不能一直写数据,因此,为保证最大的数据写入量,FTL必须尽量让每个闪存块均衡写入,这就是磨损平衡(Wear Leveling)。除此之外,FTL还需要实现坏块管理、读干扰处理、数据保持处理、错误处理等很多其他事情。理解了FTL,SSD的工作原理也就掌握了。关于FTL,本书有专门章节介绍,读者可自行跳到第4章阅读。


1.5 SSD产品核心参数

  • 基本信息: 包括容量配置(Capacity)、介质信息(Component))、外观尺寸(Form Factor)、重量(Weight)、环境温度(Temperature)、震动可靠性(Shock和Vibration)、认证(Certifications)、加密(Encryption)等信息。
  • 性能指标:连续读写带宽、随机读写IOPS、时延(Latency)、最大时延(Quality of Service)
  • 数据可靠性和寿命: Reliability、Endurance
  • 功耗: Power Management、读写功耗(Active Power)、空闲功耗(Idle Power)
  • 兼容性等: Compliance、Compatibility(与操作系统集成时参考)
  • 当然,还有其他一些重要信息在产品规范书里是无法体现出来的,比如产品可靠性(RMA Rate)。由于固件或者硬件缺陷导致产品返修率高低是很关键的,在保质期内产品返修率越低越好。尤其是企业级硬件,数据比SSD盘本身更重要,用户不能容忍的是由于固件、硬件可靠性问题或缺陷导致丢数据,或者数据无法通过技术手段恢复。

1.5.1 SSD容量

   SSD容量是指提供给终端用户使用的最终容量大小,以字节(Byte)为单位。这里要注意,标称的数据都以十进制为单位的,程序员出身的人容易把它当成二进制。同样一组数据,二进制比十进制会多出7%的容量,例如:

  • 十进制128GB:128×1000×1000×1000=128000000000字节
  • 二进制128GB:128×1024×1024×1024=137438953472字节

以二进制为单位的容量,行业内称为裸容量,以十进制 为单位的容量称为用户容量 裸容量比用户容量多出7%。这里指GB级,当进入到TB级时,数值差距更大。


   对于闪存本身,它是裸容量。那么,裸容量多出的7%容量在SSD内部做什么用呢?SSD可以利用这多出来的7%空间管理和存储内部数据,比如把这部分额外的空间用作FTL映射表存储空间、垃圾回收所需的预留交换空间、闪存坏块的替代空间等。这里的7%多余空间也可以转换为OP概念(Over Provisioning),公式是:


1.5.2 介质信息

    当前SSD盘核心存储介质是闪存,闪存这种半导体介质有其自身物理参数,例如寿命(PE cycles,编程擦除次数)Program(写编程)、Erase(擦除)和Read(读)时间、温度对读写擦的影响、闪存页的大小、闪存块的大小…这些都是介质的信息,介质的好坏直接影响数据存储的性能和完整性。


闪存分SLC、MLC、TLC(甚至QLC、PLC),它指的是一个存储单元存储的比特数


  • SLC(Single-Level Cell)

    • 即单个存储单元存储1bit的数据。
    • SLC速度快,寿命长(5万~10万次擦写寿命),但价格超贵(约是MLC3倍以上的价格)。

  • MLC(Multi-Level Cell)

    • 即单个存储单元存储2bit的数据。
    • MLC速度一般,寿命一般(约为3k~10k次擦写寿命),价格一般。

  • TLC(Trinary-Level Cell)

    • 即单个存储单元存储3bit的数据,也有闪存厂家叫8LC
    • 速度慢,寿命短(约500~1500次擦写寿命),价格便宜

   闪存发展到现在,经历了2D平面到现在的3D立体制程(Process)的大发展,目标只有一个:硅片单位面积(mm2)能设计生产出更多的比特(bit),让每GB成本和价格更低。这是介质厂商的目标和客户的诉求,同时也是半导体工业发展的趋势。

1.5.3 外观尺寸

    SSD是标准件,外观尺寸需要满足一定的规定要求(长宽高和接口连接器),这又通常称为Form Factor。。那SSD会有哪些Form Factor呢?细分为3.5寸、2.5寸、1.8寸、M.2、PCIe card、mSATA、U.2等Form Factor标准,每个Form Factor也都有三围大小、重量和接口引脚等明确规范。


1.5.4 温度和认证及兼容性信息

  • 温度:所有工业品都有温度规范,SSD应在一定温度范围内使用。

    • 工作温度为0℃~70℃,说的是SSD在运行状态时的温度,超出这个温度范围SSD可能出现产品异常和数据异常,这不在产品保证和保修范围内。
    • 非工作温度为-50℃-90℃,这是SSD储存和运输期间的温度,也就是在非开机工作状态下,产品运输和仓库存储时的参考温度参考。超出-50℃一90℃,SSD可能会发生损坏。

   认证及兼容性信息(见图1-19):SSD硬件和软件都应通过一定认证测试来反映产品的标准测试情况,从而让客户明确是不是过了相应的测试。认证和兼容性是对应标准组织的测试集,标准组织属于第三方,独立客观,测试通过意味着可以免去客户一部分测试。


深入浅出SSD笔记 第1章 SSD综述相关推荐

  1. 深入浅出pytorch笔记——第三章,第四章

    文章目录 第三章 深度学习组成部分 配置环境 数据读取与加载 模型设计 损失函数 优化器 训练与评估 第四章(FMN分类实战) 4.1导入包 4.2配置训练环境和超参数 4.3数据读入与加载(Data ...

  2. 24考研深入浅出计算机网络笔记【更新中】

    24考研深入浅出计算机网络笔记 文章目录 24考研深入浅出计算机网络笔记 前言 第一章 概述 1.1 因特网概述 1.2 电路交换.分组交换和报文交换 1.3 计算机网络的定义和分类 1.3.1 计算 ...

  3. 服务器ssd硬盘接笔记本,小编教你怎么判断笔记本能不能装ssd

    固态硬盘的性能比传统硬盘好非常多,因此不少笔记本用户都想为自己的电脑安装固态硬盘.今天小编便来教大家判断笔记本能不能装ssd以及怎么安装ssd,大家一起来看看吧. 目前在售的笔记本都可以进行ssd升级 ...

  4. 鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一)

    鸟哥的LINUX私房菜 基础学习篇 读书笔记 -- 第零章 计算机概论 (一) 第零章 计算机概论 0.1 电脑:辅助人脑的好工具 0.1.1 计算机硬件五大组成部分 0.1.2 一切设计的起点: C ...

  5. 目标检测 SSD: Single Shot MultiBox Detector - SSD在MMDetection中的实现

    目标检测 SSD: Single Shot MultiBox Detector - SSD在MMDetection中的实现 flyfish 目标检测 SSD: Single Shot MultiBox ...

  6. [SSD固态硬盘技术 0] SSD的结构和原理导论

    版权声明: 本文禁止转载 机械硬盘的存储系统由于内部结构,其IO访问性能无法进一步提高,CPU与存储器之间的性能差距逐渐扩大.以Nand Flash为存储介质的固态硬盘技术的发展,性能瓶颈得到缓解. ...

  7. 产品经理深入浅出学习笔记

    @TOC产品经理深入浅出学习笔记 发现市场需求 -> 商业需求文档(BRD)-> 组织团队头脑风暴(关键节点把控,梳理思路)-> 面对团队中出现的各种阻力与不同意见.能有效的化解与统 ...

  8. 王道考研 计算机网络笔记 第六章:应用层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

  9. 王道考研 计算机网络笔记 第五章:传输层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

最新文章

  1. 23. matlab并行计算原理以及parpool函数
  2. linux 如何运行.sql文件
  3. 【 MATLAB 】z 变换中的卷积与解卷积
  4. SAP Spartacus 在 Github 托管虚拟机上执行的 pipeline 明细
  5. oracle usehash,/*+use_hash(t1 t2)*/的神奇
  6. Scrapy--1安装和运行
  7. 修改DNS的Linux脚本,Shell脚本-配置网络
  8. 【数据库系统】文件处理系统和DBMS的主要区别
  9. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类
  10. mysql /*! 50100 ... */ 条件编译
  11. 华为会议电脑版_大家在用什么会议产品呢? 对企业的视频会议是如何规划的?...
  12. springboot医院门诊挂号病历管理系统
  13. 小米笔记本适合计算机专业吗,真Pro还是假专业?细说小米新笔记本电脑五宗罪...
  14. vue热敏打印机_方振起技术手记 - vue 使用打印机打印数据 print-js
  15. 两个PNP三极管组成限流电路原理分析
  16. 滴答清单、为知笔记、Effie,谁才是写稿爱好者的最佳战友?
  17. Android AccessibilityService 辅助功能
  18. 微型计算机的基本储存单位,计算机内存储器中的基本存储单位是什么
  19. navicat怎么备份数据和同步两个数据库
  20. string拼接时去掉最后一个逗号

热门文章

  1. HTML span元素
  2. 学习记录:py3百度翻译接口
  3. CVPR2010奇文一篇共欣赏
  4. 数据可视化 - 近现代数据可视化发展历程
  5. Git拉取远程分支到本地及推送代码到远程分支
  6. [杂感] 缅怀乔布斯
  7. 【C语言】编程初学者入门训练(完结)
  8. 用matlab实现割线法求根
  9. java方法参数泛型_Java泛型方法类型参数
  10. 如何快速学习音视频开发?