【JAVA】
文章平均质量分 86
好好生活_
这个作者很懒,什么都没留下…
展开
-
【Spring Cloud】多数据源配置
工作中涉及一个资源整合迁移事项,需要将分散在各个业务组不同项目的数据库中的数据进行整合迁移至团队项目中,而且迁移产生的逻辑代码也是临时性,写在不同的项目或写在某一项目中也不合理,所以决定使用多数据源,直接访问各项目的数据库获取源数据。原创 2022-12-05 19:38:09 · 6003 阅读 · 1 评论 -
Jsoup,一款超好用的HTML文本解析Java工具
jsoup是一款Java的HTML解析器,可以直接解析某个URL地址或HTML内容。它提供了一套非常简单好用的API,可通过DOM,CSS以及类似于jQuery的操作方法来读取和操作数据。原创 2022-11-23 16:21:20 · 6813 阅读 · 0 评论 -
基于Spring Cloud的架构使用学习升级之路
正如之前看到过文章里说的那样,实际使用中“洋葱架构”的每一层我们并不一定都是需要的,而应该根据项目实际情况做动态设计和调整。这一次的架构使用——学习——升级对自己来说算是一次很好地成长。原创 2022-11-22 10:14:27 · 352 阅读 · 0 评论 -
bizlog通用操作日志组件(代码分析篇)
bizlog日志组件代码分析,从源码中学习和了解其实现核心逻辑。原创 2022-11-21 15:06:08 · 1905 阅读 · 0 评论 -
bizlog通用操作日志组件(使用篇)
在一个系统中,日志主要分为系统日志和操作日志。系统日志主要是为开发排查问题提供依据。操作日志主要是对某条数据进行新增或者修改操作后进行记录,操作日志要求可读性强,因为它是给用户看的,比如订单的物流信息,用户需求知道在什么时候发生了什么事情。本篇博客介绍的日志组件解决的就是该问题:「谁」在「什么时间」对「什么」做了「什么事」原创 2022-11-16 20:36:31 · 4443 阅读 · 2 评论 -
比较图片相似度算法介绍与应用(Java版)
简单介绍三种计算图片相似度算法,算法的本质都是先得到图片的Hash,再计算海明距离,海明距离越小,图片越相似。原创 2022-11-15 16:14:02 · 4391 阅读 · 1 评论 -
MinHash算法原理与应用(Java版)
局部敏感Hash算法之MinHash算法简单介绍及Java应用原创 2022-11-14 17:19:17 · 1131 阅读 · 1 评论 -
SimHash算法原理与应用(Java版)
本篇博客将介绍的SimHash算法属于一种局部敏感哈希算法,利用海明距离比较内容之间的相似度。原创 2022-11-10 14:48:13 · 2955 阅读 · 5 评论 -
【JAVA工具类】cn.hutool.core.util.RandomUtil,随机数生成,用它就够了!
引言前段时间做了一个项目的需求,很多地方都需要用到随机,比如从指定的数据集合中随机抽取一个,随机抽取几个不重复,从指定范围内随机生成固定小数位的数字等等。对于涉及数据库的查询,mysql中有提供随机函数,但必然会影响查询效率,而且底层框架使用mybatis-plus,不再写什么sql,另一方面对于不涉及数据库的查询,又该如何处理呢?所以我想到的是使用随机数,于是发现了这次要分享的cn.hutool.core.util包下的工具类RandomUtil,里面提供了很多方法,使用起来很方便。依赖如果你的原创 2020-11-19 14:43:00 · 16604 阅读 · 0 评论 -
【Java8实战】默认方法
引言传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一旦类库的设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。本篇博客的内容将要总结Java8是如何解决上述问题的。解决方案Java 8为了解决上述问题引入了一种新的机制。Java 8中的接口现在支持在声明方法的同时提供实现。...原创 2020-01-22 17:26:12 · 540 阅读 · 0 评论 -
【Java8实战】并行流
引言在前面,学习使用Lambda表达式的过程中,对于集合的处理,都会使用到Stream流处理。为了提高性能,我们可以使用parallelStream并行流。并行流并行流就是一个把内容分成多个数据块,并用不同的线程分别处理每个数据块的流。这样一来,你就可以自动把给定操作的工作负荷分配给多核处理器的所有内核,让它们都忙起来。实例代码比如,我们求1到n一组数的和,用传统的java代码实现,如...原创 2020-01-22 15:09:21 · 1390 阅读 · 1 评论 -
【Java8实战】用流收集数据
引言通过前面的学习,我们知道了,流可以用类似于数据库的操作处理集合。它们支持两种类型的操作:中间操作(如filter或map)和 终端操作(如count、findFirst、forEach和reduce)。中间操作可以链接起来,将一个流转换为另一个流。这些操作不会消耗流,其目的是建立一个流水线。与此相反,终端操作会消耗流,以产生一个终结果,例如返回流中的最大元素。本篇博客主要介绍collec...原创 2020-01-16 17:11:23 · 359 阅读 · 0 评论 -
【Java8实战】流的操作
引言通过上篇博客,我们对流有了一定了解,本篇博客将会通过一些代码来熟悉流的各种操作。主要包括:筛选、切片、映射、查找、匹配和归约。筛选和切片(1) 用谓词筛选Streams接口支持filter方法,该操作会接受一个谓词(一个返回 boolean的函数)作为参数,并返回一个包括所有符合谓词的元素的流。例如:筛选出所有素菜,创建一张素食菜单,代码如下://filter(筛选所有素食)Li...原创 2020-01-14 17:53:49 · 383 阅读 · 0 评论 -
【Java8实战】流的引入
引言集合是Java中使用多的API。但在java8之前,我们对于集合的操作大多需要涉及数据库,比如对于某个集合做筛选,都是通过sql中的where条件去实现。我们能不能不借助sql,仅仅通过操作集合就能实现?另外,在处理大量数据的情况下,又要保证程序的性能,我们的代码又该如何去写?上面的两个问题,...原创 2020-01-13 21:03:06 · 287 阅读 · 0 评论 -
【Java8实战】方法引用
引言通过前面两篇博客的学习,我们对Lambda表达式的语法和使用已经有了一定了解。而本篇博客要总结的是java8的另一功能:方法引用。简单地说,可以把它们视为某些 Lambda的快捷写法。方法引用是什么方法引用让你可以重复使用现有的方法定义,并像Lambda一样传递它们。在一些情况下, 比起使用Lambda表达式,它们似乎更易读,感觉也更自然。第一个方法引用比如,比较两个苹果重量的例子:...原创 2020-01-10 14:43:17 · 315 阅读 · 0 评论 -
【Java8实战】函数式接口
引言通过上一篇博客,对Lambda的基础语法已经有了一定了解。那么有个问题,那就是在哪里可以使用Lambda表达式呢? 答案是函数式接口。有点抽象了,本篇博客就来梳理一下。什么是函数式接口?一句话说,函数式接口就是只定义一个抽象方法的接口。在Java API中,有很多这样的接口,比如:Comparator和Runnable.public interface Comparator<T&...原创 2020-01-09 15:21:44 · 359 阅读 · 0 评论 -
【Java8实战】Lambda表达式
引言Lambda表达式的引入是Java8的新特性之一。简单地说,Lambda表达式其实是一种新的语法,简化了代码,使得代码看起来更加简洁,可读性更强。语法Lambda 表达式的基础语法:Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符。箭头操作符将 Lambda 表达式拆分成两部分:左侧:Lambda 表达式的参数列表右侧:Lambda ...原创 2019-12-31 18:02:44 · 371 阅读 · 0 评论 -
【Java集合】有序的Map实现——LinkedHashMap
引言Map集合的特点是无序的,可重复的。而要想保证Map的有序,如何实现?Map结构下有多个实现类,HashMap是无序的,而LinkedHashMap继承了HashMap。下面就看一下LinkedHashMap是如何保证顺序的。使用下面是简单的使用,输出结果是按插入顺序排序的:Map<String,String> map = new LinkedHashMap<>...原创 2019-12-30 15:17:32 · 2422 阅读 · 1 评论 -
【Java集合】遍历Map的几种方式
今天在写代码的时候,需要用到map的遍历,在此记录一下遍历的几种方式。方法一:在for循环中使用entries实现Map的遍历/*** 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */Map <String,String> map = new HashMap<>();map.put("一月", "Jan.");map.put("二月", "Feb...原创 2019-12-29 17:23:30 · 641 阅读 · 0 评论 -
线程池原理总结
当向线程池提交一个任务之后,线程池是如何处理这个任务的呢?线程池的处理流程如下图所示:1. 线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下一个流程。2. 线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。3. 线程池判断线程池里的线程...原创 2019-11-29 23:16:34 · 505 阅读 · 0 评论 -
Java 日期工具类
项目中的订单统计需求,分别是按日,周,月,年统计订单数量及订单总额。其中,遇到了各种时间的获取,下面总结了一些较全的Java获取不同时间以及不同时间格式的相互转换方法。 /** * 获取当前年 * @return */ public static Inte...原创 2018-03-14 19:49:22 · 272 阅读 · 2 评论 -
【Java集合】集合框架Collection和Map
&nbsp;&nbsp;&nbsp;&nbsp;在面试的时候,一般从java基础开始问,而Java集合框架被问的概率一定是位于前列。刚开始,被问到java集合框架,List,Set,Map脱口而出。而其实真正学习过java集合的,答案肯定不一样。本篇博客将开始Java集合的系列博客。&nbsp;&nbsp;&nbsp;&nbsp;一. 集合由来&nbsp;&原创 2018-07-31 08:14:02 · 345 阅读 · 0 评论 -
【Java集合】List
从上篇博客,我们知道了Java集合框架分为Collection和Map,此篇博客开始,将对集合框架中的List,Set,Queue和Map分别总结,进一步学习Java集合。本篇博客从List出发。一. List的定义&nbsp;&nbsp;&nbsp;&nbsp;List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许加入重复元素,因为它可以通过...原创 2018-07-31 11:26:48 · 312 阅读 · 0 评论 -
【Java集合】Set
继续Java集合类的总结学习,上篇博客总结的List类,本篇博客总结的是Set类。一. Set的定义 Set集合类似于一个罐子,”丢进”Set集合里的多个对象之间没有明显的顺序。Set继承自Collection接口,不能包含有重复元素。二. Set的实现 1. Set hashSet=ne...原创 2018-07-31 17:38:16 · 216 阅读 · 1 评论 -
【Struts2】OGNL表达式
【整体介绍】 OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。【简单对比】 Struts2中默认是使用OGNL取代EL来做界面数据绑定,所谓界面数据绑定,也就是把界面元素(例如一个textfield,h原创 2017-01-29 17:56:58 · 562 阅读 · 9 评论 -
【spring】IOC容器在WEB容器中的启动
在非web项目中,我们可以通过在main方法中直接创建IOC容器。而在web项目中,IOC容器是如何创建的?IOC容器是如何在web容器中启动的?这就是本篇博客要阐述的问题,下面我们先从一个实例出发。【简单实例】 1. 新建一个java web项目,创建web.xml和applicationContext.xml两个配置文件,前者是对web容器的管理,后者是对spring ioc容原创 2017-06-16 19:14:57 · 1135 阅读 · 11 评论 -
【SpringMVC】9大组件概览
【SpringMVC】9大组件概览SpringMVC中的Servlet一共有三个层次,分别是HttpServletBean、FrameworkServlet和 DispatcherServlet。HttpServletBean直接继承自java的HttpServlet,其作用是将Servlet中配置的参数设置到相应的属性;FrameworkServlet初始化了WebApplicationConte原创 2017-06-23 15:48:47 · 20918 阅读 · 17 评论 -
SSM框架整合(Spring + SpringMVC + Mybatis + Maven + IDEA)
【学习背景】 最近学习的项目是SSM框架,即Spring、SpringMVC和Mybatis。之前实习的项目底层用的就是mybatis,但那时为了保证团队开发进度,只顾着开发,并且项目框架、所用到的技术都是建立在已有的基础上,而此次框架的整合,是想亲手搭建一次,做出个小demo。所以,这一次的实践既有基础,也有挑战。【学习过程】 IDEA开发工具用的不是很多,所以自己也是有机会原创 2017-03-06 20:31:36 · 10409 阅读 · 21 评论 -
【Mybatis】自动生成代码工具
【学习背景】 之前实习的项目用的底层是Mybatis,属于ORM框架之一。而底层代码都是通过工具自动生成的。当时在用的时候,就想着回来之后,也要试试这自动生成工具,这也是SSM框架整合前必须要经历的一步。【方法一览】 Mybatis底层生成的方式有命令行、Eclipse插件和Maven插件三种。自己试了试命令行和Maven插件的方法,都挺方便的,只需要配置好就行。下面就介绍下如原创 2017-03-03 21:05:35 · 4900 阅读 · 11 评论 -
【Shiro】概述
【简介】 1. Apache Shiro 是Java的一个安全框架。 2. Shiro可以非常容易的开发出足够好的应用,其不仅可以用在J2SE环境,也可以用在JavaEE环境。 3. Shiro可以完成:认证、授权、加密、会话管理、与Web集成、缓存等。【功能简介】 基本功能点如下图所示: 1. Authentication: 身份认证/登录,验证用户是不是拥有相应的身原创 2017-07-20 14:25:18 · 748 阅读 · 33 评论 -
【Struts2】Action接收参数的三种方式
【学习背景】最近的学习又接触到了Struts2,虽然之前有过项目实践,但那毕竟是第一次学习,很多东西都只是有个印象,并不明白也没有建立其它联系。这一次的学习,对modelDriven有了进一步的认识,也了解到除了modelDriven之外的,action与jsp页面参数传递的其它两种方式,下面一一总结一下。【学习积累】Struts2中Action接收参数的方法主要有以下三种:1原创 2017-01-16 19:39:24 · 1168 阅读 · 20 评论 -
【Java集合】Queue
Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。一. Queue的实现没有实现阻塞接口的LinkedList:实现了java.util.Queue接口和java.util.AbstractQueue接口(一) 内置的不阻塞队列:Pri...原创 2018-07-31 19:44:10 · 286 阅读 · 1 评论 -
【Java集合】Map
前面总结的List,Set,Queue都是Collection下的实现类,本篇博客总结的是与Collection并列的集合,Map.Map是key-value键值对,key不允许重复,value可以。Map的常用实现类主要有:HashMap,TreeMap,LinkedHashMap,HashTable.一. HashMap和HashTableHashMap 是一个散列表,它存储的...原创 2018-07-31 20:35:06 · 231 阅读 · 1 评论 -
Spring系列之Java代理机制实现AOP
【回顾】 在之前的学习中,我们对Spring框架有了一个宏观认识,并且深入分析学习了它的核心内容IOC。从这篇博客,将开始对其另一个重要思想的实现展开学习,那就是AOP。 【前言】 AOP的意思是面向切面编程,英文全称是Aspect Oriented Programming,它是开发人员可以更好地将本不应该耦合在一起的功能分离开。 【内容】 一.认识原创 2016-07-27 13:26:38 · 913 阅读 · 20 评论 -
【HTTPS】Spring Boot客户端与服务端单向认证和双向认证实例
【引言】在上篇博客中,了解了关于SSL的很多理论,本篇博客主要是总结下基于Spring Boot实现HTTPS方式请求下客户端与服务端进行双向认证的实例搭建。有了上一篇博客的认识,对于SSL的流程已经很清楚了。使用HTTPS,通常情况下,是客户端需要校验服务端,也就是一个单向认证的过程。同时,服务端也可以校验客户端,从而达到客户端与服务端双向认证的目的。【证书生成】在项目搭建前,我们先使用...原创 2019-08-17 18:23:56 · 8735 阅读 · 10 评论 -
【Java基础】深入理解Java中的String
一. String类想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码:public final class String implements java.io.Serializable, Comparable&amp;lt;String&amp;gt;, CharSequence{ /** The value is used for character sto...转载 2019-03-12 16:37:40 · 334 阅读 · 0 评论 -
【Java】Bean复制几种实现方法性能比较
【引言】在项目开发过程中,会遇到将某个已有若干属性值的Bean复制给另一个具有相同属性名的Bean,除了一个一个属性去set方法之外,其实可以通过调用一些工具类下的方法直接copy,这样就避免了一个一个去set属性值,在简化了代码的基础上,也能快速地实现功能。而实现这种功能的工具类并不只有一种,也听同事提到过如果数据量大的话,性能上会有影响。所以在工作空闲之时,自己写了个接口,测试了一下每种方...原创 2019-03-01 17:11:46 · 11379 阅读 · 0 评论 -
@Transient 注解使用
【引言】在开发过程中,不论是前后端的交互,还是后端与后端间的接口对接,都避免不了各种参数和返回值的问题。有时候需要在返回值的某个实体上增加个其他表的字段,有时候需要在参数传递过程中加上其他表的相关信息。举个例子,很简单的一个场景,我们在给前端返回订单信息中,前端展示的不仅仅是订单中的信息,也可能需要客户或者商户的一些信息,而这些信息在订单中我们一般只会存一个客户和商户的id,在查询过程中,再去...原创 2019-01-12 19:36:34 · 5280 阅读 · 3 评论 -
【IDEA插件】GenerateAllSetter,generate call to class all setter method
【引言】在开发过程中,我们会遇到需要给实体属性赋值的情况,所以代码中就需要写很多set方法。一个一个属性去写,多的情况下,难免会很烦,中间可能还会写重复。所以,我们可以借助开发工具中的插件,帮助我们生成所有的set方法。【安装】在插件中直接搜索GenerateAllSetter,安装完成后直接重启IDEA就行。【使用】在代码中,我们只需要在实例化一个对象之后,alt + enter 就...原创 2018-12-26 13:01:02 · 3047 阅读 · 2 评论 -
Fastjson @JsonField注解使用
【引言】在开发中,不论是前后端联调,还是与第三方对接,有时候难免会遇到传的json数据中的key值与自己后端定义的实体字段不一致的情况,也有时候会遇到前后端返回的日期数据需要进行格式转换的问题。本篇博客接下来要总结的这个注解,便可以很方便的处理我们的问题,下面就一起看看如何使用。【实例】一. @JsonField注解JsonField注解是阿里开发的fastjson中的注解,源代码如下:...原创 2018-12-24 22:00:28 · 5909 阅读 · 1 评论