OSS简单介绍

news2024/11/28 3:45:53

OSS

阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,可提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储成本。

OSS可以被理解成一个即开即用、无限大空间的存储集群。

OSS将数据文件以对象/文件(Object)的形式上传到存储空间(Bucket)中。OSS提供的是一个Key-Value键值对形式的对象存储服务。用户可以根据Object的名称(Key)唯一地址获取该Object的内容。

可以进行以下OSS相关的操作:

  • 创建存储空间,并向存储空间中上传文件。
  • 获取已上传文件的地址,进行文件的分享和下载。
  • 修改存储空间或文件的属性或元信息,为其设置相应的权限。
  • 在对象存储OSS控制台进行基础和高级OSS操作。
  • 通过开发者工具包SDK或直接在应用程序中调用RESTful API,进行基础和高级OSS操作。

特点

  • 易用性:简单易用,便于管理,深度集成数据处理服务

  • 高可靠:为数据持久存储提供稳定保障

    • 多份副本:多份副本保存,有效应对各类硬件故障
    • 冗余架构:OSS全冗余的基础架构,消除单点隐患,保障服务的高可用性
    • 异地容灾:提供跨区域复制功能和灾备方案,支持数据自动备份在不同城市,实现异地容灾能力
  • 强安全:多重访问控制细粒度的授权管理。Bucket|Object权限控制、Access ID和请求签名、VPC网络链路层访问控制、RAM&STS主子账号授权

  • 低成本:数据按照冷热分层提供最具性价比的存储方式

    OSS对象存储传统存储
    用相比自建存储降低25%~75%的成本,提供更加稳定安全可靠的数据保障一次性投入高,资源利用率很低
    三种存储类型,不同数据冷热,追求最极致的TCO存储受硬盘容量限制,需人工扩容
    多线带宽接入,上行流量免费单线或双线接入速度慢,有带宽限制,峰值时期需人工扩容
    完全托管的存储模式,0成本运维需专人运维,成本高

    对比项OSS文件系统
    数据模型OSS是一个分布式的对象存储服务,提供的是一个Key-Value对形式的对象存储服务。文件系统是一种典型的树状索引结构。
    数据获取根据Object的名称(Key)唯一的获取该Object的内容。虽然用户可以使用类似test1/test.jpg的名字,但是这并不表示用户的Object是保存在test1目录下面的。对于OSS来说,test1/test.jpg仅仅只是一个字符串,与example.jpg并没有本质的区别。因此不同名称的Object之间的访问消耗的资源是类似的。一个名为test1/test.jpg的文件,访问过程需要先访问到test1这个目录,然后再在该目录下查找名为test.jpg的文件。
    优势支持海量的用户并发访问。支持文件的修改,比如修改指定偏移位置的内容、截断文件尾部等。也支持文件夹的操作,比如重命名目录、删除目录、移动目录等非常容易。
    劣势OSS保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。OSS可以通过一些操作来模拟类似文件夹的功能,但是代价非常昂贵。比如重命名目录,希望将test1目录重命名成test2,那么OSS的实际操作是将所有以test1/开头的Object都重新复制成以test2/开头的Object,这是一个非常消耗资源的操作。因此在使用OSS的时候要尽量避免类似的操作。受限于单个设备的性能。访问越深的目录消耗的资源也越大,操作拥有很多文件的目录也会非常慢。

基本概念

数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您可以将数据以Object的形式上传到Bucket,并指定Object的文件名(Key)作为其唯一标识。

OSS以HTTP RESTful API的形式对外提供服务,访问不同地域需要不同的访问域名(Endpoint)。当您请求访问OSS时,OSS通过使用访问密钥(AccessKey ID和AccessKey Secret)对称加密的方法来验证某个请求的发送者身份。

Object操作在OSS上具有原子性和强一致性。

(1)对象/文件(Object)

对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由**元信息(Object Meta)、用户数据(Data)和文件名(Key)**组成。对象由存储空间内部唯一的Key来标识。对象元信息是一个键值对,表示了对象的一些属性,比如最后修改时间、大小等信息,同时用户也可以在元信息中存储一些自定义的信息。

对象的生命周期是从上传成功到被删除为止。在整个生命周期内,对象信息不可变更,重复上传同名的对象会覆盖之前的对象。因此,OSS不支持修改文件的部分内容等操作。

(2)存储空间(Bucket)

存储空间是用于存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。存储空间具有各种配置属性,包括地域、访问权限、存储类型等。用户可以根据实际需求,创建不同类型的存储空间来存储不同的数据。

  • 每个Object必须都包含在Bucket中;
  • 同一个存储空间的内部是扁平的,没有文件系统的目录等概念,所有对象都直接隶属于其对应的存储空间;
  • 每个用户可以拥有多个存储空间,
  • 存储空间的名称在OSS范围内必须是全局唯一的,一旦创建之后无法修改名称;
  • 存储空间内部的对象数目没有限制,大小总和不能超过2PB。

(3)地域

Region表示OSS的数据中心所在物理位置。用户可以根据费用、请求来源等选择合适的地域创建Bucket。一般来说,距离用户更近的Region访问速度更快。

(4)访问域名

Endpoint表示OSS对外服务的访问域名。OSS以HTTP RESTful API的形式对外提供服务,当访问不同的Region的时候,需要不同的域名。通过内网和外网访问同一个Region所需要的Endpoint也是不同的。例如杭州Region的外网Endpoint是oss-cn-hangzhou.aliyuncs.com,内网Endpoint是oss-cn-hangzhou-internal.aliyuncs.com。

如果Bucket的权限为公共读或者公共读写时,Object的访问规则如下:

http://<你的bucket名字>.<数据中心服务域名>/<你的object名字>

示意图:

http://oss-example.oss-cn-hangzhou.aliyuncs.com/aliyun-logo.png

(5)访问密钥

AccessKey简称AK,指的是访问身份验证中用到的AccessKey ID和AccessKey Secret。OSS通过使用AccessKey ID和AccessKey Secret对称加密的方法来验证某个请求的发送者身份。AccessKey ID用于标识用户;AccessKey Secret是用户用于加密签名字符串和OSS用来验证签名字符串的密钥,必须保密。

(6)强一致性

Object操作在OSS上具有原子性,操作要么成功要么失败,不会存在有中间状态的Object。OSS保证用户一旦上传完成之后读到的Object是完整的,OSS不会返回给用户一个部分上传成功的Object。

Object操作在OSS同样具有强一致性,用户一旦收到了一个上传(PUT)成功的响应,该上传的Object就已经立即可读,且数据已经冗余写入到多个设备中。不存在上传的中间状态,即不会出现read-after-write却无法读取到数据的情况。删除操作也类似,即用户成功删除指定的Object后,该Object立即变为不存在。

存储类型

(1)标准存储

  • 高性能、高可靠、高可用的对象存储服务

  • 吞吐量大,热点文件、需要频繁访问的业务场景,适用于各种社交、分享类的图片、音视频应用、大型网站、大数据分析等业务场景

  • 持久性:99.999999999%

  • 最低存储时间:无

(2)低频访问

  • 较低存储成本和实时访问特性的对象存储服务

  • 数据访问实时,读取频率较低的业务场景

  • 持久性:99.999999999%

  • 最低存储时间:30天,最小计量单位:64KB

(3)归档存储

  • 提供了高持久性、极低存储成本的对象存储服务
  • 适用于数据长期保存的业务场景,例如档案数据、医疗影像、科学资料、影视素材等。
  • 数据需解冻(约1分钟)后访问,解冻会产生数据取回费用。
  • 持久性: 99.999999999%
  • 最低存储时间:60天,最小计量单位:64KB

(4)冷归档存储

  • 数据需解冻(约1分钟)后访问,解冻会产生数据取回费用
  • 适用于需要超长时间存放的极冷数据,例如因合规要求需要长期留存的数据、大数据及人工智能领域长期积累的原始数据、影视行业长期留存的媒体资源、在线教育行业的归档视频等业务场景。
  • 数据需解冻后访问,解冻时间根据数据大小和选择的解冻模式决定,解冻会产生数据取回费用。
  • 最低存储时间:180天,最小计量单位:64KB

权限控制

OSS提供ACL (Access Control List)权限控制方法,OSS ACL提供Bucket级别的权限访问控制,Bucket目前有三种访问权限:

  • Public-read-write
  • Public-read
  • Private

创建Bucket时默认为private权限。可以通过OSS的Put Bucket Acl接口修改该Bucket的权限。

请求路由规则

  • OSS使用域名系统(DNS, Domain Name System)将请求发往正确的服务器
  • 从URL中通过三级域名提取bucket名称,然后将请求路由到 Bucket所在的数据中心,即所谓的三级域名访问方式
  • 当一个数据中心的 OSS服务器收到属于其他数据中心bucket的请求时,OSS服务器会返回HTTP 403(禁止访问)错误码,并在 HTTP消息体内提示正确的数据中心服务域名

文件上传代码

依赖:

<!-- OSS SDK 相关依赖 -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.0</version>
</dependency>

配置文件:

spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  profiles: 
    active: dev
  # 文件上传
  servlet:
     multipart:
       # 单个文件大小
       max-file-size:  50MB
       # 设置总上传的文件大小
       max-request-size:  100MB

aliyun:
  oss:
    endpoint: xtslife-oss.oss-cn-chengdu.aliyuncs.com # oss对外服务的访问域名
    accessKeyId: test # 访问身份验证中用到用户标识
    accessKeySecret: test # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
    bucketName: xtslife-oss # oss的存储空间
    policy:
      expire: 300 # 签名有效期(S)
    maxSize: 10 # 上传文件大小(M)
    callback: http://localhost:8080/aliyun/oss/callback # 文件上传成功后的回调地址
    dir:
      prefix: xtslife/images/ # 上传文件夹路径前缀
  1. endpoint、accessKeyId、accessKeySecret、bucketName、callback、prefix都要改为你自己帐号OSS相关的,callback需要是公网可以访问的地址。
  2. web文件上传大小受spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size配置影响。

是PutObject方法来上传单个文件(Object),属于OSS上传方式中的简单上传。简单上传适用于一次HTTP请求交互即可完成上传的场景,例如小文件(小于5 GB)的上传。

Put Object方式最大不能超过5GB,大文件可以用multipart方式上传,Object大小不能超过48.8TB。

(1)创建OSSClient实例

在此处可通过ClientConfiguration配置OSS连接配置。

private OSSClient getOssClient() {
    return new OSSClient(endpoint, 
    	new DefaultCredentialProvider(accessKeyId,secretAccessKey),
    	new ClientConfiguration());
}

(2)文件上传

/**
     * 文件上传
     * @param file
     * @return
     */
public Map<String, Object> uploadFile (@Nullable MultipartFile file) {
    Map<String, Object> map = new HashMap<>();
    String fileExt = FileUtil.extName(file.getOriginalFilename());
    SimpleDateFormat sm = new SimpleDateFormat("yyyy/MM");
    String today = sm.format(new Date());
    String fileKey = BASE_FILE_PATH + "/" + today +"/"+getCurrentDate()+"."+fileExt;
    OSSClient ossClient = getOssClient();
    try {
        // 文件存储入OSS,Object的名称为fileKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
        // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
        ossClient.putObject(bucketName, fileKey, file.getInputStream());
        log.info("上传文件:" + fileKey + "存入OSS成功。");
    } catch (Exception e) {
        log.warn("上传文件异常,errMsg = {}", e);
    } finally {
        ossClient.shutdown();
    }
    map.put("fileUrl",fileKey);
    map.put("url",getUrl(fileKey,ossClient));
    return map;
}

(3)如果想通过链接访问你保存的文件,可使用以下方法生成外链

private String getUrl(String fileKey, OSSClient ossClient) {
    // 设置URL过期时间为10年 3600l* 1000*24*365*10
    Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);

    // 生成URL
    URL url = ossClient.generatePresignedUrl(bucketName, fileKey, expiration);
    if (url != null) {
        log.info(fileKey + "生成的访问路径为:"+ url);
        return url.toString();
    }
    return null;
}

(4)如果你想删除OSS上保存的文件,可通过deleteObject方法来删除,在此方法上必要条件是保存时的文件内部路径。

public void deleteFile (String fileKey) {
    OSSClient ossClient = getOssClient();
    try {
        // 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
        // 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
        ossClient.deleteObject(bucketName, fileKey);
        log.info("删除文件:" + fileKey + "删除OSS成功。");
    } catch (Exception e) {
        log.warn("删除文件异常,errMsg = {}", e);
    } finally {
        ossClient.shutdown();
    }
}

文件下载

三种下载方式:

  • 简单下载:下载已经上传的文件(Object) , Object下载是使用HTTP的GET请求来完成的。
  • 断线续传下载:OSS提供了从Object指定的位置开始下载的功能,在下载大的Object的时候,可以分多次下载。如果下载中断,重启的时候也可以从上次完成的位置开始继续下载。
  • 授权给第三方下载:将私有Bucket内部的Object授权给第三方下载的时候,不应该直接将AccessKey提供给下载者,而应该使用URL签名和临时访问凭证两种方法。

应用场景

(1)图片和音视频等应用的海量存储

OSS可用于图片、音视频、日志等海量文件的存储。各种终端设备、Web网站程序、移动应用可以直接向OSS写入或读取数据。OSS支持流式写入和文件写入两种方式。

(2)CDN加速与动静分离

利用海量互联网带宽,OSS可以实现海量数据的互联网并发下载。OSS提供原生的传输加速功能,支持上传加速、下载加速,提升跨国、跨洋数据上传、下载的体验。同时,OSS也可以结合CDN产品,提供静态内容存储、分发到边缘节点的解决方案,利用CDN边缘节点缓存的数据,提升同一个文件被同一地区客户大量重复并发下载的体验。

(3)云端数据处理

上传文件到OSS后,可以配合媒体处理服务和图片处理服务进行云端的数据处理。

OSS实践要点

(1)数据备份与跨域复制

异地容灾:通过跨区域复制功能可在另━数据中心维护副本,实现异地容灾

数据合规:在远距离的OSS数据中心之间复制数据以满足数据合规性要求

(2)安全防护与管理

OSS适用于存储各种类型的静态资源,为防止OSS的资源被恶意盗用,OSS提供了几种安全防护功能,还可以集成安全类产品进行安全防护。

  • 防盗链

    目前OSS提供的防盗链方法主要有以下两种:

    • 设置Referer。该操作通过控制台和SDK均可进行,用户可根据自身需求进行选择。http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,而你发送的referer不符合他的要求,就会拦截或者跳转到他要求的觉地址进行访问。
    • 签名URL,适合习惯开发的用户。
  • 权限控制

    Bucket私有的情况下,需要通过签名URL访问object。

    由于签名URL存在一个过期时间,所以签名URL会定期过期,增加了一直恶意下载的成本,同时用户需要集成OSS签名URL的API,有一定的开发成本。

例子:

我在www.google.com里有一个www.baidu.com链接,那么点击这个ww.baidu.com,它的header信息里就有:

Referer=http://www.google.com

那么可以利用这个来防止盗链了,比如我只允许我自己的网站访问我自己的图片服务器,那我的域名是ww.google.com,那么图片服务器每次取到Referer来判断一下是不是我自己的域名ww.google.com,如果是就继续访问,不是就拦截。

(3)CDN加速与动静分离

利用海量互联网带宽,OSS可以实现海量数据的互联网并发下载。OSS提供原生的传输加速功能,支持上传加速、下载加速,提升跨国、跨洋数据上传、下载的体验。同时,OSS也可以结合CDN产品,提供静态内容 存储、分发到边缘节点的解决方案,利用CDN边缘节点缓存的数据,提升同一个文件被同一地区客户大量重复并发下载的体验。

(4)云端数据处理

上传文件到OSS后,可以配合媒体转码服务(MTS),图片处理服务(IMG),批量计算服务、离线数据处理服务(ODPS)充分挖掘数据的价值,引领从IT到DT的变革。

能够提供:

  • 富媒体数据处理:自带图片处理/自定义函数等增值服务(比如:图片水印),配合MTS实现视频转码/截帧
  • 存储+计算:与阿里云数据计算产品打通,可直接调用计算服务挖掘您的数据价值

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

197: vue+openlayers 预加载preload瓦片地图,减少过渡期间的空白区域

第197个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中演示瓦片预加载和没有预加载的不同状态。 没有采用预加载 当我们平移和缩放地图时,经常会遇到过渡期间的空白区域(因为内容正在加载),过一会儿,切片图像才出现了。 采用预加载,将预载的值设置为…

深入ReentrantLock锁

1. 前言 今天我们来探讨下另一个核心锁ReentrantLock. 从具体的实现到JVM层面是如何实现的。 我们都会一一进行讨论的&#xff0c;好了&#xff0c;废话不多说了&#xff0c;我们就开始吧 2. ReentrantLock 以及synchronized 核心区别&#xff1a; ReentrantLock 是一个抽象的…

MVC框架知识详解

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

机器学习课程学习随笔

文章目录本文来源机器学习简介机器学习流程机器学习可以完成如下功能&#xff1a;机器学习应用场景金融领域零售领域机器学习分类机器学习实现基于python等代码自己实现本文来源 本博客 是通过学习亚马逊的官方机器学习课程的随笔。 课程参考链接https://edu.csdn.net/course/…

爬虫与反爬虫 - 道高一尺魔高一丈 - 2013最新 - JS逆向 - Python Scrapy实现 - 爬取某天气网站历史数据

目录 背景介绍 网站分析 第1步&#xff1a;找到网页源代码 第2步&#xff1a;分析网页源代码 Python 实现 成果展示 后续 Todo 背景介绍 今天这篇文章&#xff0c;3个目的&#xff0c;1个是自己记录&#xff0c;1个是给大家分享&#xff0c;还有1个是向这个被爬网站的前…

synchronized锁膨胀(附代码分析)

synchronized锁膨胀 1. 基本概念 Java对象头 Java对象的对象头信息中的 Mark Word 主要是用来记录对象的锁信息的。 现在看一下 Mark Word 的对象头信息。如下&#xff1a; 其实可以根据 mark word 的后3位就可以判断出当前的锁是属于哪一种锁。注意&#xff1a;表格中的…

shell脚本练习2023年下岗版

shell脚本练习 1.判断指定进程的运行情况 #!/bin/bash NAMEhttpd #这里输入进程的名称 NUM$(ps -ef |grep $NAME |grep -vc grep) if [ $NUM -eq 1 ]; thenecho "$NAME running." elseecho "$NAME is not running!" fi2.判断用户是否存在 #!/bin/bash r…

【RabbitMQ】安装、启动、配置、测试一条龙

一、基本环境安装配置 1.英文RabbitMQ是基于erlang开发的所以需要erlang环境,点击以下链接下载安装 Downloads - Erlang/OTP 2.官网下载RabbitMQ安装包并安装 Installing on Windows — RabbitMQ 3.配置erlang本地环境变量(和JAVAHOME类似) 4.cmd查看erlang版本 5.点击以下…

自己看的操作系统

计算机网络冯诺依曼体系进程线程内核和虚拟内存os管理线程冯诺依曼体系 计算机五大组成&#xff1a;输入设备、输出设备、控制器、运算器、存储器 进程线程 这些应用都是进程 进程相当于一个菜谱&#xff0c;读取到内存中去使用。 电脑一时间能运行很多进程。 进程中为什么要…

excel函数技巧:MAX在数字查找中的应用妙招

大家都知道VLOOKUP可以按给定的内容去匹配到我们所需的数据&#xff0c;正因为如此&#xff0c;它在函数界有了很大的名气。但是今天要分享的这三个示例&#xff0c;如果使用VLOOKUP去匹配数据的话&#xff0c;就有些麻烦了。就在VLOOKUP头疼不已的时候&#xff0c;MAX函数二话…

2022 年度总结

1、CSDN 年度总结 2022年的粉丝涨幅比较明显竟然超过了之前几年的总和&#xff0c;这是比较意外的。应该是因为今年研究了一些云原生、元宇宙的原因&#xff0c;方向比努力真的重要的多。 1500的阅读确实没想到~~~说明低头一族还是没白当 涨粉稍微明细&#xff0c;不过还需…

English Learning - L1-11 时态 + 情态动词 2023.1.9 周一

English Learning - L1-11 时态 情态动词 2023.1.9 周一8 时态8.4 完成进行时&#xff08;一&#xff09;现在完成进行时核心思维&#xff1a;动作开始于现在之前&#xff0c;并有限地持续下去&#xff0c;动作到目前为止尚未完成1. 动作从过去某时开始一直持续到现在并可能继…

【Python】如何使用python将一个py文件变成一个软件?

系列文章目录 这个系列文章将写一些python中好玩的小技巧。 第一章 使用Python 做一个软件 目录 系列文章目录 前言 一、第一步&#xff1a;写好文件 二、第二步&#xff1a;生成程序 1.安装库 2.使用安装的库进行转化 总结 前言 本文重点说如何将py文件转化为exe文件…

回溯法--符号三角形(杂记)

回溯法说来简单&#xff0c;写起来难&#xff0c;真的是要愁死。回溯法有两种模板--子集树、排列树5.4符号三角形--dfs计算多少个满足条件的符号三角形&#xff0c;同号下面为“”&#xff0c;异号下面为“-”。根据异或的规则我们令“”0&#xff0c;“-”1&#xff0c;(异或的…

postgresql 启用ssl安全连接方式

SSL的验证流程 利用openssl环境自制证书 CA 证书签发 创建私钥ca.key,使用des3算法,有效期2048天 openssl genrsa -des3 -out ca.key 2048生成根CA证书请求&#xff08;.csr&#xff09; openssl req -new -key ca.key -out ca.csr -subj "/CCN/STGuangDong/LGuangZhou…

Cloudflare免费版不支持cname解析解决办法

最近调整CDN&#xff0c;使用云盾CDN的话基本上节点都在国内&#xff0c;国外访问就比较难了&#xff0c;虽然我们的站国外用户基本没有&#xff0c;但作为一个有大抱负的站长&#xff0c;眼界必须得宽&#xff0c;必须得支持国外访问才行&#xff01;说起国外免费CDN&#xff…

iOS开发之Code:-402653103,Code:5

问题一&#xff1a;Code&#xff1a;-402653103 Demo中添加了第三方库&#xff0c;然后运行Demo时&#xff0c;总是运行不起来&#xff0c;现象如下&#xff1a; 遇到这种问题常见的几种方式&#xff1a; 方式一&#xff1a;command shift K&#xff0c;清理Xcode缓存&…

常用的字符串与内存操作函数(1)

Tips 1. 2. 3. 在进行数值计算的时候&#xff0c;补码能算对&#xff0c;因此计算机里面放的都是补码&#xff0c;运算的对象都是补码 但是与真实数值吻合的是原码&#xff0c;因此打印&#xff0c;求值等都要转化为原码 4. for (exp1 ; exp2 ; exp3)&#xff0c;是先…

从0到1完成一个Vue后台管理项目(十九、地图区域样式设置、区域文字和立体设置)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

上半年要写的博客文章25

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…