- 博客(56)
- 收藏
- 关注
原创 单元测试之@Mock与@InjectMocks(一文搞懂)
InjectMocks:要测试的类,使用@Mock修饰的对象,就是我们测试哪个类,就用它修饰对应的变量,会整合使用@Mock修饰的对象。@Mock:需要模拟的类,我们需要模拟哪些类,就用它修饰哪些类的变量,常用于第三方服务service。
2023-08-30 17:33:38
3649
原创 服务端验证google支付通知(一文搞定)
准备工作1.创建服务帐号打开 Service accounts page如果出现提示,请选择一个项目,或创建一个新项目选中项目后例如(Google Play Android Developer ) 创建服务帐户在“ 服务帐户详细信息”下 ,键入服务帐户的名称,ID和描述,然后单击“ 创建”可选:在“ 服务帐户权限”下 ,选择要授予服务帐户的IAM角色,然后单击继续可选:在“ 授予用户对此服务帐户的访问权限”下 ,添加允许使用和管理该服务帐户的用户或组。单击管理密钥,创建密钥 ,然后单击创建
2021-09-03 11:15:46
4305
1
原创 java项目日志添加traceId唯一标识
利用MDC机制MDC(Mapped Diagnostic Context,映射诊断上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的机制。MDC 可以看成是一个与当前线程绑定的Map,类似于ThreadLocal可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容(只有子线程创建的时候初始化一次并不适用于线程池)。当需要记录日志时,只需要从 MDC 中获取就行。代码实现1.自定义日志拦截器类@S
2021-05-28 17:52:57
4238
原创 google订阅开发
前言本文主要说的是服务端关于开发google订阅的相关工作,结合了google api的调用通过服务账号和配置google实时开发者通知,来接收google订阅通知一.准备工作 创建开发者账号下服务账号官方推荐服务端到服务端调用使用服务账号进行,步骤如下1.在 Google Play 管理中心转到 API 访问权限页面。2.点击服务帐号下的创建服务帐号。3.按照页面上的说明创建您的服务帐号。4.在 Google Developers Console 中创建服务帐号后,请点击完成。API 访问权
2021-04-06 16:30:00
3307
3
原创 apple iOS订阅开发-服务端
前言开发苹果订阅,客户端的改动不大,主要服务端要处理苹果服务器发送的通知,判断通知类型,验证收据基本步骤1.苹果后台创建订阅商品,创建共享密钥password2.苹果后台配置通知自己服务器地址url3.解析苹果通知,开发自己的逻辑(主要编程部分)1.苹果后台创建订阅商品苹果后台创建商品列表的上方,就会有创建共享密钥的按钮,只有拥有该权限的人才能看到,重点来了,创建了共享密钥,在验证苹果收据的时候所有的商品都要增加参数,把收据和共享密钥都要发到苹果服务器进行验证,共享密钥作用于所有商品。进
2021-04-02 16:59:49
5796
原创 java springboot集成aws sdk sqs
概述本文介绍java springboot项目集成aws-sdk2.0版本即AWS SDK for Java 2.x,与1.x比较在编程方面有很大区别,请注意区分步骤1.创建aws账号 Create an AWS account2.创建IAM用户,申请key_id和access_key3.配置credentials4.Java代码集成本文重点介绍步骤3和4,1和2可到官网进行申请3.配置credentials创建credentials文件,aws-sdk会自动读取文件,根据操作系统
2021-03-12 17:43:02
2675
1
原创 获取google退款订单(最新攻略)
前言好消息,google退款订单终于返回orderId了,之前只有purchaseToken,很难做到关联,现在已经很容易做到关联了,但一定要用最新的api依赖包啊!!!一.准备工作 创建开发者账号下服务账号官方推荐服务端到服务端调用使用服务账号进行,步骤如下1.在 Google Play 管理中心转到 API 访问权限页面。2.点击服务帐号下的创建服务帐号。3.按照页面上的说明创建您的服务帐号。4.在 Google Developers Console 中创建服务帐号后,请点击完成。API
2021-01-28 19:16:17
5930
19
原创 appStore苹果退款通知
现在服务器可以接受苹果退款通知了!!!!1.从苹果开发者后台配置调用地址url,必须是https的,符合 App Transport Security (ATS)要求,如TLS1.2协议 详情见文档 苹果官方文档2.解析参数,苹果的请求方式为post,发送json数据所以我们解析这个responseBody就可以了,详细见官方文档3.响应,苹果不关心返回参数,只关心返回响应码 200 4xx 5xx,如果200代表成功,4xx 5xx苹果会重试重点来了!!!实战解析例子苹果发送的数据是一个
2021-01-22 18:02:32
4668
10
原创 Java使用SSLContext请求https链接
Java使用SSLContext请求https链接先了解几个关键类SSLContext 安全套接字协议的实现核心类SSLSocket 扩展自Socket用户客户端SSLSocketFactory 工厂类SSLServerSocket 扩展自ServerSocket用于服务端SSLServerSocketFactory SSLServerSocket的工厂KeyStore 密钥证书KeyManager 密钥管理器TrustManager 信任管理器X590TrustedManager
2021-01-19 14:43:23
2855
2
原创 springboot自定义拦截器(一文搞定)
1.创建拦截器类继承HandlerInterceptorAdapter,需要哪个实现哪个,看代码@Configurationpublic class SmsSignInterceptor extends HandlerInterceptorAdapter { //处理器执行前调用,返回true才能继续往下执行 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Objec
2020-10-23 18:32:53
593
3
原创 数据结构之二叉树(扫盲)
本文主要介绍的是一些常用二叉树的概念扫盲解析,只做简要分析,后续会持续更新树的基本概念 树是一种数据结构,树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。本文主要介绍的是二叉树,二叉树(binary)是一种特殊的树,它是每个节点最多有两个子树的树结构,通常子树被称作是 "左子树" 和 "右...
2020-03-23 16:51:55
228
原创 mybatis原理核心流程
本文说的并不是mybatis的基础,而是对mybatis源码原理梳理出来的核心流程关键点1.加载配置文件生成XMLConfigBuilder对象,调用parse()方法生成Configuration对象2.Configuration是mybatis核心对象包含MappedStatement及配置信息3.Configuration调用build方法生成SqlSessionFactory对...
2019-11-21 17:52:59
338
原创 Java解析生成excel文件(精简)
maven依赖: <!-- 阿里maven依赖 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> &l...
2019-08-26 15:54:03
461
转载 docker快速入门
什么是dockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc...
2019-06-10 17:23:26
194
原创 springboot整合logback日志(易懂)
首先引入依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency&g...
2019-06-05 16:00:24
3576
3
原创 zookeeper入门(新手必看)
zookeeper是什么?ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。抽象数据结...
2019-04-26 15:57:16
752
原创 SpringCloud配置Eureka集群
1.首先说明Eureka集群就是每个Eureka实例相互指向交互创建三个eureka实例,除了配置文件外,三个项目代码都是一致的,比如创建eureka7001,eureka7002,eureka7003项目代码单机时怎么写就怎么写,这里不再说明,只说明配置文件怎么配置:7001的配置如下:server: port: 7001eureka: instance: ...
2019-04-15 16:52:58
348
原创 Java的线程池(一看就懂)
java线程池最大作用就是管理线程,控制线程数,实现高并发首先最基本的创建线程池方式ThreadPoolExecutor pool = new ThreadPoolExecutor(1,2,60, TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>());参数1:核心线程数参数2:最大线程数,当任务队列满的时候,是否创建...
2019-03-27 16:25:40
225
原创 List集合元素排序
我们常用到要对List集合中的元素进行排序,而且要按照元素中的某个列来进行排序,直接上代码public class ListSortUtil { /**降序**/ public final static String DESC = "desc"; /** * 升序 **/ public final static String ASC = "...
2019-03-21 16:31:19
392
原创 redis分布式锁
首先说下有哪几种分布式锁,重点介绍redis分布式锁1.Memcached分布式锁利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程得到了锁。2.Redis分布式锁和Memcached的方式类似,利用Redis的setnx命令。此命令同样是原子性操作,只有在key不存在的情况下,才能set成功。(setnx命令并不完善,后...
2019-01-12 11:11:15
166
原创 mysql插入表情emoji
mysql的utf8编码的一个字符最多存储3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情,但是utf8的超集utf8mb4一个字符最多能存储4字节,所以能支持emoji表情的存储。下面介绍关于如何修改mysql数据库的编码格式变为utf8mb4的具体方法:修改mysql的配置文件Winows中的配置文件为my.iniLinux系统中MySQL的配置文件为m...
2018-12-28 16:19:23
420
1
原创 SQL插入优化
1.插入更新语句insert into user(id,name,age) values(1,'tom',20) on duplicate key update name='tom',age=20insert into user(id,name,age) values(1,'tom',20),(2,'terry',21)...(n,x,y) on duplicate key update n...
2018-12-27 16:16:23
724
转载 Freemarker的基本语法及使用
freemarker的基本语法及使用一、freemarker模板文件(*.ftl)的基本组成部分 1. 文本:直接输出的内容部分 2. 注释:不会输出的内容,格式为<#-- 注释内容 --> 3. 取值(插值):代替输出数据模型的部分,格式为${数据模型}或#{数据模型} 4. ftl指令:Freemarker指令,...
2018-12-13 11:50:19
783
原创 Java发送http请求(HttpClient)
public class HttpClientUtil { public static String doGet(String url, Map<String, String> param, String token) { // 创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefaul...
2018-11-27 17:05:36
1932
原创 Java给图片加水印
我们利用的还是谷歌提供的这个非常强大的工具类Thumbnailatorgithub上面的地址是:https://github.com/coobird/thumbnailatormaven的地址<dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailato...
2018-11-24 15:33:34
304
原创 Java实现压缩图片
一个google使用的开源的工具类Thumbnailator 超级好用,提供很多对图片操作的方法github上面的地址是:https://github.com/coobird/thumbnailatormaven的地址<dependency> <groupId>net.coobird</groupId> <artifactId>...
2018-11-23 15:32:41
5118
1
原创 mybatis中 # 和 $的区别
一、具体分析动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不同的表现。#{ }:解析为一个 JDBC 预编译语句(prepared st...
2018-11-23 11:55:37
138
原创 webServcie基本用法
一、Web Service基本概念Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。XML:(Extensible Markup Language)扩展型可标记语言。面...
2018-11-22 18:55:42
423
原创 svn和git的区别联系
当我们开发一些项目的时候,版本控制工具是必不可少的,当下最流行的就是GIT和SVN了,GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。所以,这篇文章的主要目的就是通过介绍GIT能做什么、它和SVN在深层次上究竟有什么不同来帮助你认识它。1)GIT是分布式的,SVN不是:...
2018-11-14 18:51:21
567
原创 Java实现邮件发送(很简单)
Java实现邮件发送,需要指定邮件服务器,和自己的邮箱账号和密码,谨记 自己的邮箱必须得到到客户端授权码,尤其是新开的邮箱,具体看代码,包括附件发送public class EmailUtils { private static String from = ""; //邮箱账号 private static String password = ""; //邮箱密码或者授权...
2018-11-01 17:36:13
1031
原创 Java最简单的实现压缩文件
都是用Java最基本的api实现的,废话不多直接上代码public class ZipUtils { //供外部类调用的方法 参数1源文件路径 参数2 目标文件路径 public static void toZip(String srcPath, String targetPath) { File srcFile = new File(srcPath); ...
2018-09-12 17:37:36
1187
1
原创 Java中XML的解析方式
XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。(不仅仅适用于java) XML的解析方式分为四种:1、DOM解析;2、SAX解析;3、JDOM解析;4、DOM4J解析。其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的...
2018-09-04 18:39:01
179
原创 Java中零碎知识点
1.数据类型 这条较简单,无非就是Java中的基本类型和对象类型的掌握。可以再了解一些JDK如何自动转换方面的知识,包括装箱拆箱等,还要注意避免装箱之后的类型相等的判断 主要知识点: 基本类型: int, long, float, double, boolean ······ 对应的对象类型: Integer 等类型到基本类型的转换, 装箱和拆箱Object类型: equals, ...
2018-08-04 17:00:41
297
原创 Java中的volatile
volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invari...
2018-08-03 10:55:08
197
原创 Java垃圾回收算法
GC垃圾收集器,需要做的三件事情:1.哪些内存需要回收?2.什么时候回收?3.如何回收?垃圾回收算法都是基于这三点,现在的垃圾回收基本都采用分代收集算法,所有java堆可以细分为:新生代和老年代。下面对各种算法做简单介绍1.引用计数法(Reference Counting Collector) 给对象添加一个引用计数器,当有地方引用它时,计数器加1,;当引用失效时(对象...
2018-08-02 11:26:44
230
原创 Java的类加载过程
我们从微观的角度深入了解一下类加载的过程,这样我们才能从宏观角度理解java程序。使用java编译器可以把java代码编译为存储字节码的Class文件,使用其他语言的编译器一样可以把程序代码翻译成Class文件,java虚拟机不关心Class的来源是何种语言。 在Class文件中描述的各种信息,最终都需要加载到虚拟机中才能运行和使用。那么虚拟机是如何加载这些Class文件的呢?J...
2018-08-01 18:51:46
189
原创 深入理解双亲委托机制
JVM设计者把类加载阶段中的“通过'类全名'来获取定义此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。1.类与类加载器对于任何一个类,都需要由加载它的类加载器和这个类来确立其在JVM中的唯一性。也就是说,两个类来源于同一个Class文件,并且被同一个类加载器加载,这两个类才相等。2.双亲委派模...
2018-07-31 16:59:47
12326
原创 String,StringBuffer,StringBuilder的区别联系
String,StringBuffer,StringBuilder的知识点,现在整理一下。他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String2.String <(StringBuffer,StringBuilder)的原因 Strin...
2018-07-17 16:21:28
229
原创 设计模式-行为型模式
设计模式-行为型模式13、策略模式(strategy)策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可无,属于辅助类),提供辅助函数,关系图如下:图中ICalculator提供同意的方法,策略模式的决定权在用户,系统本身提供不...
2018-07-16 18:22:41
185
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人