自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 Linux文件系统管理

计算机用于存取文件的硬件是磁盘,磁盘的组成主要有磁盘盘、机械手臂、磁盘读取头与主轴马达所组成, 而数据的写入其实是在磁盘盘上面。磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位, 其中扇区的物理量设计有两种大小,分别是 512bytes 与 4Kbytes。分区表所在区块仅有 64 bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的磁柱号码。

2023-08-13 23:03:54 1054

原创 java函数式编程

lambed表达式lambed表达式的基本用法:Arrays.sort(array, (s1, s2) -> s1.compareTo(s2));参数是(s1, s2),参数类型可以省略,因为编译器可以自动推断出String类型。-> { … }表示方法体,所有代码写在内部即可。FunctionalInterface(函数式接口)我们把只定义了单方法的接口称之为FunctionalInterface,用注解@FunctionalInterface标记。接收FunctionalInt

2022-05-29 10:03:28 997

原创 《大数据之路》阅读笔记--数据同步

数据同步同步方式主要分为三种:直连同步、数据文件同步和数据库日志解析同步。直连同步直连同步是指直接使用ODBC/JDBC接口的方式直接连接数据库来拉取数据,这种方式对源系统的性能影响较大,不适合大数据量的情况。数据文件同步数据文件同步通过约定好的文件编码、大小、格式等,直接从源系统生成数据的文本文件,由专门的文件服务器,如FTP服务器传输到目标系统后,加载到目标数据库系统中。当源数据来自多个不同的数据库系统时这种方式比较好。在使用数据文件同步时,同时还会同步一个校验文件,保证文件的完整性。另外

2022-04-19 20:07:22 1291

原创 《大数据之路》阅读笔记--数据采集

数据采集浏览器页面日志采集浏览器页面采集主要包括页面浏览日志采集以及页面交互日志采集两部分。页面浏览日志主要包括:页面浏览量( Page View, PV )和访客数( Unique Visitors, UV )。页面浏览日志采集流程基本思路是在html文档内适当位置增加一个日志采集节点,当浏览器解析到这个节点时,将自动触发一个特定的http请求到日志采集服务器。页面交互日志采集主要流程如下:1、业务方在元数据管理页面依次注册需要采集交互日志的业务、场景以及采集点的位置,系统会生成代码模板。

2022-04-11 16:04:55 2222

原创 分布式系统简介与分布式一致性算法

分布式架构集中式的特点集中式是指一台或多台计算机组成中心节点,数据集中存储于这个中心节点中。集中式系统的最大特点是部署结构简单,不需要考虑多个节点之间的分布式协作问题。分布式特点分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。分布式系统有以下几个特征:分布性。多台机器随意分布对等性。分布式系统中的计算机没有主从之分。分布式系统会对数据和服务提供一种冗余方式,也就是副本的概念。并发性。如何准确高效的协调分布式并发操作是分布式系统架构与设计

2021-11-22 15:09:37 1675

原创 java|Lambda表达式

lambed表达式lambed表达式的基本用法:Arrays.sort(array, (s1, s2) -> s1.compareTo(s2));参数是(s1, s2),参数类型可以省略,因为编译器可以自动推断出String类型。-> { … }表示方法体,所有代码写在内部即可。FunctionalInterface(函数式接口)我们把只定义了单方法的接口称之为FunctionalInterface,用注解@FunctionalInterface标记。接收FunctionalInt

2021-11-15 20:05:11 438

原创 java基础|接口|查漏补缺|comparable接口|深浅拷贝

不能使用new实例化一个接口,但是可以声明一个接口的变量:Comparable x;x = new Employe(...);还可以使用instanceof检查一个对象是否实现了某个特定的接口:if(anObject instanceof Comparable){}接口也可以继承,子接口会继承父接口的方法。接口中不能包含实例字段,但是可以包含常量。接口中的方法都会自动被声明为public,接口中的字段总是被声明为public static final一个类只能继承.

2021-11-04 15:12:15 139

原创 HiveQL调优

使用EXPLAIN使用EXPLAIN可以打印出查询语句的抽象语法树,比如下面的:EXPLAIN SELECT SUM(number) FROM onecol;还可以使用EXPLAIN EXTENDED产生更多的输出信息。可以通过分析语句的语法树来查找问题所在。join优化hive做联结操作时,会先对前面的表缓存,然后扫描最后一张表。所以,联结的时候最好保证联结查询中的表的大小从左往右是依次增加的如果表中有一张是小表,可以在最大的表通过mapper的时候将小表完全放到内存中。Hive可以在m

2021-11-03 21:13:50 910

原创 hive基础操作

hive数据类型基本数据类型:数据类型长度例子TINYINT1byte有符号整数20SMALLINT2byte有符号整数20INT4byte有符号整数20BIGINT8byte有符号整数20BOOLEAN布尔类型TRUEFLOAT单精度浮点数3.1419DOUBLE双精度浮点数3.14159STRING字符序列。可以指定字符集。可以使用单引号或者双引号TIMESTAMP整数,浮点数或者字符串(JDB

2021-11-02 15:19:41 861

原创 SQL学习|窗口函数

窗口函数也称为OLAP函数。OLAP 是 OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理。窗口函数的一般形式:<窗口函数> OVER ([ PARTITION BY <列名>] ORDER BY <排序用列名>) PARTITON BY 是用来分组,即选择要看哪个窗口,类似于 GROUP BY 子句的分组功能,但是 PARTITION BY 子句并不具备 GROUP BY 子句的汇总功能,并不会改变原始表

2021-08-25 21:09:19 343

原创 SQL学习|集合运算

表的加法–UNIONunion的简单使用,将两个查询的结果加起来:SELECT product_id, product_name FROM Product UNIONSELECT product_id, product_name FROM Product2;UNION会自动去除两个查询结果中的重复数据。想要让UNION不自动去除重复数据,可以使用UNION ALL在同一个表中查询时,使用or往往能取得和使用union相同的效果,但是有时候为了效率考虑会使用union。当涉及到

2021-08-24 17:33:17 134

原创 SQL学习|复杂查询

使用视图视图是虚拟的表。看下面一个例子:SELECT cust_name, cust_contact FROM customers, orders, orderitemsWHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num AND prod_id = 'TNT2';可以将整个查询包装成一个productcustomers的虚拟表:SELECT cust_name,

2021-08-18 20:29:31 623 1

原创 SQL学习|基础查询与排列

排序检索数据使用ORDER BY字句对输出排序。如,SELECT prod_name FROM products ORDER BY prod_name;表示对输出以字母排序。按多个列排序,如,SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price, prod_name;先使用价格排序,再使用名排序。指定排序方向如,SELECT prod_id, prod_price, prod_name FROM

2021-08-18 10:49:45 261

原创 ubuntu下搭建mysql环境 & 初识SQL

sudo apt-get install mysql-serverapt-get isntall mysql-clientsudo apt-get install libmysqlclient-dev安装好之后使用sudo netstat -tap | grep mysql来查看mysql运行状态,如果处于listen状态,那就没问题接下来进行mysql初始配置,sudo mysql_secure_installation按照提示一个个的选择就好了,现在我们配置好了密码,查看一下mys

2021-08-17 14:03:40 315

原创 使用百度智能云人脸检测接口实现照片质量检测

首先创建百度账号,登录百度AI开放平台,进入开发者中心,进入控制台,选择产品服务中的人脸识别。然后创建一个应用。创建成功得到API Key和Secret Key接下来使用刚刚得到的API Key和Secret Key获取access_token。向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:grant_type: 必须参数,固定为client_credentials;client_id:

2021-08-10 14:22:14 1330

原创 排序算法总结

代码中的less是比较两个数的大小,swap是对两个数进行交换。冒泡排序冒泡排序是最简单的排序算法,冒泡排序从前往后依次比较相邻两个元素的大小,前面一个比后面一个大就进行交换,这样一轮下来,最后一个元素就是最大值。然后对前面n-1个数重复这个过程,最后完成排序。public class BubbleSort implements IArraySort { @Override public int[] sort(int[] sourceArray) throws Exception {

2021-08-03 20:13:59 55

原创 LeetCode刷题|两个链表的第一个公共节点

题目描述题目地址:两个链表的第一个公共节点解法一:暴力枚举一个朴素的想法是直接对每一个节点进行枚举,这样做的时间复杂度是O(M*N)。public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { for(ListNode pa = headA; pa!=null; pa = pa.next) { for(ListNode pb

2021-07-21 21:29:15 131

原创 java集合--Collection接口与List接口

集合接口与实现分离java集合设计的特点之一:接口与实现分离。比如队列的接口为Queue,而具体的实现类有ArrayDeque和Linkedlist,前者使用循环数组实现,后者使用链表实现。过时的类与接口由于Java的集合设计非常久远,中间经历过大规模改进,我们要注意到有一小部分集合类是遗留类,不应该继续使用:Hashtable:一种线程安全的Map实现;Vector:一种线程安全的List实现;Stack:基于Vector实现的LIFO的栈。还有一小部分接口是遗留接口,也不应该继续使用:

2021-07-10 19:56:46 123

原创 LeetCode刷题|38外观数组

做了半天的一道题一看竟然是一道简单题。。题目描述地址:外观数组题目意思很好理解,就是一个递归的过程,从‘1’开始,对每一个输入字符串做一个几个几这样格式的描述,然后再把这个描述作为下一次的输入,直到求出第n项的结果。解法一这题是一个比较明显的递归题目,但是由于我递归学的不好,所以就考虑如何不使用递归直接做出来。那么简单说一下我的想法。我的做法就是先写一个将输入字符串进行划分并描述的函数,然后反复调用这个函数就可以了。所以这种方法的重点在于如何写字符串划分并描述的函数。class Solutio

2021-05-16 14:24:59 107

原创 LeetCode刷题|13罗马数字转整数

三个月前做的一道题,变成了今天的每日一题了,看样子不记录一下果然还是很快就会忘。题目描述地址:罗马数字转整数解法一虽然题目给了罗马数字转整数的六种特殊情况,但是实际上,本题的核心在于,将罗马数组转为整数的过程中,需要观察前后两个数的大小关系,如果前面一个数比后面的数小,那么久需要减去这个前面这个数,反之,就是要加上这个数。逻辑很简单,那么我们再把每一个字母代表的数字对应起来,然后遍历一遍给出的字符串就可以了。class Solution: def romanToInt(self, s:

2021-05-15 16:07:36 727

原创 LeetCode刷题|897递增顺序搜索树

终于结束了几天的动态规划,迎来了今天这一道简单题。但是仔细一看,这一道跟树相关的简单题好像也没有那么简单,至少对于我来说是这样的。刷了这么久的题,对树的题目做的还是比较少的,正好乘今天好好学一下。题目描述题目地址:递增顺序搜索树解法一解法一的思想比较简单直接,就是直接中序遍历然后把所有元素存储到一个数组中,然后在从数组中拿出元素重新构建一颗树。# Definition for a binary tree node.# class TreeNode:# def __init__(sel

2021-04-25 13:29:40 80

原创 LeetCode刷题|368最大整除子集(动态规划)

今天的每日一题还是一个动态规划题目。题目描述题目地址:最大整除子集动态规划如果考虑暴力法的话这道题应该怎么做呢,最简单的能想到的方法就是枚举每一个元素作为开头,然后遍历其他元素。但是这种方法并不可靠,可以举个例子看一下:[9,18,54,90,108,180,360,540,720][9,18,54,90,108,180,360,540,720][9,18,54,90,108,180,360,540,720]这样一个数组,从9开始的话会得到[9,18,54,108,540][9,18,54,10

2021-04-23 20:46:29 172 1

原创 LeetCode刷题|打家劫舍-动态规划入门

今天记录的题目是一道动态规划算法,刷题也有一段时间了,但是每次遇到动态规划算法还是唯恐避之不及,看到使用动态规划就害怕,但是学习不能老是逃避,终究还是要学的,今天的题目正好很适合作为动态规划初学者的练手题目,题目并不难,因此,学习动态规划,就从今天这道打家劫舍题目开始吧。题目描述题目地址:打家劫舍动态规划在看今天这题的解法之前,我们先来看一下什么是动态规划。先来看一下《算法导论》中是如何描述动态规划的:从以上的描述中我们提取出几个重点,一是动态规划与分治的思想相似,都是把问题分解为子问题解决。

2021-04-15 11:32:43 203

原创 推荐系统之DIN原理与实现学习

在学习今天的模型之前,可以先回顾一下前面学到的一些模型。事实上,之前学习的一些模型都有一些共同点,首先就是都将特征分为稠密和稀疏两部分分别处理,对于稀疏特征一般都会进行embedding。随后稠密的特征直接传入深度部分进行学习,而稀疏的部分得到embedding后会与稠密部分的进行连接,然后传入DNN部分进行特征交叉。最后,DNN的输出会经过sigmoid激活后得到最终输出。这次我们学习的模型DIN同样是遵循这个套路的,但是在这个模板的基础上,DIN增加了注意力机制。使得模型更加关注对于用户有比较大影响力的

2021-03-26 16:06:56 605

原创 推荐系统之NFM原理与实现学习

目录上一次学习了DeepFM模型,DeepFM是在经典的Wide&Deep模型的基础上将wide部分替换成了FM模型,然后将FM模型的输出结果与deep部分的输出结果并行连接,最后结合两边的输出得到最终的预测结果。而这次学习的NFM模型与DeepFM模型的不同之处在于,NFM是将FM模型和Deep部分串行连接在了一起,FM部分的输出结果经过一个特征交叉池化层后就直接作为...

2021-03-23 19:28:07 471

原创 推荐系统之DeepFM原理与实现学习

这是DataWhale组队学习任务三的内容,本次学习的模型是DeepFM。前面两次学习了DeepCrossing和Wide&Deep模型,这两个深度模型中DeepCrossing是只使用了深度模型,而Wide&Deep则是将深度模型和线性模型结合起来,让模型同时拥有了泛化和记忆能力。Wide&Deep模型的wide部分通过人工判断特征组合进行输入,必需十分熟悉业务才能很好的做出判断。在模型的输出部分直接将wide部分的低阶特征和deep部分学习的高阶特征组合,这样并不能很好的结合高

2021-03-22 00:41:14 214

原创 推荐系统之Wide&Deep原理与实现学习

DataWhale推荐系统组队学习任务二,这次学习非常经典的Wide&Deep模型。学习内容与代码均来自DataWhale社区,链接附在文末。模型原理Wide&Deep是谷歌于2016年提出的一个经典推荐系统模型,至今仍发挥着巨大的影响力。Wide&Deep模型分为单层的wide层和多层的deep层,分别为模型带来了相应的记忆能力和泛化能力。所谓记忆能力,是指模型直接学习并利用历史数据中物品或者特征的“共现频率”的能力。如简单的协同过滤模型就有比较强的记忆能力。而泛化能力是指模型

2021-03-18 16:12:00 370

原创 推荐系统之DeepCrossing学习

DeepCrossing是一个真正的的将深度学习应用于推荐系统的模型。在学习DeepCrossing之前,可以先了解一下另一个使用深度学习的推荐系统模型AutoRec。AutoRecAutoRec模型是一种基于自编码思想的深度学习推荐模型。我们都知道,推荐系统的数据一般都是一个用户物品的共现矩阵,我们的任务就是将这个矩阵上面缺失的数据补全。传统的协同过滤使用相似度来度量用户或者物品之间的相似性,以此来作为推荐的标准。但是这样的方法表达能力比较弱,而且由于用户物品的评分矩阵往往比较稀疏,这样的方法效果就不

2021-03-16 17:45:01 190

原创 LeetCode刷题|54螺旋矩阵

今天的每日一题是一道关于遍历矩阵的题目。先看一下题目长啥样。LeetCode地址:螺旋矩阵解法一第一种方法很自然的就可以想到,每次遍历到行末或者列末就转向,但是如何设计使得到达末尾就转向比较麻烦。我们可以使用一个转向数组,里面存放-1,0,1三种数,-1表示减一,0表示不动,1表示加一,前进一步。那么一个数组[0,1],第一位是行,第二位是列的话,就可以用这个数组表示行不动,列每一次加一,也就是往右前进。以此类推[1,0]就表示往下前进,[-1,0]表示往左前进,[0,-1]表示往上前进。这样我们每

2021-03-15 15:31:04 91 1

原创 LeetCode刷题|331验证二叉树的前序序列化

今天的每日一题是一道与二叉树相关的题目。刷了20多天的题目之后这还是我第一次做到二叉树的题目,因此对于这类题目我还不是很熟悉,所以直接看了答案。还是先看一下今天的题目。地址:验证二叉树的前序序列化解法一解法一是使用一个计数器。将计数器理解为存放数据的槽位,当节点非空时,就占用一个槽位,但是非空节点又会连接两个子节点,因此在增加两个槽位。所以当节点非空时直接增加一个槽位。当节点为#,即为空时,直接减少一个槽位。统计过程中如果出现槽位为空或者小于0的情况说明不是前序序列化二叉树。遍历结束后如果槽位不为

2021-03-12 11:52:31 130

原创 LeetCode刷题|224基本计算器一&227基本计算器二

这次记录的两题是这两天做的每日一题的题目,正好这两题是同一个系列的,所以放到一起记下来。先看一下第一题的题目描述。地址:基本计算器一题目很好理解,就是让我们实现计算字符串形式的数学表达式。主要需要关注提示中的内容,提示告诉我们s中只包含加减运算,另外还需要考虑括号对计算顺序的影响,没有涉及到乘除法运算。那么我们看到这个题目,首先想到的肯定应该是使用栈来解决。那么看一下如何用栈来解答这道题吧。解法一既然题目说了只有加减法,那么我们就只考虑加减法,我们可以设置一个标记,用来表示加减法,标记的值为+1

2021-03-11 17:34:17 143

原创 LeetCode刷题|36有效的数独

这道题是官方编辑的初级算法中数组部分的一个题目,是一道中等难度的题。首先还是先看一下题目描述吧。题目地址:有效的数独数独大家都很熟悉,简单来讲这个题目就是要让我们写一个程序判断这个数独是不是合法的。但是题目并不要求我们判断数独是不是可解的,而且数独是一个9宫格。解答方法拿到这题第一反应还是暴力法,直接遍历三次,一次判断每行是否合法,一次判断每列是否合法,一次判断每个33的格子是否合法。但是实际上,这三个判断并不需要遍历数组三次,只需要一次就够了。另外,遍历每一个33的格子这个有点难度,反正我做的时

2021-03-09 18:14:34 192

原创 LeetCode刷题|1047删除字符串中的所有相邻重复项

连续两天没有更新了,主要原因是前面两天的每日一题有点难,我一直都还没搞明白,所以就没有记录下来。今天的每日一题是一个简单题,虽然我还是搞了很久才搞出结果来。先看一下题目吧。使用栈的方法这题一开始我是打算直接从前往后遍历,删除前后两个元素一样的数,但是根据题目要求,需要反复遍历,所以如果只遍历一遍的肯定是不行的。但是由于不知道字符串里面存在多少个相邻重复,所以这个方法不可取。可以使用的方法就是使用栈来操作了,之前做过一个括号匹配的题目,跟这个题目的想法思路都是一样的。当栈空时,我们把当前元素压入栈中,

2021-03-09 17:55:20 152

原创 LeetCode刷题|283移动零&66加一

这篇文章记录两道LeetCode官方编辑的初级算法中的数组部分的题目。首先看第一道题。移动零LeetCode地址:移动零本题要将数组中所有的零移动到数组最后,第一想法当然是冒泡,将每一个零一步一步移动到最后。冒泡class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead.

2021-03-06 17:25:38 109

原创 LeetCode刷题|503下一个更大元素 二

还是今天的每日一题,今天的是一个中等难度的题目。先看一下题目描述吧。题目描述简单解释一下就是寻找数组中每一个元素的下一个比它大的元素,这个数组是一个循环数组。暴力解法(已失败)看到这个题目,果然我只想得到暴力解法。所谓的暴力解法,就是遍历数组中每一个元素,然后再从当前元素开始再遍历数组,直到找到比当前元素大的下一个元素,然后开始下一轮遍历。这个方法的时间复杂度很显然的O(n**2)。class Solution: def nextGreaterElements(self, nums: L

2021-03-06 12:25:58 217

原创 LeetCode刷题|232用栈实现队列

今天的每日一题是用栈实现队列,是一个简单题。先来看一下题目描述吧。题目描述LeetCode地址:用栈实现队列双栈方法最开始看到这个题我想到的是用一个栈来模拟队列,但是python里面没有栈这个数据结构,只能用列表来模拟栈。但是实现完之后提交虽然通过了,我回来再仔细一看感觉有些不对,题目要求只能用栈的操作,但是我好像还用到了insert函数,我是直接把一个列表当做一个栈来使用了,这样虽然能通过测试,但是是不符合题目要求的。于是看了一下官方题解,原来可以使用两个栈来模拟队列。一个栈作为输入,一个栈作为

2021-03-05 12:06:45 134

原创 LeetCode刷题|350两个数组的交集

本题来自于官方编辑的初级算法中数组分类下的一个题目。先看一下题目描述。题目描述LeetCode地址:两个数组的交集最开始看到这个题目时,我的想法很简单,既然求交集,那就是元素在两个数组中都出现过,那么我直接遍历一个数组,看这个数组中的元素是不是在另一个数组中也出现过,不就找到交集了吗。于是我试了一下这个方法,但是提交的时候出错了。原因在于没有看清题目的一个要求,输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。当我们输入为[2,1,2,1,2]和[2,2,1]时,输出值为[2

2021-03-04 15:57:37 124 1

原创 LeetCode刷题|136只出现一次的数字

这道题来自于LeetCode官方编辑的初级算法里面数组这一类别的题目,这道题目很简单,本来不打算记录的,但是这道题的解法我感觉还是挺有意思的,于是还是打算稍微记录一下,加深印象,以便日后遇到这样的题目可以想到类似方法。在看这道题之前,先看一下另一道类似的题目:存在重复元素这道题要求我们判断数组中是否存在重复元素,存在返回True,不存在返回False。最直接的想法就是直接把数组排序,然后扫描数组,对比前后两个元素是否一致。如果遍历结束都没有两个一样的数,那说明数组不存在重复元素。另外有一种简单的方法就

2021-03-03 20:06:53 121 1

原创 LeetCode刷题|338比特位计数

今天的每日一题是一道与二进制有关的题目,也是我第一次做这样的题目。还是先看一下题目描述吧。题目描述LeetCode地址:比特位计数我的解法暴力解法第一人又开始表演了。这个题要求我们返回0-num之间所有数字的二进制表示的1的数量,返回值是一个数组。那么最直接的想法就是,遍历每一个数字,将数字转化为二进制,再遍历每一个二进制位的每一个元素,计算有多少个1,然后加入到一个数组中。最后返回整个数组。class Solution: def countBits(self, num: int) -&

2021-03-03 17:34:36 125 1

原创 LeetCode刷题|304二维区域和检索-矩阵不可变

这篇的题目还是来自每日一题的打卡题目,今天的题目是在昨天一维数组的基础上变成了二维的矩阵,求矩阵一个区域内的元素和。先看一下题目吧。题目描述LeetCode地址:二维区域和检索-矩阵不可变我的解法作为暴力解法爱好者,看到这个题目第一反应当然是直接把元素加起来就行了啊。那么要怎么加起来呢,写两个嵌套循环,分别对行和列进行遍历,然后把遍历到的元素直接相加。最高端的食材仅仅需要最简单的烹饪,啊不,最厉害的解法仅仅需要最简洁的步骤。明确了思路后,直接上手实现吧,这个代码也比较简单。一顿操作之后,得到了

2021-03-02 20:38:32 115

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除