自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一题(分糖果)

Solo和koko是两兄弟,妈妈给了他们一大袋糖,每块糖上都有自己的重量。现在他们想要将这些糖分成两堆。分糖的任务当然落到了大哥Solo的身上,然而koko要求必须两个人获得的糖的总重量“相等”(根据Koko的逻辑),要不然就会哭的。非常不幸的是,koko还非常小,并且他只会先将两个数转成二进制再进行加法,而且总会忘记进位。如当12(1100)加5(101)时:1100+ 0101————1001于是koko得到的计算结果是9(1001)。此外还有一些例子:5 + 4 = 1。

2023-03-23 16:45:02 324 1

原创 每日一题(插队)

某银行将客户分为了若干个优先级,1 级最高,5 级最低,当你需要在银行办理业务时,优先级高的人随时可以插队到优先级低的人的前面。现在给出一个人员到来和银行办理业务的时间序列,请你在每次银行办理业务时输出客户的编号。如果同时有多位优先级相同且最高的客户,则按照先来后到的顺序办理。输入第一行是一个正整数 n ,表示输入的序列中的事件数量。(1≤n≤500)接下来有 n行,每行第一个字符为 a 或 p。当字符为 a 时,后面会有两个的正整数 num和 x ,表示到来的客户编号为 num ,优先级为 x;

2023-03-22 16:16:57 255

原创 数据库的存储引擎和事务

数据库中的各表均被(在创建表时)指定的存储引擎来处理。服务器可用的引擎依赖于以下因素:MySql的版本、服务器在开发时如何被配置、启动选项为了解当前服务器中有哪些存储引擎可用,可使用show engines\g语句:①在创建表时,可使用ENGINE选项为CREATE TABLE语句显式指定存储引擎。②如果在创建表时没有显式指定存储引擎,则该表使用当前默认的存储引擎③默认的存储引擎可在my.ini配置文件中使用default-storage-engine选项指定。

2023-01-05 20:30:33 459

原创 Spring事务处理

学习数据库的时候,提出了事务。事务是指一组sql语句的集合, 集合中有多条sql语句,可能是insert , update ,select ,delete, 我们希望这些多个sql语句都能成功或者都失败, 这些sql语句的执行是一致的,作为一个整体执行。1)事务内部提交,回滚事务,使用的事务管理器对象,代替你完成commit,rollback事务管理器是一个接口和他的众多实现类。2.适合大型项目,有很多的类,方法,需要大量的配置事务,使用aspectj框架功能,在spring配置文件中。

2023-01-05 13:40:46 492

原创 SpringMVC与SpringBoot响应请求的流程

Spring MVC 涉及到的组件有 DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、Handler(处理器)、ViewResolver(视图解析器)和 View(视图)。8、然后MallMapper会继续找对应的mapper.xml配置文件,之后便会跳转到第4步继续执行,执行完毕后会将结果返回到第1步,然后便会将数据以JSON的形式返回到页面,同时返回状态码,正常则会返回200,便会回到步骤1中查询判断。

2023-01-03 12:42:12 1095 1

原创 SprigBoot项目部署和跨域

跨域指的是浏览器不能执行其它网站的脚本,就是前后端的代码运行在不同的服务器上,由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。1、jar包,jar包方式启动,使用SpringBoot内置的tomcat运行,服务器只要配置JDK1.8及以上就可,不需要外置tomcat。同源策略是一种约定,由Netscape公司引入,是浏览器最核心最基本的安全功能,如果缺少同源策略,浏览器易受XSS,CSFR等攻击。访问协议、访问地址、访问端口号:三个地方任何一个不相同都会产生跨域问题。

2023-01-03 12:09:54 465

原创 线程生命周期状态和线程问题

阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。此处需要特别注意的是:当调用线程的yield()方法时,线程从运行状态转换为就绪状态,但接下来CPU调度就绪状态中的哪个线程具有一定的随机性,因此,可能会出现A线程调用了yield()方法后,接下来CPU仍然调度了A线程的情况。死亡状态(Dead)(结束):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

2023-01-03 11:39:01 129

原创 线程池的应用

当向线程池提交一个任务时,若线程池已创建的线程数小于corePoolSize,即便此时存在空闲线程,也会通过创建一个新线程来执行该任务,直到已创建的线程数大于或等于corePoolSize时,才会根据是否存在空闲线程,来决定是否需要创建新的线程。当向线程池提交一个任务时,若线程池已创建的线程数小于corePoolSize,即便此时存在空闲线程,也会通过创建一个新线程来执行该任务,直到已创建的线程数大于或等于corePoolSize时,才会根据是否存在空闲线程,来决定是否需要创建新的线程。

2022-12-21 21:31:58 356

原创 面试之HashMap与HashTable

HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。

2022-10-22 22:13:36 190

原创 面试MySQL事务相关

树跟数组、链表、堆栈一样,是一种数据结构。它由有限个节点,组成具有层次关系的集合。因为它看起来像一棵树,所以得其名。一颗普通的树如下:每个结点或者无子结点或者只有有限个子结点;有一个特殊的结点,它没有父结点,称为根结点;每一个非根节点有且只有一个父节点;树里面没有环路结点的度:一个结点含有的子结点个数称为该结点的度;树的度:一棵树中,最大结点的度称为树的度;父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;

2022-10-22 22:05:11 394

原创 面试问题汇总

定义: 事物就是数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。本质: 由一个或多个sql语句组成。这些sql语句在执行过程中被当作一个整体,要么全部的sql语句执行成功,要么全部失败。不存在一部分执行成功,一部分执行失败。2 事物的四大特性2.1 原子性(Atomicity)原子性就是将事物进行的操作捆绑成一个不可分割的单元,事物中进行的数据操作要么全部成功,要么全部失败(回滚)。2.2 一致性(Consistency)

2022-10-17 16:27:16 493

原创 阿里云OOS储存

OOS:阿里云对象存储OOS是一款海量、安全、低成本、高可靠的云存储服务,提供99.99%的数据持久性和可用性,多种存储类型供选择,全面优化存储成本,非常适合存储非结构化数据,例如视频,图形,日志,文本文件以及各种app应用,多终端同步软件,网盘下载站的文件等,单个文件的大小从1字节到18.8TB,可以存储的个数无限制。application.properties文件中,添加存放云存储的Bucket地址及AccessKey配置信息。,这就是用于创建云存储文件夹的地方;3、开通云存储,实名认证,开通OOS。

2022-10-16 13:05:04 4213

原创 SpringMVC原理和流程

在Spring MVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。请求参数的接收方式不一样。struts2是通过类的成员变量接收请求的参数,是基于类的开发,线程不安全,只能设计为多例的开发。

2022-10-15 22:15:44 325

原创 Feign实现各个服务之间的远程调用问题

在@FeignClient注解中,必须要指定name属性,且Feign内部集成了Ribbon,当name名称为注册的微服务名称时,Feign会调用Ribbon配置的负载均衡规则选择一个微服务实例,并将选中实例的URL拼接至方法前,请求相应的微服务地址。Feign也可以脱离Ribbon使用,在@FeignClient注解中指定url属性,Feign就会使用指定的URL来拼装请求地址。简单来说就是调用不同服务的接口,获取数据,因为在传统项目中是不能跨服务获取数据的。拼接至方法前,请求相应的微服务地址。

2022-09-19 20:53:14 1624

原创 Nginx反向代理服务器解决负责均衡问题

HTTP 客户端在与服务端交互时,因为 HTTP 协议是无状态的,所以任何需要上下文逻辑的情景都必须使用会话保持机制,会话保持机制是通过客户端存储由唯一的 Session ID 进行标识的会话信息,每次与服务器交互时都会将会话信息提交给服务端,服务端依照会话信息实现客户端请求上下文的逻辑关联。在应对高并发的应用请求时,单节点的应用服务计算能力有限,无法满足客户端的响应需求,通过负载均衡技术,可以将请求分配到集群中的多个节点中,让多个节点分担高并发请求的运算,快速完成客户端的请求响应。

2022-09-19 20:46:09 1037

原创 OAuth2+JWT新一代认证技术

认证方式: 我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。

2022-09-19 20:44:56 3021

原创 微服务网关API Geteway

令牌桶算法:令牌桶算法是对漏桶算法的一种改进,桶算法能够限制请求调用的速率,而令牌桶算法能够在限制调用的平均速率的同时还允许一定程度的突发调用。放令牌这个动作是持续不断的进行,如果桶中令牌数达到上限,就丢弃令牌,所以就存在这种情况,桶中一直有大量的可用令牌,这时进来的请求就可以直接拿到令牌执行,比如设置。因为处理的速度是固定的,请求进来的速度是未知的,可能突然进来很多请求,没来得及处理的请求就先放在桶里,既然是个桶,肯定是有容量上限,如果桶满了,那么新进来的请求就丢弃。则返回页面代码证明匹配成功。

2022-09-19 20:39:55 935

原创 java遇到的一些集合相关知识

HashSet线程不安全,不允许存储相同的对象,内部使用Map保存数据,就是将HashSet的数据作为Map的key值保存,这也就是HashSet中元素不能重复的原因,而Map中保存Key值前会去判断当前Map中是否含有该key对象,内部是先通过key的hashcode,确定形态hashcode之后,再通过equals方法判断是否相同。ArrayList通过数组实现,线程不安全,可以存储重复数据,不同步,扩展空间时,扩展原来的50%,有利于节约空间。Vector:底层数组,线程安全,效率低,有序可重复。

2022-09-19 20:22:51 225

原创 多路复用补充

Select单个进程可监视的fd数量受到限制,epoll支持水平触发和边沿触发两种模式,epoll和select都可实现同时监听多个I/O事件的状态,poll和select基于轮询,时间复杂度O(n),poll没有最大连接限制(底层采用链表),epoll基于操作系统支持的I/O通知机制,时间复杂度O(1)此外,IO多路复用适合处理很多闲置的IO,因为IO socket的数量的增加并不会带来进(线)程数的增加,也就不会带来stack内存,内核对象,切换时间的损耗。分别添加、删除和修改对fd的监听事件。

2022-09-19 20:21:09 419

原创 Linux 下 I/O 复用技术,以及 Select、Poll、Epoll 并发模型

而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。epoll的解决方案不像select或poll一样每次都把current轮流加入fd对应的设备等待队列中,而只在epoll_ctl时把current挂一遍(这一遍必不可少)并为每个fd指定一个回调函数,当设备就绪,唤醒等待队列上的等待者时,就会调用这个回调函数,而这个回调函数会把就绪的fd加入一个就绪链表)。

2022-09-19 20:03:51 188

原创 线程的一些简单问题

线程池,线程转换状态,多线程

2022-09-19 19:50:19 214

原创 七种常用的设计模式

常用的七种设计模式:单例模式、工厂方法模式、抽象工厂模式、代理模式、装饰器模式、观察者模式和责任链模式。设计模式分类设计模式根据工作的目的,分为创建型模式、结构型模式和行为型模式三类。创建型模式:单例模式、工厂方法模式、抽象工厂模式、创建者模式、原型模式。结构型模式:适配器模式、代理模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式。行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。软件设计七大原则(OOP原则)

2022-07-05 16:40:14 75099 16

原创 Redis缓存穿透、击穿和雪崩

缓存穿透是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。用户拿不到数据时,就会一直发请求,查询数据库,这样会对数据库的访问造成很大的压力。如:用户查询一个 id = -1 的商品信息,一般数据库 id 值都是从 1 开始自增,很明显这条信息是不在数据库中,当没有信息返回时,会一直向数据库查询,给当前数据库的造成很大的访问压力。缓存穿透的发生一般是受到 “黑客攻击” 所导致的,所以应该进行监控,如果真的是黑客攻击,及时添加黑名单

2022-07-04 21:32:13 401

原创 Redis集群相关知识

先说一下Redis的主从复制,默认情况下,每台Redis服务器都是主节点,集群模式都是采用哨兵模式来监控的。主从复制:是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。主要作用:①数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。②故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速

2022-07-04 15:21:41 165

原创 Redis的发布订阅功能

Redis 发布/订阅是一种消息传模式,其中发送者(在Redis术语中称为发布者)发送消息,而接收者(订阅者)接收消息。传递消息的通道称为channel。下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:接下来是一组实例,以下实例演示了发布订阅是如何工作的,需要开启两个 redis-cli 客户端。在我们实

2022-07-04 14:40:01 380

原创 Redis持久化相关内容

说到Redis持久化,先简单说一下Redis的配置文件,在以后的工作做一些配置更加方便使用。 ①单位,注意Redis不区分大小写,Redis配置对大小写不敏感。 ②包含,搭建Redis集群的时候,可以使用Include包含其他配置文件 ③网络④通用⑤持久化(RDB),持久化,在规定的时间内,执行了多少次操作则会持久化到文件.rdb.aof文件注意Redis是内存数据库,如果没有持久化,那么数据断电即消失! ⑥security安全,这里可以设置Redis密码,Redis默认是没有

2022-07-04 14:05:15 110

原创 Redis在Jedis中的使用,以及SpringBoot整合Redis

Jedis是Redis官方推荐的java连接开发工具,但是现在的SpringBoot2.0以上的版本将Jedis换成Lettuce,但是Jedis还是很好用的,在Jedis中连接使用Redis,和Redis控制台命令完全一致。1、使用idea创建一个meavn项目2、在pom文件中添加依赖(Jedis和fastjson) 3、连接测试,连接的是本地的Redis服务,连接远程需要更改配置文件和关闭防火墙,先打开redis-server.exe,再进行下面的测试。返回PONG,表示连接成功。4、常用AP

2022-07-04 09:41:56 1206

原创 Redis中的事务和乐观锁

简单的说一下事务,所谓事务有四个特性:原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)。①原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。②一致性: 事务必须是使数据从一个一致性状态变到另一个一致性状态,一致性与原子性是密切相关的。③隔离性:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。④持久性:指的是一个事务一旦提交,

2022-07-02 18:43:25 239

原创 Redis三大特殊数据类型

上一章讲到redis的五种基本数据类型,string、list、hash、set、zset,这次简单聊一下redis的三种特殊数据类型,虽然基本数据类型可以解决我们日常需求,但是特殊的数据类型,帮我们解决一些特殊的情景是很有必要的。 实际需求中,我们可以用来查询附近的人、计算两人之间的距离等。当然,那些所需的经纬度我们肯定要结合java代码来一次导入,手动查询和录入太过于浪费时间! 1):两极无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入 2)

2022-07-01 20:27:55 977

原创 Redis学习

Redis(Remote Dictionary Server)是一个开源的使用ANSI C语言编写、支持网络,可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。其次redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并在此基础上实现master-slave(主从)同步。Redis是免费开源,当下最热门的NoSQL技术之一,也叫结构化数据库。很多人就好奇Redis到底能干嘛,简单说:1、内存存储,持久化,内存中是断电即失、所以持久化很重要,常用的持久化方法(

2022-07-01 19:27:51 216

原创 Redis数据库相关:

MySQL,Oracle数据库管理系统(都是关系型数据库)Ocacle:大型数据库,收费,内存大,对事物完全支持,安全性更高。MySQL:中小型数据库,开源,内存小,对事物默认不支持,在一些存储引擎中支持,如innodb随着web的发展,访问量的上升,高访问容易打崩数据库,使用关系型数据库的web在性能上不够(磁盘I/O),在云计算,大数据盛行NOSQL,其高性能,可扩展性强,高可用性。Redis:NOSQL数库(memCache,Cassadra,Mongo等),redis数据类型,五种自有类型(Stri

2022-06-01 21:49:32 117

原创 从输入URL到浏览器显示页面过程(网络通信+网页渲染):

当我们在浏览器输入网址:”www.baidu.com”后浏览器最终怎样把这个页面呈现出来?这个过程大致可以分成两个部分:1.网络通信 互联网内各网络设备间的通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层上向上走。1. 在浏览器中输入url 用户输入url,例如http://www.baidu.com。其中http为协议,www.baidu.com为网

2022-06-01 21:02:42 217

原创 Mybatis缓存

今天面试深圳一家公司的时候,被问到mybatis缓存,当时回到是只知道一级缓存和二级缓存,现在整理一下。MyBatis 是一个开源、轻量级的数据持久化框架,是 JDBC 和 Hibernate 的替代方案。MyBatis 内部封装了 JDBC,简化了加载驱动、创建连接、创建 statement 等繁杂的过程,开发者只需要关注 SQL 语句本身。MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立映射关系,是一种半自动化的 ORM 实现。其封装性低于 Hibernat

2022-06-01 20:20:52 260

原创 JAVA中JVM、JRE和JDK的关系

JDK(Java Development Kit),它是功能齐全的Java SDK,JDK是整个JAVA的核心,它拥有JRE所拥有的一切,还有编译器(javac)和工具(如javadoc和jdb),它能够创建和编译程序。JRE(Java Runtime Environment),它是运行已编译Java程序所需的内容的集合,包括java虚拟机(JVM),java类库,java命令和其他的一些基础构件,这些是运行Java程序的必要组件。通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用

2022-05-06 18:43:52 190

原创 linux常用指令大全

1、文件目录相关指令pwd 用于显示当前目录的路径ls指令ls[选项][目录或是文件]常用选项-a:显示当前目录所有的文件和目录,包括隐藏的-l:以列表的方式显示信息,相当于llcd指令 cd[参数]常用参数 绝对路径(以/开头的目录)和相对路径(以目录名开头的目录,从当前目录下开始查找) cd ~ 或者cd :回到自己的主目录 cd .. 回到当前目录的上...

2022-04-23 15:53:44 170

原创 jvm内存结构与java内存模型

前几天在面试网易的时候被问到java内存结构与内存模型,傻傻分不清,其实JVM内存结构是与JVM的内部存储结构相关,而java内存模型是与多线程有关。JVM构成:Java源代码编译成Java Class文件后通过类加载器ClassLoader加载到JVM中,其中1、类存放在方法区中2、类创建的对象存放在堆中3、堆中对象的调用方法时会使用到虚拟机栈,本地方法栈,程序计数器4、方法执行时每行代码由解释器逐行执行5、热点代码由JIT编译器即时编译6、垃圾回收机制回收堆中资源

2022-04-23 13:05:06 1528

原创 ArrayList与LinkedList

List 是一个有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List 集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List 集合默认按元素的添加顺序设置元素的索引,第一个添加到 List 集合中的元素的索引为 0,第二个为 1,依此类推。List实现了 Collection 接口,它主要有两个常用的实现类:ArrayList 类和 LinkedList 类。ArrayList:ArrayList 类实现了可变数组的大小,存储在内的数据称为元素。它还提供了快速基于索引访.

2022-04-23 10:53:07 116

原创 网易一面总结

先是自我介绍,期间面试官给我的感觉很好接口和抽象类的区别:抽象类:可以有构造方法,可以有普通成员变量,可以有非抽象方法,抽象方法修饰符类型可以是public、protected、default,可以有静态方法,也可以有静态成员变量。接口:不可以有构造方法,没有普通成员变量,不可以有非抽象方法,抽象方法修饰符必须是public,默认是public abstract,不可以包含静态方法,可以有静态成员变量。一个类可以实现多个接口,但是只能继承一个抽象类。接口是对动作的抽象(has-a),抽象

2022-04-22 17:04:57 1469

原创 java中String相关的方法

public String(byte[] bytes):把字节数组转换成一个字符串public String(byte[] bytes,int index,int length):把字节数组从index下标开始到length个元素转换成字符串public String(char[] value):把一个字符数组转换成一个字符串public String(char[] value,int index,int count):把一个字符数组从index下标处开始的count个字符转换成字符串pub

2022-03-26 13:45:02 841

原创 从前序遍历与中序遍历序列构造二叉树

我们可以知道 中序遍历时先遍历完左子树 再遍历根结点最后遍历右子树,前序遍历是先遍历根结点再遍历左子树,最后遍历右子树,综上可知,前序遍历的(根+左子树)个数 = 中序遍历的(左子树+根)个数。利用这个性质,可知下边的:对于前序遍历(根左右)设前序遍历出的数组开始下标为preLeft,结束为preRight根 左子树 右子树 preLeft [preLeft+1,pIndex-inLeft+preLeft] [pIndex-inLeft+preLeft+1,pre

2022-03-17 22:32:33 6596

空空如也

空空如也

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

TA关注的人

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