
java
文章平均质量分 75
zhang.yao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
kafka顺序消费遇到的一个问题和心得
记录一下最近遇到的一个kafka的问题,kafka用的比较少,理解不深出现的问题,特此记录问题描述业务要求: kafka上的消息要求顺序消费,且为了保证顺序在生产消息时也是顺序的投放到一个分区中.一开始写的很简单,既然一个分区还要求顺序消费,那我就单线程消费呗,一个消费者消费一个分区单线程肯定是顺序的,刚开始也确实没有问题,但是运行一段时间后出现了问题.接入生产环境数据后,kafka数据量突然上升一个量级,大概每天有接近1千万左右的数据,由于我们的消费者里还有一些业务逻辑,所以其实每条数据消费速度并原创 2022-02-23 19:38:04 · 1140 阅读 · 0 评论 -
ElasticSearch几个简单基础的概念
1.安装参考CSDN es官方博客 https://elasticstack.blog.csdn.net/article/details/99413578官网下载,启动即可测试安装:postman测试:http://192.168.164.132:9200/返回如下图所示,安装成功2.概念2.1 Cluster集群,有一个或多个节点组成,默认情况下启动的es有一个cluster的集群,参照Es的配置文件elasticsearch.yml如下如所示:PostMan查询集群状态Get ht原创 2022-02-15 20:04:28 · 935 阅读 · 0 评论 -
JVM深入学习(十四)-JVM中垃圾回收进阶概念
1. 内存溢出和内存泄漏问题1.1 内存溢出内存空间不足,且垃圾回收器也无法提供更多的内存,就会出现内存溢出情况内存溢出多出现于堆空间,很少出现于虚拟机栈,但是栈也会出现Strack Overflow正常情况下,各年龄代的垃圾回收正常回收对象已经足够,当内存空间实在不足时,触发一次FullGC,回收大量内存,保证程序正常,但是当内存占用的速度非常快的时候,超过垃圾回收的速度的时候就会出现OOM1.1.1 内存空间不足内存空间不足可以分为两种情况堆内存初始化的内存较小 -Xms -Xmx分原创 2022-01-13 22:33:44 · 151 阅读 · 0 评论 -
System.gc()做了什么?
1. System.gc()System.gc()我们都知道是手动垃圾回收,这点无需多说,今天我们来了解一下System.gc()是怎么进行垃圾回收的。System.gc()内部调用了 Runtime.getRuntiompublic static void gc() { Runtime.getRuntime().gc();}在往深一层则是本地方法了public native void gc();System.gc()会执行FullGC,对新生代和老年代进行回收注意: 此时垃圾回原创 2022-01-13 22:32:06 · 639 阅读 · 0 评论 -
Netty的简单使用和理解
Netty 学习笔记1.Netty 介绍和应用场景1.1 介绍Netty 是jboss的一个开源框架Netty是一个异步的,基于事件驱动的网络应用框架基于nio1.2 应用场景Rpc 例如dubbo游戏大数据涉及到网络通信的应用都可以使用netty2. i/o模型2.1 介绍bio 同步并阻塞 一个连接对应服务器一个线程 适用于连接数较少的架构 jdk1.4nio 同步非阻塞 服务器一个线程处理多个连接 适用于连接数较多连接时间短 jdk1.4aio(nio.原创 2022-01-04 20:46:59 · 880 阅读 · 1 评论 -
SpringBoot及SpringCloud配置文件加载分析(源码解读)
SpringBoot版本 2.3.5.RELEASESpringCloud版本 Hoxton.SR9本文只讨论配置文件加载,以bootstrap.yml和application.yml为例,后缀名的加载顺序可以通过源码看到.bootstrap.yml是SpringCloud使用的配置文件,SpringBoot中其实并没有加载bootStrap.yml的默认实现1. 概述SpringBoot加载配置文件的方式是使用了观察者模式,在启动时发出一个事件(ApplicationEnvironmentPre原创 2021-12-26 22:37:28 · 2419 阅读 · 1 评论 -
JVM深入学习(六)-运行时数据区之堆
4.1 堆的概述一个jvm实例只存在一个堆内存,一个进程对应一个jvm实例,堆也是jvm内存管理的核心区域堆在jvm启动的时候就创建好了,是JVM管理最大的一块内存空间堆大小可以调节 -Xms初始堆大小 -Xmx最大堆大小代码说明package com.zy.study05;/** * @Author: Zy * @Date: 2021/7/29 15:47 * -Xms20M -Xmx20M */public class HeapSizeTest { publ原创 2021-12-14 21:55:26 · 463 阅读 · 0 评论 -
JVM深入学习(五)-运行时数据区之本地方法栈
与虚拟机栈类似(管理java方法的调用),本地方法栈主要管理本地方法的调用整体机制与虚拟机栈类似线程私有栈大小可以固定也可以动态a. 同样的会出现StackOverFlowError/OOM本地方法使用C/C++实现的具体做法是本地方法栈中登记本地方法,由执行引擎加载本地方法库执行JVM调用一个本地方法接口的时候,就不再收JVM限制了,因为本地方法的权限和JVM相同,并且因为是C/C++实现的本地方法,可以直接调用物理机的本地寄存器/本地内存JVM规范并没有强制要求实现本地方法栈Hots原创 2021-12-14 21:48:37 · 1557 阅读 · 0 评论 -
JVM深入学习(四)-运行时数据区之虚拟机栈
2.1 概述2.1.1 栈和堆栈管运行,堆管存储2.1.2 java虚拟机栈是什么java虚拟机栈是线程私有的,每个线程启动的时候都会创建一个虚拟机栈,对应着java方法的调用2.1.3 作用主管程序的运行,保存方法的局部变量(基本数据类型可以直接存储,引用数据类型存储引用地址),部分结果,参与方法的调用的返回2.1.4 栈的特点栈是一种快速有效的存储方式,仅次于PC register栈不存在垃圾回收问题,存在OOMjvm对栈的操作只有两种随着方法的执行 入栈方法执行完毕 出栈原创 2021-12-13 20:35:24 · 791 阅读 · 0 评论 -
JVM深入学习(三)-运行时数据区之程序寄存器
JVM PC Register是对CPU物理寄存器的一种模拟CPU程序寄存器主要存储指令相关的现场信息,CPU只有把数据装载到寄存器才能够运行1.1 介绍1.2 作用存储下一条指令的地址,也就是即将执行的代码1.3 执行过程如上图所示,程序会被编译成具体的指令代码指令地址就是保存在pc寄存器的地址执行引擎通过获取pc寄存器的地址来获取执行的指令,操作局部变量表,操作数栈,再编译成机器指令,交给cpu运算1.4 常见问题1.4.1 使用pc寄存器存储字节码指令地址有什么用? 为什么使原创 2021-12-09 19:09:32 · 378 阅读 · 0 评论 -
JVM深入学习(十一)-执行引擎
1. 概述执行引擎是Java虚拟机核心的组成部分之一虚拟机是相对于物理机而言的,这两种机器都有执行引擎,物理机执行引擎是基于cpu和操作系统来说的,指令集与硬件有深度绑定,而虚拟机执行引擎是由**软件自己实现的,**因为可以使用硬件不支持的指令集.JVM的作用就是将字节码加载到内存中,解释编译为机器指令使操作系统能够识别执行.而执行引擎在其中起到的作用就是将字节码指令转换为机器指令.执行引擎的工作过程:执行引擎从pc寄存器中获取要执行的指令索引使用指令索引从操作数栈中获取要执行的指令将指令原创 2021-12-06 19:19:08 · 609 阅读 · 0 评论 -
整理一下java学习路线
今天整理一下过去现在未来的学习路线(Java方向)原创 2021-11-30 21:20:24 · 133 阅读 · 0 评论 -
把Ruoyi搞上去-云上部署之手动在KubeSphere部署Ruoyi
将RuoyiCloud部署到云上环境 RuoyiCloud地址: https://gitee.com/y_project/RuoYi-Cloud默认RuoyiCloud已可以在本地启动,且前台正常登录本次部署使用kubeSphere,为Linux单节点部署,有条件可以多节点使用的服务器为阿里云ECS,8c16gkubeSphere的安装参考之前的文章云上部署分为以下几个环节1. 中间件部署部署RuoyiCloud所需中间件Mysql,Redis,Nacos2. 微服务部署将Ruo原创 2021-11-29 21:55:37 · 1076 阅读 · 0 评论 -
把Ruoyi搞起来-Ruoyi本地项目启动部署
使用Ruoyi-Cloud作为部署的微应用,测试kubeSphere的部署项目地址: https://gitee.com/y_project/RuoYi-Cloud部署文档地址: http://doc.ruoyi.vip/ruoyi-cloud/1. 项目下载下载该项目到idea,配置好maven,并安装相关依赖2. 数据库配置整一个MySQL建立两个数据库, ry-config和ry-cloud执行项目目录下 sql目录下的 ry_20210908.sql ry_config_原创 2021-11-29 21:53:20 · 2225 阅读 · 0 评论 -
Druid+Oracle连接超时关闭问题
记录一下生产环境遇到的问题生产上的一个程序跑了一段时间后,老是出现 Closed Connection异常,往上追溯错误,发现有关闭连接失败异常该应用环境:Oracle + Druid + Spirngboot 2.2.9.RELEASE先搭建本地环境还原报错环境搭建引入依赖主要是druid oracle springboot依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven原创 2021-11-27 22:28:13 · 5750 阅读 · 0 评论 -
JVM学习(二) 类加载子系统
1.类加载子系统类加载子系统主要做的就是从本地磁盘或者网络上读取.class字节码文件,将字节码文件转换存放到内存中类加载子系统主要分为三个部分1.1 加载阶段通过类名获取此类的二进制字节流 将这个字节流的静态结构转换为方法区的运行时数据结构 在内存中生成Class对象(java.lang.Class) 作为方法区这个类的各种数据访问入口1.2 链接验证 验证字节码文件是否符合当前虚拟机的规范 还有其他验证 准备 给变量赋初始值 此处赋值并不包含常原创 2021-08-03 11:13:46 · 179 阅读 · 0 评论 -
JVM学习(一)JVM体系概述
Jvm的特点:一次编译,到处运行(字节码) 自动内存管理 自动的垃圾回收功能Jvm是跨平台,跨语言的Jvm的位置Jvm是一款程序虚拟机,区别于Vmvare这种系统虚拟机1.1 jvm整体结构class文件由 类装载器子系统 加载初始化到内存中 运行时数据区中的方法区和堆是线程共享的,其他三个是每个线程都有各自的 执行引擎由编译器,JIT编译器,垃圾回收器组成1.2 java代码的执行过程源代码经过java编译器翻译成字节码原创 2021-08-03 11:12:45 · 165 阅读 · 0 评论 -
Spring Security的FailureHandler触发时机
Spring Security的FailureHandler触发时机今天遇到一个问题,场景是在查询数据库的过程中,想要将查询过程中出现的错误和异常进行抛出,并交由SpringSecurity 自定义的失败处理器FailureHandler处理,本以为只要抛出异常就会被SpringSecurity的异常过滤器链拦截,结果不管怎么处理都没有实现后来看了以下SpringSecurity的异常处理源码,发现SpringSecurity只处理框架异常处理类AuthenticationException的异常具体原创 2020-11-24 22:14:57 · 859 阅读 · 0 评论 -
SpringBoot动态从数据库中获取数据源,动态切换数据源
SpringBoot动态多数据源1.简介SpringBoot静态数据源指的是将多个数据源信息配置在配置文件中,在项目启动时加载配置文件中的多个数据源,并实例化多个数据源Bean,再通过分包/Aop达到切换数据源的目的如果想要新增或者修改数据源,必须修改配置文件,并修改对应的代码(增加对应的DataSource Bean)重启项目,重新实例化数据源,才能使用动态数据源指的是将数据源信息配置在关系型数据库中或者缓存数据库中,在项目启动时只初始化一个默认数据源,在项目运行过程中动态的从数据库中读取数据源信原创 2020-11-04 19:09:30 · 10083 阅读 · 25 评论 -
gateway(源码分析)
gateway1. 什么是gateway官网解释: 该项目提供了一个在Spring生态系统之上构建的API网关,包括:Spring 5,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到API,并为它们提供跨领域的关注,例如:安全性,监视/指标和弹性。为什么使用gateway1.网关作为请求的入口,可以提供限流,权限校验等一系列功能2.提供路由分发功能2. 工作原理图3. 简单使用3.1 引入jar包&原创 2020-07-20 22:51:03 · 3076 阅读 · 0 评论 -
Open Feign 学习(源码分析)
Open Feign1.理解(open-Feign是什么)open-Feign是一个声明式的Http请求客户端,用于快速发起http请求,降低学习成本在Feign的基础上增加了对SpringMVC 的注解支持2.简单使用2.1 引入jar<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeig原创 2020-07-08 09:55:49 · 491 阅读 · 0 评论 -
snowflake分析
雪花算法结构图共64位第一位 占位符之后的41位存储二进制毫秒时间,最大存储到2039年后十位 5位存储机房id,5位存储机器id,一共10位最多存储1024个节点的机房机器码最后12位存储不规则序列号实现效果有序 按照时间戳排序,整体有序唯一 在分布式系统架构中也能达到无碰撞,获取唯一id无规则 因为后12位是无规则,就无法通过序列号获取当前系统的数据长度为19位,易于存储 例如uuid为32位,加上-共36位 太长不容易存储缺陷此时生成的id的时间是本地时间,如果本地原创 2020-06-04 16:37:12 · 806 阅读 · 0 评论 -
cas学习笔记
CAS1. 简介cas 是一套单点登录的具体实现,耶鲁大学开发, 目前最高版本为6.x (6.x使用gradle编译) 此处使用5.x版本(maven编译)分为两部分,服务端和客户端服务端就是统一的认证中心,客户端就是所有需要接入单点登录的系统2.服务端2.1 下载[cas github地址]: https://github.com/apereo/cas “源码地址”cas不建议直接在源码上修改,提供了一个模板项目,在模板项目上做扩展2.2原创 2020-06-04 16:35:37 · 378 阅读 · 0 评论 -
xxl-job
定时任务框架xxl-job1.xxl-job 简介2.为什么使用xxl-job原生定时任务框架:QuartzTimer+TimerTask (jdk自带)scheduled(springboot提供的)原生定时任务框架的缺点:仅支持单机部署(集群环境需要单独处理,加锁加标志)不支持生命周期统一管理(在不重启服务的情况下开启关闭任务)不支持分片任务不支持失败重试不支持动态调整(不重启服务的情况下修改任务参数)无报警机制无统计机制3.搭建xxl-job平台docker方式原创 2020-06-04 16:32:01 · 1231 阅读 · 0 评论