
Java
文章平均质量分 79
Java相关知识整理,该专栏可以学到Java基础、多线程、网络编程、设计原则等。
架构潜行之路
没有的等出来的花儿,只有拼出来的结果。
展开
-
SpringBoot 整合 MongoDB 6 以上版本副本集及配置 SSL / TLS 协议
SpringBoot 快速整合 MongoDB 6 以上版本副本集及配置 SSL / TLS 协议认证。原创 2023-02-24 15:09:44 · 1581 阅读 · 0 评论 -
手写LRU算法
LRU算法是根据对数据的历史访问次数来进行淘汰数据的,通常使用双向链表来实现。在缓存中,它的设计原则是:如果数据最近被访问过,那么将来它被访问的几率也很高。原创 2022-10-02 16:48:29 · 523 阅读 · 0 评论 -
浅谈Fenix API的原理和使用
一、简介Fenix 简称菲尼克斯是一个为了解决复杂动态 SQL (JPQL) 而生的 Spring Data JPA 扩展库,目的是辅助开发者更方便快捷的书写复杂、动态且易于维护的 SQL,支持 XML、Java 链式 API 和动态条件注解等四种方式来书写动态 SQL。Fenix的选择是在原有的Spring Data JPA库上做了增强,提供了各种高效率的API方法和Java ApI等方式的链式操作;之前基于Mybatis中的运用,需要在xml中编写JPQL语言,而为了简便开发,Fenix在xml中引原创 2021-10-30 23:29:52 · 1803 阅读 · 0 评论 -
Spring有限状态机实现原理与机制
一、概念Spring Statemachine 是应用程序开发人员在 Spring 应用程序中使用状态机概念的框架,从设计层面分析:状态机目的是解决复杂的状态管理流程,保证程序单一原则和开闭原则;业务角度分析:状态机应有初始化状态、加载所有已有的状态、事件、转移、动作、触发下一个状态为驱动,并解决了业务逻辑与状态管理之间的强耦合。二、 Spring Statemachine 旨在提供以下功能:易于使用的平面一级状态机,适用于简单的用例。分层状态机结构以简化复杂的状态配置。状态机区域提供更复杂的状原创 2021-08-27 14:24:10 · 2398 阅读 · 1 评论 -
SpringBoot之导出Excel表格工具类
一、基于Apache下的poi实现Excel表格的导出功能1、引入poi相关依赖<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.11-beta1</version></dependency><dependency> <g原创 2021-04-18 14:16:12 · 636 阅读 · 1 评论 -
Spring如何解决循环依赖的吗?
在关于Spring的面试中,我们经常会被问到一个问题,那就是Spring是如何解决循环依赖问题的吗?对于这个问题在面试中被问到并不陌生,属于一道常见的高频面试题。如果大家不深刻去读,相信即使读过源码,也不一定能回答的好,本篇文章将带大家如何从源码的角度去分析进行讲解。一、过程演示分析1、关于Spring bean的创建,其本质上还是一个对象的创建,那竟然是对象,大家一定会明白一点的就是,一个完整的对象是包含两方面的:当前对象的实例化和对象属性的实例化(即注入属性)。在Spring中,对象的实例化底层是原创 2021-02-25 15:04:51 · 205 阅读 · 0 评论 -
ElasticSearch的实现原理及底层实现,什么是倒排索引,常用的分词器有哪些吗?
一、简介Elasticsearch是一个基于Lucene的分布式搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engin原创 2021-02-14 16:59:52 · 1182 阅读 · 0 评论 -
RocketMQ的原理及应用,与RabbitMQ如何保证消费顺序的吗?以及它们是如何保证消息不丢失的吗?
一、简介RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。 最初是由阿里开源的分布式消息引擎,由于后面维护问题,提交给Apache下的顶级维护项目之一。现在最新版本V4.8.0,如需了解官网地址:https://rocketmq.apache.org消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解原创 2021-02-13 16:06:25 · 2596 阅读 · 6 评论 -
讲一下Dubbo框架的实现原理及与SpringCloud微服务之间的区别
一、简介Dubbo是由阿里巴巴开源的透明的高性能分布式RPC框架,基于dubbo协议实现,底层通信方式是基于TCP长连接,传输方式是NIO实现,提高服务的性能。主要有三个核心特性:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。二、Dubbo工作原理:第一层:service层,接口层,给服务提供者和消费者来实现的第二层:config层,配置层,主要是对dubbo进行各种配置的第三层:proxy层,服务代理层,透明生成客户端的stub和服务单的skeleton第四层:regi原创 2021-01-23 17:27:18 · 699 阅读 · 0 评论 -
Java中原生操作JDBC连接及原理
一、简介JDBC全称又叫做Java DataBase Connectivity,也就是Java数据库连接,说白了就是用Java语言来操作数据 库,提供统一API访问数据库操作。二、原理JDBC主要是用于java连接数据库的,能连接什么数据库不固定,其实能连接很多种数据库,而且一般来说可以连接oracle和mysql,通常也是这两种。但是既然JDBC能连接这么多的数据库,开发起来太麻烦了,于是sun公司那些人想出了一个办法,我定义一套规范,大家都按照这个规范来,实现自己公司访问数据库的实现。这套规范就原创 2021-01-10 18:43:07 · 1084 阅读 · 11 评论 -
深入理解AQS源码解析一
文章目录一、概念二、`ReentrantLock`源码分析ReentrantLock把所有Lock接口的操作都委派到一个Sync类上,该类继承了AbstractQueuedSynchronizer:Sync又有两个子类(分为:公平锁和非公平锁两类):首先我们主要先讲一下`ReentrantLock`类中的`lock()`方法和`uplock()`方法都做了些什么事情。1、lock()方法源码解析通过上面分析完`lock()`方法以后,我们来看一下`uplock()`方法中源码解析2、uplock()方法源码原创 2020-09-12 14:30:13 · 636 阅读 · 2 评论 -
带大家学习一下线程池的基本操作及ThreadLocal的使用
一、线程池的概念 首先,为什么要使用线程池呢?之前我们使用线程是怎么去使用创建的,可能对这方面有所了解的人都会想到,创建线程的过程中是很损性能这回事。为什么会导致这样,主要是线程的频繁的创建、销毁等引起的。后面在JDK1.5中加入了线程池这种观念,线程池会帮我们提前创建好你所需要的线程数量或者能够极大的提高线程之间的复用性,进而提升本身程序的性能。二、讲一下线程池的几种创建方式1、new ThreadPoolExecutor(…)2、new ScheduledThreadPoolExecutor原创 2020-08-22 16:18:23 · 678 阅读 · 0 评论 -
Java对接微信支付详解
一、介绍微信支付对于我们日常来说,并不陌生,也许我们日常都在用。现在我就讲一下微信支付的流程是怎么实现的,都有哪些步骤,以及注意点。支付流程图:参数说明如图:二、开发步骤1、首先需要开通商户号,获取商户mch_id、mch_secret(密钥)2、开通小程序或公众号,获取小程序或公众号appid、secret(密钥)3、除了前面2步的准备环境,也就进入主流程步骤,分为3步如下:3-1:封装有必要的微信支付参数并拉取微信支付API3-2:对封装的参数进行提取并开始支付阶段,需要二次签名加原创 2020-08-16 14:15:48 · 5108 阅读 · 1 评论 -
讲一下JDK8中Stream流
讲一下JDK8中Stream流详解一、简介首先,Stream流是JDK8中加入的,主要是为了解决日常开发中编写复杂的代码。通过结合Lambda表达式可以完美的写出简洁高效的代码,Stream流分为三个阶段:开始–>中间–>结束。一个流只能被操作一次(调用中间流或终端流操作)。例如,这就排除了“分叉”流,即同一个源为两个或多个管道提供数据,或者同一个流的多次遍历。如果流实现检测到流正在被重用,它可能会抛出illeglastateException。然而,由于一些流操作可能返回其接收器而不是新原创 2020-08-15 16:19:18 · 454 阅读 · 0 评论 -
Nacos详细解释配置与注册
一、介绍Nacos是阿里巴巴最新开源的项目,核心定位是“一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”,项目地址:https://nacos.io/zh-cn/ Nacos核心提供两个功能:服务注册与发现,动态配置管理。Nacos核心提供两个功能:服务注册与发现,动态配置管理。1、服务注册与发现Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现,也支持RPC如dubbo的服务注册与发现。与Dubbo使用的zookeeper相比原创 2020-08-02 16:05:46 · 5950 阅读 · 0 评论 -
教你如何手写一个SpringMvc
一、前提1、在开始之前,回顾一下SpringMvc的大致流程,如下图:通过图可知:MVC中最主要的就是DispatcherServlet(前端控制器)、HandleMapping(处理器映射器)、HandleAdapter(处理器适配器)、ViewResolver(视图解析器)。相对于这个MVC流程图大家都能够看懂也比较熟悉,我就不一一解释了!二、开始分析步骤流程(项目工具 idea)项目代码结构:1、首先创建一个web项目,什么配置文件都不需要,web.xml文件可有可无,只需要一个空壳原创 2020-07-07 16:14:05 · 379 阅读 · 0 评论 -
JDK1.8中HashMap源码分析
一、分析一下hashmap原理1、DEFAULT_INITIAL_CAPACITY = 1 << 4; 默认初始容量为16;2、MAXIMUM_CAPACITY = 1 << 30; 最大容量为2^30次方;3、DEFAULT_LOAD_FACTOR = 0.75f; 默认加载因子为0.75f;4、TREEIFY_THRESHOLD = 8; 默认链表长度大于等于8时(并且数组长度不小于64)时转为红黑树;5、UNTREEIFY_THRESHOLD = 6 默认小于等于6时原创 2020-06-27 15:13:24 · 249 阅读 · 0 评论