
Java
文章平均质量分 73
yb0os1
YBo0sing frighting~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
时间轮算法
摘要:延迟任务实现主要有两种方式:优先队列(O(logN)插入)和时间轮(O(1)插入)。时间轮通过环形数组结构实现,将时间划分为固定间隔的槽位,牺牲时间精度换取高吞吐量。每个槽位存储任务链表,指针周期性扫描当前槽位执行到期任务。对超过轮盘范围的时间采取取余处理。相比优先队列,时间轮更适合处理大量延迟任务且对时效性要求不高的场景。(149字)原创 2025-08-06 21:10:18 · 193 阅读 · 0 评论 -
手写HashMap
本文实现了一个简化版的HashMap数据结构,基于JDK1.7版本设计,使用数组+链表结构存储数据。核心功能包括: 基本操作:实现了put、get、remove等基本方法 初始设置:默认容量16,负载因子0.75 哈希计算:通过key的hashCode与数组长度取模确定索引位置 扩容机制:当元素数量超过阈值时进行数组扩容(仅第二版实现) 代码包含两种实现版本:基础版和扩容版,测试用例验证了10万级数据的正确存取。该实现完整展示了HashMap的核心原理,包括哈希冲突处理、链表遍历等关键机制。原创 2025-05-31 22:13:23 · 473 阅读 · 0 评论 -
手写ArrayList和LinkedList
基于b站up生生大佬:https://www.bilibili.com/video/BV1Kp5tzGEc5/?项目仓库:https://gitee.com/bossDuy/hand-tear-collection-series。原创 2025-06-01 23:04:39 · 473 阅读 · 0 评论 -
基于AQS设计一个锁
这是一个基于AQS思想实现的可重入锁,支持公平/非公平模式。主要特点包括:1)使用原子变量state控制锁状态和重入次数;2)通过链表结构实现线程等待队列;3)非公平锁模式下允许抢占;4)支持可重入特性,同一个线程可多次获取锁;5)使用LockSupport进行线程阻塞/唤醒。实现上包含锁获取时的队列管理和CAS操作,解锁时处理重入计数并唤醒后继线程。该锁在并发环境下提供了线程安全的同步机制,适用于需要精确控制线程访问顺序的场景。原创 2025-06-02 23:50:31 · 231 阅读 · 0 评论 -
mini-mybatis
本文介绍了一个仿MyBatis框架的实现,通过动态代理技术实现面向接口编程。主要功能包括:根据字段查询单个/多个对象、IN查询(List参数)、对象插入等。核心代码展示了如何通过反射解析方法参数和注解,动态生成SQL语句,并使用JDBC执行数据库操作。实现的关键在于SqlInvocationHandler类,它处理selectBatch、select和insert开头的方法,自动构建SQL并执行。该框架无需手动编写接口实现类,通过注解配置表名和字段映射关系即可完成数据库操作。原创 2025-06-06 10:25:20 · 376 阅读 · 0 评论 -
手撕定时任务
本文实现了一个简单的定时任务调度服务ScheduleService,核心功能包括:1) 按指定延迟间隔执行任务;2)支持任务中断。关键技术点:使用PriorityBlockingQueue管理任务优先级,通过LockSupport实现精准唤醒,线程池执行任务。测试表明存在几十毫秒误差,主要来源于LockSupport精度限制和线程调度开销。该实现解决了线程池容量限制问题,通过Trigger组件实现了任务的有序调度和执行。原创 2025-06-06 16:50:47 · 214 阅读 · 0 评论 -
相向双指针 -- 灵神刷题
本文总结了常见的双指针算法在求和类问题中的应用,主要包括: 两数之和:利用有序数组特性,通过左右指针逼近目标值 三数之和:固定一个数后转化为两数之和问题,注意去重和剪枝优化 统计和小于目标的对数:排序后利用双指针统计符合条件的对数 最接近的三数之和:在三数之和基础上寻找最接近目标值的组合 四数之和:通过双重循环转化为两数之和问题 有效三角形个数:排序后固定最长边,转化为两数之和问题判断三角形条件 这些题目都利用了排序+双指针的核心思想,通过逐步缩小搜索范围来高效解决问题,并需要注意去重和边界条件的处理。原创 2025-05-24 16:18:09 · 437 阅读 · 0 评论 -
手写一个简单的线程池
本文介绍了如何手写一个简单的线程池,并逐步实现线程复用和多线程复用的功能。线程池的核心原理是通过减少频繁创建和销毁线程的开销来提升性能。线程池主要由一个线程集合和一个任务队列组成,任务提交时,首先判断核心线程是否已满,未满则创建核心线程执行任务,已满则加入任务队列。若队列也满,则创建非核心线程执行任务,非核心线程在空闲一段时间后会被销毁。如果线程数达到最大值,则执行拒绝策略。文章通过代码示例展示了如何实现一个简单的线程池,并逐步扩展为支持多线程复用的线程池。原创 2025-05-23 21:09:58 · 989 阅读 · 0 评论 -
MybatisPlus
MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率特征无入侵强大的CRUD支持lambda支持主键自动生成内置分页插件什么时候使用:where条件之外的部分使用mp不方便直接实现,需要拼接这样违背的企业开发的规范利用mp的wrapper来构建复杂的where条件,然后自己定义SQL语句的剩下的部分where条件交付给mp,其他的sql我们来自定义操作步骤:1、基于wrapper构建where条件2、自定义SQL方法调用。原创 2024-10-13 17:04:19 · 1360 阅读 · 0 评论 -
MySQL基础
视图可以修改基表的数据,基表的改变也会影响到视图的数据。原创 2024-07-15 14:22:46 · 1322 阅读 · 0 评论 -
Java基础(三)- 多线程、网络通信、单元测试、反射、注解、动态代理
多线程基础线程:一个程序内部的一条执行流程,只有一条执行流程就是单线程java.lang.Thread代表线程主线程退出,子线程存在,进程不会退出可以使用jconsole查看创建线程有多个方法可以创建线程继承Thread类优点:编码简单缺点:无法继承其他类,不利于功能的扩展实现Runnable接口优点:任务类只是实现了接口,可以继续继承其他类、实现其他接口,扩展性强缺点:需要多创建一个Runnable对象实现Callable接口和FutureTask类优点原创 2024-05-23 22:34:06 · 1309 阅读 · 1 评论 -
Java基础(二)- 异常、集合、IO流、特殊文件、日志
java不能为所有的异常提供类,所以有需要自己定义就行try {//保存一个合理的年龄System.out.println("年龄被保存:"+age);}else {//用一个异常对象封装这个问题//throw是抛出异常//message:异常出现的原因try {//写的时候就会报错//保存一个合理的年龄System.out.println("年龄被保存:"+age);}else {//用一个异常对象封装这个问题//throw 抛出这个异常。原创 2024-05-23 13:58:28 · 841 阅读 · 0 评论 -
Java基础(一)- 数据类型、运算符、数组、面向对象、常用API、JDK8、正则表达式
字面量告诉程序员:数据在程序中的书写形式整数型字面量:1 、2、 3 、100、 -100、 -20 …浮点型字面量:1.3 、1.2、 3.14…布尔型字面量:true、false没有其它值了,表示真和假,true表示真,false表示假字符型字面量:‘a’、‘b’、‘中’字符串型字面量:“abc”、“a”、“b”、“中国”所有的字符型只能使用单引号括起来。所有的字符串型只能使用双引号括起来Java语言中已经赋予了特定含义的用来标识类名、对象名、变量名、方法名、类型名、数组名、文件名的有原创 2024-05-22 18:55:43 · 553 阅读 · 0 评论 -
Java前置一些知识
傻瓜式的点下一步就行,注意:安装目录不要有空格、中文。不同的操作系统有对应的相应的JVM虚拟机。导入模块(有一点点复杂)oralce官网下载。javac 编译工具。原创 2024-04-08 16:26:59 · 308 阅读 · 0 评论