- 博客(175)
- 资源 (12)
- 收藏
- 关注
原创 CAS 的三大问题与解决方案
CAS 在实际应用中,它存在三个核心问题: ABA 问题 、 循环时间长开销大 、 只能保证单个变量原子操作 。这些问题在高并发场景下可能会引发难以排查的 Bug,甚至严重影响系统性能。本文将带你逐一拆解这三大问题的本质、危害,并给出针对性的解决方案,让你在使用 CAS 时能避坑、用好。
2026-02-02 13:15:34
306
原创 最大报酬问题
小明每周上班都会拿到自己的工作清单,工作清单内包含n项工作,每项工作都有对应的耗时时间(单位h)和报酬,工作的总报酬为所有已完成工作的报酬之和,那么请你帮小明安排一下工作,保证小明在指定的工作时间内工作收入最大化。
2026-02-02 12:59:07
70
原创 Java 中 CAS 的底层实现与 Unsafe 类解析
本文将带你拨开迷雾,深入 Java CAS 的底层实现,核心解析 Unsafe 类的作用,以及 CPU 硬件如何为 CAS 提供支撑,让你彻底搞懂 Java CAS 的实现链路。
2026-02-01 15:13:42
691
原创 荒岛求生问题
一个荒岛上有若干人,岛上只有一条路通往岛屿两端的港口,大家需要逃往两端的港口才可逃生。假定每个人移动的速度一样,且只可选择向左或向右逃生。若两个人相遇,则进行决斗,战斗力强的能够活下来,并损失掉与对方相同的战斗力;若战斗力相同,则两人同归于尽。
2026-02-01 15:01:44
315
原创 计算疫情扩散时间
在一个地图中(地图由n*n个区域组成),有部分区域被感染病菌。 感染区域每天都会把周围(上下左右)的4个区域感染。请根据给定的地图计算,多少天以后,全部区域都会被感染。 如果初始地图上所有区域全部都被感染,或者没有被感染区域,返回-1
2026-01-31 13:48:00
444
原创 什么是 CAS?并发编程的 “无锁基石”
在 Java 并发编程的世界里,我们总是在和 “线程安全”“性能优化” 打交道。传统的锁机制虽然能解决线程安全问题,但也带来了不少性能损耗。而今天要介绍的 Compare and Swap(简称 CAS),作为无锁编程的核心思想,正在为高并发场景提供更高效的解决方案。本文将从锁的困境出发,带你全面认识 CAS 的本质、原理、特性,并通过实战代码验证其价值。
2026-01-31 13:47:19
727
原创 Java 并发程序性能优化:思路、方法与实践
在高并发业务场景下(如电商秒杀、直播带货、金融交易),Java 并发程序的性能直接决定了系统的吞吐量、响应时间和稳定性。很多时候,简单的线程安全实现(如无脑加锁)虽然能保证数据一致性,但会带来严重的性能瓶颈 —— 锁竞争导致线程阻塞、上下文切换开销飙升、CPU 利用率不足等问题。本文将从性能优化的核心思路出发,拆解具体优化方法,并结合实战案例讲解如何落地这些优化手段,帮助大家构建 “高性能 + 线程安全” 的并发程序。
2026-01-29 08:23:26
1021
原创 最长的顺子
斗地主起源于湖北十堰房县,据说是一位叫吴修全的年轻人根据当地流行的扑克玩法“跑得快”改编的,如今已风靡整个中国,并流行于互联网上。牌型:单顺,又称顺子,最少5张牌,最多12张牌(3…A)不能有2,也不能有大小王,不计花色。例如: 3-4-5-6-7-8,7-8-9-10-J-Q,3-4-5-6-7-8-9-10-J-Q-K-A可用的牌 3<4<5<6<7<8<9<10<J<Q<K<A<2<B(小王)<C(大王),每种牌除大小王外有四种花色(共有13×4+2张牌)
2026-01-29 08:22:48
773
原创 Java 并发常见问题:死锁 / 活锁 / 饥饿的排查与解决方案
在多线程并发编程中,除了数据安全问题,线程协作异常是另一类高频问题,其中死锁、活锁、饥饿是最典型的三类问题。这些问题会导致线程无法正常执行、系统性能下降甚至服务不可用,且排查难度高 —— 死锁可能隐藏数月,在高并发场景下才会触发。本文将深入剖析这三类问题的产生原因、典型场景、排查方法,并提供可落地的解决方案与避坑指南。
2026-01-28 09:42:23
1121
原创 Java 线程池:核心原理、参数配置与实战应用
在高并发场景下,频繁创建和销毁线程会带来巨大的性能开销 —— 线程的创建需要分配栈空间、寄存器等系统资源,销毁需要回收这些资源,大量的线程还会引发 CPU 上下文切换的成本飙升。线程池作为 Java 并发编程的核心工具,通过复用线程 、 控制并发数 、 管理任务队列,有效解决了上述问题,是提升高并发程序性能的关键手段。本文将深入剖析线程池的核心原理、 ThreadPoolExecutor 的 7 个核心参数、工作流程,并结合实战案例讲解线程池的配置与使用。
2026-01-27 08:47:49
948
原创 最佳植树距离
按照环保公司要求,小明需要在沙化严重的地区进行植树防沙工作,初步目标是种植一条直线的树带。由于有些区域目前不适合种植树木,所以只能在一些可以种植的点来种植树木。在树苗有限的情况下,要达到最佳效果,就要尽量散开种植,不同树苗之间的最小间距要尽量大。给你一个适合种情树木的点坐标和一个树苗的数量,请帮小明选择一个最佳的最小种植间距。
2026-01-27 08:47:11
231
原创 线程通信:wait/notify、Condition、CountDownLatch
在多线程并发编程中,线程并非孤立执行,常常需要协同工作完成复杂任务。例如生产者线程生产数据,消费者线程消费数据,二者需要通过通信协调生产和消费的节奏,避免数据积压或消费空数据。Java 提供了多种线程通信工具,本文将从基础的 wait/notify 机制,到进阶的 Condition 接口,再到实用的并发工具类( CountDownLatch 、 CyclicBarrier 等),全面解析线程通信的实现原理与实战场景。
2026-01-26 12:51:00
981
原创 组装最大可靠性设备
一个设备由N种类型元器件组成(每种类型元器件只需要一个,类型type编号从0~N-1),每个元器件均有可靠性属性reliability,可靠性越高的器件其价格price越贵。而设备的可靠性由组成设备的所有器件中可靠性最低的器件决定。给定预算S,购买N种元器件( 每种类型元器件都需要购买一个),在不超过预算的情况下,请给出能够组成的设备的最大可靠性。
2026-01-26 12:50:16
593
原创 并发三大特性:原子性、可见性、有序性
在 Java 并发编程中,原子性 、 可见性 、 有序性是保证多线程程序正确运行的三大核心特性。如果不能满足这三个特性,多线程操作共享资源时就会出现数据错乱、结果不一致等问题。本文将深入剖析每个特性的本质,通过代码案例验证问题场景与解决方案,帮助大家从根源理解并发问题的产生原因。
2026-01-24 14:27:12
877
原创 组装新的数组
给你一个整数M和数组N,N中的元素为连续整数,要求根据N中的元素组装成新的数组R,组装规则:1、R中元素总和加起来等于M2、R中的元素可以从N中重复选取3、R中的元素最多只能有1个不在N中,且比N中的数字都要小(不能为负数)
2026-01-24 14:26:49
300
原创 优雅子数组
如果一个数组中出现次数最多的元素出现大于等于K次,被称为 k-优雅数组 ,k也可以被称为优雅阈值。例如,数组1,2,3,1、2,3,1,它是一个3-优雅数组,因为元素1出现次数大于等于3次,数组[1, 2, 3, 1, 2]就不是一个3-优雅数组,因为其中出现次数最多的元素是1和2,只出现了2次。给定一个数组A和k,请求出A有多少子数组是k-优雅子数组。子数组是数组中一个或多个连续元素组成的数组。
2026-01-23 15:07:37
478
原创 Java 线程生命周期与状态转换
在上一篇文章中,我们学习了 Java 中创建线程的 5 种方式,掌握了线程的基础创建与启动逻辑。但线程从创建到销毁并非一成不变,而是会在不同状态之间转换。理解线程的生命周期和状态转换,是解决多线程并发问题的关键。本文将从理论到实践,深入解析 Java 线程的 6 种状态,演示状态转换的核心路径,并通过工具分析线程状态,帮助大家彻底掌握这一核心知识点。
2026-01-23 15:07:24
971
原创 Java线程解析:5种线程创建方法及应用场景
上一篇文章我们介绍了 Java 多线程的基础概念,并且演示了两种创建线程的基础方式:继承 Thread 类和实现 Runnable 接口。但在实际开发中,这两种方式并不能满足所有场景需求,比如需要获取线程执行结果、需要统一管理线程生命周期等。本文将全面讲解 Java 中创建线程的5种方式,分析它们的优缺点和适用场景,并通过代码案例帮助大家掌握实际用法。
2026-01-22 12:50:41
1375
原创 中文分词模拟器
给定一个连续不包含空格的字符串,该字符串仅包含英文小写字母及英文标点符号(逗号、分号、句号),同时给定词库,对该字符串进行精确分词。说明:1、精确分词:字符串分词后,不会出现重叠。2、标点符号不成词,仅用于断句3、词库:根据外部知识库统计出来的常用词汇例4、分词原则:采用分词顺序优先且最长匹配原则
2026-01-22 12:50:15
1023
原创 多线程入门:为什么需要多线程?
在单核 CPU 时代,程序的执行是串行的,代码按顺序一步步执行,前一个任务完成后才能开始下一个任务。但随着硬件技术的发展,多核 CPU 成为主流,串行执行的方式已经无法充分利用硬件资源。Java 多线程技术应运而生,它能让程序 “同时” 执行多个任务,极大提升程序的运行效率和响应速度。本文将带大家走进 Java 多线程的世界,从核心概念入手,理解多线程的价值,并实现第一个多线程程序。
2026-01-21 06:21:13
852
原创 信道分配问题
算法工程师小明面对着这样一个问题 ,需要将通信用的信道分配给尽量多的用户:信道的条件及分配规则如下:所有信道都有属性:”阶”。阶为 r的信道的容量为 2^r比特;所有用户需要传输的数据量都一样:D比特;一个用户可以分配多个信道,但每个信道只能分配给一个用户;只有当分配给一个用户的所有信道的容量和>=D,用户才能传输数据;给出一组信道资源,最多可以为多少用户传输数据?
2026-01-21 06:20:37
568
原创 volatile 高频考点模拟面试过程
本文围绕Java中的volatile关键字展开讨论,主要涵盖以下要点: volatile的核心特性是保证可见性和有序性,但不保证原子性; 通过内存屏障机制实现禁止指令重排序; 在DCL单例模式中必须使用volatile避免指令重排序问题; 最适合单一赋值、多线程读取的场景; 常见使用误区及解决方案; 与synchronized和Atomic类的区别及适用场景选择。 文章通过面试问答形式,系统讲解了volatile的原理、实现机制和实际应用场景。
2026-01-20 21:58:23
398
原创 羊、狼、农夫过河
羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。要求求出不损失羊情况下将全部羊和狼运到对岸需要的最小次数。只计算农夫去对岸的次数,回程时农夫不会运送羊和狼。备注:农夫在或农夫离开后羊的数量大于狼的数量时狼不会攻击羊。
2026-01-20 21:57:45
892
原创 volatile 面试高频考点篇 —— 真题解析与答题技巧
在上一篇文章中,我们梳理了 volatile 与 synchronized 、 Atomic 类的选型逻辑。对于 Java 后端开发者而言, volatile 是并发编程面试的必考知识点,面试官会从基础特性、底层原理、实战应用、选型对比四个维度层层深入提问。本文精选面试高频真题,结合标准答案与答题思路,帮你掌握答题技巧,轻松通关面试。
2026-01-19 13:17:59
941
原创 寻找最大价值的矿堆
给你一个由 '0' (空地)、'1' (银矿)、'2'(金矿) 组成的的地图,矿堆只能由上下左右相邻的金矿或银矿连接形成。超出地图范围可以认为是空地。假设银矿价值1,金矿价值2 ,请你找出地图中最大价值的矿堆并输出该矿堆的价值。
2026-01-19 13:17:20
549
原创 文本统计分析
有一个文件,包含以一定规则写作的文本,请统计文件中包含的文本数量。规则如下:文本以”;”分隔,最后一条可以没有”;”,但空文本不能算语句。注意,无字符/空白字符/制表符都算作”空”文本;文本可以跨行,比如下面,是一条文本,而不是三条;文本支持字符串,字符串为成对的单引号(')或者成对的双引号(“),字符串可能出现用转义字符()处理的单双引号(“your input is””)和转义字符本身。支持注释,可以出现在字符串之外的任意位置注释以”–“开头,到换行结束。
2026-01-17 07:44:01
893
原创 天然蓄水库
公元2919年,人类终于发现了一颗宜居星球——X星。现想在X星一片连绵起伏的山脉间建一个天热蓄水库,如何选取水库边界,使蓄水量最大?要求:山脉用正整数数组s表示,每个元素代表山脉的高度。选取山脉上两个点作为蓄水库的边界,则边界内的区域可以蓄水,蓄水量需排除山脉占用的空间蓄水量的高度为两边界的最小值。如果出现多个满足条件的边界,应选取距离最近的一组边界。
2026-01-17 07:43:36
658
原创 volatile 选型对比篇 —— 与 synchronized/Atomic 类的核心差异
在实际开发中,并发编程的需求往往更加复杂:有时需要保证原子性,有时需要兼顾性能,这时候就需要在 volatile 、 synchronized 、 Atomic 类之间做出选择。本篇文章将从核心特性、底层实现、适用场景三个维度,全面对比三者的差异,帮你建立清晰的选型决策逻辑。
2026-01-16 08:40:28
1097
原创 volatile 实战应用篇 —— 典型场景
本篇文章将聚焦 volatile 的实战应用,带你掌握它的核心适用场景、避坑指南,以及与其他同步方案的性能对比。
2026-01-16 08:40:02
1054
原创 volatile 底层原理篇 —— 内存屏障与 JMM 交互机制
本篇文章将带你深入底层,从 Java 内存模型(JMM)的核心规则出发,揭秘 volatile 的实现原理 —— 内存屏障 。
2026-01-15 18:05:40
1257
原创 volatile 基础认知篇 —— 从入门到核心特性
在 Java 并发编程领域,volatile 是一个高频出现的关键字,它常常与 synchronized 一同被提及,却又有着截然不同的定位和作用。很多开发者在初学时容易混淆两者的适用场景,甚至误以为 volatile 可以替代 synchronized 解决所有线程安全问题。本文将从并发编程的核心痛点出发,带你入门 volatile ,掌握它的核心特性、基本用法,以及与 synchronized 的本质区别。
2026-01-14 07:58:35
797
原创 贪吃的猴子
一只贪吃的猴子,来到一个果园,发现许多串香蕉排成一行,每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。猴子获取香蕉,每次都只能从行的开头或者末尾获取,并且只能获取N次,求猴子最多能获取多少根香蕉。
2026-01-14 07:57:58
726
原创 书籍叠放问题
书籍的长、宽都是整数对应 (l,w)。如果书A的长宽度都比B长宽大时,则允许将B排列放在A上面。现在有一组规格的书籍,书籍叠放时要求书籍不能做旋转,请计算最多能有多少个规格书籍能叠放在一起。
2026-01-13 16:23:53
483
原创 ReentrantLock vs synchronized:性能对比与选型策略
本文将从功能特性对比 、 多版本性能测试 、 核心选型策略三个维度,为开发者提供清晰的锁选择依据,实现 “场景匹配、性能最优” 的并发编程目标。
2026-01-13 16:23:37
1201
原创 synchronized高频考点模拟面试过程
本文详细探讨了Java并发编程中synchronized关键字的核心概念与应用。synchronized通过保证原子性、可见性和有序性解决线程安全问题,具有三种用法:实例方法锁、静态方法锁和代码块锁。其底层实现依赖对象头MarkWord和monitor机制,JDK1.6引入偏向锁、轻量级锁和重量级锁优化性能。文章还分析了锁升级流程、死锁预防方法,对比了synchronized与volatile、ReentrantLock的异同,并提供了线程安全单例模式的实现方案。
2026-01-12 23:19:14
610
原创 竖直四子棋
竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。一方的4个棋子横、竖或者斜方向连成一线时获胜。现给定一个棋盘和红蓝对弈双方的下子步骤,判断红方或蓝方是否在某一步获胜。
2026-01-12 23:18:34
1037
原创 ReentrantLock实战:典型应用场景与避坑指南
本文将从典型应用场景 、 实战避坑指南 、 性能优化最佳实践三个维度,结合真实业务案例,帮大家打通 “理论” 到 “实战” 的最后一公里,让 ReentrantLock 真正成为解决并发问题的利器。
2026-01-10 14:43:47
1072
原创 士兵过河问题
一支N个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河。敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭。现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为 a[i];0 <= i < N当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士兵中用时最长的。当2个士兵坐船1个士兵划船时,用时为 a[i]*10;a[i]为划船士兵用时。如果士兵下河游泳,则会被湍急水流直接带走,算作死亡。请帮忙给出一种解决方案,保证存活的士兵最多,且过河用时最短。
2026-01-10 14:43:27
721
电子图书馆网站课程设计
2011-04-22
数电课程设计之数字电子钟的设计
2011-04-22
图书管理系统课程设计
2011-04-22
课程设计之电子万年历设计
2011-04-22
数字电子电路课程设计双路防盗报警器
2010-06-28
计算机校园网络课程设计
2011-04-22
课程设计VB图书管理系统(BS和CS完整版)(附源码)
2011-04-22
数据结构课程设计八皇后源代码
2011-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅