Utils:BASE64-AES-256-ECB加解密(PKCS7Padding)之微信退款通知解密

最近在做支付通道开发,需要对接微信和支付宝,银联,云闪付,各大银行等。

微信支付的开放接口对于开发者来说,相对支付宝并不那么友好,主要是有些小坑,开放文档描述的不够一致。

例如,同一个属性,返回的字段名与调起支付的字段名不一致,对开发者来说容易搞混。微信支付的 SDK 中定义为抽象的方法却使用 private 控制修饰符,导致外部不能重写。

阅读更多

Java基础:JDK8 四大核心函数式接口详解与应用

函数式接口 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口(default 修饰),这又关联了 Java 8 的另一个新特性,允许在接口中定义默认方法(default 修饰)

函数式接口是行为的抽象,是数据转换。其最直接表现是将函数(行为)作为数据传递进方式中。

函数式编程的一大好处,是可以用更精练的代码来表达常用数据处理。函数接口能够轻易地实现模板方法模式,只要将不确定的业务逻辑抽象成函数接口,然后传入不同的 Lambda 表达式即可。

阅读更多

理解 Jdk volatile应用和实现原理

Java 多线程并发编程中,常用到两个关键字:synchronizedvolatile,synchronized 是重量级锁,而 volatile 可以理解为轻量级的 synchronized ,但并不保证线程安全。

volatile 在并发环境中保证了共享变量的 可见性,即当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。volatile 变量修饰符使用适当的话,相对于 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

阅读更多

理解多线程和线程切换

多线程同时执行可以充分利用 CPU 的多核多线程功能来显著提高应用程序的性能,在多核环境中表现的更加明显(目前市面主流 CPU都是几乎都是多核多线程),即使单核 CPU 也支持多线程。

线程是操作系统调度的最小单元,CPU 通过给每个线程分配 CPU 时间片来实现多线程执行,时间片非常短(一般几十毫秒),通过不停切换线程来执行,给人的感觉是同时执行的。

阅读更多

Utils-Linux环境下获取 IP v4 地址

获取 Linux 环境下当前的 IP v4 的 IP 地址。在不修改 Linux 系统的 host 映射的情况下,InetAddress.getLocalHost().getHostAddress()获取的 IP 地址很可能是 127.0.0.1,而真正想要的是对外 IP 地址。

阅读更多

JVM虚拟机(2):JVM 内存泄漏与内存溢出及问题排查

Java 的一个很重要的优点就是提供了垃圾回收器(Garbage Collection,GC)来自动管理内存,不用向 C 语言样需要开发人员手动来释放内存。但也不等于完全不管内存的使用,系统在线上长期运行后,可能出现内存泄漏耗尽内存,系统卡死或崩溃。

若剩余内存满足不了申请的需要,或申请不到连续内存,就会存在内存溢出问题(OOM),系统就会抛出 Error,导致业务逻辑无法正常执行。

对开发人员来说应该能分析 内存泄漏内存溢出 问题的根源,彻底解决问题,而不仅仅是重启应用或扩大内存。

阅读更多

Java Executor框架详解与应用

Java 的线程即是工作单元,也是执行机制。从 JDK 5 开始,把工作单元与执行机制分离开来。工作单元包括 RunnableCallable,而执行机制由 Executor 框架提供。

Executor 提供了一种将任务提交与每个任务如何运行的机制分离的方法(包括线程使用,调度的详细信息)。

阅读更多

线程池 ThreadPoolExecutor 详解与应用

Java 应用中对宝贵的稀缺资源池化是保障系统稳定运行,优化系统响应速度的重要手段。

线程池的运用场景非常广,几乎所有需要异步或并发执行任务的程序都可以使用线程池。

阅读更多

JVM虚拟机(1):JVM 监控调优-自带命令

JDK 中自带了一些非常实用的 JVM 性能分析和故障监控的小工具。

也有一些第三方分析工具,如 Arthas。基于开发工具的 JVM 分析工具,如 IDEA 的 VisualVM 插件,Eclipse 的 MAT(Memory Analyzer Tool)。

了解 JVM 内存和性能分析工具及使用,对快速判断和定位线上问题是非常有帮助的。

阅读更多