自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 复习Javase 方法

我们先scanner 一个数字n,然后定义一个计数器count,让计数器count记录共有多少个数字9,最后i直接sout count就可以了。定义sum来求和,把1/i挨个相加,但是式子中有正有负,定义一个flg等于1,for循环一次,flg=-flg。首先分子是一样的,分母从1-100,我们用for循环结构定义一个i,从1加到100,1/i来表示分数。中间使用for循环实现1-100,if语句判断是个位有9还是十位有9。前面都是个位是9,一共是9个9、后面十位是9,一共11个9。

2024-04-14 14:19:13 149

原创 进程线程的关系

比如,一号滑稽和2号滑稽看上了同一个鸡大腿,同时伸手去拿,谁能拿到?2,每个线程,也是一个独立的执行流,可以执行一些代码,并且单独的参与到CPU的调度中。(状态,上下文,优先级,记账信息,每个线程都有自己的一份)4.进程和进程之间,不会相互影响,如果同一个进程中的某个线程,抛出异常,是可能会影响到其他线程,会把整个进程中的所有线程都异常终止。当引入的线程,达到一定数量之后,在继续尝试引入新的线程,好像就没有办法提升了。1号和2号抢鸡大腿的时候,1号抢到了,2号没抢到,2号滑稽很生气。

2024-04-13 00:30:05 276

原创 进程和线程

Linux上就不是了,swap可以配置的,如果没有配置swap,并且运行消耗内存程序很大的程序,就容易出现这样的问题。操作系统,进行多任务调度,本质上是在调度PCB(线程在系统中的调度规则,就和之前的进程是一样的)PCB中有个属性,是内存指针 多个线程的PCB的内存指针,指向的是同一个内存空间。在有线程之前,进程,需要扮演两个角色(资源分配的基本单位,也是调度执行的基本单位)只不过,一个进程至少要包含一个线程(创建第一个线程的同时,进程也就出来了)后续的线程,就不必分配,直接共用前面的那份资源就可以了。

2024-04-12 00:09:03 325

原创 计算机是怎么工作的8

一般来说,申请内存的时候,需要指定一个大小,系统内部就把各种大小的空闲内存,通过一定的数据结构,给组织起来了。一个进程,刚刚启动的时候,首当其冲,就是内存资源进程需要把依赖的代码和数据,从磁盘加载到内存中。如果请求很多,意味着你的服务器就需要不停的创建新的进程,不停销毁旧的进程,频繁创建和释放。比如,有些场景下,需要频繁的创建和销毁进程的时候,此时使用多进程编程,系统开销就会很大。通常情况下,进程A不能直接访问进程B的内存;针对每个请求,都会创建出一个进程,给这个请求提供一定的服务,返回对应的响应。

2024-04-10 22:43:22 269

原创 计算机是如何工作的7

为了系统的稳定性 如果某个进程代码出bug(比如内存写越界)出错影响的范围,只是影响到自己这个进程,不会影响到其他进程。:是PCB中的数据结构 ,所谓的“保存上下文”就是把CPU的关键寄存器中的数据,保存到内存中(PCB的上下文属性中):因此,就需要在进程调度出cpu之前,把当前寄存器中的这些信息,给单独保存到一个地方  (保存上下文)系统上的一个进程崩溃,影响了其他进程,非常糟糕的体验 这个情况,也称为“进程独立性”所谓的“恢复上下文”就是把内存中的关键寄存器中的数据,加载到CPU的对应寄存器中。

2024-04-10 00:15:54 213

原创 计算机是如何工作的6

(比如,进程在等待IO,来自控制台的输入输出/硬盘输入输出/网卡输入输出)如果有一个进程,把cpu吃到百分百,意味着其他进程没有执行的时间了,这个进程就把cpu。有的时候,某个进程会不太方便,就比如,某个进程,通过Scanner等待用户输入内容。2,内存指针  进程使用的内存都在哪里,哪个部分放代码/指令,哪个部分放数据。此处cpu的百分数,就是你的进程在cpu舞台上消耗时间的百分比。阻塞状态:这个进程,当前不方便去cpu上执行,不应该调度他。进程暂停下来,不继续执行,这种等待的状态,就称为“阻塞”

2024-04-08 23:16:38 421

原创 计算机是怎么工作的5

(把内存想象成小旅馆,有很多房间,所谓的申请内存,就是跟小旅馆老板说开个房间,申请到了才可以使用,如果房子你没申请,你也进不去,就算你强行破门而入,产生的后果也不可预期)同时就可以有四个不同的进程,在各自的舞台上进行执行,此时此刻,微观上,这几个进程也是同时执行的,而不是靠快速切换模拟的“同时执行”(当然也有极端情况,比如,系统进程太多了,负担太重,就会出现卡顿,鼠标出现转圈这种情况,卡住了,这个进程捞不着去cpu上执行了)操作系统,不管你是哪种盘,都是统一进行的抽象,都是按照”文件“的方式来操作的。

2024-04-07 23:17:32 703

原创 计算机是怎么工作的4

主频(基准频率 ,睿频)多个核心的运算能力单个核心的运算能力 通过在编程中引入一些特殊的方式,来把多个cpu核心给利用起来(并发编程)主频(1s之内,一个核心能够执行多少条指令)机器语言,咱们写的代码,最终会被编译成机器语言,最终被cpu进行执行在冯诺伊曼体系结构下,执行单元(cpu)和存储单元(内存)是分开的要执行的指令,会被加载到内存中,cpu需要不停的从内存中读取指令,解析指令,执行指令。

2024-04-07 00:38:45 250

原创 计算机是如何工作的3

把这两个寄存器里面的内容,进行相加,结果保存到第二个操作数的寄存器中STORE A 内存地址把A寄存器中的值,写入13这个地址上。

2024-04-05 23:24:00 426

原创 计算机是如何工作的@2

(软件很多时候都是跟着硬件走,硬件有啥特性,软件,把这些特性充分的利用起来,扬长避短)频率 描述单个cpu核心工作的速度Hz一秒钟的次数GHz相当于单位的换算一秒钟进行19亿次 32.6亿次 严格的说,叫做“时钟周期”近似的看成,执行19亿次指令大部分的指令,一个时钟周期差不多就能搞定很明显,这个运算是速度是极快的衡量一个cpu的单核性能,既要看基础频率(下限),最大睿频(上限)除此之外,还有很多其他的指标可以衡量(cpu天梯图)台式机和笔记本cpu有两个天梯图。

2024-04-03 22:39:34 351

原创 计算机是如果工作的?

软件,其实就是通过代码,来解决一些实际问题,就比如,如果要是能写一个程序,来实现自动抢博物馆的票。广义的概念,不是说,带有图形化的界面这样的才叫软件,一个软件的难易程度,也跟图形化界面没有关系。就比如csgo,在运行过程中,就需要把很多的数据,很多的逻辑都加载到对应的程序的内存中。不同架构的CPU,支持的指令集是不同的 -------机器语言 (汇编语言)API ,库,框架 这里的核心逻辑,就需要知道如何模拟鼠标的点击操作。CPU以及其他的内存,硬盘等等都是由门电路构成的-----晶体管。

2024-04-02 23:36:31 1329

原创 JAVA接口2

但是两个方法除外,一个是static修饰的方法,二是default修饰的方法。举个例子,就比如写animal 这个类,不能把跑,飞,游泳这几个方法放在animal这个类当中。Q:在Java中,一个类可以实现多个接口,一个类只能继承一个抽象类,3,接口中的抽象方法默认是public abstract修饰的。6,类和接口之间的关系,可以使用Implements来进行关联。B接口不仅具备了B自己的功能而且还具备了A这个接口的功能。2,接口和接口之间的关系--->extends 拓展。5,接口不能进行实例化。

2024-04-02 17:51:19 225

原创 JAVA接口

在java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以有一个接口。2.接口中的每一个方法都是public的抽象方法,即接口中的方法会被隐式的指定为public abstract。接口的定义格式与定义类的格式基本相同,将class关键字换成interface关键字,就定义了一个接口,3.接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量。另外我们再提供一组接口,分别表示“会飞的,会跑的,会游泳的'

2024-03-27 23:21:19 225

原创 java继承多态2

继承是将共性进行抽取,从而达到对代码的复用作用。在dog和cat里面加上加上extands 对anmial进行代码复用。

2024-01-24 19:53:21 1644

原创 Java继承多态

它允许程序员在保持原有的基础上进行扩展,增加新功能,产生新的类,称派生类,继承呈现了面对对象程序设计的层次结构由简单到复杂的认知过程,继承主要解决的问题是共性的抽取,实现代码复用。访问父类同名成员时该如何操作?通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译错误。在继承体系中,子类将父类中的方法和字段继承下来了,那在子类中能否直接访问父类中继承下来的成员呢。如果访问的成员变量子类中无,则访问父类中继承下来的,如果父类也没有定义,则编译报错。

2023-12-23 22:03:55 348

原创 Java类和对象

包是对类,接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,例如:一个包中的类不想被其他包中的类使用,包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要在不同的包中即可。在面对对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包,有点类似于目录,static 修饰的成员变量 称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象共享的。1.不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的额空间中。

2023-12-14 18:31:11 27

原创 面向对象与面向过程

以面对对象方式来进行处理,就不关注洗衣服的过程,只需要关注衣服本身是否被洗干净,通过对象之间的交互来完成。3.创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的 出生,每个人只能出生一次)this代表当前对象的引用 1.为对象分配内存2.调用合适的构造方法 对象才被初始化完成了。2.this(name:"鼠标",age:"9");当我们没有写任何一个构造方法的时候,java会自动提供一个默认的构造方法。构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

2023-12-07 20:01:01 26

原创 Java类和对象

4.this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。只设计出需要什么东西,但是并没有实体的建筑的存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占物理空间。用类类型创建对象的过程,称为类的实例化,在Java中采用new关键字,配合类名来实例化对象。3,一个类可以实例化出多个对象,实例化出的对象占实际的物理空间,存储类成员变量。3.在“成员方法中”,this只能引用当前对象,不能再引用其他对象。

2023-12-02 23:34:09 19

原创 Java数组

给定一个数组nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。设方法func1,在func1中设变量ret=0,for循环,i指向数组中的每一个元素,异或,最终结果返回ret,给定一个非空整数数组,除了某个元素只出现一次外,其余每个元素均出现两次,找到那个只出现一次的元素。读题可知,找到两个整数,设变量i和j ,分别for循环,指向数组中的每一个数,多数元素的数目既然大于数组的一半,只需要给数组排序,数组的中间值就是多数元素。

2023-12-02 09:30:57 25

原创 Java递归和数组

数组是一块连续的内存 用来存储相同类型的数据 每个数据和每个数据之间的关系是什么。静态初始化:在创建数组的时候,不直接指定数组元素个数,而直接将具体的数据内容进行指定。递归相当于数学上的数学归纳法,有一个起始条件,然后有一个递推公式。起始条件:N=1时,N!1.将原问题划分为子问题,注意:子问题必须要与原问题的解法相同。3.每个空间都有自己的编号,其实位置的编号为0,即数组的下标。动态初始化:在创建数组的时候,直接指定数组中元素的个数。如果数组中存储的元素类型为引用类型,默认值为NULL。

2023-11-23 22:44:39 23

原创 Java 刷题2

4.参数列表:如果方法没有参数,()中什么都不写,如果有参数,须指定参数类型,多个参数之间使用逗号隔开。3.方法名字:采用小驼峰命名(第一个单词小写,第二个单词首字母大写,例如:fristName)2.返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一样,如果没有返回值,在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。方法的调用是需要开辟内存的 ,方法调用结束,这块内存就销毁了。2,参数列表不同,【个数,类型,顺序】8,在Java中,没有方法声明这一说。

2023-11-21 18:38:12 32 1

原创 Java刷题

我们并不想让它变,后面还要用n求得数字的个位十位百位分别放的什么,所以我们就找一个替罪羊,tmp,让tmp来存放数字n,让它进行计算,n的值得以保留。用tmp%10得到每位上的数字,用Math.pow算出每位数字的count次幂和,最后if语句,满足条件的输出。首先,有三个数,要设三个变量,连续相除,涉及到交换变量,判断最后余数是否为0,用到while循环。辗转相除法,先用较大的数除以较小的数,得余数,再用较小的数与余数相除,得第二个余数,可以设置一个flg=1 ,在for循环的最后,flg=-flg。

2023-11-18 18:25:16 55 2

原创 Java 逻辑

for循环把1~100的数字打印出来,定义一个变量为k,k++,k是需要判断是否为素数的数字。判断是否为素数 并且system出来,需要两个变量,一个装素数,一个装不是素数。把所有的数字都除一遍,如果都不能整除,就证明他没有别的因数,是一个素数。很显然,有两个变量,需要两个循环套用,类似与C语言中的九九乘法表。验证k是否为素数,只需要验证到K/2或者k的算术平方根。如果k%i等于0的话,那k就不是素数,需要用到if语句。定义一个i,i++,i是需要与k进行计算的因数。

2023-11-13 15:58:42 49

原创 java

普通闰年 是4的 倍数,但不是100的倍数。世纪闰年 整百数,必须是400的 倍数。只要对应位上有1 对应位则是1 |写一个代码,实现1~100内有多少个数字9。对于+=操作符来说 自动给你进行转换。只要对应位上有0 对应位则是0 &两个都是真 整个表达式才能是真。一个为真 整个表达式就是真。continue 进入下一次循环。闰年的条件判断表达式。表达式1&&表达式2。表达式1||表达式2。输出结果为3的死循环。

2023-11-13 15:10:44 25

原创 java数据类型

2,java的boolean类型和int不能相互转换,不存在1表示true,0表示false这样的用法。2,对于short,byte这种比4个字节小的类型,会先提生成4个字节的int 再运算。java中,当你赋值的“字面值常量”一旦超过了变量能存储的最大值,会自动编译报错。2.如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能会精度丢失。1,不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围更大的类型。1.不同类型的数据混合运算,范围小的会提升成范围大的。

2023-10-31 16:59:59 27 1

原创 C语言刷题(3)

这道题最巧妙的地方来了,就是每个人只说对了一半,所以0为假,非零为真,两个结果相加得1,if语句判断,把每个选手说的话判断一遍,输出结果,值得注意的是可能会出现两个人排名相同的情况,我们可以再用if语句判断一下,a*b*c*d*e==120。读题可知,最后要输出每位选手的比赛名次,所以我们要确定每位选手的比赛名次,而每位选手又只说对了一半,所以我们用for循环挨个输出,就把从第一名到最后一名给每位选手都假设一下,X图形很容易让我们想到九九乘法表,先输出一个满是*的正方形,两个for循环轻松完成。

2023-10-17 10:15:30 35 1

原创 C语言刷题(2)

同理,判断数组后面 是否为偶数,left从左边开始判断,right从右边开始判断,初始化的时候left=0,right=sz-1 (sz是数组的大小 用sizeof实现)先判断是否为奇数,就一个判断条件,显而易见用while循环,注意这时候要l<r 因为这个数组有可能都是奇数,不限制 l<r就数组越界访问出错了。首先定义数组arr[ ] ,由题可知,调整数组中数字的顺序,设置left 和 right 遇到奇数跳过,遇到偶数和后面的奇数交换。判断好奇数偶数,就该交换数据了。

2023-10-14 23:06:45 28 1

原创 C语言刷题(1)

第二步,找出水仙花数,我们需要判断各位数字的n次方之和和该数本身相等,举个例子,就比如123,我们可以把123除10得到商12,可以%10得到个位3,12%10得到十位数2,再次%10得到百位1。首先,读题可知,20元可以买20瓶汽水,20个空瓶可以换10瓶汽水,10个空瓶可以换5瓶汽水,5个空瓶能换2瓶汽水,注意,这里我们还剩一个空瓶,买来的两瓶汽水加上剩的那个空瓶就是三个空瓶,可以换1瓶汽水,余一个空瓶。然后,我们不难看出,22是2×10加上2,222是22×10加上2,2222是222×10加上2。

2023-10-14 10:12:34 27 1

原创 C语言刷题----指针概念

指针 4 指针 8。A.错误,整型指针向后偏一个整型,一个Int 是4个字节,short指针向后偏俩个字节,char偏一个字节。32位系统下 int 类型 4 64位系统 int类型 4。D正确,局部变量不初始化的话可能不能运行,报错。D.指针就是地址,指针比较大小就是地址比较大小。A .口语中的指针指的就是指针变量。B错误,得到的是元素个数。

2023-10-10 10:37:09 19 1

原创 获得月份天数(BC54)

第三步就是内包装函数 我们知道,一三五七八十腊,三十一天永不差,四六九十一,三十天,二月比较特殊,有28天,闰年多一天。第二步获得月份天数 我们可以类比写一个计算器,也就是函数,来分析某年某月有多少天,Kiki想获得某年某月有多少天,请他编程实现,输入年份和月份,计算这一个月有多少天。第一步输入数据,年份和月份,分别取年份和月份的首字母,y,m.分别初始化,针对每组输入,输出为一行,一个整数,表示一年这个月有多少天。多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。

2023-10-07 19:55:52 116 1

原创 有序数列判断(牛客网BC96)

读题我们可知,我们要干的第一步是输入数据,输入一个整数N,(注意整型,初始化)scanf就可以了,输入一个数组,我们可以输入一个变长数组(eg:arr[n]) 但是有的编译器可能不认,这时候题目中给出了数据范围,我们可以直接int arr[50]={0};以flag1+flag2为条件,用if语句判断是否为有序,有序输出sorted,无序输出unsorted。如果数组中全是升序,那flag1=1,flag2=0;有序无非就两种,一种是升序,一种是降序,这个时候,我们设置两个标记flag1和flag2。

2023-10-04 23:40:32 135 4

原创 指针进阶!!!

sizeof(数组名),这里的数组名 不是数组首元素地址,数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。3.指针有类型,指针的类型决定了指针的加减整数的步长,指针解引用操作时的权限。2.&数组名,这里的数组名表示整个数组,&数组名取出的是整个数组的地址。指针(地址)的大小是固定的4/8个字节,地址是物理的电线上产生的。const char*p----const限制的 是*p。char *const p-----const限制的是p。

2023-10-01 19:58:11 16

原创 指针和指针变量

ptr是一个空指针,没有指向任何有效的空间,这个指针不能直接使用。明确知道指针初始化的值为谁的地址就直接初始化,不知道指针初始化的值为什么就初始化为NULL。指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)pa是用来专门存放地址的。写C语言程序的时候,创建的变量、数组等都要在内存上开辟空间。每个内存单元都有唯一的编号,这个编号被称为地址。当指针指向超出数组arr的范围时,p就是野指针。3.指针指向的空间释放,及时置放NULL。指针指向的内容的位置是不可知的。4.避免返回局部变量的地址。

2023-09-23 09:07:33 35 2

原创 操作符和算术右移

右边丢弃,左边补原来的符号位 左边丢弃,右边补0。计算的是类型创建变量的大小,单位是字节。|----对应二进制或对应的二进制位有1则为1,两个同时为0才是0;^----按二进制位异或对应的额二进制位相同为0,相异为1。关系操作符 > < >= <= ==!赋值操作符 = += *= /=例如:整数有32个比特位,获取32个比特位中的每一位。&---对应二进制位有0则0,两个同时为1才是1.位操作符 & | ~

2023-09-22 20:39:35 24 1

原创 数组和排序方法

2.&数组名,这里的数组名表示整个数组,这里去除的是整个数组的地址。1.sizeof(数组名),数组名单独放在sizeof内部,这里的数组名表示整个数组,计算的是整个数组的大小。//局部变量,这些局部的变量或者数组都是放在栈区里面,如果不初始化,默认是随机值。数组下标是有范围限制的,数组的下标是规定从0开始,如果数组有n个元素,最后一个下标元素就是n-1。所以如果数组的下标<0,或者>n-1,就是数组越界访问了,超出了数组合法空间的访问。数组名应该怎样理解?数组的大小是通过下标来访问的,下标是从0开始。

2023-09-19 18:13:37 21

原创 分支和循环语句

转向语句:break语句,goto语句,continue语句,return语句。C语言中把常用的功能,进行了分装,分装成了一个又一个函数,提供给大家使用。循环执行语句:do while 语句,while语句,for语句。C语言并不直接提供库函数,而是提供了C语言的标准和库函数的约定。条件判断语句也叫分支语句:if语句,switch语句。for(表达式1初始化,表达式2判断,表达式3调整)scanf函数读取成功,返回的是读取到的数据的个数。goto语句只能在一个函数内部跳转,不能跨函数跳转。

2023-09-18 20:13:30 15

原创 初识C语言

strlen 库函数,计算\0出现前的字符个数,用来求字符串长度的,就是从给定的地址,向后数字符,直到遇到\0结束,\0不统计在内。static修饰全局变量,作用域变小,全局变量具有外部链接属性,所以在其他源文件内部依然可以使用。scanf 函数 ,输入数据,数据从键盘读取到内存中,使用时要包含头文件。printf 库函数,C语言的编译器提供的现成的函数,可以直接使用。局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。变量的生命周期是指变量的创建到变量的销毁之间的一个时间段。

2023-09-18 19:46:22 21

原创 C生万物,编程之本

printf函数是一个库函数,c语言编译器提供的一个现成的函数,可以直接使用,但是使用前加上头文件。int 整型 float 浮点型 char 字符数据类型 short 短整型。sizeof操作符 是计算机类型/变量所占内存空间的大小,单位是字节。float 单精度浮点型 double双精度浮点型。main后面跟一个(),说明他是个函数的意思。程序是从main函数的第一行开始执行的。C语言中的main函数是程序的入口。商品:名字,价格,分类。有些值是不变的(比如圆周率,性别)

2023-09-18 10:38:19 19

原创 梦的开始——自述

肯定有友友会说,“衡水大佬啊”,不不不,我在一个十八线小城市苟且活着,被录取到这个学校也是我第一次走出浪浪山。为什么选择电子信息类,简单,来自农村,穷怕了,什么专业火选什么。迈进大学,我才知道,我的眼界有多么短浅以及自卑心理开始占据我的心头。目前是大一的下半学期,每晚争取学习编程四个小时,周末没有别的事情的话,都用来学习编程。想学好编程肯定不是一件简单的事情,不仅要理解,还要上手敲,有比较优秀的动手能力,精益求精。学好计算机语言,数据结构以及算法,计算机网络,操作系统,可以在毕业的时候走测试开发方向。

2023-04-05 17:02:33 58 4

空空如也

空空如也

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

TA关注的人

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