自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黑马程序员广州中心的专栏

这是一个神奇的博客。

  • 博客(1296)
  • 收藏
  • 关注

原创 springcloud + springcloud Alibaba + flowable 流程引擎1.代码生成器: [正反双向](单表、主表、明细表、树形表,快速开发利器)freemaker模

springcloud + springcloud Alibaba + flowable 流程引擎 1.代码生成器: [正反双向](单表、主表、明细表、树形表,快速开发利器) freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面、建表sql脚本、处理类、service等完整模块 2.多数据源:(支持同时连接无数个数据库,可以不同的模块连接不同数的据库)支持N个数据源 3.阿里数据库连接池drui...

2021-07-05 14:38:57 2022

转载 分布式追踪 & APM 系统 SkyWalking 源码分析

1. 概述本文主要分享 SkyWalking DataCarrier 异步处理库。基于生产者消费者的模式,大体结构如下图:实际项目中,没有 Producer 这个类。所以本文提到的 Producer ,更多的是一种角色。下面我们来看看整体的项目结构,如下图所示 :2. bufferorg.skywalking.apm.commons.datacarrier.buffer 包,主要包含 Channels 、Buffer 两个类。Channels 是 Buffer 数组的封装。2.1

2021-07-04 14:29:04 401

原创 SpringBoot:Java High Level REST Client 搜索 API

SearchRequest用于与搜索文档,聚合,建议有关的任何操作,还提供了在结果文档上请求突出显示的方法.在最基本的形式中,我们可以向请求添加查询:searchRequest = indexName==null?newSearchRequest():newSearchRequest(indexName);//创建SeachRequest . 没有参数,这将针对所有索引运行.SearchSourceBuilder searchSourceBuilder =newSearchSourceBu...

2020-05-29 10:08:56 411

转载 DBUtils框架的使用(上)

commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。因此dbutils成为很多不喜欢hibernate的公司的首选。jar包下载地址:链接:https://pan.baidu.com/s/1BKtq_VoBw52qyIJr6c_CZg提取码:skrf复制这段内容后打开百度网盘手机App,操作更方便哦API介绍:org.apache.com

2020-05-29 10:01:45 204

原创 DBUtils框架的使用(下)

通过QueryRunner类的query()方法即可完成数据库表的查询操作,但是在查询的时候需要实现ResultSetHandler接口来将结果集封装成对象。可以通过自己实现接口,但很显然,我们应该使用DBUtils工具包提供的实现类来实现封装。在DBUtils框架中,共提供了九个ResultSetHandler的实现类。ArrayHandler:把结果集中的第一行数据转成对象数组。 ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。 BeanHand

2020-05-29 09:57:49 144

原创 Spring Cloud Finchley版-02-构建分布式应用

服务消费者 & 提供者本书使用服务提供者与服务消费者来描述微服务之间的调用关系。下表解释了服务提供者与服务消费者。表-服务提供者与服务消费者[td] 名词 定义 服务提供者 服务的被调用方(即:为其他服务提供服务的服务) 服务消费者 服务的调用方(即:依赖其他服务的服务) 以电影售票系统为例。如图,用户向电影微服务发起了一个购票的请求。在进行购票的业务操作前,电影微服务需要调用用户微服务的接口,查询当前用户的余额是多少...

2020-05-29 09:54:00 207

原创 Spring Cloud-03-监控:强大的Spring Boot Actuator

应用没有监控,没有画板,一切指标都没有。在这个Growth Hack逐渐成为主流的时代,不弄个Dashboard把系统压力、QPS、CPU、内存、日活啥的可视化,你好意思出来混吗……本节我们来解决该问题。Spring Boot Actuator是Spring Boot官方提供的监控组件。只需为项目添加以下依赖,即可就整合Spring Boot Actuator。 <dependency> <groupId>org.springframework.boo...

2020-05-29 09:50:02 209

原创 Spring Cloud-04-服务注册与服务发现-原理剖析

地址硬编码问题——电影微服务中将用户微服务的地址写死,如果用户微服务地址发生变化,难道要重新上线电影微服务吗?本节来解决该问题。不妨先思考一下,怎样才能让服务消费者总能找到服务提供者呢?或者说,怎样才能让服务消费者感知到服务提供者地址的变化呢?TIPS目前市面上把服务消费者找到服务提供者的这种机制称为服务发现,又或者服务注册。下面来探索服务发现究竟是怎么回事。服务发现原理初探其实,服务发现机制非常简单,不妨用大家熟悉的MySQL来类比——只需一张表(图中的registry表)即可.

2020-05-29 09:46:23 160

原创 JVM之深入解析强引用、软引用、弱引用

关于强引用、软引用、弱引用、幻象引用的区别,在很多公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用。在java语言中,除了原始数据类型(boolean、byte、short、char、int、float、double、long)的变量,其他所有都是所谓的引用类型,指向各种不同的对象。理解这些引用的区别,对于掌握java对象生命周期和JVM内部相关机制非常有帮助。也有助于更深刻的理解底层对象生命周期、垃圾收集机制等,对设计可靠

2020-05-29 09:39:17 138

原创 Java中的static关键字

java中的static关键字1. 概述假设有一个学生类,它的数据成员有姓名、年龄、学号、教室,对于在同一个班的同学来讲,每个同学的姓名、年龄、学号或许都是不一样的,但是教室肯定是一样的,如果有40个同学,我有必要把40个同学的教室名都设置一遍吗?没必要,教室名是40个同学共享的一个属性,它不同于名字、学号这些,当我们给教室这个变量前面加上static后,它就是一个共享的属性了,我们只需把共享的属性设置一遍,所有的对象就会共享到这一设置。public class Student{ privat..

2020-05-29 09:35:06 129

原创 Spring Boot自动装配原理

Spring Boot相对于Spring的一大改变或者优势来说就是“约定大于配置”的思想,不像Spring一样所有的配置都需要我们自己去实现,Spring Boot集成了许多默认的配置。拿Spring MVC来举例,原来Spring时代是通过写两个XML配置文件来实现的,一个web.xml,另一个applicationContext.xml。这些文件内容复杂,且大部分情况下不需要改变,在各个项目中的迁移也只是复制粘贴里面的代码而已,这无疑增加了使用成本。而在Spring Boot中,只需要引入相关sprin

2020-05-28 10:52:14 148

原创 对于java性能优化的这10个细节你知道吗?

1. 多线程在未发生线程安全前提下应尽量使用HashMap、ArrayListHashTable、Vector等使用了同步机制,降低了性能。2. 尽量合理的创建HashMap当你要创建一个比较大的hashMap时,充分利用这个构造函数public HashMap(int initialCapacity, float loadFactor);避免HashMap多次进行了hash重构,扩容是一件很耗费性能的事,在默认中initialCapacity只有16,而loadFactor是 0.75,需要多大的

2020-05-28 10:43:27 124

原创 单点登录原理

1、什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一, SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。2、单点登录的好处 使用“单点登录”整合后,只需要登录一次就可以进入多个系统,而不需要重新登录,这不仅仅带来了更好的用户体验,更重要的是降低了安全的风险和管理的消耗 在面向服务的架构中,服务和服务之间,程序和程序之间的通讯大量存在,服务...

2020-05-28 10:30:14 801

原创 红黑树原理

我们都听过平衡二叉树(AVLTree),了解到AVL树的性质,其实平衡二叉树最大的作用就是查找,AVL树的查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树的效率就是高在这个地方。如果在AVL树中插入或删除节点后,使得高度之差大于1。此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树;为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小. 这个时候就有人开始思考,并且提出了红黑树的理论,那么红黑树到底比AVL树好在哪里?红黑树与AVL树的比较:1.A

2020-05-28 10:04:05 154

原创 入门 Spring Security

Spring Security 是 Spring 家族中的一个安全管理框架,实际上,在 Spring Boot 出现之前,Spring Security 就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是 Shiro 的天下。相对于 Shiro,在 SSM/SSH 中整合 Spring Security 都是比较麻烦的操作,所以,Spring Security 虽然功能比 Shiro 强大,但是使用反而没有 Shiro 多(Shiro 虽然功能没有 Spring Security 多,但是对

2020-05-28 09:53:56 291

原创 JAVA基础之泛型

泛型,就是允许在定义类、接口、方法时使用类型形参,在声明变量、创建对象、调用方法时再传入实际的类型参数。像List代表了只能存放String类型的对象的List集合。在java中这样用://创建一个只能存放String类型的List集合List<String> a=new ArrayList<>();想知道为什么使用泛型,我们可以看看没有泛型之前,是怎么操作集合的。public static void main(String[] args){//定义集合Map map=new...

2020-05-28 09:48:40 118

转载 redis的三种集群方式

redis有三种集群方式:主从复制,哨兵模式和集群。1.主从复制主从复制原理:从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照; 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 从服务器完成对快照的载入,开始接收命令请求,并执行

2020-05-28 09:41:06 118

原创 Redis分布式锁的N种姿势

Redis几种架构Redis发展到现在,几种常见的部署架构有:单机模式; 主从模式; 哨兵模式; 集群模式;我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意的是,只有充分了解普通分布式锁是如何实现的,才能更好的了解Redlock分布式锁的实现,因为Redlock分布式锁的实现完全基于普通分布式锁。普通分布式锁Redis普通分布式锁原理这个大家基本上都了解,本文不打算再过多的介绍,上一篇文章《Redis分布式锁最牛逼的实现》也讲的很细,并且也说到了几个重要的注意点。如

2020-05-28 09:37:13 177

原创 字段类型与合理的选择字段类型

字段类型数值MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。INT 在 MySQL 中支持的 5 个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。MySQL

2020-05-28 09:34:13 501

原创 Redis数据类型

一、字符串1. 字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的,2. 所以字符串类型能为其他四种数据结构的学习尊定基础。3. 字符串类型实际上可以是字符串4. (简单的字符串、复杂的字符串(xml、json)、数字(整数、浮点数)、二进制(图片、音频、视频)),5. 但最大不能超过512M。使用场景:1. 缓存功能:字符串最经典的使用场景,redis最为...

2020-05-27 10:21:14 103

原创 Redis持久化

RDB持久化 redis默认开启了rdb存储,保存在redis目录下的dump.rdb,策略如下 save 900 1 save 300 10 save 60 10000 如果满足900秒内有1个键值被改动,则自动保存一次数据集 如果满足300秒内有10个键值被改动,则自动保存一次数据集 如果满足60秒内有10000个键值被改动,则自动保存一次数据集 AOF持久化 默认不开启,需要在redis...

2020-05-27 10:16:37 76

原创 java filter 使用介绍

filter过滤器主要使用于前台向后台传递数据是的过滤操作。程度很简单就不说明了,直接给几个已经写好的代码:一、使浏览器不缓存页面的过滤器Java代码import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/*** 用于的使 Browser 不缓存页面的过滤器*/public class ForceNoCacheFilter implements Fi..

2020-05-27 10:02:00 144

原创 SQL优化,索引原则,及mysql不走索引的原因分析

SQL语句优化 1 企业SQL优化思路  1、把一个大的不使用索引的SQL语句按照功能进行拆分  2、长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引。  3、对SQL语句功能的拆分和修改  4、减少“烂”SQL由运维(DBA)和开发交流(确认),共同确定如何改,最终由DBA执行  5、制定开发流程2 不适合走索引的场景  1、唯一值少的列上不适合建立索引或者...

2020-05-27 09:55:25 263

原创 java代码规范

通过java代码规范来优化程序,优化内存使用情况,防止内存泄露可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我

2020-05-27 09:44:53 80

原创 jdbctemplate简介】

JdbcTemplate简介  Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。  JdbcTemplate位于中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个这个包包含了一下事务和异常控制JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执.

2020-05-27 09:40:45 280

原创 java代码规范

通过java代码规范来优化程序,优化内存使用情况,防止内存泄露可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预定的任务。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文讨论的主要是如何提高代码的效率。在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。养成好的代码编写习惯非常重要,比如正确地、巧妙地运用java.lang.String类和java.util.Vector类,它能够显著地提高程序的性能。下面我

2020-05-27 09:30:31 120

原创 Spring的IOC原理

1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。齿轮组中齿轮之间的啮合关

2020-05-27 09:26:30 105

原创 线程池入门

1.阻塞队列 体系结构 -Collection -Queue - BlockQueue 重要的实现类 ...

2020-05-27 09:21:33 73

原创 java中队列的介绍和使用

Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。Queue的实现1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口  内置的不阻塞队列: PriorityQueue 和 ConcurrentLinkedQueue  PriorityQueue 和 Concurre

2020-05-26 09:39:02 132

原创 redis的三种集群方式

redis有三种集群方式:主从复制,哨兵模式和集群。 一.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照...

2020-05-26 09:34:53 121

原创 java读写Properties属性文件公用方法

Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。像Python支持的配置文件是.ini文件,同样,它也有自己读取配置文件的类ConfigParse,方便程序员或用户通过该类的方法来修改.ini配置文件。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”

2020-05-26 09:30:54 138

原创 jdbcTemplate使用方法总结

1、使用JdbcTemplate的execute()方法执行SQL语句[Java]纯文本查看复制代码? 1 jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))"); 2、如果是UPDATE或INSERT,可以用update()方法。[Java]纯文本查看复制代码? 1 2 ...

2020-05-26 09:27:09 261

原创 API 网关从入门到放弃

API 网关从入门到放弃假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等网关由于对接很多种不同的协议,因此可能需要实现很多种调用方式,比如HTTP、Dubbo等,基于性能原因,最好都采用异步的方式,而Http、Dubbo都是支持异步的,比如apache就提供了基于NIO实现的异步HTTP客户端。因为网关会涉及到很多异步调用,比如拦截器、HTTP客户端、dubbo、redis等,因此需要考虑下异步调用的方式,如果基于回调或者future的话,代码嵌套会很深,.

2020-05-26 09:19:31 106

原创 简介之HashMap和Hashtable的区别

HashMap和Hashtable的区别1.底层结构不同1.1继承体系的区别HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类(注:此类已过时。新的实现应该实现 Map 接口,而不是扩展此类)。它们都实现了同时实现了Map、Cloneable(可复制)、Serializable(可序列化)这三个接口。1.2内部实现使用的数组初始化和扩容方式不同Hashtable:(1) Hashtable继承于Dictionary类,实现了Map接口。Ma...

2020-05-26 09:14:09 248

原创 23种设计模式-责任链模式(17)

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。介绍意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。主要解决:职责链上的处理者负

2020-05-26 09:03:28 107

原创 23种设计模式-迭代器模式(16)

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。介绍意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。主要解决:不同的方式来遍历整个整合对象。何时使用:遍历一个聚合对象。如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象。关键代码:定义接口:hasNext, next。应用实例:JAVA 中的 iterator。优点:

2020-05-26 09:00:11 77

原创 JVM内存模型

我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等待成本,但是随着CPU的发展,内存的读写速度也远远跟不上CPU的读写速度,因此,为了解决这一纠纷,CPU厂商在每颗CPU上加入了高速缓存,用来缓解这种症状,因此,现在CPU同内存交互就变成了下面的样子。同样,根据摩尔定律,我们知道单核CPU的主频不可能无限制的增长,要想很多的提升新能,需要多个处理器协同

2020-05-26 08:55:22 127

原创 线程生命周期

在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。当线程start后,它不能一直"独占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。下面分别来分析这五种状态:一 新建[Java]纯文本查看复制代码? 1 2 3 4 5 6 7 public class...

2020-05-25 09:45:21 92

原创 创建懒汉式单例模式线程安全问题

一、在方法上通过synchronized加锁[Java]纯文本查看复制代码? 1 2 3 4 5 6 7 8 9 public class SingleteExample { private static SingleteExample singleteExample; [p=30, 2, left] private SingleteExample() {...

2020-05-25 09:41:20 106

原创 一文带你彻底搞懂 Maven

一文带你彻底搞懂 Maven在刚学maven时,我就把maven当作一个引入jar包的工具而已,以前是自己下载jar包,现在是只用在pom文件中填写相应的坐标就可以了。除此之外当我们需要使用的jar包依赖于另一个jar包时,maven会自动帮我们引入适用的版本。这就避免了我们自己下jar包,然后版本不匹配的问题。除此之外,我还模糊的知道一些maven的聚合和继承,之后在接手项目的时候还是吃了的大亏。于是打算重新学习一下maven。 maven是什么Apache Maven is a s...

2020-05-25 09:38:24 210

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除