自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (40)
  • 收藏
  • 关注

原创 分布式锁的几种实现方式

分布式锁的几种实现方式目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以

2020-06-29 15:46:26 237

转载 三种实现分布式锁的方式

三种实现分布式锁的方式 ...

2020-06-29 15:32:43 271

原创 什么是分布式锁

概述为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。为什么要使用分布式锁成员变量 A 存在 JVM1、JVM2、JVM3 三个 JVM 内存中 成员变量 A 同时都会在 JVM 分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的 不是同时发过来,三个请求分别操作三个不同 JVM 内存区域的数据,变量 A 之间不存在共享,也不具有可见性,处理的结果也是不对的 注:该成员变量 A 是

2020-06-29 15:25:50 352

转载 分布式锁【1】

前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持

2020-06-29 15:16:38 272

转载 SpringBoot布道系列 | 目录汇总

SpringBoot 源码精读 | 图文教程专题阅读:《SpringBoot 布道系列 》源码下载:springboot-socks — Hey Man,Don't forget to Star or Fork . —快速入门SpringBoot 快速入门+3分钟打造RestAPISpringBoot 快速入门+快速掌握工程结构SpringBoot 使用Spring Initializr快速构建工程 SpringBoot 在IDEA中实现热部署(实用版)外部配置Spr

2020-06-23 13:03:49 303

转载 Spring Security - 获取当前登录用户的详细信息

Spring Security - 获取当前登录用户的详细信息在Spring框架里面,可以通过以下几种方式获取到当前登录用户的详细信息:1. 在Bean中获取用户信息Authentication authentication = Secu...

2020-06-19 17:37:45 796

转载 HandlerMethodArgumentResolver用于统一获取当前登录用户

HandlerMethodArgumentResolver用于统一获取当前登录用户 ...

2020-06-19 17:29:14 380

原创 if语句和switch语句的区别

1.选择结构if语句格式及其使用 A:if语句的格式:  if(比较表达式1) {     语句体1;  }else if(比较表达式2) {     语句体2;  }else if(比较表达式3) {     语句体3;  }     ...  else {    语句体n+1;  }B:执行流程:  首先计算比较表达式1看其返回值是true还是false,  如果是true,就执行语句体1,if语句结束。  如果是false,接着计算比较表

2020-06-18 14:31:27 1012

转载 Java开发牛人十大必备网站

摘要: 以下是我收集的 Java 开发牛人必备的网站。这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题、面试问题等。质量是衡量一个网站的关键因素,我个人认为这些网站质 量都很好。接下来,我会跟大家分享我是如何使用这些网站学习和娱乐的。或许你会认为有些网站适合任何水平的开发者,但是我认为:对于 Java 开发牛人来说,网站的好坏取决于如何使用它们。英文原文: Top 10 Websites for Advanced Level Java Developers以下是我收集的 Java 开发牛

2020-06-18 10:42:39 347

原创 Java开发者必备十大学习网站(实用)

作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站。以下本人收集的Java开发者必备的网站,这些网站可以提供信息,以及一些很棒的讲座,还能解答一般问题、面试问题等,或许你会认为有些网站适合任何水平的开发者,但是我认为:对于Java开发大牛来说,网站的好坏取决于如何使用它们。 Stack overflow Stack overflow.com可能是编程界中最流行的网站了,是一个与程...

2020-06-18 10:37:45 376

原创 java8——排序

对数据进行排序是平常经常会用到的操作之一,使用Jav8排序可以减少你在排序这方面的代码量,优化你的代码。测试用例代码定义个实体类User,拥有姓名name,年龄age,积分credits三个属性,定义一个包含User的集合,用于排序,下面是代码/* 这里偷个懒,用lombok注解生成实体类getset等一些基本方法 */@Data@AllArgsConstructor@NoArgsConstructorpublic class User { private String na.

2020-06-16 17:57:39 485 1

原创 SpringBoot集成JWT实现token验证

原文:https://www.jianshu.com/p/e88d3f8151dbJWT官网:https://jwt.io/JWT(Java版)的github地址:https://github.com/jwtk/jjwt什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可..

2020-06-15 14:15:45 1258

原创 Oracle创建表 如果存在先删除再创建

BEGIN EXECUTE immediate 'drop table 你的表名';EXCEPTIONWHEN OTHERS THEN NULL;END;/CREATE TABLE 你的表名 ( account CHAR(50) NULL, startDate CHAR(50) NULL, startTime CHAR(50) NULL, endDate CHAR(50) NULL, endTime CHAR(50) NULL, ...

2020-06-11 15:47:56 1903

转载 认识JWT

1. JSON Web Token是什么JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。2. 什么时候你应该用JSON Web Tokens下列场景中使用JSON Web Token是很有用的:Authorization(授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务...

2020-06-10 17:53:13 279

原创 css--悬浮图像

<!DOCTYPE html><html lang="en"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="referrer" content="origin"> <link type=...

2020-06-10 17:50:29 470

转载 五种常用的Web安全认证方式

五种常用的Web安全认证方式 <h1 style="margin-left:0cm;"> 1. Http Basic Auth</h1>这是一种最古老的安全认证方式,这种方式就是简单的访问API的时候,带上访问的username和...

2020-06-10 17:29:52 1845

转载 Web开发几种常用的认证机制

HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP Basic AuthOAuthOAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一

2020-06-10 17:22:19 1710

原创 @Modifying注解,否则报错ORA-01002: 提取违反顺序

在此记录下jpa的知识点:1.使用删除、修改操作时需要在方法上多增加一个@Modifying注解,否则报错ORA-01002: 提取违反顺序2.使用本地sql时,在@Query注解中需要增加nativeQuery = true3.查询中包含in 参数,可以直接传一个List(Long) ids参数。此参数在本地测试了下,如果是传入一个String数组,没有查到数据;把参数修改为List(String)后,可以查到数据。(代码在代码块2中)4.假如表结构的主键是联合主键,那么生成的jpa实体类会有两个

2020-06-10 11:20:33 891

转载 Java Map的再深入研究(百万级数据测试)

在一篇“启示4:用HashMap提高内存查询速度”的文章中介绍了利用Map提高查询速度的方法,对于查找字符串的value时,此方法大大提高了程序的运行速度。但是你可能想不到的另一项Map的用处:对于key值落于一定范围内的数据更新操作。有意思的是,经过测试,在Amd(双核)+win7(后面称为‘环境1’) 与Intel(双核)+winxp(后面称为‘环境2’) 这2中环境中的测试结果截然不同。欢迎有兴趣的同仁加入测试,并给出解释过程。并发送到coorz@126.com。在这次测试中,主要关注ke...

2020-06-04 18:38:29 1207

原创 SpringBoot导入Druid连接池,dbType not support —

在Springboot项目中使用Druid:maven导入druid依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>druid的使用需要做很多的数据库连接...

2020-06-04 16:59:26 5712

原创 JAVA字符串格式化——String.format()的使用

String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。重载// 使用当前本地区域对象(Locale.getDefault()),制定字符串格式和参数生成格式化的字符串String String.format(String fmt, Object... args);// 自定义本地区域对象,制定字符串格式和参数生成格式化的字符串String String.form

2020-06-03 15:39:30 565

原创 循环依赖 in its raw version as part of a circular reference

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderEvaluateStatisticsServiceImpl': Unsatisfied dependency expressed through field 'orderInfoService'; nested exception is org.springframework.bean

2020-06-03 14:47:58 823

小程序左右滑动-答题demo.zip

小程序左右滑动-答题

2021-05-14

微信小程序-实现电子围栏-半径-经纬度-是否在围栏内-画圆等操作-master.zip

微信小程序-实现电子围栏-半径-经纬度-是否在围栏内-画圆等

2021-05-07

实战抢单秒杀springBoot-demo

实战抢单秒杀

2021-04-30

2020视频加速器202001013

直接控制网页视频的播放进度,可以将广告的部分快进播放。它提供了一个播放控制进度条,可以自己拖动到不同的倍数播放,范围从0.3倍到3.0倍;支持热键设置:

2020-10-13

NASA-worldwind.zip

NASA官方APP是美宇航局官方出品的Android应用程序,内容包括最新地外文明探索信息,航空航天图片与视频,国际空间站和地球轨道卫星跟踪,卫星发射信息和倒计时时钟,美国航天局的任务信息,国际空间站(ISS)的Visible通行证,此外会直播NASA TV,发布NASA官方消息,同时也可与FACEBOOK、Twitter客户端连接,与好友分享最新科技发现。

2020-07-31

广东财经大学在线考试-运行版.zip

财经大学在线考试系统--个人版

2020-06-04

高德获取行政级别api.zip

介绍: 行政区域查询是一类简单的HTTP接口,根据用户输入的搜索条件可以帮助用户快速的查找特定的行政区域信息。 准备: key(“Web服务API”密钥) 请求地址:  https://restapi.amap.com/v3/config/district 请求参数:  key(“Web服务API”密钥) keywords——安徽 subdistrict——2(可选值:0、1、2、3;     0:不返回下级行政区,1:返回下一级行政区,2:返回下两级行政区,3:返回下三级行政区。) extensions——base(可选值:base、all;     base:不返回行政区边界坐标点;all:只返回当前查询district的边界值,不返回子节点的边界值。)

2020-03-18

2020年谷歌地图hepler以及app.zip

软件介绍 Ghelper 主要是用来提高用户上网效率,方便外贸、学习、工作的浏览器扩展工具.目前支持所有基于Chrome内核的浏览器.Firefox版本正在路上.. 最新消息 今日起 2.0版本发布前,暂停免费试用. 常见问题与解决方法.新老用户必读. 本插件不是VPN, 只是一款加速器,采用透明代理方式,严禁利用本插件访问境外非法政治色情网站!

2020-01-21

Java-spring-redis脑图+springboot学习汇总.zip

Java-spring-springboot-redis-doctor 思维导图,英文是The Mind Map,又叫心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。 思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像、颜色等建立记忆链接。思维导图充分运用左右脑的机能,利用记忆、阅读、思维的规律,协助人们在科学与艺术、逻辑与想象之间平衡发展,从而开启人类大脑的无限潜能。思维导图因此具有人类思维的强大功能。 思维导图是一种将思维形象化的方法。我们知道放射性思考是人类大脑的自然思考方式,每一种进入大脑的资料,不论是感觉、记忆或是想法——包括文字、数字、符码、香气、食物、线条、颜色、意象、节奏、音符等,都可以成为一个思考中心,并由此中心向外发散出成千上万的关节点,每一个关节点代表与中心主题的一个连结,而每一个连结又可以成为另一个中心主题,再向外发散出成千上万的关节点,呈现出放射性立体结构,而这些关节的连结可以视为您的记忆,就如同大脑中的神经元一样互相连接,也就是您的个人数据库。 思维导图又称脑图、心智地图、脑力激荡图、灵感触发图、概念地图、树状图、树枝图或思维地图,是一种图像式思维的工具以及一种利用图像式思考辅助工具。思维导图是使用一个中央关键词或想法引起形象化的构造和分类的想法;它用一个中央关键词或想法以辐射线形连接所有的代表字词、想法、任务或其它关联项目的图解方式。

2019-12-30

Java开发文档pdf集合.zip

在我们使用帮助文档之前我们首先确定我们要查什么类或方法? 在这里举一个例子,加入我们要查Math这个类 首先打开帮助文档(帮助文档是分平台的,比如说你用的是JavaSE,那你就不能用JavaEE的API来查JavaSE中的类和方法,这个要搞清楚,这两者是有区别的) 首先我们在索引框中打上Math(注意大小写,这里大小写是有区别的) java-2.png 当我们输入完成之后,下面蓝色的部分代表已经选中回车就行。 这时候会出现与类或方法相关的各种知识如方法摘要

2019-12-25

mallplus多租户商城vip版本.zip

1- 安装lombok插件 ## mysql - 下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads - 下载后按提示进行安装 - 导入document/sql下的mall.sql文件 ## redis - 下载地址:https://github.com/MicrosoftArchive/redis/releases - 下载后按提示进行安装 ## OSS - 该项目文件上传采用OSS,需要自行注册OSS账号并配置 - 首先将mall-admin\src\main\resources\application.properties文件中以aliyun.oss.开头的配置改为你自己的配置 - OSS上传文件需要配置跨域资源共享(CORS)规则,参考文档:https://help.aliyun.com/document_detail/31928.html - 上传方式采用服务端签名后直传的形式,参考文档:https://help.aliyun.com/document_detail/31926.html ## mall-admin - 启动项目:直接运行com.macro.mall.MallAdminApplication的main方法即可 - 接口文档地址:http://localhost:8080/swagger-ui.html ## mall-search - 启动项目:直接运行com.macro.mall.search.MallSearchApplication的main方法即可 - 接口文档地址:http://localhost:8081/swagger-ui.html - 使用前需要先调用接口导入数据;http://localhost:8081/esProduct/importAll - 如出现无法启动的问题,可以先删除elasticsearch里面的数据再启动 ## mall-portal - 启动mall-portal项目:直接运行com.macro.mall.portal.MallPortalApplication的main方法即可 - 接口文档地址:http://localhost:8085/swagger-ui.html 1. 本地安装开发环境中的所有工具并启动 2. 克隆源代码到本地,使用IDEA或Eclipse打开,并完成编译; 3. 安装 redis mysql 4. 在mysql中新建mall数据库,导入document/sql下的mall.sql文件; 5. 启动mall-admin项目:直接运行com.macro.mall.MallAdminApplication的main方法即可, 接口文档地址:http://localhost:8080/swagger-ui.html;  6. 启动mall-portal项目:直接运行com.macro.mall.portal.MallPortalApplication的main方法即可, 接口文档地址:http://localhost:8085/swagger-ui.html;  7. 克隆mall-admin-web项目,并导入到IDEA中并完成编译传送门,需要安装node环境,然后到项目下; 8. 运行命令:npm install 然后执行 npm run dev,访问地址:http://localhost:8090 即可打开后台管理系统页面; 9. 克隆Mall-Vue-master项目,并导入到IDEA中并完成编译传送门; 10. 运行命令:npm run dev,访问地址: 即可打开pc商城页面; 11. 克隆vue-jd-master项目,并导入到IDEA中并完成编译传送门; 12. 运行命令:npm run dev,访问地址: 即可打开h5商城页面; 13. 下载小程序 用微信开发工具打卡就可以访问   https://gitee.com/zscat-platform/mall   功能预览   http://www.yjlive.cn:8090/#/home   https://gitee.com/zscat-platform/mall/wikis/pages 645

2019-12-25

6Java性能优化常用工具.zip

JAVA性能优化之操作系统优化 以及常用工具命令 操作系统,调优的手段和參数可能有所不同,比方,在主流Unix系统中。共享内存段。信号量,共享内存最大值(shmmax)。共享内存最小值(shmmin)等都是能够进行优化的系统资源.此外,如最大文件句柄数,虚拟内存大小,磁盘的块大小等參数都可能对软件的性能产生影响.配置虚拟内存界面

2019-12-24

5Java性能优化五.zip

四。数据库优化 对绝大部分应用系统而言。数据库是不可缺少的一部分。JAVA程序能够使用JDBC的方式连接数据库。对数据库的调优能够分为三个部分: 在应用层对SQL语句进行优化; 对数据库进行优化。 对数据库软件进行优化。 在应用层优化数据库訪问。涉及大量的编程技巧。比方。当使用JDBC进行查询的时候,对于大量拥有相同结构的SQL查询,能够使用PerparedStatement取代Statement。以提高数据库的查询效率。在使用Select语句中,显示指定要查询的列名 ,避免使用* 在对数据库优化时,主要目的是建立一个具有良好表结构的数据库。 比方,为了提高多表级联查询的效率,能够合理地使用冗余字段;对于大表,能够使用行的水平分割或者相似Oracle分区的技术;为了提高数据的查询的效率,能够建立有效水平分割或者相似Oracle分区表的技术;为了提高数据库查询效率。在select语句中。显示指定要查询的列名,避免使用*。 在对数据库进行优化时。主要目的是建立一个具有良好表结构的数据库。比方,为了提高多表级联查询效率,能够合理地使用冗余字段。对于大表。能够使用行数据来水平分割,为了提高数据库的查询效率,能够建立有效且事宜的索引

2019-12-24

4Java性能优化四.zip

三,JVM优化 因为JAVA软件总是执行在JVM虚拟机之上。对JVM虚拟机进行优化也能一定程度上的提升JAVA程序的性能。JVM通常能够在软件开发后期进行,如在开发完毕或者是软件开发的某一里程碑阶段。 作为JAVA软件的执行平台。JVM的各项參数将会直接影响JAVA程序的性能。 比方,JVM的堆大小,垃圾回收策略等等。 要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。

2019-12-24

3Java性能优化三.zip

三,JVM优化 因为JAVA软件总是执行在JVM虚拟机之上。对JVM虚拟机进行优化也能一定程度上的提升JAVA程序的性能。JVM通常能够在软件开发后期进行,如在开发完毕或者是软件开发的某一里程碑阶段。 作为JAVA软件的执行平台。JVM的各项參数将会直接影响JAVA程序的性能。 比方,JVM的堆大小,垃圾回收策略等等。 要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。

2019-12-24

2Java性能优化二.zip

二,JAVA性能优化之代码优化 代码调优是在软件开发中,或者是软件开发完毕后,软件维护过程中进行的程序代码的改进和优化.代码优化涉及诸多编码技巧,须要开发者熟悉相关的语言API ,并在适合的场景中正确的使用相关API或类库.同一时候,对算法,数据结构的灵活使用,也是代码优化的一个重要内容. 尽管代码优化时从微观上对性能进行调整,可是一个”好”的实现和一个”坏”的实现对系统的影响也是非常大的.比方,相同作为List的实现,LinkedList和ArrayList在随机訪问上的性能却差了好几个量级;比方相同是文件读写的实现,使用Stream方式和使用JAVA NIO的方式,其系能可能又会是还有一个数量级. 因此,尽管与设计优化相比,笔者将代码优化成为在微观层面上的优化,但它却是对系统性能产生最直接影响的优化方法.

2019-12-24

1Java性能优化一.zip

一,JAVA性能优化之设计优化 设计优化处于性能优化手段的上层。它往往须要在软件开发之前进行。在软件开发之前,系统架构师应该就评估系统可能存在的各种潜在问题和技术难点,并给出合理的设计方案,因为软件设计和系统架构对软件总体设计质量有决定性的影响。所以,设计调优对系统的性能影响也是最大的,假设说,代码优化。JVM优化都是对系统微观层次的“量”的优化,那设计优化就是对系统”质”的优化. 设计优化的一大显著特征是:它能够规避某一个组件的性能问题,而是改良组件的实现;比方:组件A通过循环监控不断的检測时间E是否发生,其检測行为必定会占用部分系统资源,因此,开发者必须检測频率和资源消耗上取得平衡,假设检測频率太低,尽管降低了资源消耗,可是系统实时反应性就会降低,假设进行代码层的调优,就须要优化检測方法的实现及要求得一个最为恰当的检測频率.对于这个问题我们就能够用设计模式中的观察者模式 ,当事件E发生的时刻,由事件E通知组件A,从而触发组件A的行为.这样的设计从根本上攻克了存在性能隐患的循环监控,从根本上攻克了这一问题. 进行设计优化时,设计人员和必须熟悉经常使用的设计方法,设计模式,以及主要的性能组件和经常使用的优化思想,并将其有机地集成在软件系统中. 注意:一个良好的系统设计能够规避非常多潜在在的性能问题.因此,尽可能多花些时间在系统设计上,是创建高性能程序的关键

2019-12-24

图像70周年代码.zip

图像<div class='footer'> <button id='change' onclick='changeHat()' style='display: none;'>换个样式</button> <button id='exportBtn' onclick='exportFunc()'>生成头像</button> </div> <div style='display: none'> <img id='img' src='' alt=''/> <img class='hide' id='hat0' src='./img/hat0.png'/> <img class='hide' id='hat1' src='./img/hat1.png'/> <img class='hide' id='hat2' src='./img/hat2.png'/> <img class='hide' id='hat3' src='./img/hat3.png'/> <img class='hide' id='hat4' src='./img/hat0.png'/> <img class='hide' id='hat5' src='./img/hat1.png'/> <img class='hide' id='hat6' src='./img/hat2.png'/> <img class='hide' id='hat7' src='./img/hat3.png'/> </div> <script src="./js/fabric.js"></script> <script> var cvs = document.getElementById("cvs"); var ctx = cvs.getContext("2d"); var exportImage = document.getElementById("export"); var img = document.getElementById("img"); var hat = "hat6"; var canvasFabric; var hatInstance; var screenWidth = window.screen.width < 500 ? window.screen.width : 300; function viewer() { var file = document.getElementById("upload").files[0]; console.log(file); var reader = new FileReader; if (file) { reader.readAsDataURL(file); reader.onload = function(e) { img.src = reader.result; img.onload = function() { img2Cvs(img) } } } else { img.src = "" } } function img2Cvs(img) { cvs.width = img.width; cvs.height = img.height; cvs.style.display = "block"; canvasFabric = new fabric.Canvas("cvs", { width: screenWidth, height: screenWidth, backgroundImage: new fabric.Image(img, { scaleX: screenWidth / img.width, scaleY: screenWidth / img.height }) }); changeHat(); document.getElementById("uploadContainer").style.display = "none"; document.getElementById("uploadText").style.display = "none"; document.getElementById("upload").style.display = "none"; document.getElementById("change").style.display = "block"; document.getElementById("exportBtn").style.display = "block"; document.getElementById("tip").style.opacity = 1 } function changeHat() { document.getElementById(hat).style.display = "none"; var hats = document.getElementsByClassName("hide"); hat = "hat" + (+hat.replace("hat", "") + 1) % hats.length; var hatImage = document.getElementById(hat); hatImage.style.display = "block"; if (hatInstance) { canvasFabric.remove(hatInstance) } hatInstance = new fabric.Image(hatImage, { top: 40, left: screenWidth / 3, scaleX: 100 / hatImage.width, scaleY: 100 / hatImage.height, cornerColor: "#0b3a42", cornerStrokeColor: "#fff", cornerStyle: "circle", transparentCorners: false, rotatingPointOffset: 30 }); hatInstance.setControlVisible("bl", false); hatInstance.setControlVisible("tr", false); hatInstance.setControlVisible("tl", false); hatInstance.setControlVisible("mr", false); hatInstance.setControlVisible("mt", false); canvasFabric.add(hatInstance) } function exportFunc() { document.getElementsByClassName("canvas-container")[0].style.display = "none"; document.getElementById("exportBtn").style.display = "none"; document.getElementById("tip").innerHTML = "长按图片保存或分享"; document.getElementById("change").style.display = "none"; cvs.style.display = "none"; exportImage.style.display = "block"; exportImage.src = canvasFabric.toDataURL({ width: screenWidth, height: screenWidth }) } </script>

2019-12-23

spring-boot2.0全新教程实例20例.zip

spring-boot2.0全新教程实例20例.zip - [spring-boot-helloWorld](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-helloWorld):Spring Boot 的 hello World 版本 - [spring-boot-web](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-web):Spring Boot Web 开发综合示例 - [spring-boot-redis](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-redis):Spring Boot 集成 Redis 示例 - [spring-boot-jpa](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-jpa):Spring Boot 使用 Jpa 各种示例 - [spring-boot-mybaits-annotation](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis/spring-boot-mybatis-annotation):注解版本 - [spring-boot-mybaits-xml](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis/spring-boot-mybatis-xml):Xml 配置版本 - [spring-boot-mybatis-xml-mulidatasource](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis/spring-boot-mybatis-xml-mulidatasource):Spring Boot + Mybatis (Xml 版) 多数据源最简解决方案 - [spring-boot-mybatis-annotation-mulidatasource](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mybatis/spring-boot-mybatis-annotation-mulidatasource):Spring Boot + Mybatis(注解版)多数据源最简解决方案 - [spring-boot-thymeleaf](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-thymeleaf):Spring Boot 使用 Thymeleaf 详细示例 - [spring-boot-jpa-thymeleaf-curd](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-jpa-thymeleaf-curd):Spring Boot + Jpa + Thymeleaf 增删改查示例 - [spring-boot-rabbitmq](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-rabbitmq):Spring Boot 和 Rabbitmq 各种消息应用案例 - [spring-boot-scheduler](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-scheduler):Spring Boot 和定时任务案例 - [spring-boot-mail](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mail):Spring Boot 和邮件服务 - [spring-boot-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mongodb/spring-boot-mongodb):Spring Boot 和 Mongodb 的使用 - [spring-boot-multi-mongodb](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-mongodb/spring-boot-multi-mongodb):Spring Boot 和 Mongodb 多数据源的使用 - [spring-boot-package-war](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-package-war): Spring Boot 打包成 War 包示例 - [spring-boot-shiro](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-shiro):Spring Boot 整合 Shiro Rbac 示例 - [spring-boot-file-upload](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-file-upload):使用 Spring Boot 上传文件示例 - [spring-boot-fastDFS](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-fastDFS):Spring Boot 整合 FastDFS 示例 - [spring-boot-actuator](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-actuator):Spring Boot Actuator 使用示例 - [spring-boot-admin-simple](https://github.com/ityouknow/spring-boot-examples/tree/master/spring-boot-admin-simple):Spring Boot Admin 的使用示例

2019-12-23

loli.exe妹子图集下载

电脑操作系统--cmd--输入相关命令即可在软件生成目录下; 自动生成photo文件夹 输入Y--在输入延时秒数:即可完成下载 每个图集下载完是否需要延时 Y/N:Y 请输入延时秒数:3

2019-12-20

pdf免费转word自主开发小助手

pdf免费转word自主开发小助手

2024-04-29

文字转语音自主开发小助手

文字转语音自主开发小助手

2024-04-29

自主开发的对联生成器-正式版

自主开发的对联生成器-正式版

2024-04-29

一寸二寸的证件照图片背景替换器

一寸二寸的证件照图片背景替换器

2024-04-29

云货架上线apks-备份

云货架上线apks-备份

2024-04-26

个性签名-定制版随机生成个人指定的签名

个性签名-定制版随机生成个人指定的签名

2024-04-03

电脑调起摄像头监控-个人版定制化

电脑调起摄像头监控-个人版定制化

2024-04-03

django部署新冠19监管系统源码

django-新冠19监管系统源码

2024-03-11

前端-视频裁判大屏demo代码

前端-视频裁判大屏demo代码

2023-06-21

网上在线音乐播放-备份

网上在线音乐播放

2023-06-21

司机端app,物流快递信息查询器

司机端app,物流快递信息查询器

2023-02-09

交互式答题-hbuilder-question_1.0.0.zip

交互式答题-hbuilder-question_1.0.0.zip-学习代码

2021-09-30

【经典小程序工具类】wechat-applet-toolkit-master.zip

【经典小程序工具类】wechat-applet-toolkit-master.zip

2021-08-23

学而思考试代码-uexam-master.zip

学而思考试代码-uexam-master.zip

2021-08-23

music-app-mui-master.zip

mu-音乐demo

2021-08-10

Mui商城模板(更新一部分nvue页和subNvue导航栏).zip

mui学习资源

2021-08-10

MUi答题模版 2019.12.17 更示例.zip

mui学习demo

2021-08-10

微信小程序-报名预约4个小程序demo

微信小程序--报名预约4个小程序demo

2021-08-04

云开发--学习demo备份.zip

微信小程序云端开发-学习和测试demo

2021-07-26

hbuilder商城模板(更新一部分nvue页和subNvue导航栏).zip

商城模板(更新一部分nvue页和subNvue导航栏).zip

2021-05-25

空空如也

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

TA关注的人

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