自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(629)
  • 收藏
  • 关注

原创 Java并发机制的底层实现之volatile关键字

对于共享变量,就会存在比较大问题,线程A对共享变量的修改一开始只会将修改结果同步到CPU缓存中,没有写回主内存,这样线程B在读取这个共享变量的时候,就会读取到以前的旧值。因为number++运算,要经历多条CPU指令,如加载number的原始值到寄存器、为原始值加1、将运算结果写会CPU缓存,在多线程的情况下,线程A可能执行到为原始值加1这条指令了,线程B可能正好在执行加载number的原始值到寄存器,这样线程B加载的就是线程A还没有进行加1的值,这样最终的计算结果就会比预想的值要小。

2025-07-22 14:35:30 173

原创 多实例的心跳检测不要用lock锁

虽然 Redis 本身保证了单个命令的原子性,但在多实例环境下,如果多个实例操作的是 同一个 Key,则可能会出现并发问题。在A服务中启用长任务的时候,B服务会查询到执行中的任务,判断服务是否中断,核心逻辑如下: 其中 isInterrupted方法打印出日志发现时B服务把A服务上的长任务中断,原因时map中没有A服务的刷新时间;onceReport()方法中,假设B服务一直拿着锁,导致A服务拿不到从而进一步缓存中没有刷新到A服务的存活时间,进一步B实例认为A实例中断了;

2025-07-22 14:34:55 175

原创 synchronized锁及其原理

提到,volatile修饰的共享变量并不能具有原子性,对一个变量的修改,乃至一段代码的执行,如果想具有原子性的话,需要使用synchronized关键字进行修饰,即对代码块或者方法进行加锁处理,加锁之后,线程只能按照顺序执行这个代码块或者方法。每次在进入到synchronized关键字修饰的代码块或者方法的时候,都会清空这个线程的CPU缓存,代码块或者方法里面的变量值都要去主内存中获取。每次退出synchronized关键字修饰的代码块或者方法的时候,都会将线程在CPU缓存中的内容刷新到主内存中。

2025-07-22 14:33:42 167

原创 2025年 Java 面试八股文(20w字)

本文总结了Java基础、高级和框架相关的核心面试知识点。主要内容包括: Java基础篇 OOP特性:封装、继承、多态 重载与重写的区别 接口与抽象类的区别 深拷贝与浅拷贝 sleep和wait的区别 HashMap底层原理(数组+链表+红黑树) 线程的创建方式及生命周期 JVM内存分区及各区作用 Java高级篇 垃圾回收算法(复制、标记清除、标记整理) 判断对象存活的方法(引用计数、可达性分析) 线程池工作原理及参数设置 并发容器(CopyOnWriteArrayList、ConcurrentHashMap

2025-07-22 14:11:27 1245

原创 拒绝卡顿!揭秘多表联查报表系统的优化方案

一般的做法就是通过定时任务的方式,每天晚上计算所有的统计数据,将最终的结果保存到新表中。建立宽表和临时表具备实时性,就需要保存基础字段,不能保存聚合字段,将所需要的字段全部同步到一张大的宽表里面,让报表的统计变成一张表的操作。数据源常常来源于不同的表,再加上为了方便,查询条件上也可能会涉及不同表的字段,这就需要连表查询。为了满足这些需求,传统的连表查询处理加上大数据量的计算和读写,势必造成性能的拉胯。这种方案的不好的一点就是对于经常变动的数据不友好,已经处理好的数据那些数据变了需要更新则是本方案的难点。

2025-07-21 14:26:33 743

原创 别怪 GC 不回收你:可能是你的内部类太粘人了

引用类型是否清除 referent如何标记状态加入 pending list 方式软引用✅ 是弱引用✅ 是虚引用✅ 是终结引用❌ 否next指向自身(自循环)在Java内存管理的世界里,内部类与引用体系内部类陷阱成员内部类因隐式持有外部类强引用,易引发内存泄漏。优先选用静态内部类,避免非必要耦合。引用体系精要弱引用打破强引用链,允许 GC 回收关键对象Cleaner API 替代 Finalizer,提供安全可靠的资源清理机制。

2025-07-21 14:26:01 586

原创 C#.NET EFCore.BulkExtensions 扩展详解

是一个开源库,用于扩展的功能,提供高效的批量操作()支持。原生EF Core在处理大量数据时性能较差(例如逐条插入 / 更新),而该库通过优化SQL执行,显著提升了批量操作的效率。var mapping = new Dictionary<string, string> { { "ProductName", "Name" }, // CSV中的ProductName映射到实体的Name { "UnitPrice", "Price" } };

2025-07-21 14:25:30 128

原创 2025Java基础篇面试题,八股文篇

Java基础核心知识点总结 摘要:本文总结了Java基础中的核心面试知识点,包括: HTTP请求方法GET与POST的区别 Java多态的实现方式(重载与重写) String、StringBuffer与StringBuilder的区别 ==与equals的区别及hashCode重写必要性 Java基本数据类型及集合框架(List、Set) ArrayList与LinkedList的实现原理与区别 HashMap与Hashtable的线程安全性与实现机制 常见排序算法(冒泡、二分查找、快速排序)实现 异常处理

2025-07-21 13:41:41 815

原创 虚拟线程吃掉了我的内存?一个爬虫的并发之殇!

这场爬虫事故让人深刻明白:虚拟线程并不是平台线程的“更强版”,而是一种需要你亲自管控资源的全新编程模型。在传统线程中,线程池大小天然限制了并发上限,但虚拟线程取消了这种束缚,你得亲手添加“限流器”。在追求极致性能的同时,也别忘了内存、CPU、网络等资源仍然是“有限的”。性能优化永远是“系统性工程”,不是只换一个关键词就能起飞的。在引入虚拟线程前,先清晰评估系统瓶颈;配合Semaphore或任务队列做好并发管控;针对网络型应用,考虑引入背压机制或响应式框架;

2025-07-20 14:25:15 830

原创 python爬虫

User-AgentRefererCookieheader:采用字典数据结构。

2025-07-20 14:24:39 181

原创 this 与 bind:JavaScript 中的“归属感”难题

this是动态绑定的上下文,调用方式决定其指向,可被修改;而bind会返回一个新函数,固定绑定this和参数,不可更改。二者配合使用,可精准控制函数执行环境。简单来说,this是一个灵活但容易迷失的角色,而bind则是它的“指南针”,帮助它找到稳定的归属。在 JavaScript 的世界里,this有时会“走失”,但它并不孤单,bind总是能把它带回正确的轨道。理解this的绑定规则,掌握bind的使用,是每个 JavaScript 开发者必经的成长之路。

2025-07-20 14:24:05 307

原创 2025最新版Java面试八股文大全

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所 有信息。I 这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。应用场景有:要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方jar包时、按需加载类,节省编译和初始化时间;获取class对象的方法有:class.forName(类路径),类.class(),对象的getClass()

2025-07-20 13:51:34 712

原创 Java 8 日期时间 API 全面指南:使用技巧与场景实践

的设计缺陷,提供了线程安全**、**直观易用且功能全面的日期时间处理方案。中的日期类用起来不怎么顺手,本文将深入解析核心类、使用技巧及实际场景应用。类,包括计算、格式化、解析等操作。方法,通过当前的秒数+纳秒数+时区的偏移/时区时间来构建。可以获取日期的年、月、日、时、分、秒、纳秒等参数。因为都是关于日期的类,所以他们之间都用几乎相同的。通过合理运用这些工具,可显著提升日期时间处理的。这里需要注意的是,时间间隔的计算不会向上取整。习惯了以前的工具类,反而觉得。日期的比较和之前的差别不大。

2025-07-18 14:49:32 239

原创 .NET 使用 DocNET 库快速高效的操作 PDF 文档

PDF 文档,作为日常工作中不可或缺的文档格式,广泛应用于各类场景。今天我们来讲讲在 .NET 中使用 DocNET 库快速高效的操作 PDF 文档。DocNET 是一个基于 .NET 开源(MIT license)、跨平台(支持Windows、Linux和macOS平台)的旨在提供快速 PDF 编辑和数据提取的操作库。它是基于 Chromium 所使用的 PDFium C++ 库开发的 .NET Standard 2.0 封装库。

2025-07-18 14:48:14 298

原创 订单超时取消的五种解法:从普通商品到秒杀订单,业务不同方案不同!

还记得我刚入职的时候,产品经理语重心长地对我说:“用户下单如果不付款,多久后自动取消?你搞一下哈,很简单的。我当时年轻,头发还浓密,笑着说:“这不就是设置个定时器嘛。结果……我三天三夜没睡好,做了个定时器它炸了三次,订单取消了一批没该取消的,没取消的还都超时了。订单超时取消,看似简单,其实是个技术陷阱。今天这篇文章,我就用八年的摸鱼经验,带大家拨开迷雾,看看订单超时自动取消到底该怎么做。

2025-07-18 14:46:58 256

原创 常见JAVA集合面试题(自用整理,持续更新)

Java集合框架主要分为Collection和Map两大接口体系。Collection包含List(有序可重复)、Set(无序不可重复)和Queue(队列)三个子接口;Map用于存储键值对。主要实现类包括ArrayList、LinkedList、HashMap、TreeSet等,它们在线程安全、数据结构、性能特点上各有不同。如ArrayList基于动态数组适合查询,LinkedList基于链表适合增删;HashMap在JDK1.8后采用数组+链表+红黑树结构优化性能。解决哈希冲突常见方法有链地址法、开放定址

2025-07-18 14:24:33 868

原创 从选择困难到最优策略:我如何用DP搞定“鱼和熊掌兼得”的排程难题(1751. 最多可以参加的会议数目 II)

我定义了一个函数。

2025-07-17 14:30:07 436

原创 Java 线程池的工作原理及实践

线程池是一种用于管理和复用线程的机制。线程池的核心思想是预先创建一定数量的线程,并把它们保存在线程池中,当有任务需要执行时,线程池会从空闲线程中取出一个线程来执行该任务。任务执行完毕后,线程不是被销毁,而是返还给线程池,可以立即或稍后被再次用来执行其他任务。这种机制可以避免因频繁创建和销毁线程而带来的性能开销,同时也能控制同时运行的线程数量,从而提高系统的性能和资源利用率。线程池的主要组成部分包括工作线程、任务队列、线程管理器等。

2025-07-17 14:29:34 814

原创 coding 要停服了, 把所有 CI 迁移到 Github 上 (服务器无需翻墙)

Copy!!

2025-07-17 14:29:02 138

原创 全网最全JAVA面试八股文,终于整理完了

本文总结了Java多线程编程的核心知识点,主要包括:1)线程通信机制(volatile、synchronized、wait/notify);2)锁机制比较(synchronized悲观锁、CAS乐观锁);3)线程控制方法(sleep保持锁、wait释放锁);4)ThreadLocal原理与作用;5)死锁产生条件与避免方法;6)线程池任务处理策略;7)线程调度算法与上下文切换;8)并发工具类(Lock、Semaphore、Executors)。这些内容涵盖了多线程编程中的线程安全、通信、调度等关键问题,是Ja

2025-07-17 14:05:44 767

原创 Python包管理的闪电战:uv全面指南

uvuv。

2025-07-16 15:37:48 239

原创 CMU15445-2024fall-project3踩坑经历

本篇文章记录本人对实验中各个板块的理解以及踩坑, 如果您发现我过多的涉及到了实验的内容, 有违学术诚信, 请告诉我!实现一系列算子以及两个优化器。其中算子有CURD、聚合链接。优化器为:seq_scan->index_scan以及nested_loop -> hashjoin;Task1主要实现CURD算子以及seq_scan->index_scan优化器;Task2主要实现嵌套循环链接和索引循环连接;Task3实现哈希连接,并将循环嵌套链接优化成哈希连接;Task4实现外排序以及限制执行器。

2025-07-16 15:37:06 890

原创 了解Redis String类型

Redis的String类型虽然看起来简单,但它的强大之处在于底层的优化设计和丰富的操作命令。骚话王又来分享知识了!同时,通过动态编码转换,Redis能够根据实际使用场景自动优化存储方式,既保证了灵活性,又兼顾了性能。:无论存储什么类型的数据,Redis在底层都使用相同的SDS结构,但会根据数据内容动态选择最优的编码方式。Redis的String类型在底层采用了三种不同的编码方式来存储数据,这种设计既节省内存又保证了性能。虽然Redis有专门的List类型,但String类型也可以实现简单的消息队列。

2025-07-16 15:34:30 732

原创 java八股文(全网最全)

本文总结了Java编程中的核心知识点,包括面向对象特性、多线程、JVM内存模型和垃圾回收机制等。主要内容有:1.抽象类与普通类的区别,抽象类不能被final修饰;2.接口与抽象类的异同点;3.IO流的分类(BIO/NIO/AIO)及特点;4.集合框架中线程安全类的使用;5.多线程创建方式和同步机制(synchronized、Lock);6.JVM内存分区(堆、栈、方法区等)及垃圾回收算法;7.类加载过程和双亲委派机制;8.对象晋升老年代的条件。文章还涉及死锁避免、CAS乐观锁、深/浅拷贝等常见面试题,涵盖了

2025-07-16 15:04:16 1062

原创 Claude 实战圣经:从终端命令到自动化工作流

掌握了以上所有零件,现在是时候将它们组装成属于你自己的自动化“神兵”了。

2025-07-15 15:33:16 247

原创 HarmonyOS NEXT 智能场景识别实战:让设备主动思考的关键技术揭秘

随着智慧家居、智能办公等场景不断普及,设备之间如何理解用户所处环境、主动做出反应成为关键能力。HarmonyOS NEXT 提供了强大的分布式设备管理与 AI 能力,使得通过传感器数据识别环境场景成为可能。本文将结合传感器数据收集、AI 模型训练与部署、场景识别逻辑编排,带你一步步构建“智能场景识别”功能,并通过可运行代码进行实战演练。答:当然可以。你可以使用 MindSpore Lite 或 ONNX 将模型部署到设备端,通过本地调用进行推理。

2025-07-15 15:32:46 244

原创 一个 Ginkgo 集测优化案例

七牛的测试机房需要搬迁,在 CI 系统迁移之后,发现新机房的集测总是多花 5-10min。一开始没怎么注意,以为只是新机器网络、磁盘慢之类的原因。但深入看了集测日志后,却发现,多出来的时间集中在集测之始,那就有必要好好分析一下了。

2025-07-15 15:32:11 323

原创 Java集合框架面试题(130道)

Java集合框架常见面试题解析 本文总结了Java集合框架中的常见面试问题,主要分为三部分内容: 集合基础 Java集合分为List、Map、Set三种类型 ArrayList和LinkedList的区别(数组vs链表结构) ArrayList的扩容机制(1.5倍扩容)和序列化优化 HashMap核心原理 数据结构演进:JDK1.8引入数组+链表+红黑树 哈希函数设计:扰动函数降低hash碰撞 扩容机制:2的幂次方容量设计优化rehash过程 红黑树转换:阈值8的统计学依据 线程安全方案 快速失败(fail

2025-07-15 15:06:48 896

原创 从 OOM 到秒级导入:EasyExcel 百万级数据优化实战(附可直接跑的工具类)

按数据量选模式:1万行以下用普通模式,1万行以上必须用批量模式动态调整批次大小:根据内存和单条数据大小计算,推荐500-5000行/批事务与重试:每个批次用独立事务,记录失败批次以便重试(如保存到失败表)监控与日志:记录每个批次的处理时间、成功/失败数,方便排查问题极端场景处理:超500万行数据时,先将Excel分片(如用Alibaba的OSS分片上传),再分布式并行处理通过本文的工具类和优化技巧,你可以轻松应对从几千行到几百万行的Excel导入场景,既避免OOM,又能保证处理效率。

2025-07-14 14:44:18 258

原创 用 Python 实现一个 BitTorrent 下载器

Bencoding 支持四种数据类型:torrent 文件是一个 bencode 编码的对象。其中关键的信息如下(这里换用 json 来表示):单文件:bittorrent 把被做种的文件分成了多个 piece,除了最后一个 piece,每个 piece 的长度是固定的 。每个种子还有个重要属性是 ,没有记录在 torrent 文件中,而是直接对 torrent 文件内容计算 sha1。多文件:多文件没有 属性,取而代之的是 列表,记录每个文件的名称和大小。 列表的顺序是重要的,所有文件

2025-07-14 14:41:21 374

原创 基于业务知识和代码库增强的大模型生成代码实践

阶段1 - 基础应用 李明首先整理了团队日常使用大模型的常见场景:•研发人员用AI生成基础代码片段•测试人员用AI编写测试用例•产品经理用AI辅助撰写需求文档 这些基础应用虽然简单,但确实提高了部分工作效率。阶段2 - 知识整合 在取得初步成效后,李明开始着手解决更深层的问题:1.建立了系统维度的知识库模版,确保关键文档都能被有效收录2.开发了智能检索功能,不仅能给出答案,还能定位到具体文档位置3.通过知识库建设,反向推动了各部门完善文档沉淀。

2025-07-14 14:40:54 841

原创 Java最新面试常见八股文整理

文章摘要 本文系统梳理了Java高级开发的核心技术体系,涵盖JVM调优、微服务架构、分布式系统、中间件应用和数据库优化五大领域。在JVM调优方面,重点介绍了GC监控工具和参数调整策略;微服务部分解析了SpringCloud组件、服务治理方案和RPC原理;分布式章节深入探讨了数据分片、事务处理及CAP理论;中间件专题分析了Redis高可用、MQ消息一致性等典型问题;数据库优化则包含范式设计、执行计划解读等实用技巧。文章还涉及网络编程中的TCP/IP协议原理,为构建高并发、高可用的分布式系统提供了全面的技术解决

2025-07-14 14:26:29 934

原创 [特殊字符] Redis缓存与数据库数据一致性:一场数据世界的“三角恋”保卫战

/ 错误示范→内存泄漏炸弹!// 正确姿势→务必设置过期时间!接受不完美:分布式系统没有银弹选择合适策略:根据业务场景妥协监控报警:一致性延迟超过阈值立即告警定期校对:凌晨跑脚本对比Redis与DB终极哲学缓存不是数据库的复刻,而是它的“速记本”——允许偶尔的涂改,但关键数据永不背叛。彩蛋强一致:情侣秒回消息最终一致:看到消息“已读”但等半小时才回复不一致:已读不回(渣男!

2025-07-12 14:16:56 388

原创 工作八年,如果现在让我重做“教务系统”毕业设计,我会这样答...

领域模型先行:不要急于写代码,先深入理解教务业务并发设计:选课系统必须考虑分布式锁和乐观锁数据一致性:采用最终一致性代替强一致性扩展性设计:预留接口应对政策变化(如学分计算规则)历史数据治理:从第一天就考虑数据归档策略教务系统看似传统,实则蕴含复杂的业务逻辑和技术挑战。八年的Java开发经验告诉我,好的系统设计需要平衡业务复杂性和技术实现。本文展示的设计方案已在多个高校实际落地,经受住了每学期数十万次选课请求的考验。

2025-07-12 14:16:26 288

原创 SpringBoot应用开机自启动与进程守护配置

简单说,systemd是现在Linux系统的"大管家",负责管理系统启动和服务进程。几乎所有主流Linux(CentOS 、Ubuntu 、Debian等)都支持使用systemd。为什么推荐它?原生集成:不需要额外安装软件功能强大:支持开机自启、进程监控、日志管理配置简单:一个服务文件搞定所有设置按照这些步骤配置后,你的SpringBoot应用将具备服务器重启或应用异常down掉后自动恢复的能力。

2025-07-12 14:15:55 345

原创 JAVA面试题大全(200+道题目)

死锁是指两个或两个以上的进程在竞争资源的过程中造成的不可解堵塞。两个线程都在互相等待。java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能成为java的反射机制。序列化:将java对象转换成字节流的过程。反序列化:将字节流转换成java对象的过程。当java对象需要在网络上传输或者持久化存储到文件中时,就需要对Java对象进行序列化处理。

2025-07-12 14:05:25 794

原创 java使用UCanAccess操作Access

使用UCanAccess并进行封装,通过反射、注解的方式构建目标数据,便捷创建表、写入数据、查询数据。

2025-07-11 14:55:45 317

原创 留个VKProxy性能测试记录

以前用过 ali 这个go写的测试工具,因为它会实时在命令行终端绘制性能测试图,在简单测试使用很方便,但可惜断更了,并且有个大bug没有修复:绘制的性能测试图错位了,非常影响观看,非常惋惜呀。这里会在本人电脑内测试理想情况,主要没有精力去搭建真实网络环境测试(贫穷的眼泪),哈哈。结果大致就是这样了,看起来个人写的代码也不至于太臭,至少理想情况下没有拖慢多少,一切从简,就选大家都熟悉的初始demo项目做基准好了。启动最简单的代理配置(主要想看看最理想情况下的结果)所以这里找了个同样go写的工具。

2025-07-11 14:55:16 259

原创 大数据-37 HBase Java API POM 增删改查 详细代码

HBase (Hadoop Database) 是一款基于 Google 的 BigTable 论文设计而来的开源分布式数据库系统。它属于列式存储的非关系型数据库(NoSQL),专门用于处理超大规模数据集的实时随机读写需求。行式存储 vs 列式存储:MySQL 采用行式存储,即使某些字段为空也会占用存储空间;而 HBase 采用列式存储,空字段不会浪费空间存储容量:MySQL 单表通常限制在百万到千万级数据,而 HBase 可以轻松存储 PB 级数据扩展方式。

2025-07-11 14:53:56 652

原创 JAVA面试八股文,万字长文!

本文摘要: Java核心知识点详解,涵盖基础概念、JVM原理和多线程编程三大部分。基础篇重点解析面向对象特性(封装、继承、多态)、集合框架(ArrayList/LinkedList、HashMap/HashTable)、String类特性及内存管理(堆栈区别);JVM篇深入讲解内存模型、垃圾回收机制(GC算法、回收器对比)和类加载过程;多线程篇剖析线程创建方式、同步机制(synchronized/volatile/CAS)、锁体系(AQS及衍生锁)以及线程池应用。全文通过对比分析和实例说明,系统梳理Java

2025-07-11 14:37:58 989

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除