自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(140)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java 并发性和多线程3

在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。静态方法的同步是指同步在该方法所在的类对象上。

2024-01-12 14:38:34 406

原创 Java 并发性和多线程2

最终的值并不是期望的 5,而是最后写回内存的那个线程的值,上面例子中最后写回内存的是线程 A,但实际中也可能是线程 B。因为线程池可以有效的管理实现了 Runnable 接口的线程,如果线程池满了,新的线程就会排队等候执行,直到线程池空闲出来为止。但是,事实上,run()方法并非是由刚创建的新线程所执行的,而是被创建新线程的当前线程所执行了。需要注意的是,尽管启动线程的顺序是有序的,但是执行的顺序并非是有序的。Jvm 和操作系统一起决定了线程的执行顺序,他和线程的启动顺序并非一定是一致的。

2024-01-12 14:37:30 782

原创 Java 并发性和多线程1

在过去单 CPU 时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 CPU,并交由操作系统来完成多任务间对 CPU 的运行切换,以使得每个任务都有机会获得一定的时间片运行。随着多任务对软件开发者带来的新挑战,程序不在能假设独占所有的 CPU 时间、所有的内存和其他计算机资源。一个好的程序榜样是在其不再使用这些资源时对其进行释放,以使得其他程序能有机会使用这些资源。

2024-01-10 20:36:39 803

原创 Java中的集合框架

List接口是一个有序集合,其元素以线性方法存储,集合中允许存放重复的元素。List接口及其实现类——ArrayListArrayList 类是数组列表类,实现了可变长度的数组,允许对集合中的元素进行快速的访问,但向ArrayList 集合中插入或删除速度较慢。。(需要移动元素)ArrayList 集合允许所有的元素,包括null。每一个ArrayList 实例都有一个默认的容量,即存储元素的个数,这个容量可以随着元素的增加而自动变大。链表类:LinkedList类。

2024-01-10 13:06:57 923

原创 synchronized同步块和volatile同步变量

Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。

2024-01-09 16:06:09 785

原创 Java中的装箱和拆箱

我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料。在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行:1new而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了:1;这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。那什么是拆箱呢?

2024-01-09 14:48:07 826

原创 Java中Native关键字的作用

native是与C++联合开发的时候用的!java自己开发不用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。1。native 是用做java 和其他语言(如c++)进行协作时用的。

2024-01-08 14:42:59 845

原创 Java实现多重继承

然而我们知道。有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需要思考的不是怎么使用多重继承,而是您的设计是否存在问题.但有时候我们确实是需要实现多重继承,而且现实生活中也真正地存在这样的情况,比如遗传:我们即继承了父亲的行为和特征也继承了母亲的行为和特征。和。

2024-01-08 14:21:28 404

原创 通过分析 JDK 源代码研究 Hash 存储机制

HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实现类。虽然 HashMap 和 HashSet 实现的接口规范不同,但它们底层的 Hash 存储机制完全一样,甚至 HashSet 本身就采用 HashMap 来实现的。

2024-01-07 14:09:03 837

原创 equals()与hashCode()方法详解

原因就在于我们自己写的Student类并没有重新自己的hashcode()和equals()方法,所以在比较时,是继承的object类中的hashcode()方法,而object类中的hashcode()方法是一个本地方法,比较的是对象的地址(引用地址),使用new方法创建对象,两次生成的当然是不同的对象了,造成的结果就是两个对象的hashcode()返回的值不一样,所以Hashset会把它们当作不同的对象对待。equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。

2024-01-07 13:58:06 867

原创 equals()方法和“==”运算符

我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“==”比较两个对象的的内存地址,所以说使用Object的equals()方法是比较两个对象的内存地址是否相等,即若object1.equals(object2)为true,则表示equals1和equals2实际上是引用同一个对象。//结果是true 根据jdk文档中的说明,n1与n2指向的对象中的内容是相等的,都是30,故equals比较后结果是true。

2024-01-06 13:03:02 388

原创 简单介绍Java 的内存泄漏

A的生命周期(t1-t4)比B的生命周期(t2-t3)要长的多,当B不再在应用中被使用,A仍然持有对B的引用。这很有可能导致内存溢出问题,因为如果其他很多对象像A一样,那么内存中将会有很多不能被回收的对象,这将消耗大量内存空间。1、留意集合类,比如HashMap,ArrayList等等,因为他们是内存泄漏经常发生的地方。定义:如果对象在应用中不再被使用,但由于它们在其他地方被引用,垃圾回收却不能移除它们(这样就造成了很多内存不能释放,从而导致内存溢出的现象。也有可能的情况是B持有了大量对其他对象的引用。

2024-01-06 12:57:10 380

原创 理解String 及 String.intern() 在实际中的应用

例2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;在这个类中我们没有声名一个”kvill”常量,所以常量池中一开始是没有”kvill”的,当我们调用s1.intern()后就在常量池中新添加了一个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。

2024-01-05 15:04:45 848

原创 JVM加载class文件的原理机制

  JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后会写个复杂点class ,然后再找一些开源框架,比如Spring ,Hibernate 等等,再然后就开发企业级的应用,比如网站、企业内部应用、实时交易系统等等,直到某一天突然发现做的系统咋就这么慢呢,而且时不时还来个内存溢出什么的,今天是交易系统报了StackOverflowError ,明天是网站系统报了个OutOfMemoryError ,这种错误又很难重现,只有分析Javaco

2024-01-05 14:33:41 1114 1

原创 对象克隆学习

假如说你想复制一个简单变量。很简单:不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。但是如果你复制的是一个对象,情况就有些复杂了。假设说我是一个beginner,我会这样写:System.out.println("学生1:" + stu1.getNumber());System.out.println("学生2:" + stu2.getNumber());

2024-01-04 16:44:18 872

原创 静态代码块、构造代码块、构造函数以及Java类初始化顺序

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行。执行顺序优先级:静态块,main(),构造块,构造方法。

2024-01-04 16:03:46 773

原创 基本类型和包装类、基本类型和字符串之间的转换

本质是上,编译器编译时自动添加:int a = new Integer(100).intValue();在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。- 基本类型就自动地封装到与它相似类型的包装中,如:Integer i = 100;2. 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱。把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱。和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱。

2024-01-03 11:59:48 358

原创 Java 异常处理

使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。创建自定义异常类。在方法中通过throw关键字抛出异常对象。如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。在出现异常方法的调用者中捕获并处理异常。举例自定义异常:detail = a;");try{

2024-01-03 11:55:35 896

原创 Git:基础要点

在Git 中的绝大多数操作都只需要访问本地文件和资源,不用连网。但如果用CVCS 的话,差不多所有操作都需要连接网络。因为Git 在本地磁盘上就保存着所有有关当前项目的历史更新,所以处理起来速度飞快。

2024-01-02 10:26:05 568

原创 Git:配置

一般在新的系统上,我们都需要先配置下自己的Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。Git 提供了一个叫做git config 的工具(译注:实际是git-config 命令,只不过可以通过git 加一个名字来呼叫此命令。),专门用来配置或读取相应的工作环境变量。而正是由这些环境变量,决定了Git 在各个环节的具体工作方式和行为。

2024-01-02 10:25:31 309

原创 Git:常用命令(二)

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行--amend 提交。,第二个提交命令会修正了第一个的提交内容。

2023-12-31 19:17:31 523

原创 Git:常用命令(一)

1 git init初始化后,在当前目录下会出现一个名为.git 的目录,所有Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。如果当前目录下有几个文件想要纳入版本控制,需要先用git add 命令告诉Git 开始对这些文件进行跟踪,然后提交。2 git commit -m "第一次使用命令行提交"

2023-12-31 13:52:02 1152

原创 Git:远程仓库的使用

如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行git remote rm 命。

2023-12-30 17:22:29 557

原创 Python:日期和时间类型学习

在非开发环境经常需要做一下日期计算,就准备使用Python,顺便记下来学习的痕迹。

2023-12-30 17:20:41 510

原创 Linux:修改和删除已有变量

为了避免操作失误导致命令找不到,我们先将PATH赋值给一个新的自定义变量path。

2023-12-29 21:14:53 458

原创 Linux:多文件编辑

vim可以在一个界面里打开多个窗口进行编辑,这些编辑窗口称为vim的视窗。打开方法有很多种,例如可以使用在命令行模式下输入:new打开一个新的vim视窗,并进入视窗编辑一个新文件(普通模式下输入Ctrl+w也可以,但是Ctrl+w在chrome下会与chrome关闭标签页的快捷键冲突,所以使用该快捷键你可以在IE或其它浏览器进行练习),除了:new命令行模式下输入:sp 1.txt打开新的横向视窗来编辑1.txt命令行模式下输入:vsp 2.txt打开新的纵向视窗来编辑1.txt普通模式下。

2023-12-29 20:53:15 504

原创 Linux:用户&用户组操作&Shell 常用通配符

查看用户:whoami、who am i、who mom likes。删除用户:deluser dgw --remove-home。加入组:usermod -G sudo dgw。查看用户所在组:groups dgw。创建用户:adduser dgw。切换登录用户:su -l dgw。退出当前用户: exit。

2023-12-28 09:15:58 417

原创 Linux:目录&文件基本操作&文件权限

修改文件权限:chmod 666 note.txt、chmod ugo-rw iphone,'g''o'还有'u',分别表示group,others,user,'+','-' 就分别表示增加和去掉相应的权限。显示除了 '.'(当前目录),'..' 上一级目录之外的所有包含隐藏文件(Linux 下以 '.' 开头的文件为隐藏文件): ls -Al。查看文件:more、less 、head -n 10 passwd、tail -n 10 -f passwd。使用较长格式列出文件:ls -l。

2023-12-28 09:15:08 454

原创 Linux:Vim

Vim具备6种基本模式和5中派生模式。

2023-12-27 22:32:32 1436

原创 Linux:环境变量

简单理解了变量的概念,就很好解释环境变量了,环境变量就是作用域比自定义变量要大,如Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。上述命令中>>表示将标准输出以追加的方式重定向到一个文件中,注意前面用到的>是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。env显示用户相关环境变量。

2023-12-27 22:28:00 479

原创 Linux:文件解压与压缩

在 Linux 上面更常用的是tar工具,tar 原本只是一个打包工具,只是同时还是实现了对 7z,gzip,xz,bzip2 等工具的支持,这些压缩工具本身只能实现对文件或目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,所以我们也无需再单独去学习其他几个工具,tar 的解压和压缩都是同一个命令,只需参数不同,使用比较方便。第一行命令中,-r参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。

2023-12-26 17:40:59 892

原创 Linux:命令执行顺序控制与管道

下面 我们就将通过一些常用的可以使用管道的"过滤程序"来帮助你熟练管道的使用。学习过 C 语言的用户应该知道在 C 语言里面&&表是逻辑与,而且还有一个||表示逻辑或, 同样 Shell 也有一个||,它们的区别就在于,shell中的这两个符号除了也可用于表示逻辑 与和或之外,就是可以实现这里的命令执行顺序的简单控制。符号"&&"就是用来实现选择性执行的,它表示如果前面的命令执行结果(不是表示终端输出 的内容,而是表示命令执行状态的结果)返回0则执行后面的,否则不执行,你可以从境变“ 量“$?

2023-12-26 15:11:33 346

原创 Linux:软件安装

当你在执行安装操作时,首先apt-get 工具会在本地的一个数据库中搜索关于 w3m 软件的相关信息,并根据这些信息在相关的服务器上下载软件安装。

2023-12-25 15:28:09 376

原创 Spring4 之环境搭建和HelloWorld

在lib中导入:commons-logging-1.1.3.jar在struts的lib中可以找到,其余四个都在spring-framework-4.1.2.RELEASE的libs文件夹下,在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)- 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API。-- 配置bean -->

2023-12-25 15:26:23 742

原创 java IO

允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。如果类没有显示定义这个静态变量,它的值是Java运行时环境根据类的内部细节自动生成的。如果某个类的字段不是基本数据类型或 String 类型,而是另一个引用类型,那么这个引用类型必须是可序列化的,否则拥有该类型的 Field 的类也不能序列化。缓冲流要"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。

2023-12-24 21:01:46 837

原创 YARN Hadoop2.0 区别

Hadoop1.0主要由HDFS和MapReduce两个系统够长,但在Hadoop2.0中主要由 Hadoop Common、HDFS 、Hadoop YARN和Hadoop MapReduce2.0构成。MapReduce只负责数据处理,在Hadoop1.0中,MapReduce既负责数据处理,还负责资源管理的工作。Hadoop1.0更多是在于离线的数据处理,Hadoop2.0可以支持MapReduce计算框架之外,可以支持Spark、Strom等的实时数据处理框架。

2023-12-24 20:43:37 322

原创 类和对象

原因是每次编译器启动时,都要花一些时间扫描jar 文件内容,并在即使你提交的是新的源文件也在查之前完成其他初始化工作。要执行 Scala 程序,你一定要提供一个有main 方法(仅带一个参数,Array[String] ,且结果类型为Unit)的孤立单例对象名。任何拥有合适签名的 main 方法的单例对象都可以用来作为程序的入口点。因此,如果你本想返回一个非Unit 的值,却忘记了等号时,那么困惑就出现了。特别要指出的是,单例对象会在第一次被访问的时候初始化。类和单例对象间的一个差别是,

2023-12-22 20:20:21 1207

原创 初识nginx——内存池篇

在分配内存的时候,nginx会判断当前要分配的内存是小块内存还是大块内存,大块内存调用ngx_palloc_large进行分配,小块内存nginx先会尝试从内存池的当前节点(p->current)中分配,如果内存池当前节点的剩余空间不足,nginx会调用ngx_palloc_block新创建一个内存池节点并从中分配,nginx为每一个层级都会创建一个内存池,进行内存的管理,比如一个模板,tcp连接,http请求等,在对应的生命周期结束的时候会摧毁整个内存池,把分配的内存一次性归还给操作系统。

2023-12-22 20:18:34 873

原创 深入剖析jsonp跨域原理

1)因为同源策略是针对客户端的,在服务器端没有什么同源策略,是可以随便访问的,所以我们可以通过下面的方法绕过客户端的同源策略的限制:客户端先访问 同源的服务端代码,该同源的服务端代码,使用httpclient等方法,再去访问不同源的 服务端代码,然后将结果返回给客户端,这样就间接实现了跨域。我们知道,js脚本可以访问所在页面的所有元素。它们是:js脚本,css样式文件,图片,像taobao等大型网站,很定会将这些静态资源放入cdn中,然后在页面上连接,如下所示,所以它们是可以链接访问到不同源的资源的。

2023-12-21 21:51:13 435

原创 java web中日期Date类型在页面中格式化显示的三种方式

这是一个非第一个选择符,意思是,#wrapper下的第一个div紧邻的所有的div,也就是#wrapper下的除了第一个div之外的div, 设置他们的 border-top,来显示成下划线的效果;} 这是一个CSS的伪选择符,相似的还有 :first-child :last-child :nth-child(3) :nth-child(odd),对应到jquery中也有相似的东西;4)js格式化Date的处理,是通过在其原型上增加方法 Date.prototype.format 来进行的;

2023-12-21 21:50:20 895

毕业设计(论文)-基于Web的图书管理系统的设计和实现.doc

java web图书管理系统

2024-03-02

java版图书管理系统课程设计报告.doc

java web图书管理系统

2024-03-02

java-web图书管理系统-基于java-web实现的图书管理系统.docx

java web图书管理系统

2024-03-02

约瑟夫环数据结构设计.docx

约瑟夫环

2024-03-01

约瑟夫环数据结构上机实验报告.doc

约瑟夫环

2024-03-01

约瑟夫环实验报告.doc

约瑟夫环

2024-03-01

成绩管理系统论文.pdf

管理系统

2024-02-29

2022年物料管理系统精华版.docx

管理系统

2024-02-29

2022年实验室预约管理系统设计方案.docx

管理系统

2024-02-29

c语言socket编程超级完整.pdf

socket编程

2024-02-28

c语言socket编程超级完整.docx

socket编程

2024-02-28

c语言socket编程-超级完整.doc

socket编程

2024-02-28

c语言socket编程(实用应用文).doc

socket编程

2024-02-28

计算机网络期末复习资料最终版.doc

计算机网络期末复习

2024-02-27

计算机网络期末复习总结-选择题.doc

计算机网络期末复习

2024-02-27

计算机网络通信期末复习试题(教学资料).doc

计算机网络期末复习

2024-02-27

计算机网络期末复习资料(实用应用文).doc

计算机网络期末复习

2024-02-26

计算机网络期末复习文档.doc

计算机网络期末复习

2024-02-26

计算机网络期末复习.pdf

计算机网络期末复习

2024-02-26

计算机网络期末复习(教学资料).doc

计算机网络期末复习

2024-02-26

LabVIEW数据采集编程指南(实用应用文).doc

labview

2024-02-25

labview错误代码表.doc

labview

2024-02-25

labview 控制仿真与实践.ppt

labview

2024-02-25

最大子矩阵.最大子矩阵ppt

最大子矩阵

2024-02-24

最大子矩阵的枚举方法.ppt

最大子矩阵

2024-02-24

最大子矩阵和问题.doc

最大子矩阵

2024-02-24

linux运维经典shell脚本.docx

shell脚本

2024-02-23

shell脚本练习题.doc

shell脚本

2024-02-23

java调用Shell脚本.doc

shell脚本

2024-02-23

OpenGL图形编程入门.doc

opengl

2024-02-22

docker安装与基本使用幻灯片.ppt

docker安装

2024-02-22

python集成开发环境配置(pycharm).doc

pycharm配置python环境

2024-02-22

软件测试面试题.doc

软件测试面试题

2024-02-21

前端面试题及答案.pdf

软件测试面试题

2024-02-21

前端面试题.docx前端面试题

前端面试题

2024-02-21

蓝桥杯大赛java历年真题及答案整理.docx

蓝桥杯大赛java历年真题及答案整理.docx

2024-02-20

学院大学生创新创业训练计划项目管理办法.docx

学院大学生创新创业训练计划项目管理办法.docx

2024-02-20

图书管理系统源码(c版).doc

图书管理系统源码(c版).doc

2024-02-20

Python爬虫超详细实战攻略课件第2章HTML基础知识和Python文本处理.ppt

Python爬虫超详细实战攻略课件第2章HTML基础知识和Python文本处理.ppt

2024-02-20

计算机matlab神经网络工具箱ppt课件.ppt

计算机matlab神经网络工具箱ppt课件.ppt

2024-02-20

空空如也

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

TA关注的人

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