自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Netty框架的简单使用,实现socket通讯

个人博客:haichenyi.com。感谢关注  题外话,很多人都把JDK1.4提供的NIO称之为异步非阻塞I/O;其实,并不然,从严格意义上面讲,它只能称为非阻塞I/O。在JDK1.7提供的NIO 2.0,新增了异步的套接字通道Channel,它才是真正的异步非阻塞I/O。下表是不同I/O模型的对比:表1-1 几种I/O模型和同能对比 同步阻塞I/O(BIO) 伪异步I/...

2018-02-12 11:15:43 17715 1

原创 JS—图片格式:1分钟掌握图片选择

将多个小图标或图片合并成一张大图,通过 CSS background-position 定位显示特定区域。将图片数据编码为文本格式(Data URI),直接嵌入 HTML/CSS/JS 文件中,无需单独请求图片文件。

2025-04-02 19:01:10 408

原创 JS—页面渲染:1分钟掌握页面渲染过程

简单来说:假设解析器在解析一段CSS的时候,发现某个规则可能与后续规则冲突(例如选择器优先级或继承关系不明确),需要回退到之前解析的状态,尝试另一种解析路径,这种"试错"行为称之为回溯。

2025-04-02 18:24:03 889

原创 JS—Token与JWT

JWT全称:**JSON Web Token,**是一种轻量级、自包含的开放标准。以 JSON 格式存储数据,并通过数字签名(如 HMAC 或 RSA)或加密保证信息的完整性和可信性,常用于身份认证(如登录 Token)和跨系统数据交换。无论选择哪种方式,XSS漏洞均可导致Token泄露,因此防范XSS是核心。对于极高安全场景,可考虑将Token存入内存,并在页面刷新时重新认证。后续请求怎么给服务端,也是没有绝对的标准,一般token都是放在网络请求的Cookie里面或者Header里面。

2025-04-01 18:37:40 1003

原创 JS—存储方式:1分钟掌握存储方式

存储方式容量有效期自动传给服务器典型用途Cookie4kb可设置过期时机自动带在请求头中登录态,用户偏好5-10M永久有效(除非手动删除)不自动长期保存的用户设置5-10M当前标签页有效(关闭后失效)不自动临时数据IndexDB几百M永久有效(除非手动删除)不自动离线应用,复杂的数据结构按需分配可控制(需手动清理)不自动缓存网络资源一句话选择指南​- 想自动传数据给服务器 → 用 ​Cookie​(比如用户登录凭证)。

2025-04-01 18:15:48 253

原创 JS—Promise:原理解析

Promise 的核心是 ​状态管理 + ​回调队列 + ​链式调用。手写实现需注意:状态不可变异步回调的执行顺序链式调用中返回新 Promise错误冒泡机制通过实现一个简化版 Promise,你能更深刻理解 JavaScript 异步编程的设计思想。实际开发中,请直接使用原生 Promise。

2025-03-31 13:24:27 1232

原创 JS—Promise:3分钟掌握Promise

JavaScript ES6新增的Promise是用于处理异步编程的对象,它解决了传统回调地狱的问题。掌握 Promise 是理解现代 JavaScript 异步编程的关键,结合 async/await 可以写出更简洁、健壮的代码。等待所有的promise都执行完成,不论是成功还是失败,都要等待所有的都执行完。取第一个改变状态的promise的值,可以是成功,也可以是失败。等待所有的promise成功,或者其中一个失败。所有的promise都成功,则走成功回调。创建一个失败的promise。

2025-03-27 18:35:50 548

原创 JS—深拷贝与浅拷贝:2分钟掌握二者的区别

维度浅拷贝深拷贝独立性部分独立(仅顶层属性独立)完全独立内存占用低(共享嵌套对象)高(完全独立副本)开发成本低(原生支持)高(需处理循环引用,特殊对象)适用性简单数据复杂数据优先使用浅拷贝,除非明确需要深拷贝。深拷贝应谨慎用于大型对象(性能敏感场景)。

2025-03-26 19:44:02 784

原创 JS—call,apply,bind:1分钟掌握三者的区别

这里还遇到了另一个小插曲,我注册这个容器的方法是在父类中写的,我直接在父类的构造方法里面去初始化容器。我在项目启动的时候,通过容器存储我有哪些方法,说白了就是一个map,key是方法名,value是方法。H5给我方法名的时候,我通过map去获取,获取到了就说明有这个方法,没获取到就说明没有。我第一个版本这些方法全都写的静态,静态方法会有一个问题,那就是我如果启动了两个webview,只有一个对象去通信,理论上是有问题。而是,直接方法()执行的。这样,就会在执行方法的时候,this指向的不是我实际的对象。

2025-03-25 19:34:46 880

原创 JS—ES5与ES6:2分钟掌握ES5与ES6的区别

​- ES6 解决了 ​ES5 的诸多痛点(如作用域、异步、代码冗余),引入了现代语言特性。​- 兼容性:旧浏览器可能不支持ES6,通常需通过Babel等工具转译为ES5。​- 开发体验:ES6使代码更简洁、可维护性更高,是当前开发的主流选择。基本上前面博客都或多或少提到过这些不同点的内容。比方说异步处理,前面一篇就说过了异步编程的原理。Promise回调会放到微任务队列中回调等等。

2025-03-25 18:46:31 459

原创 JS—异步编程:3分钟掌握异步编程

可能,CPU干了0.1秒的任务A,然后干0.2秒的任务B。再回到本篇的开头,JavaScript的异步编程,就可以理解为,单核CPU的并发,通过时间片的轮转方式去调度任务。可能,你会说1分钟都学不到东西了,更别说1秒,1毫秒了,能学什么东西?诶,这就是区别,机器能记住上一次执行的状态,下次再接着执行,不要杠,不接受反驳。以上,我说的都是单核,也就是1个CPU,现在手机,电脑都是4核,8核。,并行才能我们所理解的"并发",才是真正的并发。那么,问题就来了,这个并发,多线程是怎么实现的呢?

2025-03-24 19:39:06 1025 4

原创 JS—script标签加载:1分钟掌握async与defer

DOMContentLoaded是浏览器提供的一个关键事件,它标致着HTML文档解析完成且DOM树构建完毕(无需等待样式表和外部资源加载完毕)。通过合理使用 async 和 defer,可显著提升页面加载性能,同时确保脚本逻辑正确性。async与defer都是用于优化脚本加载行为的html属性。

2025-03-24 18:12:57 929

原创 JS—this指向与new操作符:2分钟搞懂new操作符的具体实现

new操作符用于通过构造函数创建对象的实例。它的核心作用时将构造函数与原型链关联,自动处理对象初始化的过程。

2025-03-19 19:48:05 350

原创 JS—原型与原型链:2分钟掌握原型链

每个JavaScript对象都有一个原型,这个原型也是一个对象。比方说。

2025-03-19 19:24:48 723

原创 JS—基本数据类型和引用数据类型:1分钟掌握两者的区别

特性基本数据类型引用数据类型存储位置栈内存堆内存赋值行为值拷贝地址拷贝比较方式值比较地址比较参数传递值传递地址传递。

2025-03-18 18:52:34 370

原创 JS—事件委托:3分钟掌握事件委托

事件委托就是利用冒泡机制,把子元素的事件统一委托给父元素处理的优化机制。在部分场景,能显著提升性能。

2025-03-18 18:22:50 928

原创 JS—垃圾回收机制:5分钟掌握Java和JavaScript垃圾回收机制

因为我是Android出身,当初学的Java语言,对Java的垃圾回收机制比较熟悉。并且,JavaScript V8引擎的垃圾回收机制与Java的垃圾回收机制类似。这里的士兵可以看作一个对象,入伍就是被new出来了,退伍就是被gc回收了。具体的算法实现不同。说到垃圾回收机制,就想到之前Android的java的垃圾回收机制,),这个时候,就需要大清洗了,新兵营,军管区都需要清理,给人空出位置来(我就不像说Java的垃圾回收机制那样,说的那么细了。),士兵无法晋升了,就要搞事情了,需要清理那些不干事的军官(

2025-03-14 17:39:04 984

原创 JS—闭包:3分钟从入门到放弃

闭包:能够访问外部函数作用域的函数,以及其词法环境的组合。// 被闭包捕获的变量return function() {//内部大括号count += 1;// 1// 2上面这个例子,有两个方法,一个是外部的createCounter方法,一个是内部的return 的方法。外部createCounter方法定义了一个变量count内部return的方法,使用了这个变量,让这个变量+1,然后返回。我们都知道内部可以访问外部变量,这是没有问题的。

2025-03-12 19:56:02 350

原创 JS—如何判断数据类型:全能判断方式Object.prototype.toString.call()

b. ​引用类型:优先使用 Object.prototype.toString.call()。​功能:允许对象自定义 Object.prototype.toString 返回的标签。返回结果:格式为 [object Xxx](如 [object Array])。无法区分数组、对象、日期等引用类型(均返回 “object”)。​a. 基本类型:使用 typeof(注意 null 的陷阱)。无法区分 null(返回 “object”)和对象类型。适用于检测所有数据类型(包括基本类型和引用类型)。

2025-03-11 19:25:28 664

原创 JS—内置对象:3分钟掌握Symbol

​可枚举性检查:仅遍历 enumerable: true 的属性(通过 Object.defineProperty 或直接赋值定义的属性默认可枚举)常用的内置对象,只是简单的说一下,最想说的还是Symbol,面试问道的频率高。​仅遍历字符串键:for…in ​只处理属性名为字符串的键,忽略 Symbol 键。作用于对象时,symbol的键不会隐式的转为字符串,避免命名冲突。每个symbol的值都是唯一的,即使他们的描述也相同,如下。​继承属性:从原型链继承的可枚举属性。​自身属性:对象直接定义的属性。

2025-03-10 20:01:27 481

原创 JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作

JavaScript是一种轻量级、解释型或即时编译型的编程语言,广泛用于Web开发。

2025-03-06 19:32:27 421

原创 CSS—属性继承与预处理器:2分钟掌握预处理器

他们的样式放的位置都有一定的规律,A,B他俩是平级的,a1,a2,a3是平级的,他们属于A样式所在的元素的子元素的样式。还有for循环,我没有写,我感觉我们之所以用这个,就是为了简单,方便维护。看上面这个图,我给parent的样式class设置了字体和颜色,为什么内部子view的字体和颜色也发生了改变呢?下面再说一个嵌套规则的例子:一个页面有两个子view,两个子view又分别有各自的子孙view,他们样式都不一样。回忆一下,项目里面,给父view设置的属性,子view不需要设置,也会有相同的属性的。

2025-03-05 19:44:16 1028

原创 CSS—元素水平居中:2分钟掌握常用的水平居中

【代码】CSS—元素水平居中:2分钟掌握常用的水平居中。

2025-03-04 20:00:41 369

原创 CSS—重绘与重排:10秒掌握重绘与重排

什么属性改变布局呢?比方说:宽高,position,display,border,padding,margin等等。什么情况加触发重绘?什么情况下触发重排呢?不要死记硬背,要理解。什么属性改变样式呢?比方说:颜色,背景,透明度等等。

2025-03-04 19:18:59 348

原创 CSS—px与rem:3分钟掌握rem适配原理

rem是相对于根元素(即元素)的字体大小而言的相对长度单位。它不受元素字体大小和父元素字体大小的影响,只受根元素字体大小的影响。

2025-03-04 18:57:12 1078

原创 CSS—隐藏元素:1分钟掌握与使用隐藏元素的方法

为啥写的时候会写一句是否会挂载到dom树上,因为,我们使用vue中的v-if,v-show的时候,使用v-if时,元素压根就不会挂载到dom树上,v-show会挂载到dom树上(display:none),可能刷新页面的时候会存在bug,需要重新渲染,需要使用v-if。比方说,你家房子,地上一层,地下一层地下室。把标签的透明度设置为0,也就是全透明,用户看不到,标签也就隐藏了。标签会挂载在html中,但是不会在页面上显示,会占用页面的空间。标签会挂载在html中,但是不会在页面上显示,会占用页面的空间。

2025-03-01 20:25:09 962

原创 CSS—选择器详解:5分钟动手掌握选择器

类选择器,需要申明到标签上,它的优先级高于标签选择器,小于ID选择器。属性选择器按照匹配规则分为:包含属性选择器,等于属性选择器,起始属性选择器,结尾属性选择器,子串属性选择器。一共有五类选择器:基础选择器,组合选择器,属性选择器,伪类选择器,伪元素选择器。基础选择器分为四类:元素选择器(标签选择器),类选择器,ID选择器,通配符选择器。组合选择器分为:后代选择器,子选择器,相邻兄弟选择器,普通兄弟选择器,群组选择器。伪类选择器大体可以分为三类:动态伪类选择器,结构伪类选择器,表单伪类选择器。

2025-03-01 17:33:19 1146

原创 CSS—盒模型(3分钟结合示例精通盒模型)

3分钟结合实例精通盒模型

2025-02-23 14:35:35 1054

原创 Android存储之SharedPreferences源码解析

个人博客:haichenyi.com。感谢关注1. 目录1–目录2–简介3–getSharedPreferences会不会阻塞线程,为什么?4–get操作,为什么有时候会卡顿?5–commit和apply的区别6–优化sp操作2.简介  从工作开始,Android存储数据最常见的应该就是SharePreference,但是,你真的用懂了吗?源码你看过吗?Google对sp的定位你知道吗?是不是所有数据都应该用sp来存储呢?  为什么现在面试关于sp非常常见呢?不就是一个get,p

2022-01-27 18:23:22 2768

原创 Android——MVVM之DataBinding(一)

DataBinding的view绑定流程图

2021-12-17 23:25:01 2805 1

原创 Android——MVVM之ViewModel

个人博客:haichenyi.com。感谢关注1. 目录1–目录2–前言(MVVM演变路程)3–目的4–ViewModel为什么不会内存泄漏?5–Activity屏幕旋,为什么ViewModel没有被重新创建还是使用的是之前的?6–Activity与Fragment之间数据如何共享的7–GlobeScope,viewModelScope,lifecycleScope的相关问题前言(MVVM演变路程)  以前有说过MVC,MVP,MVVM之间的区别,这里就不再说了。  MVC架构

2021-11-28 21:58:46 1427

原创 Android——深入理解handler机制

handler原理解析,非常详细

2021-11-21 11:31:34 2821

原创 JAVA—TCP,UDP

个人博客:haichenyi.com。感谢关注1. 目录1–目录2–概念3–优缺点4–三次握手5–四次握手6–通信流程2. 概念  首先,需要确定的就是他们是socket通信的两种协议。  TCP:一种面向连接,全双工可靠信道的传输层协议  UDP:一种无连接的,不可靠的传输层协议3. 优缺点类型安全有序速度对象个数开销方式TCP安全有序慢1:1大面向字节流UDP不安全无序快1:1,1:N,N:N,N:1小面向报

2021-08-09 22:28:12 287

原创 Java并发——公平锁,非公平锁,悲观锁,乐观锁,死锁

个人博客:haichenyi.com。感谢关注前言  这几个锁都可以从前面一篇线程同步器AQS里面找到影子,我先把前面一篇的加锁流程图拿过来用一用。  上面这个流程图是上一篇最开始讲的时候的一张流程图,后面写的时候,后面的流程图都没有画。这一片我们来画一下后面的流程图。公平锁,非公平锁  前面一篇讲的时候,我说过了,我们当时做的是一个公平锁。这个公平锁和非公平锁的主要区别就是在这个队列。  我们前文讲过了,线程1拿到了锁,线程2,3,4就全部放进队列中等待,那么,流程图如下:  如上图,我

2021-07-27 22:06:58 1034 2

原创 JAVA并发——线程同步器AQS

个人博客:haichenyi.com。感谢关注前言  每一项技术的提出都是为了解决某一个问题,带着问题来理解技术,使得印象你对这个技术的理解印象更加深刻。并发  举个栗子:现在有一个需求,网络请求分两批(A,B两个批次),A批次并行请求,B批次串行请求按顺序一个一个请求,有一个总超时时间,B批次每一次请求都有一个超时时间,A批次并发请求先请求,在规定时间内没有返回,再开始请求B批次,谁先返回用谁的。  这个是我们项目里面简化过后的一个逻辑,实际逻辑,比这个还要复杂。怎么实现这个功能呢?  带着这

2021-07-19 22:38:09 475

原创 Android模拟点击

个人博客:haichenyi.com。感谢关注  本篇介绍实现模拟点击的两种方式:performClick();MotionEvent事件  举个栗子:我们现在需要实现点击A按钮,触发B按钮点击事件的效果:两个按钮在布局里面随便创建就好了。  第一种方式就是:调用performClick事件 Button btn1 = findViewById(R.id.btn1); final Button btn2 = findViewById(R.id.btn2);

2021-07-07 21:23:56 1384 2

原创 SpringBoot系列—消息(RabbitMQ)(二十)

个人博客:haichenyi.com。感谢关注  大多数应用当中,可通过消息服务中间件来提升系统的异步通信和扩展解耦能力。简介消息服务中两个重要的概念  消息代理和目的地:当消息发送者发送消息之后,将由消息代理接管,消息代理保证消息发送到指定的目的地。消息发送的两种方式:队列(Queue):点对点消息通信(point-to-point)主题(Topic):发布(publish)/订...

2019-11-27 14:43:37 322

原创 SpringBoot系列—Docker(十九)

个人博客:haichenyi.com。感谢关注简介  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。  容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。  我们spring ...

2019-11-13 14:43:59 212

原创 SpringBoot系列—Run启动原理(十八)

个人博客:haichenyi.com。感谢关注  需要搞清楚几个重要的事件回调机制配置在META-INF/spring.factoriesApplicationContextInitializerSpringApplicationRunListener只需要放在ioc容器中ApplicationRunnerCommandLineRunner  新建一个空项目,就勾选...

2019-11-11 17:27:20 362

原创 SpringBoot系列—Redis(十七)

个人博客:haichenyi.com。感谢关注  前面一篇说到了spring boot自带的缓存SimpleCache,我们也聊到了他的底层实际上就是HashMap,并且这个缓存是放在内存当中的,这样弊端也是有的,比如:内存大小,当服务器关闭之后,缓存就没了等等。简介  实际开发中,一般使用缓存中间件:Redis,EHCache,MemCache等等,今天,我们就来聊聊,经常听到的——Red...

2019-11-06 16:39:47 235

ViewAnimationUtils

揭露动画5.0特效

2017-08-06

涟漪效果—Ripple

水波纹特效,涟漪效果。简单的一行设置背景即可

2017-08-05

自定义对话框

自定义对话框,传你自己的对话框布局即可

2017-08-03

防止手机获取相片空指针的工具类

防止小米手机相册获取照片空指针的工具类,直接使用

2017-08-03

热门头条的实现

ViewFlipper和MarqueeView

2017-06-01

Tablayout+viewpager+fragment

Tablayout+viewpager+fragment

2017-05-26

自定义view点击事件的接口回调

自定义view点击事件的接口回调

2017-05-01

接口的使用—对okgo进行简单的再封装

接口的使用—对okgo进行简单的再封装

2017-05-01

recyclerView实现时光轴效果

通过recyclerView实现时光轴

2017-04-30

toolbar实现沉浸式状态栏

toolbar实现沉浸式状态栏,可以动态设置是否需要沉浸式状态栏

2017-04-30

BufferTextInputLayout的简单用法

BufferTextInputLayout这个库你可以很多情况都能派上用场,例如用户资料页,用来做密码或用户名的输入长度控制再适合不过,只需简单地指定字数和字数显示的增减性。

2017-03-28

BaseRecyclerViewAdapterHelper3

加入刷新加载功能

2017-03-28

BaseRecyclerViewAdapterHelper(二)

接着前一个,新加了点击,长按事件的用法,一行代码添加动画等

2017-03-28

BaseRecyclerViewAdapterHelper

BaseRecyclerViewAdapterHelper的基本使用

2017-03-27

无限循环滚动图banner

Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!

2017-03-23

EventBus入门

EventBus的入门与进阶

2017-03-19

基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架

基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架,有基类,为了让初学者有一个建立框架复用代码的理念。

2017-03-18

RecyclerView简单用法

RecyclerView的基本使用,简单的adapter的设置。

2016-04-18

自定义抽屉—QQ特效

自定义View,实现抽屉效果。并且,实现平滑移动的动画效果。

2016-04-15

fragment实时加载

实现fragment延迟加载,ViewPager+fragment延迟加载。

2016-03-31

MyApplication.rar

关于Android的Tensorflow-Lite简单的机器学习demo,把原图片,转换成目标图片,涉及到图片的ARGB和bitmap之间的相互转换。

2019-05-24

MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp

使用MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp搭建的项目框架

2018-12-10

Dagger.Android+LiveData搭的简单的项目框架

改善了dagger2的嵌入方式,运用dagger.android大大简化了嵌入的代码,新增LiveData框架,使得MVP架构变得简洁,明了。

2018-12-04

一像素保活机制

进程保活,简单的一像素保活机制与前台保活服务双重保证。

2018-07-18

线程管理工具类

用于线程管理的工具类,双重检索获取单例对象,建造者模式设置参数,用法简单ThreadManager.getDefault().execute()

2018-05-15

MyMqttDemo

MQTT推送的demo,里面注释很清楚,如果还是不会,请移步的博客,我的博客里面的介绍也很清楚。

2018-05-11

任意背景的水波纹

可以使用任意背景的圆形水波纹进度自定义View。已经全部封装好。

2018-03-28

贝塞尔曲线水波纹

二阶贝塞尔曲线实现水波纹效果,值得一看,代码写的很清楚

2018-03-27

MyTakePhoto

开源框架TakePhoto的demo,支持图片压缩,相机,相册,多选

2018-03-06

MyProject8

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查+socket+android 6.0 动态权限+android 7.0文件安全问题

2018-03-01

MyProject6

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查+socket

2018-02-26

MyProject5

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查

2018-02-24

MyProject4

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的创建

2018-02-24

MyApplication4

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的创建

2018-02-24

MyProject3

android主流的项目框架MVP+dagger+rxjava+retrofit+okhttp,项目拷贝过去可以直接使用

2018-02-23

MyProject2

在前一个项目的基础上增加了mvp+dagger2.0,P层是通过泛型传递了

2018-02-23

MyProject1

android入门的简单的框架,application,baseactivity,basefragment懒加载等等

2018-02-23

CoordinatorLayout的常见用法4种

CoordinatorLayout的常见用法4种: 1.CoordinatorLayout+Snackbar+FAB 2.CoordinatorLayout+AppBarLayout+Toolbar 3.CoordinatorLayout+AppBarLayout+TabLayout 4.CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar+TabLayout

2017-09-06

activity跳转动画

Activity间的跳转动画—Transition。Explode 从中心移入或移出 Slide 从边缘移入或移出 Fade 调整透明度产生渐变

2017-08-06

饿了么搜索特效

高仿饿了么跳转搜索页面特效

2017-08-01

空空如也

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

TA关注的人

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