随笔 - 2228  文章 - 4  评论 - 371  阅读 - 1109万
04 2016 档案
Redis优化经验
摘要:使用经验: 千万记住keys和smembers生产环境不要用, 有个网友的测试: 存取100万数据,keys100万数据,smembers 集合存放100万数据 一起执行,显示qps1757,cpu 使用11.0%,cpu马上明显飙高了。 内存管理优化 Redis Hash是value内部为一个Ha 阅读全文
posted @ 2016-04-29 19:08 duanxz 阅读(28184) 评论(1) 推荐(0) 编辑
servlet/filter/listener/interceptor区别与联系
摘要:一、概念: 1、servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。最早支持 Servlet 技术的是 JavaSoft 的 Java Web Server。此后,一些其它的基于 Jav 阅读全文
posted @ 2016-04-29 14:48 duanxz 阅读(529) 评论(0) 推荐(0) 编辑
无状态服务(stateless service)
摘要:一、定义 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息 有状态服务(stateful service)则相反,它会在自身保存一些数据,先后 阅读全文
posted @ 2016-04-29 12:37 duanxz 阅读(918) 评论(0) 推荐(1) 编辑
http请求中java中的302和sendRedirect的区别
摘要:一、HTTP Get请求URL最大长度 各浏览器HTTP Get请求URL最大长度并不相同,几类常用浏览器最大长度及超过最大长度后提交情况如下: IE6.0 :url最大长度2083个字符,超过最大长度后无法提交。IE7.0 :url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2 阅读全文
posted @ 2016-04-29 10:45 duanxz 阅读(4740) 评论(0) 推荐(0) 编辑
深入ThreadLocal之三(ThreadLocal可能引起的内存泄露)
摘要:threadlocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好的做法是将调用threadlocal的remove方法. 在threadlocal的生命周期中,都存 阅读全文
posted @ 2016-04-29 09:27 duanxz 阅读(1441) 评论(1) 推荐(1) 编辑
深入ThreadLocal之一
摘要:线程封闭机制强调局部的概念,就是在写代码的时候,尽量使用局部变量代替全局变量(这种叫做栈封闭),如果一定要使用全局变量,而又想让多个线程之间在访问共享变量的时候互不影响,那就使用ThreadLocal<T>。ThreadLocal<T>提供了一种方式,可以让线程在操作共享变量时,复制该共享变量的一个 阅读全文
posted @ 2016-04-29 09:20 duanxz 阅读(591) 评论(0) 推荐(0) 编辑
Connection reset原因分析和解决方案
摘要:在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会抛该错误: 从日志中可以看到是Socket套接字在read数据时抛出了该错误。 导致“C 阅读全文
posted @ 2016-04-29 09:20 duanxz 阅读(2637) 评论(0) 推荐(0) 编辑
ThreadLocal的坑--ThreadLocal跨线程传递问题
摘要:1、父子线程间的传递问题 ThreadLocal的子类InheritableThreadLocal其实已经帮我们处理好了,通过这个组件可以实现父子线程之间的数据传递,在子线程中能够父线程中的ThreadLocal本地变量。 我们发现InheritableThreadLocal中createMap,以 阅读全文
posted @ 2016-04-28 23:38 duanxz 阅读(5183) 评论(1) 推荐(0) 编辑
struts2请求过程源码分析
摘要:Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 我 阅读全文
posted @ 2016-04-28 09:09 duanxz 阅读(3045) 评论(0) 推荐(1) 编辑
java调优
摘要:hystrix配置 配置下: "hystrix.threadpool.default.keepAliveTimeMinutes": 1 "hystrix.threadpool.default.allowMaximumSizeToDivergeFromCoreSize": true "hystrix. 阅读全文
posted @ 2016-04-27 22:59 duanxz 阅读(2122) 评论(0) 推荐(1) 编辑
websocket之四:WebSocket 的鉴权授权方案
摘要:引子 WebSocket 是个好东西,为我们提供了便捷且实时的通讯能力。然而,对于 WebSocket 客户端的鉴权,协议的 RFC 是这么说的: This protocol doesn’t prescribe any particular way that servers canauthentic 阅读全文
posted @ 2016-04-27 22:31 duanxz 阅读(25078) 评论(0) 推荐(0) 编辑
高可用性及容灾的几个衡量指标
摘要:网站可用性 所谓网站可用性(availability)也即网站正常运行时间的百分比,业界用 N 个9 来量化可用性, 最常说的就是类似 “4个9(也就是99.99%)” 的可用性。 容灾恢复能力的关键指标 RPO:(Recovery Point Obejective,恢复点目标)是指业务系统所允许的 阅读全文
posted @ 2016-04-27 22:30 duanxz 阅读(5081) 评论(0) 推荐(0) 编辑
Struts2返回JSON对象的方法总结
摘要:如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好的支持。但是,在开发工作中,对功能的升级是基于既定架构是很常见的情况。本人碰到需要用开发基于Stru 阅读全文
posted @ 2016-04-27 19:26 duanxz 阅读(2025) 评论(0) 推荐(0) 编辑
java websocket @ServerEndpoint注解说明
摘要:http://www.blogjava.net/qbna350816/archive/2016/07/24/431302.html https://segmentfault.com/q/1010000004955225 https://www.cnblogs.com/interdrp/p/40910 阅读全文
posted @ 2016-04-27 12:34 duanxz 阅读(5219) 评论(0) 推荐(1) 编辑
ssh 连接ubuntu的虚拟机问题
摘要:我在winxp的虚拟机上装了一个ubuntu9.04的系统,winxp的ip为10.118.62.157,ubuntu的ip为192.168.116.1 两个ip互相ping都是正常的,但是,我在winxp下通过ssh连接虚拟机的ubuntu,连接失败, 难道是防火墙的原因?我试着ufw disab 阅读全文
posted @ 2016-04-26 18:07 duanxz 阅读(455) 评论(0) 推荐(0) 编辑
MySQL运行原理与基础架构
摘要:1.MySQL 基础 MySQL 是一个开放源代码的关系数据库管理系统。原开发者为瑞典的 MySQL AB 公司,最早是在 2001 年 MySQL3.23 进入到管理员的视野并在之后获得广泛的应用。 2008 年 MySQL 公司被 Sun 公司收购并发布了首个收购之后的版本 MySQL5.1 , 阅读全文
posted @ 2016-04-26 11:09 duanxz 阅读(5472) 评论(0) 推荐(0) 编辑
通过 Spring Session 实现新一代的 Session 管理
摘要:长期以来,session 管理就是企业级 Java 中的一部分,以致于我们潜意识就认为它是已经解决的问题,在最近的记忆中,我们没有看到这个领域有很大的革新。 但是,现代的趋势是微服务以及可水平扩展的原生云应用(cloud native application),它们会挑战过去 20 多年来我们设计和 阅读全文
posted @ 2016-04-24 22:10 duanxz 阅读(8003) 评论(0) 推荐(0) 编辑
Spring计时器StopWatch使用
摘要:我们可以利用已有的工具类中的秒表,常见的秒表工具类有org.springframework.util.StopWatch、org.apache.commons.lang.time.StopWatch以及谷歌提供的guava中的秒表。 下面用Spring的StopWatch演示下耗时统计及打印的功能: 阅读全文
posted @ 2016-04-24 12:48 duanxz 阅读(1445) 评论(0) 推荐(0) 编辑
Spring之3:ListableBeanFactory
摘要:ListableBeanFactory在BeanFactory的位置见《Spring源码阅览——BeanFactory体系结构》 ListableBeanFactory:同样扩展BeanFactory使其支持迭代Ioc容器持有的Bean对象。注意如果ListableBeanFactory同时也是Hi 阅读全文
posted @ 2016-04-24 11:47 duanxz 阅读(2194) 评论(0) 推荐(1) 编辑
Spring之22:DefaultListableBeanFactory
摘要:1. DefaultListableBeanFactory的作用: 默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definition对象,是一个成熟的bean factroy。 最典型的应用是:在访问bean前,先注册所有的def 阅读全文
posted @ 2016-04-24 11:43 duanxz 阅读(2135) 评论(0) 推荐(1) 编辑
Ubuntu各个版本的介绍
摘要:Ubuntu的版本比较多,而且基于ubuntu的衍生版也很多,让人容易混淆,也让很多人不知道自己适合哪一个,在这里简单比较一下ubuntu的各个版本的特点: 介绍ubuntu版本之前先说一说与ubuntu有关的一些知识: Ubuntu的版本号命名规则: ubuntu的版本命名规则非常简单易记: 前两 阅读全文
posted @ 2016-04-24 11:16 duanxz 阅读(3851) 评论(0) 推荐(0) 编辑
Ubuntu14.10 更新源,现在很多源已经停用了建议使用ubuntu15以上
摘要:http://cdimage.ubuntu.com/ubuntukylin/releases/15.10/release/ 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就行),选择最快的源可以节省大批下载时间。 首先备份源列表(for sure): 而后用g 阅读全文
posted @ 2016-04-24 10:38 duanxz 阅读(817) 评论(0) 推荐(0) 编辑
Spring之23:AbstractBeanFactory,Bean的加载
摘要:《spring源码之:循环依赖》 AbstractBeanFactory的作用:别名管理,单例创建与注册,工厂方法FactoryBean支持. 由图我们直接的看出,AbstractBeanFactory继承了FatoryBeanRegistrySupport的同时,也实现了ConfigurableB 阅读全文
posted @ 2016-04-23 15:57 duanxz 阅读(2090) 评论(0) 推荐(0) 编辑
StringIO 模块用于在内存缓冲区中读写数据
摘要:模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中。此类中的大部分函数都与对文件的操作方法类似。例: python 2 okok hello 中国中国 通过例子,我们看到了StringIO的行为,基本与file一致。StringIO提供了一个方法,可以方便的获取其中的数据:Str 阅读全文
posted @ 2016-04-23 15:42 duanxz 阅读(807) 评论(0) 推荐(0) 编辑
python异常处理
摘要:示例1: 结果: Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员。所有异常都从基类Exception继承,而且都在exceptions模块中定义。Python自动将所有异常名称放在内建命名空间中 阅读全文
posted @ 2016-04-23 15:32 duanxz 阅读(479) 评论(0) 推荐(0) 编辑
MQTT broker入门示例
摘要:一、windows下的简单示例 1.1、mosquitto:MQTT协议使用mosquitto服务器在windows下使用libmosquitto订阅发布 1.去官网下载mosquitto(我使用Binary Installation--windows--mosquitto-1.6.12-insta 阅读全文
posted @ 2016-04-23 15:19 duanxz 阅读(4325) 评论(0) 推荐(0) 编辑
MQTT Broker选型
摘要:一、MQTT Broker的需求 1、基本需求 1)支持 mqtt3.1 / mqtt3.1.1协议(可选 mqtt5.0) 3.1和3.1.1是最常见的协议版本,几乎目前生产的IoT设备都支持,所以Broker也必须支持。至于5.0版本,目前各大Broker都在努力支持,不过还需要一些时间才会普及 阅读全文
posted @ 2016-04-23 15:11 duanxz 阅读(1792) 评论(0) 推荐(0) 编辑
MQTT协议QoS2 准确一次送达的实现
摘要:MQTT QoS 熟悉MQTT协议的同学们一定知道,MQTT的publish有三个QoS,0,1,2。他们分别是: QoS0,最多一次送达。也就是发出去就fire掉,没有后面的事情了。 QoS1,至少一次送达。发出去之后必须等待ack,没有ack,就要找时机重发 QoS2,准确一次送达。消息id将拥 阅读全文
posted @ 2016-04-23 13:59 duanxz 阅读(2323) 评论(0) 推荐(0) 编辑
Python3.x:定时任务实现方式
摘要:Python3.x下实现定时任务的方式有很多种方式。 一、循环sleep: 最简单的方式,在循环里放入要执行的任务,然后sleep一段时间再执行。缺点是,不容易控制,而且sleep是个阻塞函数 二、threading的Timer: 例如:5秒后执行 例如:间隔5秒执行一次 例如:两种方式组合用,5秒 阅读全文
posted @ 2016-04-23 12:08 duanxz 阅读(413) 评论(0) 推荐(0) 编辑
一款监控网络状态的好工具- Smokeping
摘要:最近工作中需要监测某个分公司到IDC机房的网络情况,到网络上找了不少软件,发现一款叫smokeping的开源软件还不错,它是rrdtool的作者制作的,在图形显示方面很漂亮,可以用来很好的检测网络状态和稳定性。 下面介绍一下软件的安装配置方法: 一.安装软件 1.使用yum 命令安装所需的工具 yu 阅读全文
posted @ 2016-04-23 09:13 duanxz 阅读(2973) 评论(0) 推荐(0) 编辑
Redis中7种集合类型应用场景&redis常用命令
摘要:Redis常用数据类型 Redis最为常用的数据类型主要有以下五种: String Hash List Set Sorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内部使用一个redisObject对象来表示 阅读全文
posted @ 2016-04-22 23:30 duanxz 阅读(2390) 评论(0) 推荐(0) 编辑
Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)
摘要:Ubuntu下Redis安装两种安装方式: 1、apt-get方式 步骤: 以root权限登录,切换到/usr目录下. 以root权限登录,切换到/usr目录下. 接下来输入命令,apt-get install redis-server,如图: 3.安装完成后,Redis服务器会自动启动,我们检查R 阅读全文
posted @ 2016-04-22 22:31 duanxz 阅读(4969) 评论(0) 推荐(0) 编辑
Python语言快速入门
摘要:Python的主提示符(>>>):是解释器告诉你它正在等待你输入的下一个语句 Python的次提示符(...):告诉你解释器正在等待你输入当前语句的其他部分 【简介】 Python(蟒蛇)是一种动态解释型的编程语言。Python可以在Windows、UNIX、MAC等多种操作系统上使用,也可以在Ja 阅读全文
posted @ 2016-04-21 21:08 duanxz 阅读(1804) 评论(1) 推荐(1) 编辑
python环境搭建,开发环境
摘要:一、从链接http://www.python.org/downloads/ 下载安装包,注意32位和64位安装包区别。 https://www.python.org/downloads/windows/如下图, 可见,64位中还有3个版本: web-based installer 是需要通过联网完成 阅读全文
posted @ 2016-04-20 23:11 duanxz 阅读(8015) 评论(0) 推荐(0) 编辑
MQTT协议简记
摘要:简介: MQTT协议(Message Queuing Telemetry Transport),翻译过来就是“消息队列遥测传输” ,是IBM公司于1999年提出的,现在最新版本是3.1.1。MQTT是一个基于TCP的发布订阅协议,设计的初始目的是为了极有限的内存设备和网络带宽很低的网络不可靠的通信, 阅读全文
posted @ 2016-04-20 22:34 duanxz 阅读(4822) 评论(0) 推荐(0) 编辑
apt-get常用命令
摘要:一,什么的是apt-get 高级包装工具(英语:Advanced Packaging Tools,简称:APT)是Debian及其衍生发行版(如:ubuntu)的软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软 件包,因此简化了 Unix系统上管理软件的过程,apt-get命令一 阅读全文
posted @ 2016-04-20 11:07 duanxz 阅读(1749) 评论(0) 推荐(0) 编辑
linux操作系统的分类及解释
摘要:什么是Linux? 也许很多人会不屑的说,Linux不就是个操作系统么。错!Linux不是一个操作系统,严格来讲,Linux只是一个操作系统中的内核。内核是什么?内核建立了计算机软件与硬件之间通讯的平台,内核提供系统服务,比如文件管理、虚拟内存、设备I/O等。 既然Linux只是一个内核。那么我们通 阅读全文
posted @ 2016-04-19 22:14 duanxz 阅读(1472) 评论(0) 推荐(0) 编辑
安装RabbitMQ
摘要:windows x64下安装RabbitMQ 下载 http://www.erlang.org/downloads 获取otp_win64_19.3.exe安装包 安装 1.安装Erlang 双击otp_win64_19.3.exe,安装完成之后设置环境变量:控制面板>>系统>>高级设置>>环境变量 阅读全文
posted @ 2016-04-19 16:51 duanxz 阅读(2174) 评论(0) 推荐(0) 编辑
Linux有问必答:怎样解决“XXX is not in the sudoers file”错误
摘要:问题:我想在我的Linux系统上使用sudo来运行一些特权命令,然而当我试图这么做时,我却得到了"[我的用户名] is not in the sudoers file. This incident will be reported."的错误信息。我该怎么处理这种sudo错误呢? sudo是一个允许特 阅读全文
posted @ 2016-04-19 16:07 duanxz 阅读(400) 评论(0) 推荐(0) 编辑
lua基本用法--待完善
摘要:在线调试:https://c.runoob.com/compile/66 https://www.runoob.com/lua/lua-basic-syntax.html 阅读全文
posted @ 2016-04-19 15:50 duanxz 阅读(822) 评论(0) 推荐(0) 编辑
Lua学习笔记
摘要:一、Redis使用Lua脚本实例 1.1-示例1 1.用vim编辑器创建01.lua脚本文件 2.编写脚本内容调用redis redis.call("set","age","30") local age = redis.call("get","age") return age 3.调用redis客户 阅读全文
posted @ 2016-04-19 14:49 duanxz 阅读(567) 评论(0) 推荐(0) 编辑
ubuntu14.04设置静态ip
摘要:网络是内网环境,为了服务器能稳定访问,需要配置成静态ip。最近在服务器上装了虚拟机Ubuntu系统,配置静态ip的步骤简单记录如下,以备后用: 1.首先保证虚拟机的网络设置是“Bridged Adapter”模式,即桥接模式 1. 找到文件并作如下修改: sudo vim /etc/network/ 阅读全文
posted @ 2016-04-19 13:36 duanxz 阅读(3704) 评论(0) 推荐(0) 编辑
ubuntu 关机,重启,注销命令
摘要:1关机命令 shutdown 好像ubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令。 1)shutdown –help 可以查看shutdown命令如何使用,当然也可以使用man shutdown命令。 2) shu 阅读全文
posted @ 2016-04-19 13:36 duanxz 阅读(35746) 评论(1) 推荐(0) 编辑
Sentinel 实战-集群限流
该文被密码保护。
posted @ 2016-04-18 15:21 duanxz 阅读(131) 评论(0) 推荐(0) 编辑
Web性能压力测试工具之ApacheBench(ab)详解
摘要:PS:网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网站访问压力测试。 ApacheBench命令原理: ab命令会创建很多的并发访问线程,模拟多个访问者 阅读全文
posted @ 2016-04-18 15:19 duanxz 阅读(998) 评论(0) 推荐(0) 编辑
微服务监控之三:Prometheus + Grafana Spring Boot 应用可视化监控
摘要:一、Springboot增加Prometheus 1、Spring Boot 应用暴露监控指标,添加如下依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuat 阅读全文
posted @ 2016-04-18 15:09 duanxz 阅读(3175) 评论(0) 推荐(0) 编辑
Sentinel-dashboard
摘要:Dashboard控制台 sentinel-dashboard是一个单独的应用,通过spring-boot进行启动,主要提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能。 我们只需要对应用进行简单的配置,就可以使用这些功能。 1 启动控制台 1.1 下载代码 阅读全文
posted @ 2016-04-18 14:54 duanxz 阅读(3590) 评论(0) 推荐(0) 编辑
Java8之默认方法和静态接口方法
摘要:前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式。现在继续Java8新语言特性的学习,今天,我们要学习的是默认方法和静态接口方法。 这一Java8的新语言特性,在Android N中也得到了支持。至于如何在Android开发中配置Java8的开发环境,请查看上 阅读全文
posted @ 2016-04-18 13:50 duanxz 阅读(1406) 评论(0) 推荐(0) 编辑
蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别
摘要:在有关微服务、DevOps、Cloud-native、系统部署等的讨论中,蓝绿部署、A/B 测试、灰度发布、滚动发布、红黑部署等概念经常被提到,它们有什么区别呢?通过搜索相关资料,做一个简单的辨析,如下: 一、蓝绿部署(Blue/Green Deployment) 过去的 10 年里,很多公司都在使 阅读全文
posted @ 2016-04-18 12:27 duanxz 阅读(6108) 评论(0) 推荐(2) 编辑
JAVA8 十大新特性详解
摘要:本教程将Java8的新特新逐一列出,并将使用简单的代码示例来指导你如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,之后你将会学到最新的API上的改进,比如流,函数式接口,Map以及全新的日期API “Java is still not dead—and people 阅读全文
posted @ 2016-04-15 23:05 duanxz 阅读(4102) 评论(1) 推荐(0) 编辑
Java链式方法 连贯接口(fluent interface)
摘要:有两种情况可运用链式方法: 第一种 除最后一个方法外,每个方法都返回一个对象 object2 = object1.method1(); object3 = object2.method2(); object3.method3(); 以上三行代码等价于如下链式方法 object1.method1(). 阅读全文
posted @ 2016-04-12 23:02 duanxz 阅读(1520) 评论(0) 推荐(0) 编辑
分布式计算概念一览
摘要:一、通信中间件 1、RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议,它将“本地过程调用”的概念运用到分布式应用程序中。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为 阅读全文
posted @ 2016-04-12 11:15 duanxz 阅读(1152) 评论(0) 推荐(0) 编辑
Gradle学习
摘要:Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言。近期,Gradle获得了极大的关注,这也是我决定去研究Gradle的原因。 这篇文章是Gradle教程的第一篇,我们有两个目标: 1. 帮助我们学会安装Gradle。 2. 介绍一些基本 阅读全文
posted @ 2016-04-11 09:10 duanxz 阅读(750) 评论(0) 推荐(0) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示