![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 61
Cry丶
/*有些梦虽然遥不可及, 但却并不是不可以实现*/<br>
写博客的原因(告戒自己):
1.记录自己的成长, 是非对错10年后回望;
2.我踩过的坑,同仁们就不要再迈了;
3.开源精神 理想主义 利他主义。
展开
-
【starters】springboot-starter整合阿里云datahub
文章目录1. 功能介绍2.快速开始2.1 启动客户端2.2 获取DataHub客户端2.3 写数据2.4 读数据3. 核心代码DataHub 类似于传统大数据解决方案中 Kafka 的角色,提供了一个数据队列功能。DataHub 除了供了一个缓冲的队列作用。同时由于 DataHub 提供了各种与其他阿里云上下游产品的对接功能,所以 DataHub 又扮演了一个数据的分发枢纽工作。datahub提供了开发者生产和消费的sdk,在平时的开发中往往会写很多重复的代码,我们可以利用springboot为我原创 2022-04-05 16:17:50 · 4349 阅读 · 6 评论 -
JDK自带的监听器模式
转载,仅供查阅JDK自带的监听器模式转载 2022-03-30 11:11:17 · 342 阅读 · 2 评论 -
【SpringCloudAlibaba】微服务组件Sentinel
文章目录1. 前言1.1 分布式系统遇到的问题1.2 解决方案2. Sentinel: 分布式系统的流量防卫兵2.1 Sentinel 是什么2.2 Sentinel 工作原理2.2.1 基本概念2.2.2 Sentinel工作主流程2.3 Sentinel快速开始2.4 Spring Cloud Alibaba整合Sentinel1. 前言课前思考:1、当服务访问量达到一定程度,流量扛不住的时候,该如何处理?2、服务之间相互依赖,当服务A出现响应时间过长,影响到服务B的响应,进而产生连锁反应,直原创 2022-03-17 10:54:01 · 408 阅读 · 27 评论 -
【SpringCloudAlibaba】微服务组件Nacos配置中心
1. Nacos配置中心使用官方文档: https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-configNacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。1.1 快速开始准备配置,nacos se原创 2022-03-15 09:37:14 · 944 阅读 · 30 评论 -
【SpringCloudAlibaba】微服务组件Dubbo
1. provider端配置引入依赖<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency> <groupId>com.alibaba.cloud</groupId>原创 2022-03-14 00:31:26 · 2019 阅读 · 16 评论 -
【SpringCloudAlibaba】微服务组件Feign
文章目录JAVA 项目中如何实现接口调用?1. 什么是Feign1.1 优势1.2 Feign的设计架构1.3 Ribbon&Feign对比1.4 Feign单独使用2. Spring Cloud Alibaba快速整合Feign3. Spring Cloud Feign的自定义配置及使用3.1 日志配置3.2 契约配置3.3 通过拦截器实现认证3.4 超时时间配置3.5 客户端组件配置3.5.1 配置Apache HttpClient3.5.2 配置 OkHttp3.6 GZIP 压缩配置3.7原创 2022-03-14 00:03:35 · 409 阅读 · 2 评论 -
【SpringCloud】微服务负载均衡器Ribbon
1.什么是Ribbon目前主流的负载方案分为以下两种:集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如 Nginx)。客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自原创 2022-03-10 11:54:46 · 266 阅读 · 27 评论 -
【LoadBalancer】SpringCloud微服务组件LoadBalancer
文章目录1. 什么是Spring Cloud LoadBalancer1)RestTemplate2)WebClient2. RestTemplate整合LoadBalancer1)引入依赖2)使用@LoadBalanced注解配置RestTemplate3) 使用3. WebClient整合LoadBalancer1)引入依赖2) 配置WebClient作为负载均衡器的client3) 使用1. 什么是Spring Cloud LoadBalancerSpring Cloud LoadBalancer原创 2022-03-10 09:59:06 · 603 阅读 · 5 评论 -
【Ribbon】自定义负载均衡策略实现不同版本的灰度(金丝雀)发布
前言灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度 —— 百度百科📒 下面把上面这段表述抽象成程序设计模型:比如现在有2个服务,user服务和order服务,user服务通过在注册中心拉取order服务的地址来消费o原创 2022-03-09 11:54:14 · 1851 阅读 · 33 评论 -
【SpringCloudAlibaba】微服务组件Nacos注册中心
前言:基础铺垫什么是微服务架构?微服务架构是一种去中心化架构,比如我们的注册中心挂了,服务还是能调到其他服务的资源(有缓存),但现在的网关层也有着中心化的趋势。微服务架构和集中式架构的区别?我们常看到的SOA,就是一种集中式架构,比如ESB(企业消息总线),通过nginx转发到下游的其他服务,但它存在nginx的单点问题。Spring全家桶之间的递进关系Spring:基于bean,基于javaconfig或者xml的方式让第三方框架的bean加载到Spring容器中,例如Mybatis的SqlS原创 2022-03-06 22:10:56 · 1284 阅读 · 33 评论 -
【ClassLoader】实现自定义类加载器加载指定路径下的Class文件和Jar包
自定义类加载器:1.加载指定目录下的.class文件2.加载指定目录下的jar包原创 2022-03-06 14:25:35 · 8457 阅读 · 34 评论 -
【性能监控:jvm+cpu+目标field】自定义类加载器+Java agent+反射实现对tomcat的零侵入式服务监控
前言最近项目中有一个需求,需要临时监控一下一个部署在tomcat中的服务的jvm性能和cpu性能,这个服务中有一个内存队列queue,存储的是消费kafka后的数据,也需要对其进行大小的监控,来判断是否存在消息积压,从而判断是否需要进行性能的调优或者扩服务。市面上已经有很多成熟的大型项目的监控方案了:例如可以用prometheus或者arthas来实现各种可定制的监控方案,我会在后面抽空补充下这些常用的开源监控组件的使用方案,但是这些方案都有个很明显的问题,就是部署起来太重,而我现在只需要快速且轻量的临原创 2022-03-05 23:27:22 · 676 阅读 · 0 评论 -
【面试真题】实现一个快速排序
题干:我们使用的是经典快速排序: 以左边界为基准值base,具体分析过程详见博主【Java版算法思想(排序)】选择&冒泡&快排参考代码:/** * @author cry777 * @program demo1 * @description 经典快速排序: 以左边界为基准值 * @create 2022-02-25 */public class QuickSort { public static void main(String[] args) {原创 2022-02-25 09:47:02 · 261 阅读 · 1 评论 -
【Spring】Spring底层核心原理解析
本文内容索引:1.Bean的生命周期底层原理2.依赖注入底层原理3.初始化底层原理4.推断构造方法底层原理5.AOP底层原理6.Spring事务底层原理但都只是大致流程,后续会针对每个流程详细深入的分析源码实现。先来看看入门使用Spring的代码:ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");UserService userService = (Use原创 2022-02-18 15:21:53 · 3579 阅读 · 0 评论 -
【面试真题】给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students,每个班级的score和classId均随机,输出每个班级里学生的平均成绩
给定一个基本数据类型如下:class Student{ int score; // 成绩 String classId; // 班级id号}给定3个班级,班级id号分别为c1,c2,c3,随机生成一个List<Student> students; 该students的size()为15000,每一个学生Student的班级随机从c1、c2和c3中选取,每一个学生Student的成绩score随机从60到100随机选取,输出为每个班级里学生的平均成绩(多线程)。参考代码class原创 2022-02-17 23:09:52 · 499 阅读 · 0 评论 -
【面试真题】给定一个List<Double>num,每个元素的值随机从[0,1]取,请用2个线程分别计算num的均值和中位数;要求并行执行,等到两个线程都执行完毕后,取均值和中位数的最大值作为输出
给定一个List<Double> num,num.size()为0xFFFF,每个元素的值随机从[0,1]取,请用2个线程分别计算num的均值和中位数; 要求这两个线程是并行执行(注意不是顺序执行,即"不是"一个线程执行完毕再执行第二个线程),等到两个线程都执行完毕后,取均值和中位数的最大值作为输出。我们选用的 OpenJDK 14 最新环境,你的 java 代码会传送至 ShowMeBug 提供的该环境中。你必须定义一个 ShowMeBug 类和 public static void ma原创 2022-02-17 22:39:48 · 446 阅读 · 0 评论 -
【面试真题】一个函数,有两个输入变量,分别为n和x,这个函数的计算公式如下,请用递归的方式完成代码的编写
我们选用的 OpenJDK 14 最新环境,你的 java 代码会传送至 ShowMeBug 提供的该环境中。你必须定义一个 ShowMeBug 类和 public static void main(String[] args) 方法,这样我们才能运行出结果。一个简单的例子:public class ShowMeBug { public static void main(String[] args) { System.out.println("Hello World!"); }}原创 2022-02-17 22:28:08 · 881 阅读 · 0 评论 -
【Kafka】Kafka生产问题总结及性能优化实践
Kafka可视化管理工具kafka-manager安装及基本使用可参考:https://www.cnblogs.com/dadonggg/p/8205302.html线上环境规划(参考)注意:对于单机抗高并发(上万)的机器,一定要上大内存JVM参数设置kafka是scala语言开发,运行在JVM上,需要对JVM参数合理设置,参看JVM调优专题修改bin/kafka-start-server.sh中的jvm设置,假设机器是32G内存,可以如下设置:export KAFKA_HEAP_OPTS原创 2022-02-16 09:39:51 · 446 阅读 · 0 评论 -
【Kafka】Kafka设计原理详解
Kafka设计原理详解Kafka核心总控制器Controller在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。当使用kafka-topics.sh脚本为某个topic增加分区数量时,同样还是由控制器负责原创 2022-02-14 11:01:32 · 177 阅读 · 0 评论 -
【Kafka】Kafka架构设计之组件详解
Meta(元信息)broker :servertopic:queue组,partition:queue,默认1:1,可以1:多,每个partition对应一个磁盘中的文件为什么要设计topic和partition,1:多的关系?kafka的设计上broker会存在消息积压,最终msg会落地到磁盘文件中持久化,大数据量的情况下要考虑分布式存储,所以要把topic拆成几个partition,存在放在不同的物理机上实现分布式存储指定不同的consumer消费不同的partition,提升消费并行度,不原创 2022-02-14 10:39:51 · 1179 阅读 · 0 评论 -
【Kafka】Kafka核心使用和SpringBoot整合
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。Kafka的使用场景日志收集:一个公司可以用K.原创 2022-02-14 10:31:18 · 1272 阅读 · 4 评论 -
【Netty源码解析】Netty核心源码和高并发、高性能架构设计精髓
Netty线程模型图Netty线程模型源码剖析图图链接:https://www.processon.com/view/link/5dee0943e4b079080a26c2acNetty高并发高性能架构设计精髓主从Reactor线程模型NIO多路复用非阻塞无锁串行化设计思想支持高性能序列化协议零拷贝(直接内存的使用)ByteBuf内存池设计灵活的TCP参数配置能力并发优化无锁串行化设计思想在大多数场景下,并行多线程处理可以提升系统的并发性能。但是,如果对于共享资源的并发访问原创 2022-02-09 15:01:23 · 649 阅读 · 0 评论 -
【Mybatis源码解析】Mybatis源码中涉及的设计模式总结
虽然我们都知道有26个设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大量的设计模式,阅读源码并观察设计模式在其中的应用,能够更深入的理解设计模式。Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder;工厂模式,例如SqlSessionFactory、ObjectFact原创 2022-02-07 17:26:46 · 207 阅读 · 0 评论 -
【Netty】Netty编解码&粘包拆包&心跳机制&断线自动重连
Netty编解码Netty涉及到编解码的组件有Channel、ChannelHandler、ChannelPipe等,先大概了解下这几个组件的作用。ChannelHandlerChannelHandler充当了处理入站和出站数据的应用程序逻辑容器。例如,实现ChannelInboundHandler接口(或ChannelInboundHandlerAdapter),你就可以接收入站事件和数据,这些数据随后会被你的应用程序的业务逻辑处理。当你要给连接的客户端发送响应时,也可以从ChannelInboun原创 2022-02-07 16:51:44 · 302 阅读 · 0 评论 -
【Netty】Netty核心功能和线程模型
Netty初探NIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、 SocketChannel、 ByteBuffer等。开发工作量和难度都非常大: 例如客户端面临断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处理等等。Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装,解决了上述问题。且Netty拥有高性能、 吞吐量更高,延迟更低,减少资源消耗,最小化不必要的内存复制等优点。Netty 现在都在用的原创 2022-02-07 14:47:36 · 149 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis执行Sql的流程分析
本章着重介绍MyBatis执行Sql的流程,关于在执行过程中缓存、动态SQl生成等细节不在本章中体现还是以之前的查询作为例子:public class App { public static void main(String[] args) { String resource = "mybatis-config.xml"; Reader reader; try { //将XML配置文件构建为Configuration配置类原创 2022-02-07 11:55:06 · 245 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis插件原理
MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截MyBatis中的哪些内容呢?我们进入官网看一看:MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:1.Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)2.ParameterHandler原创 2022-02-07 11:40:48 · 91 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis的二级缓存源码解析
1、二级缓存的定义二级缓存也称作是应用级缓存,与一级缓存不同的是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改比较少的数据。2、二级缓存扩展性需求二级缓存的生命周期是整个应用,所以必须限制二级缓存的容量,在这里mybatis使用的是溢出淘汰机制。而一级缓存是会话级的生命周期非常短暂是没有必要实现这些功能的。相比较之下,二级缓存机制更加完善。3、二级缓存的结构二级缓存在结构设计上采用装饰器+责任链模式1)二级缓存是如何组装这些装饰器的呢?这里我们先介原创 2022-02-07 09:49:06 · 374 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis解析Mapper.xml(以动态sql为例)
我们在使用mybatis的时候,会在xml中编写sql语句。比如这段动态sql代码:<update id="update" parameterType="org.format.dynamicproxy.mybatis.bean.User"> UPDATE users <trim prefix="SET" prefixOverrides=","> <if test="name != null and name != ''">原创 2022-02-07 09:35:17 · 811 阅读 · 0 评论 -
【Mybatis源码解析】MyBatis解析全局配置文件
MyBatis介绍MyBatis是一个持久层的ORM框架,使用简单,学习成本较低。可以执行自己手写的SQL语句,比较灵活。但是MyBatis的自动化程度不高,移植性也不高,有时从一个数据库迁移到另外一个数据库的时候需要自己修改配置,所以称只为半自动ORM框架传统JDBC和Mybatis相比的弊病传统JDBC@Testpublic void test() throws SQLException { Connection conn=null; PreparedStatement ps原创 2022-02-07 01:00:56 · 133 阅读 · 0 评论 -
【Mybatis源码解析】Mybatis源码体系结构
总览图Mybatis架构分层在基础支撑层,Mybatis通过XMLConfigBuilder、XMLMapperBuilder等功能类把mybatis-config.xml、mapper.xml等配置文件中的数据全部解析到Configration类中,供API接口层中的SqlSession接口调用,从而在数据处理层实现具体的处理Mybatis有四大核心组件,负责具体SQL查找、SQL解析和执行结果映射处理等。接下来几篇专栏会依次从:解析全局配置文件、解析Mapper.xml、二级缓存解析、原创 2022-02-07 00:37:59 · 391 阅读 · 0 评论 -
【精华】Spring与Mybatis的事务管理
问题:Spring 与 Myabatis 整合后,为什么 DAO 不提交事务,但是数据能够插入数据库中?Mybatis 提供的连接池对象 —> 创建 ConnectionConnection.setAutoCommit(false) 手工的控制了事务,操作完成后,需要手工提交。Druid(C3P0、DBCP)作为连接池 —> 创建 ConnectionConnection.setAutoCommit(true) 默认值为 true,保持自动控制事务,一条 sql 自动提交。答案:因原创 2022-02-05 03:06:33 · 1785 阅读 · 0 评论 -
【Java版高级数据结构】最短路径(迪杰斯特拉算法)
本文代码: https://github.com/chenruoyu0319/data-structure-for-java/tree/main/%E6%9C%80%E7%9F%AD%E8%B7%AF%E5%BE%84一、最短路径分析比如我们现在要对一个地图计算最短路径,首先我们要解决这个问题就要找准一个数据结构,很显然地图肯定是用图结构来表示最好了。具体:我们可以把每个路口看成一个点,路口之间的路看作一条边。路的长度就是边的权重,即可得到以下这个图形:这里我们就将地图转换成了我们熟悉的数据结构图原创 2022-02-03 22:33:48 · 1250 阅读 · 0 评论 -
【CSDN 年度征文|回顾 2021,展望 2022】【Java版高级数据结构】图论基础(DFS&BFS)
本文涉及代码见:https://github.com/chenruoyu0319/data-structure-for-java/tree/main/%E5%9B%BE%E8%AE%BA%E5%9F%BA%E7%A1%80%EF%BC%88DFS%26BFS%EF%BC%89一、什么是图?图(Graph)是一种非线性数据结构。可以说它是一种比较复杂的数据结构,它比树还要复杂。因为图没有层的概念,它们之间的任意元素都可能产生关系。图的基本知识:(1)顶点:图中的节点(2)边:节点与节点之间的关系(原创 2022-02-01 15:26:15 · 902 阅读 · 0 评论 -
【Java版高级数据结构】堆树&堆排序
本文涉及代码实现github地址: https://github.com/chenruoyu0319/data-structure-for-java/tree/main/%E5%A0%86%E6%A0%91一、堆树堆是什么?堆是一种特殊的树,他需要满足以下两点:1.是一颗完全二叉树2.其每一个节点的值都大于等于或者小于等于其左右子节点的值。补充:完全二叉树:除了最后一层,其他层每个节点都是满的且最后一层的节点都要靠左排列。大顶堆:首元素为堆内最大的元素小顶堆:首元素为堆内最小的元素二原创 2022-01-23 14:06:30 · 890 阅读 · 0 评论 -
【Java版高级数据结构】赫夫曼树(哈夫曼树)
本文代码地址: https://github.com/chenruoyu0319/data-structure-for-java/tree/main/%E8%B5%AB%E5%A4%AB%E6%9B%BC%E6%A0%91(%E5%93%88%E5%A4%AB%E6%9B%BC%E6%A0%91)一、赫夫曼树(哈夫曼树)首先让我们来思考2个问题:1.电报发送:二战的时候大家都知道那时候普遍会应用电报,如果让你来设计一个电报的发送编码你该如何设计呢?一种思路就是做一个映射,比如a b c d ,a映射原创 2022-01-17 04:04:03 · 215 阅读 · 0 评论 -
【Java版高级数据结构】B-Tree&B+Tree
B+Tree的详细分析: https://github.com/chenruoyu0319/data-structure-for-java/tree/main/B-Tree%26B%2BTree一、改造二叉搜索树普通的二叉搜索树,在执行例如select * from table where id > 12的sql语句的时候,会遇到范围查询查到一个叶子节点,还需要回到父节点去遍历其他值的问题,并不能直接高效的把所有值查出来。但如果我们把二叉搜索树改造成如下模样,把所有节点都在叶子节点上存储一份,原创 2022-01-13 08:29:11 · 762 阅读 · 0 评论 -
AQS(AbstractQueuedSynchronizer)
https://www.cnblogs.com/waterystone/p/4920797.html转载 2022-01-11 14:52:41 · 56 阅读 · 0 评论 -
【Java版高级数据结构】二叉搜索树&红黑树
二叉搜索树和红黑树相关代码: https://github.com/chenruoyu0319/data-structure-for-java/tree/main/%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%26%E7%BA%A2%E9%BB%91%E6%A0%91一、二叉搜索树(二叉排序树)二叉搜索树又叫二叉查找树,二叉排序树;它具有以下特点:1.如果它的左子树不为空,则左子树上结点的值都小于根结点。2.如果它的右子树不为空,则右子树上结点的值都大于原创 2022-01-09 05:09:36 · 279 阅读 · 0 评论 -
Java的Unsafe类(转)
https://www.cnblogs.com/pkufork/p/java_unsafe.html转载 2022-01-06 13:58:50 · 52 阅读 · 1 评论