6.4k6 分钟

2025-05-07🌱上海: ☀️ 🌡️+19°C 🌬️↖19km/h # Part002 多线程任务批处理通用工具类 # 1. 为什么(Why) # 1.1 项目背景 part002模块实现了一个基于java的批处理任务工具,主要用于并行处理大量同类型任务(如批量发送短信、邮件、消息推送等)。随着业务量的增加,传统的串行处理方式已经无法满足高并发系统的需求,因此引入了并行批处理技术,以提高任务处理效率。 # 1.2 解决的问题 任务处理效率低:通过线程池并行处理任务,显著提高了任务处理的速度。 资源利用率不高:合理分配线程资源,提高CPU和系统资源的利用率。
12k11 分钟

2025-05-07🌱上海: ☀️ 🌡️+19°C 🌬️↖19km/h # Part001 分片上传 # 1. 为什么(Why) # 1.1 项目背景 part001部分是一个基于java和SQL的模块,主要负责处理分片上传功能。随着文件上传需求的增加,传统的单次上传方式已经无法满足大文件上传的需求,因此引入了分片上传技术,以提高上传效率和稳定性。 # 1.2 解决的问题 大文件上传效率低:通过分片上传,将大文件分割成多个小文件并行上传,显著提高了上传速度。 网络不稳定导致上传失败:分片上传允许断点续传,即使网络中断,也可以从中断处继续上传,避免了重新上传的麻烦。
4.6k4 分钟

2025-01-26🌱上海: ⛅️ 🌡️+9°C 🌬️↓17km/h 前两天在群里了解到了Anki记忆卡片,首先大概介绍下Anki记忆卡片主要是干什么的? Anki记忆卡采用了SM2算法可以在短时间内快速记忆一些知识点,有点类似闪念,或者说就是自定义的刷题卡片。 # 一、工具安装 首先我们下载两个主要工具,以下是官网下载地址: Obsidian - Sharpen your thinking Anki - powerful, intelligent flashcards 后续还需要安装它们所需的核心插件。 Anki端:anki connector 插件 Obsidian端:E
9.2k8 分钟

2025-01-26🌱上海: ⛅️ 🌡️+9°C 🌬️↓17km/h # 账号准备 # 一、注册账号 Maven Central 点击右上角登录,没有账号就注册,或者使用谷歌/GitHub账号登录,我这里已经登录了 # 二、新建命名空间 先点击右上角的Publish,然后新增命名空间,我这里之前已经添加过了 点击新增之后,弹出输入框 输入框填写内容根据你的仓库地址决定,如下 GitHub :io.github.自己用户名 GitLab :io.gitlab.自己用户名 Gitee :io.gitee.自己用户名 Bitbucket: io.bitbucke
1.2k1 分钟

2025-01-26🌱上海: ⛅️ 🌡️+9°C 🌬️↓17km/h "那些不适应这个世界的人,其实已经快要找到自我了。" 阿光常常坐在公园的长椅上发呆,人来人往,也不知在看些什么,想些什么。直到远边的云被夕阳晕成红色,路灯也跟着亮起,阿光才会慢慢从长椅上起来拍拍屁股,往夕阳的方向走去,阿光的家就在那边。 阿光低着头看自己脚下的影子渐渐拉长又变短,循环往复。突然被从后面过来的一条手臂挽住了脖子,压得腰也跟着弯了下来。“嘿,光,干嘛去呢?他妈的找了你一天,跟你说我今天发现了个很好玩的地方。” 大鹏本还生气又转嬉笑地说到。阿光站起身来,挠了挠头,不知道说什
1.1k1 分钟

2025-01-26🌱上海: ⛅️ 🌡️+9°C 🌬️↓17km/h “说来奇怪,有些人,通常是些生命中的过客,会在你的思绪与梦境中占有很重的分量” 银杏树的叶子渐渐凋零,整个林子也显得愈发清寂,满地黄色也褪去变成了白色。今年的冬天异常的寒冷,整条河面早早被封冻,好似怕河流一去不复返。大概马上要过年了,寒冷的街道反而比往常显得热闹。阿光双手插在棉衣的口袋里,踩在雪上慢慢前行,断断续续的传来吱呀吱呀的声音。 阿光和大鹏约好了今天在银杏林见面,大鹏已经早早到了这里,无聊的捡起旁边的石头砸向河面,河面上全是坑坑洼洼。冬天的阳光打在河面上反而显得更加刺眼,大鹏手放在额头遮挡阳光朝
14k13 分钟

2025-01-22🌱上海: ☀️ 🌡️+12°C 🌬️↖14km/h # 说说AQS吧 全称AbstractQueuedSynchronizer (抽象队列同步器),AQS是很多同步器的基础框架,比如ReentranLock、CountDownLatch和Semaphore等都是基于AQS实现的,简单来说,AQS就是起到了一个抽象、封装的作用,其中提供一系列关于同步的排队、入队、加锁、中断等方法,通过实现这些方法,可以生成自定义的同步器。 AQS内部主要维护了一个volatile的int类型的state变量和一个FIFO队列,在state=1的时候表示当前的锁已
42k38 分钟

2025-01-21🌱上海: ☀️ 🌡️+14°C 🌬️↖8km/h # 深入理解线程池原理 # 线程池的创建 # 使用Executors工厂类创建 # 固定大小线程池(FixedThreadPool) // 创建一个固定大小为 5 的线程池 ExecutorService executorService = Executors.newFixedThreadPool(5); Executors.newFixedThreadPool(5):创建一个固定大小为 5 的线程池,核心线程数和最大线程数都为 5。 # 单线程线程池(S
22k20 分钟

2025-01-20🌱上海: ☀️ 🌡️+8°C 🌬️←9km/h 说说Java中HashMap的原理? # 通过源码深入了解HashMap 首先来了解一下比较重要一些变量定义 // 默认初始容量 - 必须是 2 的幂次方。 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 即 16 // 最大容量,如果构造函数中通过参数隐式指定了更高的值,则使用此最大容量。 // 必须是
30k28 分钟

2025-01-19🌱上海: ☀️ 🌡️+13°C 🌬️↘7km/h # 接口和抽象类有什么区别? # 抽象类 # 1. 定义抽象类 定义抽象类的时候需要用到关键字abstract,同时需要放在class关键字前面。 关于抽象类的命名。在阿里的java开发手册上有强调,“抽象类命名要使用 Abstract 或 Base 开头”。 package com.muzi.abstractinterfaceclass.abstractClassText; // 定义抽象的动物类 public abstract class AbstractAnimal {