- 博客(20)
- 收藏
- 关注
原创 nginx 安装问题处理
nginx 安装错误./configure: error: the HTTP rewrite module requires the PCRE library./configure: error: the HTTP gzip module requires the zlib library./configure: error: the HTTP rewrite module requires the PCRE library执行 sudo yum install pcre pcre-devel.
2024-08-18 15:19:54
178
原创 git merger一个分支的某个提交到另一个分支
git merger一个分支的某个提交到另一个分支操作步骤操作步骤切换当前分支为需要合并的分支找到需要合并的commit id如果是idea,在提交记录上右击选择cherry pick,如果是命令行执行 git cherry-pick commitId
2024-08-12 17:11:41
131
原创 【docker拉取镜像 missing signature key】
docker拉取镜像 missing signature key更新docker更新docker移除旧的:yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine拉取新的: yum-config-manager --add-repo http://mirrors.aliyun.com/do
2024-08-09 10:03:15
229
原创 为什么要分库分表
背景随着业务不断的发展,系统的数据量越来越大,业务越来越复杂。此时,我们需要对数据库进行分库分表。分库分表又分为水平与垂直两种,分析如下:垂直方向主要针对业务一个业务表有上百个字段,那么我们就得拆分成几个表。比如:人可以分为基础和扩展表系统业务相当的复杂,这个是时候就得分库了,将业务简单化我们在分库后还要对指定类型数据计算(比如:月)这个时候就需要分库分表了水平方向主要针对数据量如果一张表得数据量太大上几千万,这个时候就得分表了,分表实现如果一个库得读写压力太大,CPU占用高,就得
2022-01-26 19:20:01
834
原创 redis相关问题处理
背景在我们使用redis过程中,或多或者少会遇到一些问题,下面做了一些总结,会陆续追加非原子操作在我们set变量的时候,需要再设置expire过期时间,分为两步非原子操作。想要实现原子操作,可以 使用set参数可以直接设置过期时间释放了别人的锁假设AB两个任务都会设置相同的key,由于A任务执行比较长的时间,锁已经自动释放了。此时B任务拿到锁,执行任务。刚好A执行完成,释放了B的锁,那样数据就乱了。因此,我们可以在set的时候,value设置成请求id(requestId)保证只有自己才能释放自己
2022-01-26 14:22:14
914
原创 MQ常见问题处理
背景在我们开发项目过程中,有些有些不关心的逻辑想异步处理,或者剥离依赖又或者遇到大流量的情况下会选择使用MQ,它可以帮助我们解决解耦,异步,削峰。但是在引入了MQ我们系统也会变得复杂,引入新的问题,会有哪些问题呢?重复消费问题重复消费数据会在新增的时候多插入数据或者更新的时候会覆盖数据的情况。因此,我们可以采用分布式锁或者唯一索引去解决新增重复数据的问题。使用乐观锁version去解决更新覆盖的问题。数据一致性问题在发送到消息消费过程中如果出现一个环节问题,数据就会不一致。因此,消费者消费失败增加
2022-01-26 13:41:42
2095
原创 JDK8 hashmap扩容优化
背景在jdk7中hashmap在高并发下扩容回出现死循环,jdk8中优化了死循环源码final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; // oldCap当前数组长度 int oldCap = (oldTab == null) ? 0 : oldTab.length; // oldThr当前最大扩容阈值 int oldThr = thre
2022-01-26 11:13:50
269
原创 高并发下如何保证接口的幂等性
背景在我们对数据库进行操作的时候,可能由于insert的时候多操作一个就回产生多一条一样的数据,或者在进行update的时候,老数据覆盖了新数据,那么我们应该如何避免重复或者误更新呢分析重复数据悲观锁在insert前先select for update将表锁住,没有就insert有就update唯一索引给主要的业务字段(比如:订单号)加上唯一索引防重表将多字段形成唯一表,插入数据,成功就insert否则步操作或者update分布式锁使用redis或者zk等分布式锁,操作成功就inse
2022-01-25 21:29:39
790
原创 时间轮分析
背景在需要完成重试机制或者心跳机制一类的业务,除了使用excutors做定时任务。还可以使用时间轮完成这类需求分析使用dubbo中的心跳重试作为案例分析时间轮的使用源码分析在HeaderExchangeClient启动的时候调用startHeartBeatTask()开启心跳任务,创建了一个HeartbeatTimerTask任务然后扔到了HashedWheelTimer时间轮类里面去,我们看见是先构造了一个时间轮对象,我们进去看看是啥上面两个图主要是创建时间轮需要的参数,怎么
2022-01-25 20:42:50
1739
原创 hashmap死循环分析
背景在使用hashmap的时候,如果是高并发场景下,那么扩容的时候有一定的几率出现,获取某个不存在key的值得时候出现死循环,做了如下的分析。源码/** * Transfers all entries from current table to newTable. */ void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; fo
2022-01-24 22:10:09
213
原创 JVM性能监控工具
JVM性能监控工具jmap概念使用jstack概念使用jstat概念使用jmap概念监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等使用ps -ef | grep javajmap -dump:live,file=dump.bin ${pid}jstack概念观察jvm中当前所有线程的运行情况和线程当前状态。使用
2021-06-30 10:42:00
88
原创 GC ROOTS对象
可作为固定GC ROOTS对象虚拟机栈方法区本地方法栈其他虚拟机栈在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。方法区在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量。在方法区中常量引用的对象,譬如字符串常量池(String Table)里的引用。本地方法栈在本地方法栈中JNI(即通常所说的Native方法)引用的对象。其他Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的
2021-04-22 09:30:10
96
原创 强引用,软引用,弱引用与虚引用概念
强引用,软引用,弱引用与虚引用概念强引用软引用弱引用虚引用强引用强引用是最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“Object obj=new Object()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象。软引用软引用是用来描述一些还有用,但非必须的对象。只被软引用关联着的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK 1.2
2021-04-22 09:19:51
157
1
原创 ThreadLocal内存泄漏分析
ThreadLocal内存泄漏分析使用场景本地模拟情况原因分析源码分析为啥key要设置成弱引用使用场景在我们想让线程间数据不共享,会想到ThreadLocal可以实现我们需求。它虽然好,但是使用不当会出现内存泄露情况。本地模拟情况代码如下static class LocalVariable { byte[] s = new byte[1024*1024 * 1000]; } static ThreadLocal<LocalVariable>
2021-04-14 10:13:43
161
1
原创 事务一致性解决方案汇总
事务一致性解决方案汇总2PC理论应用场景操作阶段2PC缺陷最终一致性TCC事务状态表 + 调用者重试 + 接收者幂等对账弱一致性 + 基于状态补偿重试 + 回滚 + 报警 + 人工修复2PC理论应用场景主要应用于两个数据库或者系统之间的同步操作阶段准备阶段: 协调者向所有参与者发起执行一个事务的询问。提交阶段或者回滚阶段:如果索引参与者都回答YES,那么将执行commit提交任务。如果有任意一个没有返回YES那么将发起callback回滚命令。2PC缺陷在提交阶段服务出问题了最
2020-07-19 23:38:51
519
原创 排序算法
冒泡排序两两比较交换顺序public static void bubbleSort(int[] test) { for (int i = 0; i < test.length; i++) { for (int j = i; j < test.length; j++) { if (test[i] > t...
2019-12-09 10:54:02
87
转载 java之在普通代码中获取bean的几种方式
普通代码中获取bean的几种方式最近在项目中,因代码模式要求,需要在普通类中去主动调用bean实例,经过参考分析,做乐如下的整理。在初始化时保存ApplicationContext对象 通过Spring提供的utils类获取ApplicationContext对象 继承自抽象类ApplicationObjectSupport 继承自抽象类WebApplicationObjectSu...
2018-08-29 16:00:48
12915
翻译 springboot之使用java代码配置springmvc
话说,在我们想要将后台数据再页面展示的时候,那么我们就需要使用视图解析器。但是如何展示呢,那么我们就需要配置视图解析器,在这里主要讲解spring mvc的解析器。静态资源的访问 访问静态资源(html,jsp,js,png等等)的时时候,我们需要继承WebMvcConfigurerAdapter里面的一些方法,已实现对静态资源的访问。具体代码块如下@Configur...
2018-08-23 11:25:30
1668
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人