自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (16)
  • 收藏
  • 关注

原创 CSS学习

CSS相关学习flex布局flex简单运用flex-wrap自动换行flex-grow的运用flex对齐方式综合布局后台框架布局基础表单布局滚动实现网格布局手机框架布局动画简介JS事件监听画布简介flex布局flex简单运用效果图代码块<!DOCTYPE html><html><head><meta charset="utf-8"> <title>flex学习</title><style>

2021-05-12 21:49:35 136 1

原创 Cookie和Session的详解和区别

会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session。

2020-06-28 15:59:38 277

转载 Java NIO 系列教程

Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Java NIO: Channels and Buffers(通道和缓冲区)标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写...

2020-04-15 15:59:09 111

原创 Java NIO系列教程(十一) NIO与IO

我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别IONIO面向流面向缓存阻塞IO非阻塞IO无选择器面向流与面向缓冲Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味...

2020-04-15 15:57:40 119

原创 Java NIO系列教程(十) DatagramChannel

Java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。打开 DatagramChannel下面是 DatagramChannel 的打开方式:DatagramChannel channel = DatagramChannel.open();channel.socket().bin...

2020-04-15 14:57:14 161

原创 Java NIO系列教程(九) ServerSocketChannel

Java NIO中的 ServerSocketChannel 是一个可以监听新进来的TCP连接的通道, 就像标准IO中的ServerSocket一样。ServerSocketChannel类在 java.nio.channels包中。例如:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); server...

2020-04-15 14:39:54 224

原创 Java NIO系列教程(八) SocketChannel

Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel:打开一个SocketChannel并连接到互联网上的某台服务器。一个新连接到达ServerSocketChannel时,会创建一个SocketChannel。打开 SocketChannel下面是SocketChannel的打开方式:SocketCha...

2020-04-15 14:29:54 121

原创 Java NIO系列教程(七) FileChannel

Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来获取一个F...

2020-04-15 14:13:23 119

原创 Java NIO系列教程(六) Selector

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。为什么使用Selector仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都...

2020-04-14 17:17:25 100

原创 Java NIO系列教程(五) 通道之间的数据传输

在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel。transferFrom()FileChannel的transferFrom()方法可以将数据从源通道传输到FileChannel中(译者注:这个方法在JDK文档中的解释为将字节从给定的可读取字节通道传输到此通道的文件中...

2020-04-14 16:22:24 91

原创 Java NIO系列教程(四) Scatter/Gather

Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,Channel将从Channel中读取的数据“分散(scatter)”到多个Buffer中。聚集(gath...

2020-04-14 16:03:11 105

原创 Java NIO系列教程(三) Buffer

Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:写入数据到Buffer调用flip()方法从Buffer中...

2020-04-14 15:44:43 98

原创 Java NIO系列教程(二) Channel

Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。Channel的实现这些是Java NIO中最重要的通道的实现:FileChannel: 从文件中读写数据DatagramChannel: 能通过UDP读写网络中的数据...

2020-04-14 14:36:06 2170

原创 Java NIO系列教程(一) Java NIO 概述

Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectorsChannel 和 Buffer基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。如下图示:Channel和Buffer有好几种类型。下面是JAVA NIO中的一...

2020-04-14 14:25:48 159

转载 基于vue和springmvc前后端分离,json类接口调用介绍

1、maven配置<!-- spring --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>3.2.9.RELEASE</versi...

2020-01-07 16:59:29 714

原创 thymeleaf+springboot+mybatis(PageHelper分页插件)

thymeleaf结合springboot实现分页展示功能;mybatis集成PageHelper分页插件可以实现后台数据查询功能以及返回数据封装效果如下pom.xml配置<!--mybatis--><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifact...

2019-12-27 17:11:10 601 3

原创 Java查找算法

顺序查找从第一个到最后一个纪录依次与给定值比较,若相等则查找成功/** * 顺序表查找 * 数组下标为0的位置不用来储存实际内容 * @author Yongh * */public class Sequential_Search { /* * 顺序查找 */ public int seqSearch(int[] arr,int key) { ...

2019-12-19 16:43:25 119

原创 计算数字阶乘几种方法

方法一:迭代法public static int iteration (int n) { int ret = 1; for (int i=1;i <= n;i++){ ret *= i; } return ret;}方法二:递归法首递法public static int headRecursion (int n) { r...

2019-10-31 16:57:54 931

原创 Java并发编程实战

生产者和消费者模式生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通信,而是通过阻塞队列来进行通信,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。Java中的线程池类其实就是一种生产者和消费者模式的实现方式,但是我觉得其实现方...

2019-10-12 10:41:45 139

原创 Executor框架

Executor框架简介Java的线程既是工作单元,也是执行机制。从JDK 5开始,把工作单元与执行机制分离开来。工作单元包括Runnable和Callable,而执行机制由Executor框架提供。框架结构·Executor是一个接口,它是Executor框架的基础,它将任务的提交与任务的执行分离开来。·ThreadPoolExecutor是线程池的核心实现类,用来执行被提交的任...

2019-10-12 10:25:01 129

原创 Java中的线程池

在工作中我经常发现,很多人因为不了解线程池的实现原理,把线程池配置错误,从而导致了各种问题。本章介绍了为什么要使用线程池、如何使用线程池和线程池的使用原理,相信阅读完本章之后,读者能更准确、更有效地使用线程池。

2019-10-11 15:50:56 64

原创 Java中的并发工具类

等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。public class JoinCountDownLatchTest { public static void main(String[] args) throws InterruptedException { Thread parser1 = new Thread(new...

2019-10-09 17:13:28 60

原创 Java中的13个原子操作类

在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。Atomic包里的类基本都是使用Unsafe实现的包装类。原子更新基本类型类使用原子的方式更新基本类型,Atomic包提供了以下3个类:·AtomicBoolean:原子更新布尔类型。·AtomicInteger:原子更新整型。·AtomicLong...

2019-10-09 14:56:07 67

原创 Java并发容器和框架

本章介绍了Java中提供的各种并发容器和框架,并分析了该容器和框架的实现原理,从中我们能够领略到大师级的设计思路,希望读者能够充分理解这种设计思想,并在以后开发的并发程序时,运用上这些并发编程的技巧。

2019-10-08 17:58:15 65

原创 Java中的锁

Lock接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java SE 5之后,并发包中新增了Lock接口(以及相关实现类)用来实现锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用...

2019-09-30 16:45:44 98

原创 Java并发编程基础

线程简介在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的线程。新建(new):新创建了一个线程对象。可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。...

2019-09-29 17:30:45 63

原创 Java内存模型

Java内存模型(JMM)基础JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证。JMM属于语言级的内存模型,它确保在不同的编译器和不同的处理器平台之上,通过禁止特定类型的编译器重排序和处理器重排序,为程序员提供一致的内存可见性保证。重排序重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。在执行程序时,为了提高性能,编译器...

2019-09-29 11:38:06 117

原创 Java并发机制的底层实现原理

volatile的应用volatile的两条实现原则:1)Lock前缀指令会引起处理器缓存回写到内存。2)一个处理器的缓存回写到内存会导致其他处理器的缓存无效。synchronized的的实现原理和应用重量级锁·对于普通同步方法,锁是当前实例对象。·对于静态同步方法,锁是当前类的Class对象。·对于同步方法块,锁是Synchonized括号里配置的对象。monitorent...

2019-09-25 15:38:29 70

原创 第十三章 线程安全和锁优化

概述人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情。有时候,良好的设计原则不得不向现实做出一些让步,我们必须让程序在计算机中正确无误地运行,然后再考虑如何将代码组织得更好,让程序运行更快。对于“高效并发”来说,首先需要保证并发的正确性,然后在此基础上实现高效。线程安全“线程安全”有...

2019-09-16 18:03:19 73

原创 第十二章 Java内存模型与线程

概述并发应用场景:①充分利用计算机处理器的能力;②一个服务端同时为多个客户端提供服务。衡量一个服务性能的高低好坏,每秒事务处理数是最重要的指标之一。硬件的效率与一致性Java内存模型主内存和工作内存①Java内存模型的主要目标是定义程序中各个变量的访问规则 – 虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variables)包括了实例字段、静态字段和构成数...

2019-09-16 16:10:00 105

原创 第十一章 晚期(运行期)优化

“热点代码”(Hot Spot Code): 运行特别频繁的方法或代码块;为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,下文中简称JIT编译器)。“热点代码”有两类:①被多次调用的方法 – 这是由方法调用触发的编译,因此编译器理会以整个方法作为编译对象...

2019-09-12 17:50:32 224

原创 第十章 早期(编译期)优化

概述编译器分类:前端编译器:把 *.java 文件转变成 .class 文件的过程;JIT编译器:把字节码转变成机器码;AOT编译器:直接把 *.java 文件编译成本地机器码;Javac编译器解析与填充符号表①词法、语法分析:词法分析是将源代码的字符流转变为标记(Token)集合,单个字符是程序编写的最小元素,而标记则是编译过程的最小元素;语法分析是根据Token序列来构...

2019-09-11 17:40:57 230

原创 第九章 类加载及执行子系统的案例与实战

Tomcat:正统的类加载器架构一个功能健全的类加载器,都要解决以下几个问题:(1)部署在同一服务器上的两个web应用程序所使用的java类库可以实现相互隔离。这是最基本的需求,两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求一个类库在一个服务器中只有一份,服务器应当可以保证两个应用程序的类库可以相互独立使用。(2)部署在同一个服务器上的两个web应用程序所使用的java类库...

2019-08-27 17:54:22 111

原创 第八章 虚拟机字节码执行引擎

本章分析了虚拟机在执行字节码时如何找到正确的方法,如何执行方法内的字节码,以及执行字节码时涉及的内存结构。

2019-08-23 16:01:40 60

原创 第七章 虚拟机类加载机制

本章介绍了类加载过程的五个阶段,还介绍了类加载器的工作原理及其对虚拟机的意义。

2019-08-06 11:19:02 87

原创 第六章 类文件结构

Class类文件是Java虚拟机执行引擎的数据接口,也是Java技术的基础支组之一。

2019-08-05 10:47:19 81

原创 第五章 调优案例分析与实战

案例分析B/S:“浏览器/服务器”模式,好处就是维护和升级方式简单,客户端是浏览器基本不需要维护,只需要维护升级服务器端就可以C/S:“客户端/服务器”模式,好处就是可以降低通信成本且更安全,但升级维护比较困难高性能硬件上的程序部署策略通过64为JDK来使用大内存面临问题:①内存回收导致长时间停顿②64位JDK性能低于32位JDK③产生堆溢几乎无法产生堆转储快照(产生的文件...

2019-08-01 14:29:06 152

原创 第四章 虚拟机性能监控与故障处理工具

JDK的命令行工具JDK可视化工具JConsole:Java监视与管理控制台通过JDK/bin 目录下的jconsole.exe启动VisualVM:多合一故障处理工具

2019-07-31 17:07:31 75

原创 第三章 垃圾收集器与内存分配策略

内存回收与垃圾收集器在很多时候都是影响系统性能、并发能力的主要因素之一,因此必须了解每个具体收集器的的行为、优势、劣势和调节参数

2019-07-31 14:48:56 45

原创 第二章 Java内存区域与内存溢出异常

通过本章的学习,我们明白了虚拟机里面的内存是如何划分的,什么样的代码和操作可能导致内存溢出异常。

2019-07-30 13:36:35 104

Lucene数据搜索笔记

Lucene是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。

2022-04-08

MySQL数据库学习笔记

数据库(DataBase,简称DB):数据库是一个按数据结构来存储和管理数据的计算机软件系统。 存储和管理数据的仓库. 操作数据库:CRUD 数据库管理系统(DataBase Management System:DBMS):是专门用于管理数据库的计算机系统软件。数据库管理系统能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能,并完成对数据完整性、安全性进行控制的功能。 一般的,我们说到的数据库,就是指DBMS. 数据库服务器. 数据库应用系统(DataBase Application System:DBAS):使用数据库技术的系统; 数据库应用系统有很多,基本上所有的信息系统都是数据库应用系统。它通常由软件、数据库和数据管理员组成. 常见的数据库服务器: MySQL AB-->Oracle:运用非常广泛,免费. SQL Server MS ,收费. DB2 IBM

2022-04-08

uml项目开发软件安装流程

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。

2022-04-08

svn在项目中的使用以及学习

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

2022-04-08

struts项目学习笔记

Struts2 是一个非常优秀的MVC框架,基于Model2 设计模型 由传统Struts1和WebWork两个经典框架发展而来 Struts2框架=Struts2+XWork Strust2 核心功能 允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,没有实现,getter,setter方法)对象 作为Action,没有耦合 Action的execute 默认方法不再与Servlet API耦合,更易测试 支持更多视图技术(JSP(转译java文件,编译成class文件,才可以运行)、(模板技术,html,把数据和模板html一起以流方式输出)FreeMarker、Velocity) 基于AOP(面向切面编程)思想的拦截器机制,更易扩展(不修改源代码的条件下,增强代码功能) 更强大、更易用输入校验功能 整合Ajax支持:json插件 Struts2的今生前世: 1.早期开发模型Servlet+JSP+JavaBean显得力不从心: 流程凌乱、数据传递无序、缺乏辅助功能。 2.MVC模式的轻量级Web应

2022-04-08

spring项目开发学习笔记

Spring是一个轻量级的DI/IoC和AOP容器框架。存在的目的是用于构建轻量级的J2EE应用。 轻量级:应用大小和应用开支,包括应用方式 依赖注入DI/IoC控制反转:提供松耦合的一种实现技术 AOP面向切面编程:(可以在不修改源代码的前提下,增强权限,日志,事务功能)切面编程将业务逻辑从应用服务中分离 容器(spring):管理dao,service,action,...包含并管理应用对象的生命周期和配置 框架:使用组件配置组合成复杂的应用,并提供很多基础功能 Spring提供了对开源社区中很多框架及JavaEE中很多技术的支持,让程序员很轻松能整合及使用这些框架技术。 Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring 。 Spring可以处理JavaEE编程的所有不爽的 重量级,EJB,enterprice java bean,分布式javabean

2022-04-08

linux的介绍和虚拟机安装流程

严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台;Linux的全称是GNU/Linux,这才算是一个真正意义上的Linux系统。GNU是Richard Stallman组织的一个项目,世界各地的程序员可以变形GNU程序,同时遵循GPL协议,允许任何人任意改动。但是,修改后的程序必须遵循GPL协议。 Linux 是一个多用户多任务的操作系统,也是一款自由软件,完全兼容POSIX标准,拥有良好的用户界面,支持多种处理器架构,移植方便。 为程序分配系统资源,处理计算机内部细节的软件叫做操作系统或者内核。如果你希望详细了解操作系统的概念,请查看操作系统教程。 用户通过Shell与Linux内核交互。Shell是一个命令行解释工具(是一个软件),它将用户输入的命令转换为内核能够理解的语言(命令)。 Linux下,很多工作都是通过命令完成的,学好Linux,首先要掌握常用命令。

2022-04-08

hibernate完整学习

Hibernate的本质 也是处理对象和关系模型之间的转换,只是对JDBC做了一层封装 优点: 1.程序员操作很简单,代码简单 session.save(user); 2.直接面向对象操作 jsp:user.name,user,password action:setUser dao:user 3.提供世界级数据缓存(一级缓存,二级缓存,查询缓存) 4.数据库移植性很强,很少的修改 抽取出了数据库的抽象:方言 缺点: 1.不能干预sql语句的生成 2.一个项目中,如果对sql语句的优化要求比较高,不适合用hibernate 3.如果一张表中有上亿级别的数据量,也不适合用hibernate(数据库读写分离,分库分表)

2022-04-08

单点登录-回调地址-AES加密.rar

AES加密工具类,适用于java开发时,对相关内容进行相关加密确保信息传输的安全。

2022-04-08

军训班主任心得(一).doc

军事训练虽然苦,但正如孟子所说,只有“先苦其心志”,方能“增益起所不能”,只有经过“苦”的洗涤,才能铸就钢铁般的意志。丰富多彩的军训生活让我们得到了全面锻炼,使我们获得了新的人生境界,有了更广阔的视角。让我们记住这不平凡的四天,让这四天成为我们成长历程中光辉的一页,照亮我们以后的人生道路。 适用人群为参加过的军训学生

2022-04-08

自动生成补丁Java代码

能够将Java代码自动生成补丁

2021-02-03

单点登录Java代码

单点登录Java代码

2021-02-03

PLSQL知识点学习PPT

plsql相关知识点梳理

2021-02-03

数据结构知识点PPT

数据结构的相关知识点课件

2021-02-03

购物商城技术代码.zip

网上购物商城是一个综合性的B2C平台,类似京东商城、天猫商城。会员可以在商城浏览商品、下订单,以及参加各种活动。管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。这里就是有关商城的代码实现部分

2020-08-06

nginx+ftp图片上传服务器和访问.rar

nginx安装手册和vsftpd安装手册,手把手教会你如何在Linux上部署nginx和ftp服务,从而实现图片的跨服务器访问和上传

2019-07-24

空空如也

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

TA关注的人

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