药品监管系统架构揭秘:海量溯源数据存储与查询 ...

前言

在刚刚过去的2018年,“毒疫苗”事件再次触及了大众的敏感神经,因为十年前的“毒奶粉”事件还历历在目。我们急需创建一个全国性的药品(食品)监控追踪体系。与此同时,近年来随着国家对医药行业的大力支持,中国的医疗事业也出现了跨越式的发展,大量的新型药品上市,极大的丰富了患者和消费者的选择范围。大量的药品在市面上流通,产生了大量的状态数据,且这类数据在爆发式的增长。如何高效的存储和溯源药品状态数据已经成为一个行业难题。传统方案常常采用比如MySQL数据库分库分表的方式,但是这个方案在开发、运维、可扩展性都有不少弊端。

业界开始越来越多的使用分布式的NoSQL方案来解决大数据的问题。比如阿里健康基于表格存储(Tablestore)推出了“码上放心” 药品监管码查询功能,解决了大众的药品查询需求。这仅仅是第一步,建立一个完善全国性药品追踪体系是一个艰巨而漫长的任务。借用网上的一句话,最终我们要实现药品的:“来源可查,去向可追,责任可究”。

图1 码上放心 溯源截图

图1 码上放心 溯源截图

在整个药品监管体系中,药品本身的管理和药品轨迹溯源是药品监管体系的两大核心功能,本篇文章主要是介绍使用表格存储的Timestream模型快速高效的实现这两类功能。

核心需求

药品元数据

药品的元数据是指药品在上市之前的在国家药品监督管理局(CFDA)备案信息,记录了药品名称、分类、成分、批次、临床一期、二期、N期测试数据、自研或进口等详细信息,多达几十个字段。

图2 药品元数据

用户会通过页面或者APP的方式浏览和查询药品信息,这需要应用提供多种组合的查询方式,比如:

  1. 按照药品名称查询:比如查询“阿莫西林”为关键字的药品列表。
  2. 按照生产企业名称查询:比如之前的疫苗事件,我们可以查询生产企业为“长春长生生物科技股份有限公司”的药品列表。
  3. 按照时间维度,查询一个时间范围的数据:比如查询某个药企在2017年~2018年生产的抗生素批次。
  4. 按照某个地域或者范围查询:比如患者可以通过页面,搜索自己附近5公里内特定感冒药。又比如,我们在面对自然灾害时,我们可以使用Geo功能,查询最近范围的应急药品,紧急调往灾区。

上面只是列举的一些典型查询场景,药品备案信息中拥有大量的字段,使用者会从多个查询维度查询数据。因此在保证性能的前提下,提供丰富的查询功能成为元数据管理的主要技术难点。

状态数据

药品的状态数据是指药品在生产、流通过程中产生的状态数据,比如药品的原材料流通、药企生产药品过程中的状态、运输过程的轨迹、医院药店存储和使用数据等。

图3 常见状态数据

药品流通会产生大量的状态数据,这些数据需要持续的记录下来,后续才可以做到真正的药品溯源。我们先来罗列一下药品状态数据:

  1. 药企的状态数据:这里主要指药品依赖的原材料溯源信息和生产过程的环境数据。这些数据帮助企业监控药品生产状态,帮助药监局审计药品生产过程,在溯源过程中,结合元数据信息,可以让用户对药品有一个更全面的了解。
  2. 运输的轨迹状态数据:这个主要指药品的运输的产生的轨迹、存储容器高温低温异常事件。“轨迹溯源”可以基于这些数据实现。
  3. 药店、医院的库存数据:这个主要指药品在相关的医药机构流转和库存信息等,比如上面的“附近药品”查询就可以基于这个数据实现。

从上面的数据来源可知,一盒简单的药品在到送到患者手上之前,会有大量的流通环节,每个环节都会产生大量的状态数据。同时,中国市场药品的规模在万亿人民币级别,并且伴随每年有将近一成的增长,是全球第二大医药市场。要满足如此巨大的规模下的状态数据的存储,极高的写入吞吐、海量存储规模、可控的存储成本成为必须要解决的问题。

解决方案

图4 MySQL分库分表 vs Tablestore

从对药品元数据管理和状态数据溯源的总结可知,要满足以上的功能和性能需求,单机已经无法满足要求,需要使用分布式的方案。一般传统的方案会采用MySQL分库分表的方案,但是这个方案在实际生产和运维中面临不少问题,比如:

  1. 扩容不方便,需要做数据的重新分布。
  2. 分布键变更很麻烦,分布键需要谨慎选择。
  3. SQL限制多,功能缺失多,无法充分发挥MySQL自身的优势。
  4. 传统的关系模型新增字段需要极大的成本,严重阻碍用户业务的扩展。
  5. 由于单个节点是孤立的节点,需要提供主备来保障数据的可靠性。无法像分布式的NoSQL一样实现自动的故障恢复,需要一个DBA来及时维护库的状态。
  6. 无法提供灵活的多字段查询,只能依赖二级索引和全表扫描Fliter实现多维查询功能,效率相对较低。
  7. 无法做到计算和存储分离,用户很难做到计算和存储均衡匹配,导致资源浪费。
  8. 无法原生支持Geo查询。

总结来看,从理论上能满足以上的功能需求,但是要想真正在生产中使用和维护好这套存储系统,只能说“想爱你并不容易”。在这种大数据的OLTP的场景下,业界一般选用分布式的NoSQL方案。因此我们推荐使用Tablestore一站式的解决以上问题。Tablestore是一款阿里自研的分布式NoSQL服务,提供多元索引支持丰富的查询需求,支撑超大规模的并发访问和低延迟的性能,可以很好的解决药品元数据管理和溯源的需求。

Timestream

Timestream是表格存储推出的最新数据模型,这个模型针对时序数据、轨迹数据、溯源数据,定义了一套简单清晰易用的API,细节可以参考《Tablestore Timestream:为海量时序数据存储设计的全新数据模型》。

在我们列举的药品监管场景中,药品的元数据可以非常简单的抽象为Timestream的元数据(Meta),状态数据抽象为Timestream的Data数据。本文作为一个实战文章,因此使用Timestream模型来快速高效的实现以上两个功能。

从上面的Timestream介绍文章可知,Timestream拥有几个核心概念,分别是:Name, Tag, Attribute, Timestamp, Point(Fields)。我们罗列一个表格,展示怎么将药品的相关数据映射到Timestream的模型中,如图所示:

图5 模型转换图

  • 分类(Name)+标识符(Tag): 这两个字段唯一决定一个药品数据。
  • 元数据(Attribute):  药品的相关属性,当药品在登记在案时这个数据被持久化存储。
  • 最新状态数据(Attribute):  如标题,药品最新的状态,比如上面的‘地点’信息,我们可以创建Geo的索引,用户地理信息的查询。
  • 时间(Timestamp): 状态数据的发生时间。
  • 轨迹、状态: 具体的状态数据,上面只是两个示例,实际上可以支持非常多的字段。

接下来我们通过一个可以运行的Demo,向大家展示怎么使用Timestream API实现元数据管理和溯源功能。

功能实现(Java)

功能列表

写入

  1. 药品元数据持久化,将药品的相关元数据信息存储到Tablestore中。
  2. 药品运输轨迹持久化,主要是运输和流转的轨迹,药品的实时状态等,并将Location(位置)作为Geo索引,方便后期的Geo查询。

查询

  1. 基本的药品详细信息查询,主要是根据用户输入条件,显示药品的元数据。
  2. 药品的防伪鉴定,结合生产日期,运输轨迹、销售状态和查询用户等数据对药品实行防伪鉴定。
  3. 查询指定地点范围内的特定药品。
  4. 药品轨迹重放

依赖

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>tablestore</artifactId>
    <version>4.11.2</version>
</dependency>

Meta表的创建

对于一些固定且有特殊索引需求的字段,我们在创建Meta表的时候需要单独指定,比如“生产日期”、地理信息、状态数据等。

考虑到后面的扩展需求,我们增加一个扩展字段,“extension”,用于存储未定义的元数据。

以下示例只是给了部分元数据字段,用户可以根据自己的需求设置更多的索引字段。

public void createMetaTable() {
    List<AttributeIndexSchema> index = new ArrayList<AttributeIndexSchema>();
    index.add(new AttributeIndexSchema("produced_date", AttributeIndexSchema.Type.LONG));
    index.add(new AttributeIndexSchema("period_of_validity", AttributeIndexSchema.Type.LONG));
    index.add(new AttributeIndexSchema("loc", AttributeIndexSchema.Type.GEO_POINT));
    index.add(new AttributeIndexSchema("links", AttributeIndexSchema.Type.KEYWORD));
    index.add(new AttributeIndexSchema("status", AttributeIndexSchema.Type.KEYWORD));
    index.add(new AttributeIndexSchema("extension", AttributeIndexSchema.Type.KEYWORD).setIsArray(true));
    db.createMetaTable(index);
}

Data表的创建

这个比较简单,只需要设定表名即可。因为我们是Schema Free的体系,不需要预先指定列,在写入的时候指定即可。

public void createDataTable() {
    db.createDataTable(conf.getDataTableName());
}

录入药品元数据和状态数据

元数据导入,我们将一个本地的csv文件中的数据导入到数据库中

public void importMeta() throws IOException {
    TimestreamMetaTable metaTable = db.metaTable();
    String [] fileHeader = {"分类", "名称", "监管号", "受理号", "生产日期", "有效日期", "注册分类", "申请类型", "企业名称", "任务类型"};
    String csvFile = conf.getMetaFile();
    CSVFormat format = CSVFormat.DEFAULT.withHeader(fileHeader).withIgnoreHeaderCase().withTrim();
    Reader reader = Files.newBufferedReader(Paths.get(csvFile));
    CSVParser csvParser = new CSVParser(reader, format);
    for (CSVRecord r : csvParser.getRecords()) {
        TimestreamIdentifier identifier = new TimestreamIdentifier.Builder(r.get("分类"))
                .addTag("名称", r.get("名称"))
                .addTag("监管号", r.get("监管号"))
                .build();
        TimestreamMeta meta = new TimestreamMeta(identifier);

        meta.addAttribute("produced_date", r.get("生产日期"));
        meta.addAttribute("period_of_validity", r.get("有效日期"));

        List<String> extension = new ArrayList();
        extension.add("受理号=" + r.get("受理号"));
        extension.add("注册分类=" + r.get("注册分类"));
        extension.add("申请类型=" + r.get("申请类型"));
        extension.add("企业名称=" + r.get("企业名称"));
        extension.add("任务类型=" + r.get("任务类型"));
        meta.addAttribute("extension", new Gson().toJson(extension));

        metaTable.put(meta);
        System.out.println(meta.toString());
    }
}

状态数据导入,这里loc, links,status在Meta和Data都存储了一次,Meta表中存储主要是做后续的索引查询,Data表中存储主要是做

public void importData() throws Exception {
    TimestreamMetaTable metaTable = db.metaTable();
    TimestreamDataTable dataTable = db.dataTable(conf.getDataTableName());

    String [] fileHeader = {"分类", "名称", "监管号", "生产日期", "位置", "环节", "状态"};
    String csvFile = conf.getDataFile();
    CSVFormat format = CSVFormat.DEFAULT.withHeader(fileHeader).withIgnoreHeaderCase().withTrim();
    Reader reader = Files.newBufferedReader(Paths.get(csvFile));
    CSVParser csvParser = new CSVParser(reader, format);
    for (CSVRecord r : csvParser.getRecords()) {
        TimestreamIdentifier identifier = new TimestreamIdentifier.Builder(r.get("分类"))
                .addTag("名称", r.get("名称"))
                .addTag("监管号", r.get("监管号"))
                .build();

        TimestreamMeta meta = new TimestreamMeta(identifier);

        String loc = toLocationString(r.get("位置"));
        String links = r.get("环节");
        String status = r.get("状态");

        meta.addAttribute("loc", loc);
        meta.addAttribute("links", links);
        meta.addAttribute("status", status);
        metaTable.update(meta);

        Point point = new Point.Builder(this.getTimestamp(r, "生产日期"), TimeUnit.MILLISECONDS)
                .addField("loc", loc)
                .addField("links", links)
                .addField("status", status)
                .build();
        dataTable.asyncWrite(identifier, point);
        System.out.println(point.toString());
    }
    dataTable.flush();
}

 

多维度查询药品溯源信息

1. 基本的药品详细信息查询,主要是根据用户输入条件,显示药品的元数据。我们这里根据药品分类、药品名称、生产企业来查询药品。

Filter filter = and(
        Name.equal("中药"),                                    
        Tag.equal("名称", "复方阿胶"),                      
        Attribute.in("extension", new String[]{"企业名称=山东****也有限公司"})
);

Iterator<TimestreamMeta> iter = metaTable.filter(filter).fetchAll();
while (iter.hasNext()) {
    TimestreamMeta m = iter.next();
    System.out.println(m);
}

2. 药品的防伪鉴定,结合生产日期,运输轨迹、销售状态和查询用户等数据对药品实行防伪鉴定。我们这里输入名称和药品监管码。

Filter filter = and(
        Name.equal("中药"),                                 
        Tag.equal("名称", "复方阿胶"),                         
        Tag.equal("监管号", "8160000000000019")               
);
Iterator<TimestreamMeta> iter = metaTable.filter(filter).selectAttributes("status").fetchAll();
while (iter.hasNext()) {
    TimestreamMeta m = iter.next();
    System.out.println(m.getAttributeAsString("status"));
}
// 从查询的结果来看,药品处于召回中,有使用风险

3. 查询指定地点范围内的特定药品。比如查询使用者5KM范围的“阿莫西林”。

Filter filter = and(
        Name.equal("化药"),
        Tag.prefix("名称", "阿莫西林"),
        Attribute.inGeoDistance("loc", "31.6533906593,103.8427768645", 5 * 1000)
);
Iterator<TimestreamMeta> iter = metaTable.filter(filter).fetchAll();
while (iter.hasNext()) {
    TimestreamMeta m = iter.next();
    System.out.println(m);
}

4. 药品轨迹重放,遍历指定药品的一个轨迹溯源信息。

TimestreamIdentifier identifier = new TimestreamIdentifier.Builder("化药")
        .addTag("名称", "阿莫西林")
        .addTag("监管号", "8150000000000000")
        .build();

Iterator<Point> iter = dataTable.get(identifier).select("loc").fetchAll();
while (iter.hasNext()) {
    Point p = iter.next();
    System.out.println(p);
}

相关代码

可以在github上获取实现代码和示例代码,欢迎大家体验、使用以及给我们提出建议。

代码链接: https://github.com/aliyun/tablestore-examples/tree/master/demos/TraceMedicine 

欢迎加入

如果您对表格存储、Timestream感兴趣,对模型使用有疑问、想探讨,欢迎加入【表格存储公开交流群】,群号:11789671。

 

 

flybirding10011
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大规模数据如何实现数据的高效追溯?
华为云官方博客
03-03 8755
摘要:利用华为云GES分析,如何基于GES图数据库追溯服务的实现和优化。 “一分钟,我要这个人的全部信息”,霸道总裁拍了拍你,并提出这个要求。秘书开始发力,找到了:姓名、年龄、联系方式、爱好,这些信息。不太够?那就再加上亲朋好友信息,近期活动信息,更完整展现这个人。虽然是个段子,但也给与我们一些启示:对象本身的信息可能不够“全”,周边关联的数据也是对象信息的重要组成,这些关联数据对在进行数据分析和挖掘时十分有用。 现实生活中关联关系十分普遍,比如人的社交、商品生产和消费行为之间都是关联关系。数据分析时,
药品监管系统架构揭秘海量溯源数据存储查询
阿里云技术
05-16 557
前言 在刚刚过去的2018年,“毒疫苗”事件再次触及了大众的敏感神经,因为十年前的“毒奶粉”事件还历历在目。我们急需创建一个全国性的药品(食品)监控追踪体系。与此同时,近年来随着国家对医药行业的大力支持,中国的医疗事业也出现了跨越式的发展,大量的新型药品上市,极大的丰富了患者和消费者的选择范围。大量的药品在市面上流通,产生了大量的状态数据,且这类数据在爆发式的增长。如何高效的存储溯源药品状态数...
Tablestore Timestream:为海量时序数据存储设计的全新数据模型 ...
weixin_34354173的博客
04-17 451
引言 随着近几年物联网的发展,时序数据迎来了一个不小的爆发。为了存储这些时序数据,各大企业纷纷推出自己的时序数据库。Tablestore作为阿里云自研的NoSQL多模型数据库,能够提供海量结构化数据存储以及快速的查询和分析服务,其在存储模型、数据规模以及写入和查询能力上,都能很好的满足时序数据的场景,另外已经支持很多时序类业务,例如监控类的云监控,事件类...
TableStore-什么是表格存储
panjiapengfly的博客
10-25 6166
由于业务的开发,需要一种nosql数据库来永久存储目前的业务数据,结合实际和具体业务特点,我们最终选择了表格存储。 参考:https://help.aliyun.com/document_detail/27280.html?spm=a2c4g.11186623.6.542.43c57817ZDg0Bu 表格存储是什么? 表格存储(Table Store)是阿里云自研的NoSQL多模型数...
表格存储Tablestore权威指南(持续更新)
xstardust的博客
05-05 455
说明 表格存储本着提升用户体验的思路,打造《表格存储Tablestore权威指南》。为用户提供可借鉴的开发指导、经典案例。经典案例按照场景应用类型划分,每个类型下都会提供多种典型的场景案例。未来我们会将经典案例汇总,成为表格存储产品的使用手册。 表格存储打造的经典场景,都会发布云栖文章,提供相应的实现代,代仓库都会撰写在文章中。 通过云栖文章、场景实现代开源,用户可以更好地了解表格存储使...
揭秘京东区块链开源项目——JD Chain
weixin_33806509的博客
04-11 231
2019独角兽企业重金招聘Python工程师标准>>> ...
农产品溯源系统设计方案.pdf
04-06
农产品溯源系统设计方案.pdf农产品溯源系统设计方案.pdf农产品溯源系统设计方案.pdf农产品溯源系统设计方案.pdf农产品溯源系统设计方案.pdf农产品溯源系统设计方案.pdf
加密数字货币与网络犯罪:_追踪与溯源的挑战.pdf
08-11
创新与混乱:加密数字货币 加密数字货币与网络犯罪 加密数字货币追踪与溯源 挑战就在现在
微商助理 防伪防窜货溯源代理授权查询系统.rar
07-10
微商助理防伪防窜货溯源代理授权查询系统支持二维吗扫查询 程序架构:PHP+Mysql PHP版本要求PHP5.4以上(推荐PHP5.4) 把源文件上传到网站根目录,此套系统功能较多,不推荐二级目录安装
病毒溯源.doc病毒溯源.doc
04-18
病毒溯源分析是指通过研究病毒的来源和传播途径,以确定病毒的起源和传播方式。这种分析对于预防和控制疾病的传播非常重要。 病毒溯源分析通常包括以下几个方面: 1. 病毒的基因序列分析:通过对病毒的基因序列...
基于区块链的RFID数据采集溯源系统设计与实现.pdf
09-09
基于区块链的RFID数据采集溯源系统设计与实现 数据分析 安全对抗 安全 安全体系 安全分析
2024年5月系统架构设计师综合知识真题
Nanki_的博客
05-26 1221
系统架构评估 微服务架构特点,优势和缺点:7分。 质量属性及场景填空:6个空,6分。 质量属性场景描述六要素:12分【刺激源,刺激,制品,环境,响应,响应度量】 Redis: 基于MySQL锁的缺点:9分【性能瓶颈,复杂性,可靠性问题,扩展性差,一致性问题】 分布式Redis锁的死锁的情况,其他分布式锁:10分 redis zset命令:6分【ZADD,ZCARD,ZSCORE,ZRANGE】 UML 序列图的哪三种消息和概念【同步,异步,返回】 序列图补全填空 系统分析设计过程中两种交互图的选取
系统架构设计师 - 操作系统(1)
Al_tair的博客
06-02 323
大家好呀!我是小笙,本章我主要分享系统架构设计师 - 操作系统(1)知识,希望内容对你有所帮助!!
系统架构设计师【第5章】: 软件工程基础知识 (核心总结)
数据知道的博客
05-30 1358
按照常见的软件开发阶段划分,分别讨论需求、分析、设计、编和测试等环节中的常见方法和技术
处理大数据的关键技术?
喜欢猪猪
05-30 1044
处理大数据涉及多种技术和工具,这些技术和工具各有其专长,能够解决大数据处理中的不同问题。
RabbitMQ小结
最新发布
javanmsl的博客
06-02 411
kafka优点:性能好,吞吐量高百万级,分布式,消息有序缺点:单机超过64分区,cpu会飙高,消费失败不支持重试 ,
k8s 全面掌控日志系统
ycloud
05-29 848
为了提高系统运维和故障排查的效率, 日志系统采用 ELK(Elasticsearch、Logstash、Kibana)技术栈,通过 FileBeats 作为日志收集器,将来自不同节点的日志数据汇总并存储在 Elasticsearch 中,最终通过 Kibana 进行可视化展示和分析。
apache大数据各组件部署搭建(超级详细)
weixin_43977307的博客
05-30 1608
准备3台服务器用于集群部署,系统建议CentOS7+,2核8G内存172.19.195.228 hadoop101 172.19.195.229 hadoop102 172.19.195.230 hadoop103 2. 安装包下载准备 数仓部署组件安装包: 链接:https://pan.baidu.com/s/1Wjx6TNkedMTmmnuWREW-OQ 提取:bpk0已经把相关组件均上传至网盘,也可自行去各自官方地址去下载收集;3台机器的/etc/hosts主机名解析配置: 4. 配置服务器之间免密
hw行动的应急溯源、防御和对抗.zip
08-08
「hw行动的应急溯源、防御和对抗.zip」是关于应对「hw行动」的紧急追踪、防御和对抗的文件。这个文件夹可能包含了一系列工具、手册和说明书,帮助组织或个人应对和防御「hw行动」所带来的威胁。 在文件夹中,可能会...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 深度解密Go语言之关于 interface 的 10 个问题 42104
  • 【原创】“三次握手,四次挥手”你真的懂吗? 39728
  • 深入Go的底层,带你走近一群有追求的人 38969
  • aaaadafdsafdashfhdskhk 35046
  • HTTP POST请求json数据量过大的问题 28358

分类专栏

  • 213212222222 付费
  • 2324251 付费 9篇
  • 1232aaabbb9999 付费 8篇
  • 1220xs 付费 10篇
  • 234313 付费 1篇
  • 价格测试-1 付费 7篇
  • 发布测测试 付费 9篇
  • 123 付费 3篇
  • 专栏9 付费
  • 笔记 16篇
  • 121
  • 发布文章123 2篇
  • 213131313213213
  • 新库付费1 21篇
  • 新啦啦啦啦
  • 8888890090000 3篇
  • 数据结构 3篇
  • 1231-修改
  • 迁移数据库09140001 原库 1篇
  • 而我却翁无若‘1
  • 私密文章专栏测试12
  • 323131
  • 专栏测试1
  • bbb 1篇
  • 测试111 5篇
  • 测试下新的问题
  • 9090909221 1篇
  • 000111 1篇
  • wy测试专栏
  • wqeq
  • fdsafdas 1篇
  • 专栏101 2篇
  • 11 1篇
  • 32132133
  • aaaa 1篇
  • 分享测试 24篇
  • 添加专栏测试1
  • 研发管理 4篇
  • 213213 1篇
  • 新的升级啦 2篇
  • 11111 6篇
  • 111111
  • qweqw
  • cccc
  • ++22111啊啊啊111111
  • 测试专栏0001 4篇
  • 付费测试 1篇
  • 笔记修改后111111新库 90篇
  • 付费专栏审核 3篇
  • 2223 1篇
  • #笔记 1368篇
  • 测试 1篇
  • c++ces q11 1篇
  • c 和恒大 1篇
  • 发布 2篇
  • Bz222!@@ 5篇
  • 计数qi 2篇
  • 大分类 11篇
  • 148 6篇
  • 109 11篇
  • linux技术专栏 2篇
  • 白色 4篇
  • 23 9篇
  • 38
  • 26 1篇
  • 新专栏
  • hahaha
  • 61
  • 48
  • 71
  • 72
  • 73
  • 75
  • 76
  • 77
  • 78
  • 80
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 测试专栏14
  • 58
  • 59
  • 60
  • 测试专栏06 2篇
  • 测试专栏07
  • 测试专栏01
  • ce
  • 测试专栏08 1篇
  • 测试专栏09
  • 测试专栏10
  • 测试专栏12
  • 测试专栏13
  • 2019-1 2篇
  • 专栏申请4-修改 1篇
  • 编程语言总结集锦-2 7篇
  • 新建专栏测试 10篇
  • 测试专栏3
  • 测试的 5篇
  • test128 5篇
  • 测试123456 1篇
  • 测试专栏1
  • 测试专栏2 1篇
  • 测试专栏4
  • 测试专栏5
  • 卡顿

最新评论

  • 周星驰 Web3 团队将上线独立 App;Gemini 刚发就惹质疑:效果视频疑似剪辑;Meta 推独立AI图像生成器|极客头条...

    假装自己很用心: 这是第一个代码 [code=python] import turtle # 初始化turtle t = turtle.Turtle() t.speed(0) # 设置最快速度 # 设定画笔颜色和填充色 t.pencolor("red") # 边框颜色 t.fillcolor("pink") # 填充颜色 t.begin_fill() # 开始填充图形 # 绘制爱心左半部分 t.left(45) # 左转45度 t.forward(100) t.circle(100, 180) # 以当前位置为中心,半径100,逆时针转180度 # 绘制爱心右半部分 t.circle(100, 180) # 再逆时针转180度回到起点 t.forward(100) # 结束填充图形 t.end_fill() # 提升画笔,隐藏turtle t.penup() t.hideturtle() # 显示最终图形 turtle.done() [/code] 这是第二个代码[code=python] [code=python] import turtle # 初始化turtle t = turtle.Turtle() t.speed(0) # 设置最快速度 # 设定画笔颜色和填充色 t.pencolor("red") # 边框颜色 t.fillcolor("pink") # 填充颜色 t.begin_fill() # 开始填充图形 # 绘制爱心左半部分 t.left(45) # 左转45度 t.forward(100) t.circle(100, 180) # 以当前位置为中心,半径100,逆时针转180度 # 绘制爱心右半部分 t.circle(100, 180) # 再逆时针转180度回到起点 t.forward(100) # 结束填充图形 t.end_fill() # 提升画笔,隐藏turtle t.penup() t.hideturtle() # 显示最终图形 turtle.done() [/code] [/code]

  • 周星驰 Web3 团队将上线独立 App;Gemini 刚发就惹质疑:效果视频疑似剪辑;Meta 推独立AI图像生成器|极客头条...

    假装自己很用心: 啦啦啦啦遮挡代码 [code=python] import turtle # 初始化turtle t = turtle.Turtle() t.speed(0) # 设置最快速度 # 设定画笔颜色和填充色 t.pencolor("red") # 边框颜色 t.fillcolor("pink") # 填充颜色 t.begin_fill() # 开始填充图形 # 绘制爱心左半部分 t.left(45) # 左转45度 t.forward(100) t.circle(100, 180) # 以当前位置为中心,半径100,逆时针转180度 # 绘制爱心右半部分 t.circle(100, 180) # 再逆时针转180度回到起点 t.forward(100) # 结束填充图形 t.end_fill() # 提升画笔,隐藏turtle t.penup() t.hideturtle() # 显示最终图形 turtle.done() [/code] 阿拉啦啦啦

  • 周星驰 Web3 团队将上线独立 App;Gemini 刚发就惹质疑:效果视频疑似剪辑;Meta 推独立AI图像生成器|极客头条...

    这是一个正常的昵称: import turtle # 初始化turtle t = turtle.Turtle() t.speed(0) # 设置最快速度 # 设定画笔颜色和填充色 t.pencolor("red") # 边框颜色 t.fillcolor("pink") # 填充颜色 t.begin_fill() # 开始填充图形 # 绘制爱心左半部分 t.left(45) # 左转45度 t.forward(100) t.circle(100, 180) # 以当前位置为中心,半径100,逆时针转180度 # 绘制爱心右半部分 t.circle(100, 180) # 再逆时针转180度回到起点 t.forward(100) # 结束填充图形 t.end_fill() # 提升画笔,隐藏turtle t.penup() t.hideturtle() # 显示最终图形 turtle.done()

  • 周星驰 Web3 团队将上线独立 App;Gemini 刚发就惹质疑:效果视频疑似剪辑;Meta 推独立AI图像生成器|极客头条...

    假装自己很用心: [code=cpp] #include<stdio.h> #include<Windows.h> int main() { system(" color 0c");//设计程序颜色 printf("遇见你是一件很开心的事情,爱你哟!!!\n");//打印文字 float x,y,a;//定义变量x,y,a for(y=1.5f;y>-1;y-=0.1f) { for(x=-1.5f;x<1.5f;x+=.05f){ a=x*x+y*y-1; putchar(a*a*a-x*x*y*y*y<0.0f?'x':' '); } Sleep(150);//停顿函数(1.5秒钟) putchar('\n'); //换行 } return 0; } [/code]

  • 周星驰 Web3 团队将上线独立 App;Gemini 刚发就惹质疑:效果视频疑似剪辑;Meta 推独立AI图像生成器|极客头条...

    假装自己很用心: [code=csharp] #include<stdio.h> #include<Windows.h> int main() { system(" color 0c");//设计程序颜色 printf("遇见你是一件很开心的事情,爱你哟!!!\n");//打印文字 float x,y,a;//定义变量x,y,a for(y=1.5f;y>-1;y-=0.1f) { for(x=-1.5f;x<1.5f;x+=.05f){ a=x*x+y*y-1; putchar(a*a*a-x*x*y*y*y<0.0f?'x':' '); } Sleep(150);//停顿函数(1.5秒钟) putchar('\n'); //换行 } return 0; } [/code]

大家在看

  • leetcode第263题:丑数
  • leetcode第1281题: 整数的各位积和之差 134
  • 字符串模块练习 469
  • docker详细学习文档
  • 内网部署api接口文档服务器端口如何让外网访问?

最新文章

  • 构建企业级大语言模型应用的秘诀:GitHub Copilot 的实践之路
  • 周星驰 Web3 团队将上线独立 App;Gemini 刚发就惹质疑:效果视频疑似剪辑;Meta 推独立AI图像生成器|极客头条...
  • ChatGPT 一周年回顾:谁在用?用途有哪些?为什么受欢迎?
2023年74篇
2022年119篇
2021年342篇
2020年294篇
2019年3750篇
2018年1985篇
2017年757篇
2016年93篇
2015年123篇
2014年6篇
2013年4篇
2012年14篇
2009年8篇
2008年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源魔域boss白洁少妇工商起名打分起名姓王女人名字洋气如梦社区论坛公司八字起名大全起名四画属金的字有哪些u盘插上没反应监督权椿萱并茂是什么意思trutrussardi柳德米拉起名字大全免费武汉大学招生办电话中国报刊网如影随形小说于金正沈阳起名宇宙第一幼稚园袁姓女子女起名字无抵押小额贷款股票软件下载排名年属猴的怎么起名国产单机游戏惜别的海岸原唱清梦压星河po别流泪湖人vs快船直播联通话费查询号码可以根据父母的姓起名叶罗丽仙子哪个最丑淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化