- 博客(44)
- 问答 (1)
- 收藏
- 关注
原创 java分布式服务的高可用处理
高可用的核心就是冗余,某一个服务器或者数据库、缓存不可用使用的时候,也不会影响用户的使用体验。水平分表(常用):根据hash算法 % id(唯一键值都可以),生成多张相同的表存储数据。| | | 5. 消费 |熔断:某个服务某个rpc接口失败重拾达到一定测试进行熔断,服务标记为不可用。服务降级:对非核心接口提供降级,如接口返回失败请重试,提示当前接口不可用。垂直分表:将一个表的字段分到不同的表中,降低单表压力。4 限流、熔断、服务降级:保证服务器的对外服务。
2025-05-15 18:14:19
349
原创 缓存相关问题
官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)Redis利用队列技术将并发访问变为串行访问1)绝大部分请求是纯粹的内存操作(非常快速)2)采用单线程,避免了不必要的上下文切换和竞争条件速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
2025-04-09 22:31:51
1104
原创 如果某个业务量突然提升100倍QPS你会怎么做?
假设你负责的系统,某个业务线的QPS突然暴增100倍,你会怎么应对?:每层专注单一问题(缓存、异步、限流)。第一步:先问“为什么”,再想“怎么做”:假设任何环节都会挂,做好兜底方案。:用空间换时间(扩容、分库分表)。快速止血:限流降级,保住核心业务。数据库优化:分库分表+读写分离。第三步:长期防御,构建弹性架构。第二步:分层拆解,针对性优化。横向扩展:无状态服务快速扩容。缓存为王:减少穿透击穿数据库。总结:高并发的本质是“分治”异步化:削峰填谷,解耦系统。流量暴增的范围和时间?当前系统的瓶颈在哪里?
2025-04-09 18:08:44
483
原创 IO的类型
服务端只会创建一个线程负责管理Selector(多路复用器),Selector(多路复用器)不断的轮询注册其上的Channel(通道)中的 I/O 事件,并将监听到的事件进行相应的处理。NIO:以块(缓冲区)的方式处理数据,是同步非阻塞的。2. FD_SET(int fd, fd_set *set):将指定的文件描述符 fd 添加到文件描述符集合 set 中,相应的位将被置为1。:fds=1,2,3,5,9 那么 max+1 = 10,内核中就会在rset的 前十个元素中遍历判断哪些fd是有事件发生了。
2025-04-09 17:40:46
836
原创 数据库事务隔离级别
确保同一事务内多次读取相同数据结果一致,避免脏读和不可重复读,但可能发生幻读。MySQL InnoDB引擎的默认级别,通过多版本并发控制(MVCC)和间隙锁进一步减少幻读风险。只允许读取已提交的数据,避免脏读,但仍可能出现不可重复读和幻读。多数数据库(如Oracle、SQL Server)的默认隔离级别。通过"瞬间共享读锁"和"排他写锁"实现。最高隔离级别,完全禁止并发问题,但性能代价最大。通过强制事务串行执行实现,可能使用表级锁或范围锁。该级别仅通过排他写锁避免更新丢失。
2025-04-09 15:47:04
386
原创 MySQL中指定字段的某个值排在前面
如果我们想讲表中指定的字段的某一个值排序在最前面应该如何处理?这个可以做指定值排序(按照字段A的值为1,2,3,4依次排序)、使用case when then else end。
2024-11-11 10:39:08
851
原创 Quartz定时任务表达式用法
如:“0/15”在秒域意思是每分钟的0,15,30和45秒。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10)。记住一条本质:表达式的每个数值域都是一个有最大值和最小值的集合,如:秒域和分钟域的集合是0-59,日期域是1-31,月份域是1-12。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。
2024-10-25 14:38:10
681
原创 mysql join索引失效可能的原因
MySQL中的JOIN操作是用来结合两个或多个表的行的。查询的JOIN条件不满足索引的优化条件,例如,使用了CROSS JOIN或者不是等值JOIN。对于多表JOIN,确保使用正确的JOIN类型(INNER JOIN, LEFT JOIN等)。重新评估查询,尝试改变表的顺序,或者优化WHERE子句中的条件。确保JOIN操作使用的列是被索引的,并且是查询中的过滤条件。如果使用了复合索引,确保查询中引用了索引中的第一个列。查询中使用了不支持索引的操作,如函数操作或类型转换。不正确的索引列被使用。
2024-10-23 10:55:00
416
原创 大型网站核心架构要素
主要应用在分布式缓存系统中,在增加或者删除服务器节点时,能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系,也就是系统中的大多数历史缓存的存储服务器节点可以不变,解决了普通hash算法带来的动态伸缩性问题。新增节点E (25000),按照一致性hash算法,只有B ~ E 之间的历史数据会受到影响,(之前是路由到C的,现在路由到 E ),即只有C的一部分数据需要迁移到E。删除节点B,那么 A~ B 之间的历史数据丢失,并且新增数据会被插入到 C,其他的节点都不会受到影响。
2024-09-13 12:57:27
1471
2
原创 JDK命令工具
查看java进程信息1 jps -l:输出主类全名,如果进程是jar,输出jar路径202722 jps -v:输出虚拟机进程启动时的jvm参数。
2024-09-12 09:10:45
952
原创 常见的 JVM 调优方法有哪些?
XX:MaxTenuringThreshold=15:对象每Minor GC在Survivor区存活一次 age++,当到age = 15的时候,直接进入老年代。-XX:NewRatio=4:表示设置 年轻代(包括Eden和两个Survivor区)/老年代 的大小比值为1:4,这意味着年轻代占整个堆的1/5。常用的CMS收集器: 设置回收阈值,需要根据程序的运行过程中的gc log来观察是否会用频繁的full gc 与 CMS gc。-XX:PermSize=64M 指的是JVM初始非堆内存。
2024-09-11 13:42:37
611
原创 Rocket MQ
广播消费模式下,相同消息消费者组(Consumer Group)的每个消费者(Consumer)实例都接收全量的消息。每个 Master 配置一个 Slave,所以有多对 Master-Slave ,消息采用同步双写方式,主备都写成功才返回成功。每个 Master 配置一个 Slave,所以有多对 Master-Slave,消息采用异步复制方式,主备之间有。优点是:数据与服务都没有单点问题,Master 宕机时消息无延迟,服务与数据的可用性非常高。
2024-09-10 10:57:09
871
原创 ZooKeeper相关原理
ZooKeeper是一个开源的,它为分布式系统提供一致性服务。在ZooKeeper中,客户端通过TCP长连接连接到服务集群,这种连接从客户端第一次连接到服务端开始建立,并通过心跳检测机制来保持有效的会话状态。通过这个连接,客户端可以发送请求并接收响应,同时也可以接收到Watch事件的通知。这种连接机制确保了ZooKeeper服务端与客户端之间的紧密联系和高效的通信1。此外,ZooKeeper的服务端与客户端之间的通信还涉及到一些关键概念,如和。
2024-09-06 16:32:20
1034
1
原创 AQS:AbstractQuenedSynchronizer抽象的队列式同步器
AQS的全称为(AbstractQueuedSynchronizer),这个类在java.util.concurrent.locks包实现了AQS的锁有:自旋锁、互斥锁、读锁写锁、条件产量、信号量、栅栏都是AQS的衍生物。AQS维护了一个volatile int state和一个FIFO线程等待队列,多线程争用资源被阻塞的时候就会进入这个队列。
2024-05-08 11:14:29
999
1
原创 Mysql优化(持续更新)
索引优化注意 order by 字段要添加对应的索引,避免Using temporary; Using filesort临时表于文件排序的产生。
2024-01-30 17:31:41
512
原创 Fork-Join线程池原理
SumTask表示⼀个数字累加任务,可以指定begin、end,⽽compute()⽅法就是在执⾏任务,我们可以在compute()⽅法中去做任务拆分的逻辑。个线程负责拆分任务并阻塞等待⼦任务的结果,4个线程负责执⾏最⼩、不⽤拆分的任务。ForkJoinPool和ThreadPoolExecutor的最⼤区别就在于,ForkJoinPool在处理任务时,会触发。去处理,这样就可能充分利⽤ForkJoinPool中的线程,能更快的去执⾏⼀个⼤任务。如上图所示:相当于,任务1的执⾏需要等待任务。
2024-01-26 19:40:57
2084
1
原创 apache poi-检测到Zip Bomb解决方案
id=58499,以获取相关问题和ZIp-bomb异常,同时编写较大格式的Excel(.xlsx),以及如何确定何时出现Zip Bomb错误检索Excel文件样式表是否合法?因此,如果您创建的文件包含异常内容,例如如果许多行/列具有相同的内容,则可以使用这些保护措施并收到上述异常。是一个用于攻击向量的术语,其中一个小的zip文件会扩展为一个非常大的未压缩文件,因此会引起诸如耗尽内存或磁盘空间等问题。由于.xlsx文件实际上是包含XML文件的压缩文件,因此有可能在POI中引起这种zip bomb漏洞。
2023-12-12 19:57:45
2314
原创 一条SQL查询语句是如何执行的?
你会在数据库的慢查询日志中看到一个的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。在有些场景下,执行器调用一次,在引擎内部则扫描了多行,
2023-12-05 20:24:02
1039
1
原创 java poi中的应用
一 创建一个新的Workbook。二 所有列整体向后移动一位。五 创建excel中的图片。三 在第一行表头插入一个。四 excel的遍历。
2023-11-15 14:06:57
299
原创 ES在JAVA中的应用
boolQuery.must(QueryBuilders.termQuery("ES中字段的名字", "查询的字短的value"));boolQuery.must(QueryBuilders.matchQuery("ES中字段的名字", "查询的字短的value");match_phrase 精准搜索(必须包含一模一样的串,才会返回),分词,包含所以分词就会展示。term查询与match的效果类似,区别是term不分词,match会分词。
2023-11-15 14:02:27
183
原创 禅道禅道禅道
使用LDAP身份验证时,提供空白密码将被视为成功登录。原因是后端LDAP服务器将带有空/空白密码的绑定视为匿名绑定,我怀疑artifactory中的LDAP代码只是在寻找成功的绑定。也就是 /Users/chenyunbin/Downloads/zentaopms7.0/extension/xuan/im/model/user.php \imUser::identify方法。1. LDAP同步用户是生效的,但是姓名字段无法获取到,我看了LDAP和sonar服务,displayName都能获取到中文。
2023-05-05 10:51:02
667
原创 Elasticsearch 的 NGram 分词器使用技巧
NGram分词器是ES自带的具有前缀匹配搜索功能的一个文本分词器。它能根据逐步对写入的文本内容进行约束切割;
2023-05-03 20:59:37
3166
原创 ES实体类
analyzer : 分词器类型:当查询query时,Elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档。* index : 是否索引(默认:true):当一个文档被索引时,每个Field都可能会创建一个倒排索引(Mapping可以设置不索引该Field)//必须有 id,这里的 id 是全局唯一的标识,等同于 es 中的"_id"* @date 2021/11/26 上午11:51。* type : 字段数据类型。
2023-05-03 16:39:59
330
原创 ES 本地安装与启动
/如果之前安装过的话,卸载命令 npm uninstall -g grunt。6、在elasticsearch-head目录下执行。1、下载 elasticsearch-7.1.1。在elasticssearch目录下执行。7、 启动ElasticsSearch。4、下载并安装head插件。
2023-05-03 15:58:43
543
原创 ES查询语句
hits.total.value : 查询结果条数 (数量大于10000条时,json中需要加上一个一级条件 "track_total_hits":true ,才会展示实际数量)类似sql的limit,from和size都与query同级,from表示从第n-1个记录开始(mysql中第一条是0),size表示查询往后的n条记录。filter: 作用和must一样,但是仅过滤,不评分,所以性能更高(可以直接替换must,查询结果是一样的)3、查询结果相关信息。
2023-05-03 11:01:44
812
原创 谈谈final、finally、 finalize有什么不同
谈谈final、finally、 finalize有什么不同##final修饰类:不可以被继承修饰方法:不可以被重写修饰变量:变量不可以被赋值如果是集合list,例如://修饰还是可以被添加或者修改元素的 只是不能被赋值修改final List strList = new ArrayList<>();strList.add(“Hello”);strList.add(“world”);List unmodifiableStrList = List.of(“hello
2022-03-08 16:36:27
238
hive启动之后,查询语句执行特别慢,之后发现日志中zookeeper报错
2019-12-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人