- 博客(142)
- 收藏
- 关注
原创 207. 课程表 - 力扣(LeetCode)
你这个学期必须选修numCourses门课程,记为0到。在选修某些课程之前需要一些先修课程。先修课程按数组给出,其中,表示如果要学习课程i则先学习课程i。[0, 1]01请你判断是否可能完成所有课程的学习?如果可以,返回true;否则,返回false。输入:numCourses = 2, prerequisites = [[1,0]]输出:true解释:总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。这是可能的。
2025-08-14 22:25:41
546
原创 36.介绍HashMap及其put方法的操作过程
数组的大小总是2的幂(使用位运算代替取模来计算桶下标,index = (数组长度 - 1) & key.hash,效率更高)当多个键映射到相同的数组索引时,会形成链表,Entry 节点包含键值对和指向下一个 Entry 的引用,以此来解决哈希冲突。,HashMap的底层数据结构是“数组+链表+红黑树”,优化链表过长时的查找性能。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!每个数组元素是一个单一的 Entry 节点或链表的头结点。,HashMap的底层数据结构是“数组+链表”
2025-08-08 13:03:39
224
原创 200. 岛屿数量 - 力扣(LeetCode)
给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。输入:grid = [输出:1输入:grid = [输出:3'0''1'
2025-08-08 11:50:10
278
原创 198. 打家劫舍 - 力扣(LeetCode)
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,。给定一个代表每个房屋存放金额的非负整数数组,计算你,一夜之内能够偷窃到的最高金额。输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。输入:[2,7,9,3,1]输出:12。
2025-08-08 10:15:55
371
原创 155. 最小栈 - 力扣(LeetCode)
设计一个支持pushpoptop操作,并能在常数时间内检索到最小元素的栈。实现MinStackMinStack()void pop()int top()输入:输出:解释:--> 返回 -3.--> 返回 0.--> 返回 -2.topgetMinpushpoptopgetMin4。
2025-08-08 09:04:32
445
原创 152. 乘积最大子数组 - 力扣(LeetCode)
给你一个整数数组nums,请你找出数组中乘积最大的非空连续 子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个整数。输入: nums = [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。输入: nums = [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
2025-08-07 23:02:48
323
原创 148. 排序链表 - 力扣(LeetCode)
给你链表的头结点head,请将其按排列并返回。输入:head = [4,2,1,3]输出:[1,2,3,4输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5输入:head = []输出:[]你可以在O(n log n)时间复杂度和常数级空间复杂度下,对链表进行排序吗?
2025-08-07 21:36:20
343
原创 35.Thread和Runable的区别?
Thread 是一个具体的线程类,不能被多个线程共享,无法直接提交给线程池。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!时,通常是为了实现任务共享,将任务传递给多个线程执行。是一个接口,表示一个可以被多个线程共享执行的任务。常用于线程池,因为它可以在多个线程间共享任务。每个线程独立栈内存,资源消耗较大。时,任务可以被多个线程共享。可被线程池复用,更节省内存。是一个类,表示一个线程。
2025-08-07 20:28:35
244
原创 3.Redis 持久化机制
RDB 将内存数据的快照保存为二进制文件,存储在磁盘上savebgsaveforkforksave m nbgsaveflushallflushdbdump.rdbbgsavedump.rdbforkfork。
2025-08-07 15:47:39
380
原创 2.Redis的哨兵机制
3.自动故障转移:所有哨兵通过 Raft 算法选举出一个领导者哨兵,由它执行故障转移。领导者哨兵从原主节点的从节点中选出一个新的主节点,并通过。2.故障判定:如果单个哨兵检测到某节点超时无响应,它会将其标记为“主观下线”;当多数哨兵判定主节点不可达时,会触发“客观下线”4.通知与配置更新:哨兵通过 Redis 的发布/订阅频道广播新主节点信息。1.监控:哨兵节点持续监控所有 Redis 主节点和从节点的状态,定期发送。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!
2025-08-07 15:33:56
261
原创 1.Redis 雪崩、击穿、穿透
热点数据突然失效,此时大量请求并发地访问该缓存,导致数据库被击穿。很多线程将数据缓存到Redis,造成浪费,只缓存一次就够了。
2025-08-07 15:16:01
605
原创 10.MySQL的count(1)、count(*)和count(列名)的区别?
1.COUNT(1)NULL2.COUNT(*)NULLCOUNT(*)COUNT(1)3.COUNT(列名)NULL。
2025-08-07 07:29:16
165
原创 9.如何解决MySQL的深分页问题?
使用LIMIT查询时,LIMIT 0,10查询第一页的10条数据,但如果是查询第 10000 页的10条数据,查询性能会显著下降,查询时间可能从几毫秒增加到几秒。
2025-08-06 22:33:17
253
原创 10.如何判断对象是否存活?(是不是垃圾)
一个对象被引用时,引用计数就会增加;当引用不再指向该对象时,引用计数会减少。如果引用计数为0,则说明没有任何地方再引用该对象,它就可以被回收了。从根对象开始遍历,访问所有可达的对象并标记。如果某个对象无法通过根对象访问到,被认为是不可达,可以回收了。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!优点:可以解决循环引用问题。
2025-08-06 22:12:20
130
原创 1.解决消息队列积压的方案
4.征用更多的计算资源,部署解决故障后的消费者程序。每次消费者将与申请的临时队列对接,分别消费不同队列中的信息。3.临时创建消费者程序,用于将积压的消息转移到新建的队列中。该程序会将消息均匀地分布在临时新建的消息队列中。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!1.修复消费者(consumer),确保其消费速度恢复正常。消息队列无法正常消费,大量数据在消息队列中积压的解决方案。2.临时将消息队列数量倍数增加,确保能够容纳更多的消息。
2025-08-06 21:45:49
116
原创 9.触发Full GC的条件
老年代空间不足通常发生在新生代对象晋升或大对象创建时。执行Full GC后,若空间依旧不足,会抛出。优化:避免大对象、大数组的创建,尽量让对象在Minor GC时回收,延长对象在新生代的存活时间。使用RMI进行RPC或管理的应用中,默认每小时执行一次Full GC。可以通过设置启动参数。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!来调整Full GC的执行间隔,或通过。
2025-08-06 21:19:21
226
原创 8.JVM对象什么时候会进入老年代?
在 Survivor 区,从年龄 1 开始累加对象大小,若某年龄 N 的累加大小 > Survivor 区 50%,则 年龄 ≥ N 的对象 直接晋升老年代。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!
2025-08-06 20:18:11
199
原创 7.三色标记算法
对象自身已被扫描,且其直接引用的所有对象也已被扫描完成(递归结束),无需再处理。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!三色标记是一种垃圾回收算法,主要用于并发垃圾回收,尤其是在分代收集中。对象尚未被垃圾回收器扫描到(可能是存活对象,也可能是垃圾)对象已被标记为存活,但其直接引用的对象尚未被扫描。最终标记完成后仍为白色的对象才是垃圾。
2025-08-06 20:06:17
224
原创 5.垃圾收集器分类以及选择
G1垃圾收集器是为了弥补CMS的缺点而设计的,旨在提供更加一致的停顿时间,并且能够高效地进行垃圾回收。Shenandoah 是一个低延迟垃圾回收器,目标是提供尽可能低的停顿时间,并且适合大内存环境。ZGC 是一个低延迟垃圾收集器,设计目标是能够在极低的停顿时间下处理大堆内存的垃圾回收。采用并发方式进行垃圾回收,旨在减少停顿时间,特别适合对响应时间要求较高的应用。最基础的垃圾收集器,使用单线程进行垃圾回收,适用于单核或者内存较小的机器。类似于并行垃圾收集器,但它主要用于老年代的垃圾回收。
2025-08-06 17:58:27
956
原创 4.Java 中对象的生命周期
可达性指的是通过根对象(如局部变量、静态字段等)能否直接或间接访问对象。若能访问,则该对象是可达的。当对象没有任何有效引用时,进入死亡阶段,并成为垃圾回收的候选对象。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!垃圾回收是 Java 内存管理的核心机制,用于自动回收不再使用的对象。对象的生命周期从对象创建开始,直到对象被垃圾回收器回收为止。此时,堆内存中已经分配了对象空间,且可以通过引用访问该对象。对象在堆内存中保持活动状态,直到它不再被任何有效引用所指向。
2025-08-06 17:32:57
163
原创 3.类加载器与双亲委派机制
类加载器是Java中负责将类文件(.class 文件)加载到JVM内存中的组件Java类加载器的层次结构findClass。
2025-08-06 17:08:30
195
原创 2.JVM的垃圾回收算法
新生代:主要用于存放新创建的对象,生命周期较短,通常会经历频繁的垃圾回收(Minor GC)。老年代:存放的是存活时间较长的对象,经历过多次GC后会晋升到老年代,回收的频率较低(Full GC)通过将对象分代,垃圾回收能够根据对象的存活时间不同进行不同的处理,提高了GC的效率。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!对象晋升到老年代的条件不当可能导致老年代内存不足,触发Full GC。标记完成后,扫描整个空间,回收未被标记的对象。与标记-清除算法类似,先对对象进行标记。
2025-08-06 16:47:45
303
原创 146. LRU 缓存 - 力扣(LeetCode)
请你设计并实现一个满足约束的数据结构。实现LRUCachecapacitykey-1keyvaluekey-valuecapacity函数get和put必须以O(1)的平均时间复杂度运行。输入输出解释// 缓存是 {1=1}// 缓存是 {1=1, 2=2}// 返回 1// 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}// 返回 -1 (未找到)// 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}// 返回 -1 (未找到)// 返回 3。
2025-08-06 09:24:21
736
原创 33.介绍Java中的锁
Java 中的锁有三种状态:偏向锁 → 轻量级锁 → 重量级锁,这些锁通过对象头中的mark word来标明锁的状态偏向锁轻量级锁重量级锁锁的升级路径无锁 → 偏向锁 → 轻量级锁 → 重量级锁。
2025-08-05 23:09:42
1291
原创 30.Java和C++的区别?
C++支持面向过程和面向对象的编译型语言,直接编译为机器码,支持多继承,提供运算符重载和模板元变成等底层控制能力,性能更高。C++编译型,源码直接编译为平台特定机器码,Windows程序无法直接在Linux运行,需要重新编译。Java是面向对象的跨平台语言,通过JVM实现“一次编写,到处运行”,单继承+接口实现多态。Java半编译半解释,源码——>字节码——.JVM解释执行,适应跨平台需求。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!Java采用自动垃圾回收GC管理内存。
2025-08-05 21:37:21
171
原创 29.什么是 ABA 问题?
ABA 问题通常出现在多线程环境中,涉及对共享变量的更新操作示例:假设有一个账户余额为 100 元的共享变量。这个过程就是 ABA 问题,线程 2 被错误地认为余额没有发生变化,因此错误地继续执行了原本的更新操作。
2025-08-05 21:31:10
218
原创 28.ConcurrentHashMap 介绍
ConcurrentHashMap 支持并发的更新操作,多个线程可以同时进行插入、删除、更新等操作,无需对整个哈希表进行锁定。不同线程可以同时访问不同的区段,从而减少并发操作时的冲突范围,提高并发性能。ConcurrentHashMap 的迭代器是弱一致性的,允许在迭代过程中哈希表发生变化,这样可以避免在迭代期间加锁,从而提高了迭代的性能。是 Java 集合框架中的一个实现类,提供线程安全的哈希表,支持高并发的读写操作,保证在多线程环境下的数据一致性。
2025-08-05 20:36:29
233
原创 27.Array和ArrayList的区别
Array是固定大小的数组,一旦创建,数组大小就不能改变ArrayList是动态数组,数组大小随着元素的增加而动态变化。
2025-08-05 19:57:54
118
原创 26.ArrayList和LinkedList的区别
ArrayList底层使用动态数组Array实现,数组的大小会随着元素的增加而动态调整LinkedList底层使用双向链表实现,每个元素包含指向前后元素的引用。
2025-08-05 19:52:53
126
原创 25.HashMap和HashTable的区别
HashMap:非线程安全,多个线程同时访问和修改时可能出现数据不一致的情况。需要通过外部同步机制(如Collections.synchronizedMap())来保证线程安全HashTable:线程安全,每个方法都使用 synchronized进行了同步,但由于同步的开销,性能较低。
2025-08-05 19:30:40
254
原创 24.Set、List、Map的区别
本文介绍了Java集合框架中的三种主要接口:Set、List和Map。Set是无序且不重复的集合,通过equals()判断重复,常用实现有基于哈希表的HashSet和基于红黑树的TreeSet。List是有序可重复的集合,支持索引访问,常用实现有ArrayList和LinkedList。Map是键值对存储结构,键不可重复,常用实现包括无序的HashMap和有序的TreeMap。文章对各集合的特点、底层实现及操作时间复杂度进行了对比说明。
2025-08-04 22:03:43
438
原创 23.Java中static关键字的作用
为特定数据类型或对象分配与对象个数无关的共享存储空间使得方法或属性与类本身而不是对象关联,从而可以在不创建对象的情况下直接调用。
2025-08-04 21:05:13
182
原创 22.Java中的AQS
exclusiveOwnerThread:记录当前持有锁的线程,若当前线程等于 exclusiveOwnerThread ,则允许重入。AQS的核心思想是通过先进先出的队列管理线程状态(等待或执行),并通过CAS操作无锁地修改状态,控制线程的执行顺序。AQS是Java实现同步机制的核心框架,支持锁管理、线程阻塞和队列管理。这是我整理的笔记,目前还在学习阶段,文章中可能有错误和不足,欢迎大家斧正!state变量:表示同步状态。
2025-08-04 20:34:29
86
分布式多车探索系统 分布式多车协作探索系统
2025-04-01
单机版坦克大战游戏采用了MVC架构设计,分为模型层、视图层和控制层,明确了每个层的职责,保证了代码的清晰性和扩展性 在设计中,游戏核心逻辑和数据管理由模型层负责,图形绘制和界面更新由视图层承担,用
2025-03-29
简易绘图器C++ 利用GDI,GDI+或WPF实现简单绘图器;实现绘制线条、矩形、圆形,可改变线条或填充
2024-07-08
东软颐养中心系统 Spring Boot+Vue+MySQL
2025-03-29
通信录查询系统(查找应用) 问题描述:设计散列表(哈希表)实现通讯录查找系统 (1) 设每个记录有下列数据项:电话号码、用户名、地址; (2) 从键盘输入各记录,分别以电话号码为关键字建立散列表;
2025-03-29
迷宫与栈问题(图的应用) 问题描述:以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍 设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论
2025-03-29
哈夫曼编码/译码系统(树应用) 问题描述:根据哈夫曼编码算法,编写文件压缩及解压缩软件(有图像界面为最佳,无亦可),可对word文件进行压缩,压缩时要求显示文件中每个字符的哈夫曼编码及其文件的压缩率
2025-03-29
矩阵链乘积次数问题(栈和队列的应用) 问题描述:输入n个矩阵的维度和一个矩阵链乘积表达式,请输出按照该表达式计算所有乘积运算的乘法次数之和 如果乘法无法进行,输出error 假定A是m*n矩阵,B是n
2025-03-29
约瑟夫环(循环链表和顺序表) 问题描述: 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数) 一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序
2025-03-29
停车场管理系统Java
2024-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅