- 博客(41)
- 资源 (1)
- 收藏
- 关注
原创 JVM调优—减少FullGC
最近负责了一个审批流程新项目,带领了几个小伙伴,哼哧哼哧的干了3个月左右,终于在三月底完美上线了,好消息是线上客户用的很丝滑,除了几个非常规的业务提单之外,几乎没有什么大的问题,但是美中不足的是,发现每个pod的GC频率非常高,基本上30分钟就会有一次FGC,导致每次流量高峰的时候,会有一部分客户反馈,系统有些卡顿,观察监控平台发现,每天流量高峰的时候FGC竟然达到了惊人的5分钟每次,每次GC的时间差不多有400-700ms,此时,部分接口的耗时达到了5s,因此接口优化和参数调优迫在眉睫;
2024-05-10 22:42:03
1715
原创 mybatis-plus报错:Invalid bound statement (not found)
Invalid bound statement (not found)
2023-09-19 21:02:40
3806
原创 Spring集成Ribbon负载均衡遇到的问题
springcloud集成ribbon常见的错误,No instances available for PROVIDER-HI,无法拉取到eureka实例
2022-07-23 21:05:04
831
原创 ElasticSearch
Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。传统的关系性数据库MySQL、oracle、PostgreSQL更擅长的是事务类型的操作,可以确保数据的安全和一致性;如果是有事务要求,如商品的下单支付等业务操作,无疑使用MySQL。而ES更擅长的是海量数据的搜索,分析和计算;如果是复杂搜索,无疑可以使用Elasticsearch。官网地址:https://www.elasti
2022-06-20 23:23:19
430
原创 Mybatis源码
单独使用Mybatis首先需要在resources目录下建立一个mybatis-config.xml文件文件内容如下<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration&g
2022-05-11 23:31:26
1537
原创 消息队列基础
消息队列的三个场景:异步、削峰、解耦1、异步:我们之前的场景里面有很多步骤都是在一个流程里面需要做完的,就比如说我的下单系统吧,本来我们业务简单,下单了付了钱就好了,流程就走完了。但是后面来了个产品经理,搞了个优惠券系统,OK问题不大,流程里面多100ms去扣减优惠券。后来产品经理灵光一闪说我们可以搞个积分系统啊,也行吧,流程里面多了200ms去增减积分。再后来后来隔壁的产...
2022-05-11 20:16:20
126
原创 RocketMq
概述rocketmq消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统,RocketMQ是阿里云基于 Apache RocketMQ 构建的低延迟、高并发、高可用、高可靠的分布式消息中间件,今天了解下它。rocketmq中间件的架构图正在上传…重新上传取消rocketmq基本组件概念RocketMQ主要由 Producer、Broker、Consumer 、Nameserver四部分组成,其中Producer 负责生产消息,...
2022-03-29 22:57:37
694
原创 sentinel入门案例
1、新建一个springWeb项目2、引入sentinel核心依赖<!--sentinel核心依赖--><dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.7.2</version></dependency>
2022-03-20 12:09:58
581
原创 Dubbo SPI
Dubbo SPI使用SPI简介SPI 全称为 Service Provider Interface,是一种服务发现机制,刚好与java jdk的类加载机制进行了一个互补。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo ......
2022-01-19 23:35:09
3147
原创 mybatis-plus 使用saveBatch踩过的坑
为了不重复写mapper文件里的foreach标签,我们通常会将mybatis升级为mybatis-plus,从而使用Iservice里面的saveBatch方法;mapper标签的foreach写法<insertid="addRoleModule"parameterType="java.util.List">INSERTINTOT_P_ROLE_MODULE(ROLE_ID,MODULE_ID)VALUES<foreachcollecti...
2021-09-28 13:01:36
22761
1
原创 java NIO实现基本原理
NIO的工作原理:1、由一个专门的线程来处理所有的 IO 事件,并负责分发。2、事件驱动机制:事件到的时候触发,而不是同步的去监视事件3、线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换java NIO采用了双向通道(channel)进行数据传输,而不是单向的流(stream),在通道上可以注册我们感兴趣的事件。一...
2020-04-13 22:45:11
632
原创 常见的排序算法
排序0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗...
2020-03-28 21:54:35
143
原创 Mysql日志
Mysql数据库MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等日志系统:在一个表上有更新的时候,跟这个表有关的查询缓存会失效,所以这条语句...
2020-03-27 23:06:13
119
原创 Linux常用命令整理
1.1 cd命令命令格式:cd <路径>意义:cd是change directory 的缩写;cd命令后面跟一个路径,用于切换当前用户所在的路径,其中路径可以是绝对路径也可以是相对路径。示例:cd /system/bin 表示切换到/system/bin路径下。cd logs 表示切换到logs路径下。cd / 表示切换到根目录。cd ../ 表示切换到上一...
2020-03-08 22:37:25
189
原创 Java原子操作类汇总
当程序更新一个变量时,如果是多线程同时更新这个变量,可能得到的结果与期望值不同。比如:有一个变量i,A线程执行i+1,B线程也执行i+1,经过两个线程的操作后,变量i的值可能不是期望的3,而是2。这是因为,可能在A线程和B线程执行的时候拿到的i的值都是1,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问题,synchronized能保证多线程不会同时更新变量i....
2020-03-08 21:21:14
122
原创 数据库索引
1、索引定义:索引是对数据库表中一列或多列的值进行排序的一种结构,如果要按特定的索引进行查找,与必须搜索表中的所有行相比,索引会更快的获取信息。索引是一个单独的、物理的数据库结构,它是表中一列或多列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引提供指向存储在表的指定列中的数据值的指针,然后根据指定的排序顺序对这些指针排序。数据库使用索引的方式和书籍中农的索引的方式很相似:搜...
2020-03-01 22:39:50
338
原创 多线程
1、线程池创建ThreadPoolExecutor对象有哪些核心的参数,线程池的构造函数参数多达7个corePoolSize:线程池中核心线程数的最大值 maximumPoolSize:线程池中能拥有最多线程数 workQueue:用于缓存任务的阻塞队列 keepAliveTime:表示空闲线程的存活时间。 TimeUnitunit:表示keepAliveTime的单位。 ...
2020-02-29 21:53:03
1259
原创 Redis
1、redis简介简单来说redis就是一个数据库,不过与传统数据库不同的是redis的数据是存在内存中,所以读写的速度非常快,因此redis被广泛的应用于缓存方向,另外,redis也经常用来做分布式锁。redis提供了多种数据类型来支持不同的业务场景。...
2020-02-29 13:56:41
168
原创 集合框架
ArrayList和LinkedList的区别ArrayList和LinkedList相同点:ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。区别:List接口的实现方式不同ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行...
2020-02-27 22:29:16
89
原创 Pygal画廊(基于Pygal分析概率论与数理统计的掷骰子事件)
模拟掷骰子创建一个骰子类from random import randintclass Die(): """表示一个骰子的类"""#num_sides表示骰子的面数,默认为6面 def __init__(self, num_sides=6): """骰子默认为6面""" self.num_sides = num_sides ...
2020-02-27 21:28:50
181
原创 Mysql锁机制--乐观锁 & 悲观锁
1、悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观...
2020-02-26 21:19:36
223
原创 事务
事务的隔离级别:1、脏读(读未提交)指的是在一个事务处理过程中读取了另一个未提交事务中的数据;当一个事务正在多次修改某个元数据,而这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。举个例子,A在一个转账事务中,转给了100块钱给B,此时B读到了这个转账的数据,然后做了一些操作,(转给了C),可这时候A的事务并没有提交,如果A事务回滚...
2020-02-26 20:58:08
191
原创 锁
volatile关键字的作用、原理常用于保持内存可见性和防止指令重排序;内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态。public class MutableInteger { private int value; public int get(){ return value; } pu...
2020-02-26 18:11:11
128
原创 利用matplotlib绘制疫情地图(陕西)
项目中用到的知识点:1、zip():zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),第0个元组对应于所有参数的第0个元素,第1个元组对应于所有参数的第1个元素,依此类推,然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。 zip([1,2,3,4],...
2020-02-25 21:36:51
2047
原创 Pyhton字典
一、Python字典定义在python中,字典是一系列键—值对,每个键都与一个值相关联,可以使用键来访问与之关联的值。与键相关的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典的值。在Python中,字典用放在花括号{}中的一系列键—值对表示例:alien = {‘color’:‘green’,'points':5}键—值对是两个相关联的值,指定键时,P...
2020-02-14 17:58:35
257
原创 列表
一、定义在python中,用方括号([ ])来表示列表,并用逗号来分割其中的元素;例:colors = ['red','blue','Yellow','green','pink']访问列表元素列表是有序集合,因此要访问列表中的任何元素,只需要将该元素的位置或索引告诉python即可例:colors = ['red','blue','Yellow','green','pink']...
2020-02-11 22:36:24
674
原创 JVM内存管理
一、物理内存与虚拟内存: 1、物理内存即RAM(随机存储器) 2、寄存器,用于存储计算单元指令(如浮点,整数等运算) 3、地址总线:连接处理器和RAM 4、虚拟内存使得多个进程在同时运行可以共享内存二、内存空间与用户控件 1、内核空间指操作系统运行时所使用的...
2020-02-10 12:28:02
375
1
原创 Python基础
变量的命名和使用:1、变量名只能包含字母、数字和下划线。变量名可以是字母或者下划线开头,但不能以数字开头;e.g:正确命名:message_1,错误命名:1_message。2、变量名不能包含空格,但可以使用下划线来分割其中的单次;e.g:正确命名:greeting_message,错误命名:greeting message3、不要将Python关键字和函数名作为变量名,即不要使用Py...
2020-02-09 22:21:58
141
原创 GC
1、IDEA VM参数配置:2、CMS GC过程日志打印详情(很多资料上写的GC打印过程只有1、2、5、6这四种,从某种意义上说这是错误的说法):3、G1的GC过程: 3.1、初始标记; 3.2、并发标记; 3.3、重新标记(最终标记); 3.4、并发清理4、CMS VS G1 ...
2020-02-07 22:12:34
113
springboot
2018-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人