Java
文章平均质量分 88
carl-zhao
I never grew up, but i never stop growing.
展开
-
Spring 自定义 bean 的生命周期
要与容器对bean生命周期的管理交互,您可以实现 Spring ``InitializingBean`` 和 ``DisposableBean`` 接口。容器对前者调用 ``afterPropertiesSet()``,对后者调用 ``destroy()``,以允许bean在初始化和销毁 bean 时执行某些操作。......原创 2022-07-28 23:01:08 · 395 阅读 · 0 评论 -
Java Google Sheet API
完成本页其余部分描述的步骤,创建一个简单的Java命令行应用程序,向 Google Sheets API发出请求。原创 2022-04-20 17:17:12 · 2235 阅读 · 6 评论 -
Mybatis Plus 生成数据库访问模板代码
关于为什么使用 Mybatis Plus 以及使用 Spring Boot 如何集成 Mybatis Plus 这两个问题。如果不太清楚的小伙伴可以查看之前分享的博客 Spring Boot 集成 Mybatis Plus 简化数据库操作。今天主要和大家分享的是通过 Mybatis Plus generator 生成数据库访问的模板代码。注意:这里针对的主要是高版本的 Mybatis Plus。也就是 >= 3.5.01、数据库表这里我们简单的创建一个商品订单表,为了方便演示我们就只是列举了原创 2022-03-17 21:15:39 · 1606 阅读 · 0 评论 -
使用 fastjson 解决字段串对象空值返回空数组问题
我们系统当中地理信息使用高德的 城市编码表。项目的新需求就是输入地址能够返回找到对应的城市,其实高德开放 API 提供了一个 地理/逆地理编码 接口是满足这个需求的。但是它我们使用这个接口的时候遇到了一个问题。就是一个属性如果有值就会返回字符串,如果没有值就会返回空数据。比如:{ "status": "1", "info": "OK", "infocode": "10000", "count": "1", "geocodes": [ {原创 2021-08-08 10:39:26 · 2314 阅读 · 1 评论 -
Java 图形处理框架 Thumbnailator
Thumbnailator 是一个用于 Java 的缩略图生成库。支持的处理操作:图片缩放,区域裁剪,水印,旋转,保持比例。1、为什么使用 Thumbnailator用Java制作高质量的缩略图是一项相当困难的任务。学习如何使用图像I/O API, Java 2D API,图像处理,图像缩放技术,…但是不要害怕!Thumbnailator会为你照顾所有这些事情!Thumbnailator是一个单独的JAR文件,不依赖于外部库,这使得开发和部署变得简单和容易。它也可以在Maven中央存储库中获得,以.原创 2021-04-23 07:32:42 · 1990 阅读 · 1 评论 -
Java 8 Distinct 去重及自定义元素去重过滤规则
在这一页我们将提供Java 8 Stream distinct() 的例子。distinct() 返回由该流中不同元素组成的流。distinct() 是流接口的方法。distinct() 使用 hashCode() 和 equals() 方法获取不同的元素。因此,我们的类必须实现 hashCode() 和 equals() 方法。如果 distinct() 在有序的流上工作,那么对于重复的元素,在相遇顺序中首先出现的元素将被保留,这样对 distinct 元素的选择是稳定的。在无序流的情况下,不同元素的选原创 2021-02-07 22:59:40 · 9614 阅读 · 1 评论 -
Netty 源码分析之 Java NIO
Java NIO(新的IO)是Java(来自Java 1.4)的可选IO API,意味着可选标准Java IO和Java连网API。Java NIO提供了一种不同于标准IO API的IO工作方式。为什么会出现 Java NIO 呢?下面我们来比较一下 Java IO 也 JDK 1.4 之后出现的 Java NIO 有什么区别.1、IO 与 NIO下面就是 IO 与 NIO 的对比:IONIO面向流面向缓冲阻塞 IO非阻塞 IO无选择器1.1 面向流与面向缓原创 2020-09-09 21:36:04 · 301 阅读 · 1 评论 -
Quartz 源码分析
``Quartz`` 是运用最广的任务调度框架,它最核心的组成部分是 ``Scheduler``、``Trigger``、``JobDetail``。在 ``Scheduler`` 初始化的时候会启动线程``QuartzSchedulerThread``,当``Scheduler`` 启动的时候,也就是调用 ``Scheduler#start`` 方法,就会从 ``JobStore`` 里拿到最近需要触发的``Trigger``,以线程等待的方式等到 `` trigger`` 触发时间点,之后就是执行原创 2020-08-15 11:28:09 · 1348 阅读 · 0 评论 -
Apache Tomcat 会话机制 Cookie 与 Session
HTTP 协议是一种状态的协议,WEB 服务器本身不能识别出哪些请求是同一个浏览器发出的,浏览器的每一个请求都是完全独立的。即使 HTTP 1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭。怎么才能实现网上商店中的购物车呢:某个用户从网站的登陆页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求程序所得到的用户信息。作为 Web 服务器,必须能够采用一种机制来唯一地标识一个标识,同时记录该用户的状态。会话和会话状态Web 应用中的会话是指一个客户端原创 2020-07-19 12:15:41 · 1529 阅读 · 0 评论 -
Java ThreadPoolExecutor 使用及原理探究
Java 中的线程池是并发框架当中运行场景最多的并发工具类,基本上需要异步或者并发执行的任务都可以使用线程池。相比开发人员直接使用手动创建线程,使用线程池可以有以下几个好处。降低资源消耗。通过重复利用已经创建的线程降低线程创建和销毁造成的消极。提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行提高线程的可管理性。在 Java 中线程和操作系统里面的线程是一一对就的。所以线程是稀缺,如果无限地创建线程,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但原创 2020-07-12 00:04:52 · 648 阅读 · 0 评论 -
优雅的进行线上数据订正
在系统开发上线过程中,难免会遇到在测试过程中没有覆盖到的场景,而且还有可能生成脏数据。这个时候就需要对错误数据进行一一修改了。如果遇到需要修改的数据量比较少,那么可以进行手动的编辑 SQL。如果数据量过大的时候,进行手动编辑 SQL 不仅耗时还很容易出现错误。做为一个 coder 我们可以使用程序来解决这个问题。原创 2020-07-08 22:46:43 · 1147 阅读 · 0 评论 -
系统日志中敏感字段掩码处理
做为金融业务开发,很多接口都需要使用到用户信息,而在用户信息当中难免会有一些敏感字段,比如:用户姓名,银行卡号等等。所以在用户敏感信息保存以及日志打印的时候就不能把这些敏感信息明文的保存起来。对于数据库保存用户敏感信息的时候,一般系统中会有一个加/解密的系统。当需要保存用户敏感信息的时候会把用户信息进行加密,然后保存到数据库当中。原创 2020-05-28 08:24:00 · 4334 阅读 · 3 评论 -
Apache Tomcat 初始化
在上一篇文章中我们分析了 Tomcat 中的整体架构。下面我们就来分析一下 Tomcat 源码实现。在 Tomcat 中有两个比较核心的过程:Tomcat 启动:初始化 Tomcat 中的核心组件处理请求:接收客户端请求,处理并响应给客户端这篇文章主要分析一下 Tomcat 容器的启动过程。1、 Tomcat 核心概念要明白 Tomcat 启动流程,首先我们先来回顾一下 Tomcat...原创 2020-04-18 23:10:03 · 469 阅读 · 0 评论 -
Apache Tomcat 架构演进
Tomcat 作为一款知名的轻量级应用服务器,它的架构设计可以值得我们借鉴。因为 Tomcat 作为开源以久的 Web 服务器,它的架构还是挺复杂的。这篇博客主要是介绍 Tomcat 的总体架构,通过由浅到深的方案介绍 Tomcat 的架构演进。原创 2020-04-18 12:22:15 · 601 阅读 · 0 评论 -
Apache Tomcat Shell 启动文件分析
当我们进行 web 企业开发完成的时候,正式项目都是在 Linux 上进行发布。首先会把开发好的项目打包成 xxx.war 文件,然后把这个 war 包放在 tomcat 中的 webapps 目录中。最后通过 ${TOMCAT_HOME}/bin/startup.sh 文件启动项目,接着就可以在浏览器中访问开发好的项目了。下面我们就来简单分析一下 startup.sh 文件。startup....原创 2020-04-16 22:14:08 · 957 阅读 · 0 评论 -
Apache Tomcat 源码分析环境搭建
Apache Tomcat®软件是Java Servlet、JavaServer页面、Java 语言表达式和 Java WebSocket 技术的开源实现。Java Servlet、JavaServer页面、Java 表达式语言和 Java WebSocket 规范都是在 Java 社区进程下开发的。Apache Tomcat 软件是在开放和参与的环境中开发的,并在 Apache 许可版本 2 ...原创 2020-04-15 22:12:39 · 1262 阅读 · 2 评论 -
google guice hello world
Guice是一个轻量级的Java依赖注入(DI)框架。使用依赖注入有很多优点,但是手动操作常常会导致编写大量样板代码。Guice是一个框架,用于编写使用依赖注入的代码,而不需要编写大量样板代码,有关动机的更多细节,请参阅本页面。简单地说,Guice减少了对工厂的需求和Java代码中new的使用。把Guice的@Inject看作是新的。在某些情况下,您仍然需要编写工厂,但是您的代码不会直接依赖于...原创 2020-04-14 23:06:34 · 478 阅读 · 0 评论 -
基于 Java Agent 实现零倾入监控
本文主要由如何保证服务的可用性也就是系统监控问题逐步引出 Java 语言的高级特性,也就是 Java Agent 的使用。系统代码可以零倾入就能够引入监控服务。本文的主要讨论的有以下几个议题:为什么系统需要监控Java 语言如何实现监控Java Agent 简单示例开源项目使用 Java Agent1、为什么系统需要监控随着分布式服务框架的流行,特别是微服务等设计理念在系统中应用,...原创 2020-03-16 00:25:14 · 4579 阅读 · 0 评论 -
Java JDK 动态代理
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。转载 2016-08-14 18:18:03 · 4380 阅读 · 0 评论 -
logback xml example
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。翻译 2016-12-12 19:12:58 · 1674 阅读 · 0 评论 -
Jdk8 Optional 的正确姿势
我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了.转载 2017-09-28 19:05:39 · 1280 阅读 · 0 评论 -
Java AES 加密算法
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。转载 2017-11-09 21:35:26 · 807 阅读 · 0 评论 -
Java 规范 SPI
我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了实现在模块装配的时候能不在程序里动态指明,这就需要一种服务发现机制。java spi就是提供这样的一个机制:为...原创 2016-09-08 21:02:50 · 3202 阅读 · 3 评论 -
JDK Aop 应用实例
公司需要新开发一个项目,功能在这里不需要Care,主要是基于我们之前的会员网关以及资金网关。这两个服务都是支持 GET/POST 的 https 请求的调用。因为我们这个项目是第三方支付,所以安全方面比较关注。请求方式使用的是 https 方式,然后数据在传输过程过程中需要把请求的数据进行加签,对于敏感数据(比如手机,实名,银行卡等)还需要加密。其中请求参数包括基本参数与业务参数,而对于响应参数的...原创 2018-03-08 20:37:03 · 794 阅读 · 0 评论 -
Java NIO 概述
在 java 1.4 以前, Java 对 I/O 的支持并不完善,开发人员在开发高性能 I/O 程序的时候,会面临一些巨大的 挑战和困难,主要问题如下:没有数据缓冲区, I/O 性能存在问题;没有 C 或者 C++ 中的 Channel 概念,只有输入和输出流同步阻塞式 I/O 通信(BIO),通常会导致通信线程被长时间阻塞支持的字符集有限,硬件可移植性不好。所以在 JDK ...原创 2018-04-25 13:00:55 · 417 阅读 · 0 评论 -
dwr 自定义转换器
最近开发一个后台应用,之前一般都是使用 AJAX 来进行数据交互。但是项目中使用的是 dwr 来进行前后端交互。本文不是讲如何使用 dwr,而是想分享一下使用 dwr 遇到的问题以及解决问题的思路。1、什么是 dwrDWR 是一个开源的类库,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码(javascript)使用运行在 WEB服务器上的 JAVA 函数,就像它...原创 2018-05-04 23:27:36 · 727 阅读 · 0 评论 -
Java字节码框架 -- Javassist
Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态”AOP”框架。原创 2017-09-02 02:26:45 · 2344 阅读 · 0 评论 -
Orika User Guide
作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重要的事情。在现在这个时代,企业应用程序变得越来越复杂,有大量的体系结构和设计约束。设计的约束会产生大量的机械工作。它通常需要我们把对象转换格式化用来适应不同的APIs,或者因为我们设计的原因也需要在不同的业务层转换格式化对象。为了完成这事件,我们只需要编写映射代码来将值从一种类型复制到另一种类型这种相当无聊的任务。原创 2017-08-19 00:44:18 · 3134 阅读 · 0 评论 -
JavaEE 13个核心规范
你听过这句话吗?“一流企业做标准、二流企业做品牌、三流企业做产品!”我时我就在想,做标准的企业就是一流的?卖产品就是三流公司?而坐产品或者加工的公司,即使说销售量很大也挣不了太多的钱,为什么呢转载 2017-05-19 23:59:46 · 16152 阅读 · 5 评论 -
Java Jar MANIFEST.MF
打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST.MF,这个文件描述了该Jar文件的很多信息。转载 2016-09-23 20:18:22 · 1004 阅读 · 0 评论 -
Java keyword transient
转载地址:Java transient关键字使用小记 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是可以的。如何做到呢?这就需要Java序列化与反序列化了。转载 2016-09-07 21:06:42 · 593 阅读 · 0 评论 -
接口和抽象类有什么区别
接口是对动作的抽象,抽象类是对根源的抽象。抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.转载 2016-09-22 22:55:29 · 728 阅读 · 0 评论 -
Java JDK Unsafe
最近看java.util.concurrent.atomic包,发现其中大量的用到Unsafe这个类。就在网上查了一下这个类到底是来干嘛的.java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:转载 2016-09-01 22:05:20 · 1231 阅读 · 0 评论 -
Java JDK Integer Cache
Java JDK源码中有很多小惊喜在等着我们,我们需要多多阅读它。对于一件事我们要做到知其然知其所以然。下面就是其中的一个小例子。今天在群里面遇到一个问题,代码如下。原创 2016-07-12 21:57:17 · 772 阅读 · 0 评论 -
Java JDK Reflect
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。原创 2016-08-13 12:57:13 · 1181 阅读 · 0 评论 -
HashMap实现原理分析
HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。在Java编程语言中,加载因子默认值为0.75,默认哈希表元为16转载 2016-06-14 22:03:34 · 572 阅读 · 0 评论 -
Java 回调机制解析
转载地址:http://blog.csdn.net/pi9nc/article/details/23169357 模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,也是我们在写程序中经常使用的;回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,这句话可能有点绕,等文章后面举例说明;异步调用是一种类似消息或事件的转载 2016-06-09 16:26:28 · 499 阅读 · 0 评论 -
Method Size Limit in Java
Posted by Prashant Deva on June 12, 2011如果你已经有一个大的方法,你也可以在运行时遇到这个极限。如果没有64 k限制可以使用一些工具或者库用来插装字节码,增加方法的大小,从而使其超越64 k的极限。在这种情况下你会得到一个运行时异常,java.lang.VerifyError翻译 2016-06-24 19:01:52 · 944 阅读 · 0 评论 -
Java 判断字符串中是否包含中文
Java判断一个字符串是否有中文是利用Unicode编码来判断,因为中文的编码区间为:0x4e00--0x9fbb, 不过通用区间来判断中文也不非常精确,因为有些中文的标点符号利用区间判断会得到错误的结果。而且利用区间判断中文效率也并不高,例 如;str.substring(i, i + 1).matches("[\\一-\\?]+"),就需要遍历整个字符串,如果字符串太长效率非常低,而且判断标点还会错误。这里提高 一个高效准确的判断方法,使用Java中的Character类转载 2016-05-09 17:54:42 · 3343 阅读 · 0 评论 -
线程和进程的区别
转载地址:http://blog.csdn.net/ooppookid/article/details/514689951、进程是什么进程(process)是具有一定独立功能的程序,操作系统利用进程把工作划分为一些功能单元。进程是进行资源分配和调度的一个独立单位。它还拥有一个私有的虚拟地址空间,该空间仅能被它所包含的线程访问。一个应用程序(application)是由一个或转载 2016-05-28 11:39:52 · 547 阅读 · 0 评论